common_crypto_secp256k1.mjs raw

   1  // Package common/crypto/secp256k1
   2  // Generated by TinyJS — TinyGo JavaScript backend
   3  
   4  import * as $rt from './$runtime/index.mjs';
   5  
   6  import * as common$crypto$sha256 from './common_crypto_sha256.mjs';
   7  
   8  // Package-level variables
   9  export let G = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  10  export let curveN = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  11  export let Infinity = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
  12  export let feZero = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  13  export let feOne = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  14  export let feP = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  15  
  16  $rt.types.registerType('common/crypto/secp256k1.Point', {
  17    id: 'common/crypto/secp256k1.Point',
  18    kind: 'struct',
  19    methods: new Map(),
  20    fields: [
  21      { name: 'X', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
  22      { name: 'Y', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
  23      { name: 'Z', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
  24    ],
  25    zero: () => ({ X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }),
  26  });
  27  $rt.types.registerType('common/crypto/secp256k1.AffinePoint', {
  28    id: 'common/crypto/secp256k1.AffinePoint',
  29    kind: 'struct',
  30    methods: new Map(),
  31    fields: [
  32      { name: 'X', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
  33      { name: 'Y', type: 'common/crypto/secp256k1.Fe', tag: '', embedded: false },
  34    ],
  35    zero: () => ({ X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }),
  36  });
  37  export function init() {
  38    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32;
  39    $t0_1 = feZero.$get().addr(0);
  40    $t1_2 = feZero.$get().addr(1);
  41    $t2_3 = feZero.$get().addr(2);
  42    $t3_4 = feZero.$get().addr(3);
  43    $t0_1.$set(0);
  44    $t1_2.$set(0);
  45    $t2_3.$set(0);
  46    $t3_4.$set(0);
  47    $t4_5 = feOne.$get().addr(0);
  48    $t5_6 = feOne.$get().addr(1);
  49    $t6_7 = feOne.$get().addr(2);
  50    $t7_8 = feOne.$get().addr(3);
  51    $t4_5.$set(1);
  52    $t5_6.$set(0);
  53    $t6_7.$set(0);
  54    $t7_8.$set(0);
  55    $t8_9 = feP.$get().addr(0);
  56    $t9_10 = feP.$get().addr(1);
  57    $t10_11 = feP.$get().addr(2);
  58    $t11_12 = feP.$get().addr(3);
  59    $t8_9.$set(18446744069414583343);
  60    $t9_10.$set(18446744073709551615);
  61    $t10_11.$set(18446744073709551615);
  62    $t11_12.$set(18446744073709551615);
  63    $t12_13 = { $get() { return G.$get().X; }, $set(v) { const obj = G.$get(); obj.X = v; G.$set(obj); } };
  64    $t13_14 = $t12_13.$get().addr(0);
  65    $t14_15 = $t12_13.$get().addr(1);
  66    $t15_16 = $t12_13.$get().addr(2);
  67    $t16_17 = $t12_13.$get().addr(3);
  68    $t17_18 = { $get() { return G.$get().Y; }, $set(v) { const obj = G.$get(); obj.Y = v; G.$set(obj); } };
  69    $t18_19 = $t17_18.$get().addr(0);
  70    $t19_20 = $t17_18.$get().addr(1);
  71    $t20_21 = $t17_18.$get().addr(2);
  72    $t21_22 = $t17_18.$get().addr(3);
  73    $t13_14.$set(6481385041966929816);
  74    $t14_15.$set(188021827762530521);
  75    $t15_16.$set(6170039885052185351);
  76    $t16_17.$set(8772561819708210092);
  77    $t18_19.$set(11261198710074299576);
  78    $t19_20.$set(18237243440184513561);
  79    $t20_21.$set(6747795201694173352);
  80    $t21_22.$set(5204712524664259685);
  81    $t22_23 = curveN.$get().addr(0);
  82    $t23_24 = curveN.$get().addr(1);
  83    $t24_25 = curveN.$get().addr(2);
  84    $t25_26 = curveN.$get().addr(3);
  85    $t22_23.$set(13822214165235122497);
  86    $t23_24.$set(13451932020343611451);
  87    $t24_25.$set(18446744073709551614);
  88    $t25_26.$set(18446744073709551615);
  89    $t26_27 = { $get() { return Infinity.$get().X; }, $set(v) { const obj = Infinity.$get(); obj.X = v; Infinity.$set(obj); } };
  90    $t27_28 = feZero.$get();
  91    $t28_29 = { $get() { return Infinity.$get().Y; }, $set(v) { const obj = Infinity.$get(); obj.Y = v; Infinity.$set(obj); } };
  92    $t29_30 = feOne.$get();
  93    $t30_31 = { $get() { return Infinity.$get().Z; }, $set(v) { const obj = Infinity.$get(); obj.Z = v; Infinity.$set(obj); } };
  94    $t31_32 = feZero.$get();
  95    $t26_27.$set($rt.builtin.cloneValue($t27_28));
  96    $t28_29.$set($rt.builtin.cloneValue($t29_30));
  97    $t30_31.$set($rt.builtin.cloneValue($t31_32));
  98    return;
  99  }
 100  
 101  export function VerifySchnorr(pubkey, msg, sig) {
 102    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47;
 103    let $block = 0;
 104    while (true) {
 105      switch ($block) {
 106        case 0: {
 107          $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 108          $t0_1.$set($rt.builtin.cloneValue(pubkey));
 109          $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 110          $t1_2.$set($rt.builtin.cloneValue(msg));
 111          $t2_3 = { $value: $rt.builtin.makeSlice(64, 64, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 112          $t2_3.$set($rt.builtin.cloneValue(sig));
 113          $t3_4 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 114          $t4_5 = feFromBytes($t3_4);
 115          $t5_6 = LiftX($t4_5);
 116          $t6_7 = $t5_6[0];
 117          $t7_8 = $t5_6[1];
 118          if ($t7_8) {
 119            $block = 2; break;
 120          }
 121          else {
 122            $block = 1; break;
 123          }
 124          break;
 125        }
 126        case 1: {
 127          return false;
 128          break;
 129        }
 130        case 2: {
 131          $t8_9 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, 32, undefined);
 132          $t9_10 = feFromBytes($t8_9);
 133          $t10_11 = $rt.builtin.sliceSlice($t2_3.$get(), 32, undefined, undefined);
 134          $t11_12 = scalarFromBytes($t10_11);
 135          $t12_13 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, 32, undefined);
 136          $t13_14 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 137          $t14_15 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
 138          $t15_16 = computeChallenge($t12_13, $t13_14, $t14_15);
 139          $t16_17 = ScalarBaseMult($t11_12);
 140          $t17_18 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 141          $t18_19 = pointFromAffine($t6_7);
 142          $t19_20 = ScalarMult($t18_19, $t15_16);
 143          $t20_21 = Point$toAffine($t19_20);
 144          $t17_18.$set($rt.builtin.cloneValue($t20_21));
 145          $t21_22 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 146          $t22_23 = { $get() { return $t21_22.$get().X; }, $set(v) { const obj = $t21_22.$get(); obj.X = v; $t21_22.$set(obj); } };
 147          $t23_24 = { $get() { return $t17_18.$get().X; }, $set(v) { const obj = $t17_18.$get(); obj.X = v; $t17_18.$set(obj); } };
 148          $t24_25 = $t23_24.$get();
 149          $t25_26 = { $get() { return $t21_22.$get().Y; }, $set(v) { const obj = $t21_22.$get(); obj.Y = v; $t21_22.$set(obj); } };
 150          $t26_27 = { $get() { return $t17_18.$get().Y; }, $set(v) { const obj = $t17_18.$get(); obj.Y = v; $t17_18.$set(obj); } };
 151          $t27_28 = $t26_27.$get();
 152          $t28_29 = feNeg($t27_28);
 153          $t22_23.$set($rt.builtin.cloneValue($t24_25));
 154          $t25_26.$set($rt.builtin.cloneValue($t28_29));
 155          $t29_30 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 156          $t30_31 = pointFromAffine($t16_17);
 157          $t31_32 = $t21_22.$get();
 158          $t32_33 = pointFromAffine($t31_32);
 159          $t33_34 = pointAdd($t30_31, $t32_33);
 160          $t34_35 = Point$toAffine($t33_34);
 161          $t29_30.$set($rt.builtin.cloneValue($t34_35));
 162          $t35_36 = { $get() { return $t29_30.$get().X; }, $set(v) { const obj = $t29_30.$get(); obj.X = v; $t29_30.$set(obj); } };
 163          $t36_37 = $t35_36.$get();
 164          $t37_38 = feIsZero($t36_37);
 165          if ($t37_38) {
 166            $block = 5; break;
 167          }
 168          else {
 169            $block = 4; break;
 170          }
 171          break;
 172        }
 173        case 3: {
 174          return false;
 175          break;
 176        }
 177        case 4: {
 178          $t38_39 = { $get() { return $t29_30.$get().X; }, $set(v) { const obj = $t29_30.$get(); obj.X = v; $t29_30.$set(obj); } };
 179          $t39_40 = $t38_39.$get();
 180          $t40_41 = ($t39_40 !== $t9_10);
 181          if ($t40_41) {
 182            $block = 6; break;
 183          }
 184          else {
 185            $block = 7; break;
 186          }
 187          break;
 188        }
 189        case 5: {
 190          $t41_42 = { $get() { return $t29_30.$get().Y; }, $set(v) { const obj = $t29_30.$get(); obj.Y = v; $t29_30.$set(obj); } };
 191          $t42_43 = $t41_42.$get();
 192          $t43_44 = feIsZero($t42_43);
 193          if ($t43_44) {
 194            $block = 3; break;
 195          }
 196          else {
 197            $block = 4; break;
 198          }
 199          break;
 200        }
 201        case 6: {
 202          return false;
 203          break;
 204        }
 205        case 7: {
 206          $t44_45 = { $get() { return $t29_30.$get().Y; }, $set(v) { const obj = $t29_30.$get(); obj.Y = v; $t29_30.$set(obj); } };
 207          $t45_46 = $t44_45.$get();
 208          $t46_47 = feIsEven($t45_46);
 209          if ($t46_47) {
 210            $block = 9; break;
 211          }
 212          else {
 213            $block = 8; break;
 214          }
 215          break;
 216        }
 217        case 8: {
 218          return false;
 219          break;
 220        }
 221        case 9: {
 222          return true;
 223          break;
 224        }
 225      }
 226    }
 227  }
 228  
 229  export function SignSchnorr(seckey, msg, auxRand) {
 230    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86;
 231    let $block = 0;
 232    while (true) {
 233      switch ($block) {
 234        case 0: {
 235          $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 236          $t0_1.$set($rt.builtin.cloneValue(seckey));
 237          $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 238          $t1_2.$set($rt.builtin.cloneValue(msg));
 239          $t2_3 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 240          $t2_3.$set($rt.builtin.cloneValue(auxRand));
 241          $t3_4 = { $value: $rt.builtin.makeSlice(64, 64, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 242          $t4_5 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 243          $t5_6 = scalarFromBytes($t4_5);
 244          $t6_7 = scalarIsZero($t5_6);
 245          if ($t6_7) {
 246            $block = 1; break;
 247          }
 248          else {
 249            $block = 2; break;
 250          }
 251          break;
 252        }
 253        case 1: {
 254          $t7_8 = $t3_4.$get();
 255          $t3_4.$set($rt.builtin.cloneValue($t7_8));
 256          $t8_9 = $t3_4.$get();
 257          return [$t8_9, false];
 258          break;
 259        }
 260        case 2: {
 261          $t9_10 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 262          $t10_11 = ScalarBaseMult($t5_6);
 263          $t9_10.$set($rt.builtin.cloneValue($t10_11));
 264          $t11_12 = { $get() { return $t9_10.$get().Y; }, $set(v) { const obj = $t9_10.$get(); obj.Y = v; $t9_10.$set(obj); } };
 265          $t12_13 = $t11_12.$get();
 266          $t13_14 = feIsEven($t12_13);
 267          if ($t13_14) {
 268            $t15_16 = $t5_6;
 269            $block = 4; break;
 270          }
 271          else {
 272            $block = 3; break;
 273          }
 274          break;
 275        }
 276        case 3: {
 277          $t14_15 = scalarNeg($t5_6);
 278          $t15_16 = $t14_15;
 279          $block = 4; break;
 280          break;
 281        }
 282        case 4: {
 283          $t16_17 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 284          $t17_18 = { $get() { return $t9_10.$get().X; }, $set(v) { const obj = $t9_10.$get(); obj.X = v; $t9_10.$set(obj); } };
 285          $t18_19 = $t17_18.$get();
 286          $t19_20 = feToBytes($t18_19);
 287          $t16_17.$set($rt.builtin.cloneValue($t19_20));
 288          $t20_21 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 289          $t21_22 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 290          $t22_23 = $rt.builtin.sliceSlice($t2_3.$get(), undefined, undefined, undefined);
 291          $t23_24 = taggedHash('BIP0340/aux', $t22_23);
 292          $t21_22.$set($rt.builtin.cloneValue($t23_24));
 293          $t24_25 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 294          $t25_26 = feToBytes($t15_16);
 295          $t24_25.$set($rt.builtin.cloneValue($t25_26));
 296          $t26_27 = 0;
 297          $block = 5; break;
 298          break;
 299        }
 300        case 5: {
 301          $t27_28 = ($t26_27 < 32);
 302          if ($t27_28) {
 303            $block = 6; break;
 304          }
 305          else {
 306            $block = 7; break;
 307          }
 308          break;
 309        }
 310        case 6: {
 311          $t28_29 = $t24_25.$get().addr($t26_27);
 312          $t29_30 = $t28_29.$get();
 313          $t30_31 = $t21_22.$get().addr($t26_27);
 314          $t31_32 = $t30_31.$get();
 315          $t32_33 = ($t29_30 ^ $t31_32);
 316          $t33_34 = $t20_21.$get().addr($t26_27);
 317          $t33_34.$set($t32_33);
 318          $t34_35 = ($t26_27 + 1);
 319          $t26_27 = $t34_35;
 320          $block = 5; break;
 321          break;
 322        }
 323        case 7: {
 324          $t35_36 = { $value: $rt.builtin.makeSlice(96, 96, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 325          $t36_37 = $rt.builtin.sliceSlice($t35_36.$get(), undefined, 32, undefined);
 326          $t37_38 = $rt.builtin.sliceSlice($t20_21.$get(), undefined, undefined, undefined);
 327          $t38_39 = $rt.builtin.copy($t36_37, $t37_38);
 328          $t39_40 = $rt.builtin.sliceSlice($t35_36.$get(), 32, 64, undefined);
 329          $t40_41 = $rt.builtin.sliceSlice($t16_17.$get(), undefined, undefined, undefined);
 330          $t41_42 = $rt.builtin.copy($t39_40, $t40_41);
 331          $t42_43 = $rt.builtin.sliceSlice($t35_36.$get(), 64, 96, undefined);
 332          $t43_44 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
 333          $t44_45 = $rt.builtin.copy($t42_43, $t43_44);
 334          $t45_46 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 335          $t46_47 = $rt.builtin.sliceSlice($t35_36.$get(), undefined, undefined, undefined);
 336          $t47_48 = taggedHash('BIP0340/nonce', $t46_47);
 337          $t45_46.$set($rt.builtin.cloneValue($t47_48));
 338          $t48_49 = $rt.builtin.sliceSlice($t45_46.$get(), undefined, undefined, undefined);
 339          $t49_50 = scalarFromBytes($t48_49);
 340          $t50_51 = curveN.$get();
 341          $t51_52 = feCmp($t49_50, $t50_51);
 342          $t52_53 = ($t51_52 >= 0);
 343          if ($t52_53) {
 344            $block = 8; break;
 345          }
 346          else {
 347            $t55_56 = $t49_50;
 348            $block = 9; break;
 349          }
 350          break;
 351        }
 352        case 8: {
 353          $t53_54 = curveN.$get();
 354          $t54_55 = scalarSub($t49_50, $t53_54);
 355          $t55_56 = $t54_55;
 356          $block = 9; break;
 357          break;
 358        }
 359        case 9: {
 360          $t56_57 = scalarIsZero($t55_56);
 361          if ($t56_57) {
 362            $block = 10; break;
 363          }
 364          else {
 365            $block = 11; break;
 366          }
 367          break;
 368        }
 369        case 10: {
 370          $t57_58 = $t3_4.$get();
 371          $t3_4.$set($rt.builtin.cloneValue($t57_58));
 372          $t58_59 = $t3_4.$get();
 373          return [$t58_59, false];
 374          break;
 375        }
 376        case 11: {
 377          $t59_60 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 378          $t60_61 = ScalarBaseMult($t55_56);
 379          $t59_60.$set($rt.builtin.cloneValue($t60_61));
 380          $t61_62 = { $get() { return $t59_60.$get().Y; }, $set(v) { const obj = $t59_60.$get(); obj.Y = v; $t59_60.$set(obj); } };
 381          $t62_63 = $t61_62.$get();
 382          $t63_64 = feIsEven($t62_63);
 383          if ($t63_64) {
 384            $t65_66 = $t55_56;
 385            $block = 13; break;
 386          }
 387          else {
 388            $block = 12; break;
 389          }
 390          break;
 391        }
 392        case 12: {
 393          $t64_65 = scalarNeg($t55_56);
 394          $t65_66 = $t64_65;
 395          $block = 13; break;
 396          break;
 397        }
 398        case 13: {
 399          $t66_67 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 400          $t67_68 = { $get() { return $t59_60.$get().X; }, $set(v) { const obj = $t59_60.$get(); obj.X = v; $t59_60.$set(obj); } };
 401          $t68_69 = $t67_68.$get();
 402          $t69_70 = feToBytes($t68_69);
 403          $t66_67.$set($rt.builtin.cloneValue($t69_70));
 404          $t70_71 = $rt.builtin.sliceSlice($t66_67.$get(), undefined, undefined, undefined);
 405          $t71_72 = $rt.builtin.sliceSlice($t16_17.$get(), undefined, undefined, undefined);
 406          $t72_73 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
 407          $t73_74 = computeChallenge($t70_71, $t71_72, $t72_73);
 408          $t74_75 = scalarMul($t73_74, $t15_16);
 409          $t75_76 = scalarAdd($t65_66, $t74_75);
 410          $t76_77 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 411          $t77_78 = feToBytes($t75_76);
 412          $t76_77.$set($rt.builtin.cloneValue($t77_78));
 413          $t78_79 = $rt.builtin.sliceSlice($t3_4.$get(), undefined, 32, undefined);
 414          $t79_80 = $rt.builtin.sliceSlice($t66_67.$get(), undefined, undefined, undefined);
 415          $t80_81 = $rt.builtin.copy($t78_79, $t79_80);
 416          $t81_82 = $rt.builtin.sliceSlice($t3_4.$get(), 32, undefined, undefined);
 417          $t82_83 = $rt.builtin.sliceSlice($t76_77.$get(), undefined, undefined, undefined);
 418          $t83_84 = $rt.builtin.copy($t81_82, $t82_83);
 419          $t84_85 = $t3_4.$get();
 420          $t3_4.$set($rt.builtin.cloneValue($t84_85));
 421          $t85_86 = $t3_4.$get();
 422          return [$t85_86, true];
 423          break;
 424        }
 425      }
 426    }
 427  }
 428  
 429  export function PubKeyFromSecKey(seckey) {
 430    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9;
 431    let $block = 0;
 432    while (true) {
 433      switch ($block) {
 434        case 0: {
 435          $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 436          $t0_1.$set($rt.builtin.cloneValue(seckey));
 437          $t1_2 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 438          $t2_3 = scalarFromBytes($t1_2);
 439          $t3_4 = scalarIsZero($t2_3);
 440          if ($t3_4) {
 441            $block = 1; break;
 442          }
 443          else {
 444            $block = 2; break;
 445          }
 446          break;
 447        }
 448        case 1: {
 449          return [$rt.builtin.makeSlice(32, 32, 0), false];
 450          break;
 451        }
 452        case 2: {
 453          $t4_5 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 454          $t5_6 = ScalarBaseMult($t2_3);
 455          $t4_5.$set($rt.builtin.cloneValue($t5_6));
 456          $t6_7 = { $get() { return $t4_5.$get().X; }, $set(v) { const obj = $t4_5.$get(); obj.X = v; $t4_5.$set(obj); } };
 457          $t7_8 = $t6_7.$get();
 458          $t8_9 = feToBytes($t7_8);
 459          return [$t8_9, true];
 460          break;
 461        }
 462      }
 463    }
 464  }
 465  
 466  export function ECDH(seckey, pubkey) {
 467    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
 468    let $block = 0;
 469    while (true) {
 470      switch ($block) {
 471        case 0: {
 472          $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 473          $t0_1.$set($rt.builtin.cloneValue(seckey));
 474          $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 475          $t1_2.$set($rt.builtin.cloneValue(pubkey));
 476          $t2_3 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 477          $t3_4 = scalarFromBytes($t2_3);
 478          $t4_5 = scalarIsZero($t3_4);
 479          if ($t4_5) {
 480            $block = 1; break;
 481          }
 482          else {
 483            $block = 2; break;
 484          }
 485          break;
 486        }
 487        case 1: {
 488          return [$rt.builtin.makeSlice(32, 32, 0), false];
 489          break;
 490        }
 491        case 2: {
 492          $t5_6 = $rt.builtin.sliceSlice($t1_2.$get(), undefined, undefined, undefined);
 493          $t6_7 = feFromBytes($t5_6);
 494          $t7_8 = LiftX($t6_7);
 495          $t8_9 = $t7_8[0];
 496          $t9_10 = $t7_8[1];
 497          if ($t9_10) {
 498            $block = 4; break;
 499          }
 500          else {
 501            $block = 3; break;
 502          }
 503          break;
 504        }
 505        case 3: {
 506          return [$rt.builtin.makeSlice(32, 32, 0), false];
 507          break;
 508        }
 509        case 4: {
 510          $t10_11 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 511          $t11_12 = pointFromAffine($t8_9);
 512          $t12_13 = ScalarMult($t11_12, $t3_4);
 513          $t13_14 = Point$toAffine($t12_13);
 514          $t10_11.$set($rt.builtin.cloneValue($t13_14));
 515          $t14_15 = { $get() { return $t10_11.$get().X; }, $set(v) { const obj = $t10_11.$get(); obj.X = v; $t10_11.$set(obj); } };
 516          $t15_16 = $t14_15.$get();
 517          $t16_17 = feIsZero($t15_16);
 518          if ($t16_17) {
 519            $block = 7; break;
 520          }
 521          else {
 522            $block = 6; break;
 523          }
 524          break;
 525        }
 526        case 5: {
 527          return [$rt.builtin.makeSlice(32, 32, 0), false];
 528          break;
 529        }
 530        case 6: {
 531          $t17_18 = { $get() { return $t10_11.$get().X; }, $set(v) { const obj = $t10_11.$get(); obj.X = v; $t10_11.$set(obj); } };
 532          $t18_19 = $t17_18.$get();
 533          $t19_20 = feToBytes($t18_19);
 534          return [$t19_20, true];
 535          break;
 536        }
 537        case 7: {
 538          $t20_21 = { $get() { return $t10_11.$get().Y; }, $set(v) { const obj = $t10_11.$get(); obj.Y = v; $t10_11.$set(obj); } };
 539          $t21_22 = $t20_21.$get();
 540          $t22_23 = feIsZero($t21_22);
 541          if ($t22_23) {
 542            $block = 5; break;
 543          }
 544          else {
 545            $block = 6; break;
 546          }
 547          break;
 548        }
 549      }
 550    }
 551  }
 552  
 553  export function taggedHash(tag, msg) {
 554    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12;
 555    $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 556    $t1_2 = $rt.builtin.stringToBytes(tag);
 557    $t2_3 = common$crypto$sha256.Sum($t1_2);
 558    $t0_1.$set($rt.builtin.cloneValue($t2_3));
 559    $t3_4 = $rt.builtin.len(msg);
 560    $t4_5 = (64 + $t3_4);
 561    $t5_6 = $rt.builtin.makeSlice(0, $t4_5, 0);
 562    $t6_7 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 563    $t7_8 = $rt.builtin.appendSlice($t5_6, $t6_7);
 564    $t8_9 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 565    $t9_10 = $rt.builtin.appendSlice($t7_8, $t8_9);
 566    $t10_11 = $rt.builtin.appendSlice($t9_10, msg);
 567    $t11_12 = common$crypto$sha256.Sum($t10_11);
 568    return $t11_12;
 569  }
 570  
 571  export function computeChallenge(rx, px, msg) {
 572    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
 573    let $block = 0;
 574    while (true) {
 575      switch ($block) {
 576        case 0: {
 577          $t0_1 = { $value: $rt.builtin.makeSlice(96, 96, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 578          $t1_2 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, 0, undefined);
 579          $t2_3 = $rt.builtin.appendSlice($t1_2, rx);
 580          $t3_4 = $rt.builtin.appendSlice($t2_3, px);
 581          $t4_5 = $rt.builtin.appendSlice($t3_4, msg);
 582          $t5_6 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 583          $t6_7 = taggedHash('BIP0340/challenge', $t4_5);
 584          $t5_6.$set($rt.builtin.cloneValue($t6_7));
 585          $t7_8 = $rt.builtin.sliceSlice($t5_6.$get(), undefined, undefined, undefined);
 586          $t8_9 = scalarFromBytes($t7_8);
 587          $t9_10 = curveN.$get();
 588          $t10_11 = feCmp($t8_9, $t9_10);
 589          $t11_12 = ($t10_11 >= 0);
 590          if ($t11_12) {
 591            $block = 1; break;
 592          }
 593          else {
 594            $t14_15 = $t8_9;
 595            $block = 2; break;
 596          }
 597          break;
 598        }
 599        case 1: {
 600          $t12_13 = curveN.$get();
 601          $t13_14 = scalarSub($t8_9, $t12_13);
 602          $t14_15 = $t13_14;
 603          $block = 2; break;
 604          break;
 605        }
 606        case 2: {
 607          return $t14_15;
 608          break;
 609        }
 610      }
 611    }
 612  }
 613  
 614  export function pointFromAffine(p) {
 615    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11;
 616    $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 617    $t0_1.$set($rt.builtin.cloneValue(p));
 618    $t1_2 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 619    $t2_3 = { $get() { return $t1_2.$get().X; }, $set(v) { const obj = $t1_2.$get(); obj.X = v; $t1_2.$set(obj); } };
 620    $t3_4 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
 621    $t4_5 = $t3_4.$get();
 622    $t5_6 = { $get() { return $t1_2.$get().Y; }, $set(v) { const obj = $t1_2.$get(); obj.Y = v; $t1_2.$set(obj); } };
 623    $t6_7 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
 624    $t7_8 = $t6_7.$get();
 625    $t8_9 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
 626    $t9_10 = feOne.$get();
 627    $t2_3.$set($rt.builtin.cloneValue($t4_5));
 628    $t5_6.$set($rt.builtin.cloneValue($t7_8));
 629    $t8_9.$set($rt.builtin.cloneValue($t9_10));
 630    $t10_11 = $t1_2.$get();
 631    return $t10_11;
 632  }
 633  
 634  export function pointDouble(p) {
 635    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41;
 636    let $block = 0;
 637    while (true) {
 638      switch ($block) {
 639        case 0: {
 640          $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 641          $t0_1.$set($rt.builtin.cloneValue(p));
 642          $t1_2 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
 643          $t2_3 = $t1_2.$get();
 644          $t3_4 = feIsZero($t2_3);
 645          if ($t3_4) {
 646            $block = 1; break;
 647          }
 648          else {
 649            $block = 2; break;
 650          }
 651          break;
 652        }
 653        case 1: {
 654          $t4_5 = $t0_1.$get();
 655          return $t4_5;
 656          break;
 657        }
 658        case 2: {
 659          $t5_6 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
 660          $t6_7 = $t5_6.$get();
 661          $t7_8 = feSqr($t6_7);
 662          $t8_9 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
 663          $t9_10 = $t8_9.$get();
 664          $t10_11 = feSqr($t9_10);
 665          $t11_12 = feSqr($t10_11);
 666          $t12_13 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
 667          $t13_14 = $t12_13.$get();
 668          $t14_15 = feAdd($t13_14, $t10_11);
 669          $t15_16 = feSqr($t14_15);
 670          $t16_17 = feSub($t15_16, $t7_8);
 671          $t17_18 = feSub($t16_17, $t11_12);
 672          $t18_19 = feAdd($t17_18, $t17_18);
 673          $t19_20 = feAdd($t7_8, $t7_8);
 674          $t20_21 = feAdd($t19_20, $t7_8);
 675          $t21_22 = feSqr($t20_21);
 676          $t22_23 = feAdd($t18_19, $t18_19);
 677          $t23_24 = feSub($t21_22, $t22_23);
 678          $t24_25 = feSub($t18_19, $t23_24);
 679          $t25_26 = feMul($t20_21, $t24_25);
 680          $t26_27 = feAdd($t11_12, $t11_12);
 681          $t27_28 = feAdd($t26_27, $t26_27);
 682          $t28_29 = feAdd($t27_28, $t27_28);
 683          $t29_30 = feSub($t25_26, $t28_29);
 684          $t30_31 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
 685          $t31_32 = $t30_31.$get();
 686          $t32_33 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
 687          $t33_34 = $t32_33.$get();
 688          $t34_35 = feMul($t31_32, $t33_34);
 689          $t35_36 = feAdd($t34_35, $t34_35);
 690          $t36_37 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 691          $t37_38 = { $get() { return $t36_37.$get().X; }, $set(v) { const obj = $t36_37.$get(); obj.X = v; $t36_37.$set(obj); } };
 692          $t38_39 = { $get() { return $t36_37.$get().Y; }, $set(v) { const obj = $t36_37.$get(); obj.Y = v; $t36_37.$set(obj); } };
 693          $t39_40 = { $get() { return $t36_37.$get().Z; }, $set(v) { const obj = $t36_37.$get(); obj.Z = v; $t36_37.$set(obj); } };
 694          $t37_38.$set($rt.builtin.cloneValue($t23_24));
 695          $t38_39.$set($rt.builtin.cloneValue($t29_30));
 696          $t39_40.$set($rt.builtin.cloneValue($t35_36));
 697          $t40_41 = $t36_37.$get();
 698          return $t40_41;
 699          break;
 700        }
 701      }
 702    }
 703  }
 704  
 705  export function pointAdd(p, q) {
 706    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63;
 707    let $block = 0;
 708    while (true) {
 709      switch ($block) {
 710        case 0: {
 711          $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 712          $t0_1.$set($rt.builtin.cloneValue(p));
 713          $t1_2 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 714          $t1_2.$set($rt.builtin.cloneValue(q));
 715          $t2_3 = $t0_1.$get();
 716          $t3_4 = Point$isInfinity($t2_3);
 717          if ($t3_4) {
 718            $block = 1; break;
 719          }
 720          else {
 721            $block = 2; break;
 722          }
 723          break;
 724        }
 725        case 1: {
 726          $t4_5 = $t1_2.$get();
 727          return $t4_5;
 728          break;
 729        }
 730        case 2: {
 731          $t5_6 = $t1_2.$get();
 732          $t6_7 = Point$isInfinity($t5_6);
 733          if ($t6_7) {
 734            $block = 3; break;
 735          }
 736          else {
 737            $block = 4; break;
 738          }
 739          break;
 740        }
 741        case 3: {
 742          $t7_8 = $t0_1.$get();
 743          return $t7_8;
 744          break;
 745        }
 746        case 4: {
 747          $t8_9 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
 748          $t9_10 = $t8_9.$get();
 749          $t10_11 = feSqr($t9_10);
 750          $t11_12 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
 751          $t12_13 = $t11_12.$get();
 752          $t13_14 = feSqr($t12_13);
 753          $t14_15 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
 754          $t15_16 = $t14_15.$get();
 755          $t16_17 = feMul($t15_16, $t13_14);
 756          $t17_18 = { $get() { return $t1_2.$get().X; }, $set(v) { const obj = $t1_2.$get(); obj.X = v; $t1_2.$set(obj); } };
 757          $t18_19 = $t17_18.$get();
 758          $t19_20 = feMul($t18_19, $t10_11);
 759          $t20_21 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
 760          $t21_22 = $t20_21.$get();
 761          $t22_23 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
 762          $t23_24 = $t22_23.$get();
 763          $t24_25 = feMul($t13_14, $t23_24);
 764          $t25_26 = feMul($t21_22, $t24_25);
 765          $t26_27 = { $get() { return $t1_2.$get().Y; }, $set(v) { const obj = $t1_2.$get(); obj.Y = v; $t1_2.$set(obj); } };
 766          $t27_28 = $t26_27.$get();
 767          $t28_29 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
 768          $t29_30 = $t28_29.$get();
 769          $t30_31 = feMul($t10_11, $t29_30);
 770          $t31_32 = feMul($t27_28, $t30_31);
 771          $t32_33 = ($t16_17 === $t19_20);
 772          if ($t32_33) {
 773            $block = 5; break;
 774          }
 775          else {
 776            $block = 6; break;
 777          }
 778          break;
 779        }
 780        case 5: {
 781          $t33_34 = ($t25_26 === $t31_32);
 782          if ($t33_34) {
 783            $block = 7; break;
 784          }
 785          else {
 786            $block = 8; break;
 787          }
 788          break;
 789        }
 790        case 6: {
 791          $t34_35 = feSub($t19_20, $t16_17);
 792          $t35_36 = feSub($t31_32, $t25_26);
 793          $t36_37 = feSqr($t34_35);
 794          $t37_38 = feMul($t36_37, $t34_35);
 795          $t38_39 = feSqr($t35_36);
 796          $t39_40 = feSub($t38_39, $t37_38);
 797          $t40_41 = feMul($t16_17, $t36_37);
 798          $t41_42 = feMul($t16_17, $t36_37);
 799          $t42_43 = feAdd($t40_41, $t41_42);
 800          $t43_44 = feSub($t39_40, $t42_43);
 801          $t44_45 = feMul($t16_17, $t36_37);
 802          $t45_46 = feSub($t44_45, $t43_44);
 803          $t46_47 = feMul($t35_36, $t45_46);
 804          $t47_48 = feMul($t25_26, $t37_38);
 805          $t48_49 = feSub($t46_47, $t47_48);
 806          $t49_50 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
 807          $t50_51 = $t49_50.$get();
 808          $t51_52 = { $get() { return $t1_2.$get().Z; }, $set(v) { const obj = $t1_2.$get(); obj.Z = v; $t1_2.$set(obj); } };
 809          $t52_53 = $t51_52.$get();
 810          $t53_54 = feMul($t50_51, $t52_53);
 811          $t54_55 = feMul($t53_54, $t34_35);
 812          $t55_56 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 813          $t56_57 = { $get() { return $t55_56.$get().X; }, $set(v) { const obj = $t55_56.$get(); obj.X = v; $t55_56.$set(obj); } };
 814          $t57_58 = { $get() { return $t55_56.$get().Y; }, $set(v) { const obj = $t55_56.$get(); obj.Y = v; $t55_56.$set(obj); } };
 815          $t58_59 = { $get() { return $t55_56.$get().Z; }, $set(v) { const obj = $t55_56.$get(); obj.Z = v; $t55_56.$set(obj); } };
 816          $t56_57.$set($rt.builtin.cloneValue($t43_44));
 817          $t57_58.$set($rt.builtin.cloneValue($t48_49));
 818          $t58_59.$set($rt.builtin.cloneValue($t54_55));
 819          $t59_60 = $t55_56.$get();
 820          return $t59_60;
 821          break;
 822        }
 823        case 7: {
 824          $t60_61 = $t0_1.$get();
 825          $t61_62 = pointDouble($t60_61);
 826          return $t61_62;
 827          break;
 828        }
 829        case 8: {
 830          $t62_63 = Infinity.$get();
 831          return $t62_63;
 832          break;
 833        }
 834      }
 835    }
 836  }
 837  
 838  export function ScalarBaseMult(k) {
 839    let $t0_1, $t1_2, $t2_3, $t3_4;
 840    $t0_1 = G.$get();
 841    $t1_2 = pointFromAffine($t0_1);
 842    $t2_3 = ScalarMult($t1_2, k);
 843    $t3_4 = Point$toAffine($t2_3);
 844    return $t3_4;
 845  }
 846  
 847  export function ScalarMult(p, k) {
 848    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
 849    let $block = 0;
 850    while (true) {
 851      switch ($block) {
 852        case 0: {
 853          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 854          $t0_1.$set($rt.builtin.cloneValue(k));
 855          $t1_2 = Infinity.$get();
 856          $t2_3 = $t1_2;
 857          $t3_4 = p;
 858          $t4_5 = 0;
 859          $block = 1; break;
 860          break;
 861        }
 862        case 1: {
 863          $t5_6 = ($t4_5 < 4);
 864          if ($t5_6) {
 865            $block = 2; break;
 866          }
 867          else {
 868            $block = 3; break;
 869          }
 870          break;
 871        }
 872        case 2: {
 873          $t6_7 = $t0_1.$get().addr($t4_5);
 874          $t7_8 = $t6_7.$get();
 875          $t8_9 = $t2_3;
 876          $t9_10 = $t3_4;
 877          $t10_11 = $t7_8;
 878          $t11_12 = 0;
 879          $block = 4; break;
 880          break;
 881        }
 882        case 3: {
 883          return $t2_3;
 884          break;
 885        }
 886        case 4: {
 887          $t12_13 = ($t11_12 < 64);
 888          if ($t12_13) {
 889            $block = 5; break;
 890          }
 891          else {
 892            $block = 6; break;
 893          }
 894          break;
 895        }
 896        case 5: {
 897          $t13_14 = $rt.builtin.int64and($t10_11, 1);
 898          $t14_15 = ($t13_14 === 1);
 899          if ($t14_15) {
 900            $block = 7; break;
 901          }
 902          else {
 903            $t17_18 = $t8_9;
 904            $block = 8; break;
 905          }
 906          break;
 907        }
 908        case 6: {
 909          $t15_16 = ($t4_5 + 1);
 910          $t2_3 = $t8_9;
 911          $t3_4 = $t9_10;
 912          $t4_5 = $t15_16;
 913          $block = 1; break;
 914          break;
 915        }
 916        case 7: {
 917          $t16_17 = pointAdd($t8_9, $t9_10);
 918          $t17_18 = $t16_17;
 919          $block = 8; break;
 920          break;
 921        }
 922        case 8: {
 923          $t18_19 = pointDouble($t9_10);
 924          $t19_20 = Math.trunc($t10_11 / (2 ** 1));
 925          $t20_21 = ($t11_12 + 1);
 926          $t8_9 = $t17_18;
 927          $t9_10 = $t18_19;
 928          $t10_11 = $t19_20;
 929          $t11_12 = $t20_21;
 930          $block = 4; break;
 931          break;
 932        }
 933      }
 934    }
 935  }
 936  
 937  export function LiftX(x) {
 938    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
 939    let $block = 0;
 940    while (true) {
 941      switch ($block) {
 942        case 0: {
 943          $t0_1 = feSqr(x);
 944          $t1_2 = feMul($t0_1, x);
 945          $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 946          $t3_4 = $t2_3.$get().addr(0);
 947          $t4_5 = $t2_3.$get().addr(1);
 948          $t5_6 = $t2_3.$get().addr(2);
 949          $t6_7 = $t2_3.$get().addr(3);
 950          $t3_4.$set(7);
 951          $t4_5.$set(0);
 952          $t5_6.$set(0);
 953          $t6_7.$set(0);
 954          $t7_8 = $t2_3.$get();
 955          $t8_9 = feAdd($t1_2, $t7_8);
 956          $t9_10 = feSqrt($t8_9);
 957          $t10_11 = $t9_10[0];
 958          $t11_12 = $t9_10[1];
 959          if ($t11_12) {
 960            $block = 2; break;
 961          }
 962          else {
 963            $block = 1; break;
 964          }
 965          break;
 966        }
 967        case 1: {
 968          return [{ X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, false];
 969          break;
 970        }
 971        case 2: {
 972          $t12_13 = feIsEven($t10_11);
 973          if ($t12_13) {
 974            $t14_15 = $t10_11;
 975            $block = 4; break;
 976          }
 977          else {
 978            $block = 3; break;
 979          }
 980          break;
 981        }
 982        case 3: {
 983          $t13_14 = feNeg($t10_11);
 984          $t14_15 = $t13_14;
 985          $block = 4; break;
 986          break;
 987        }
 988        case 4: {
 989          $t15_16 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
 990          $t16_17 = { $get() { return $t15_16.$get().X; }, $set(v) { const obj = $t15_16.$get(); obj.X = v; $t15_16.$set(obj); } };
 991          $t17_18 = { $get() { return $t15_16.$get().Y; }, $set(v) { const obj = $t15_16.$get(); obj.Y = v; $t15_16.$set(obj); } };
 992          $t16_17.$set($rt.builtin.cloneValue(x));
 993          $t17_18.$set($rt.builtin.cloneValue($t14_15));
 994          $t18_19 = $t15_16.$get();
 995          return [$t18_19, true];
 996          break;
 997        }
 998      }
 999    }
1000  }
1001  
1002  export function scalarAdd(a, b) {
1003    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73;
1004    let $block = 0;
1005    while (true) {
1006      switch ($block) {
1007        case 0: {
1008          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1009          $t0_1.$set($rt.builtin.cloneValue(a));
1010          $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1011          $t1_2.$set($rt.builtin.cloneValue(b));
1012          $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1013          $t3_4 = $t0_1.$get().addr(0);
1014          $t4_5 = $t3_4.$get();
1015          $t5_6 = $t1_2.$get().addr(0);
1016          $t6_7 = $t5_6.$get();
1017          $t7_8 = addWithCarry($t4_5, $t6_7, 0);
1018          $t8_9 = $t7_8[0];
1019          $t9_10 = $t2_3.$get().addr(0);
1020          $t9_10.$set($t8_9);
1021          $t10_11 = $t7_8[1];
1022          $t11_12 = $t0_1.$get().addr(1);
1023          $t12_13 = $t11_12.$get();
1024          $t13_14 = $t1_2.$get().addr(1);
1025          $t14_15 = $t13_14.$get();
1026          $t15_16 = addWithCarry($t12_13, $t14_15, $t10_11);
1027          $t16_17 = $t15_16[0];
1028          $t17_18 = $t2_3.$get().addr(1);
1029          $t17_18.$set($t16_17);
1030          $t18_19 = $t15_16[1];
1031          $t19_20 = $t0_1.$get().addr(2);
1032          $t20_21 = $t19_20.$get();
1033          $t21_22 = $t1_2.$get().addr(2);
1034          $t22_23 = $t21_22.$get();
1035          $t23_24 = addWithCarry($t20_21, $t22_23, $t18_19);
1036          $t24_25 = $t23_24[0];
1037          $t25_26 = $t2_3.$get().addr(2);
1038          $t25_26.$set($t24_25);
1039          $t26_27 = $t23_24[1];
1040          $t27_28 = $t0_1.$get().addr(3);
1041          $t28_29 = $t27_28.$get();
1042          $t29_30 = $t1_2.$get().addr(3);
1043          $t30_31 = $t29_30.$get();
1044          $t31_32 = addWithCarry($t28_29, $t30_31, $t26_27);
1045          $t32_33 = $t31_32[0];
1046          $t33_34 = $t2_3.$get().addr(3);
1047          $t33_34.$set($t32_33);
1048          $t34_35 = $t31_32[1];
1049          $t35_36 = ($t34_35 !== 0);
1050          if ($t35_36) {
1051            $block = 1; break;
1052          }
1053          else {
1054            $block = 3; break;
1055          }
1056          break;
1057        }
1058        case 1: {
1059          $t36_37 = $t2_3.$get().addr(0);
1060          $t37_38 = $t36_37.$get();
1061          $t38_39 = curveN.$get().addr(0);
1062          $t39_40 = $t38_39.$get();
1063          $t40_41 = subWithBorrow($t37_38, $t39_40, 0);
1064          $t41_42 = $t40_41[0];
1065          $t42_43 = $t2_3.$get().addr(0);
1066          $t42_43.$set($t41_42);
1067          $t43_44 = $t40_41[1];
1068          $t44_45 = $t2_3.$get().addr(1);
1069          $t45_46 = $t44_45.$get();
1070          $t46_47 = curveN.$get().addr(1);
1071          $t47_48 = $t46_47.$get();
1072          $t48_49 = subWithBorrow($t45_46, $t47_48, $t43_44);
1073          $t49_50 = $t48_49[0];
1074          $t50_51 = $t2_3.$get().addr(1);
1075          $t50_51.$set($t49_50);
1076          $t51_52 = $t48_49[1];
1077          $t52_53 = $t2_3.$get().addr(2);
1078          $t53_54 = $t52_53.$get();
1079          $t54_55 = curveN.$get().addr(2);
1080          $t55_56 = $t54_55.$get();
1081          $t56_57 = subWithBorrow($t53_54, $t55_56, $t51_52);
1082          $t57_58 = $t56_57[0];
1083          $t58_59 = $t2_3.$get().addr(2);
1084          $t58_59.$set($t57_58);
1085          $t59_60 = $t56_57[1];
1086          $t60_61 = $t2_3.$get().addr(3);
1087          $t61_62 = $t60_61.$get();
1088          $t62_63 = curveN.$get().addr(3);
1089          $t63_64 = $t62_63.$get();
1090          $t64_65 = subWithBorrow($t61_62, $t63_64, $t59_60);
1091          $t65_66 = $t64_65[0];
1092          $t66_67 = $t2_3.$get().addr(3);
1093          $t66_67.$set($t65_66);
1094          $t67_68 = $t64_65[1];
1095          $block = 2; break;
1096          break;
1097        }
1098        case 2: {
1099          $t68_69 = $t2_3.$get();
1100          return $t68_69;
1101          break;
1102        }
1103        case 3: {
1104          $t69_70 = $t2_3.$get();
1105          $t70_71 = curveN.$get();
1106          $t71_72 = feCmp($t69_70, $t70_71);
1107          $t72_73 = ($t71_72 >= 0);
1108          if ($t72_73) {
1109            $block = 1; break;
1110          }
1111          else {
1112            $block = 2; break;
1113          }
1114          break;
1115        }
1116      }
1117    }
1118  }
1119  
1120  export function scalarMul(a, b) {
1121    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34;
1122    let $block = 0;
1123    while (true) {
1124      switch ($block) {
1125        case 0: {
1126          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1127          $t0_1.$set($rt.builtin.cloneValue(a));
1128          $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1129          $t1_2.$set($rt.builtin.cloneValue(b));
1130          $t2_3 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1131          $t3_4 = 0;
1132          $block = 1; break;
1133          break;
1134        }
1135        case 1: {
1136          $t4_5 = ($t3_4 < 4);
1137          if ($t4_5) {
1138            $block = 2; break;
1139          }
1140          else {
1141            $block = 3; break;
1142          }
1143          break;
1144        }
1145        case 2: {
1146          $t7_8 = 0;
1147          $t8_9 = 0;
1148          $block = 4; break;
1149          break;
1150        }
1151        case 3: {
1152          $t5_6 = $t2_3.$get();
1153          $t6_7 = scalarReduceFull($t5_6);
1154          return $t6_7;
1155          break;
1156        }
1157        case 4: {
1158          $t9_10 = ($t8_9 < 4);
1159          if ($t9_10) {
1160            $block = 5; break;
1161          }
1162          else {
1163            $block = 6; break;
1164          }
1165          break;
1166        }
1167        case 5: {
1168          $t10_11 = $t0_1.$get().addr($t3_4);
1169          $t11_12 = $t10_11.$get();
1170          $t12_13 = $t1_2.$get().addr($t8_9);
1171          $t13_14 = $t12_13.$get();
1172          $t14_15 = mul64($t11_12, $t13_14);
1173          $t15_16 = $t14_15[0];
1174          $t16_17 = $t14_15[1];
1175          $t17_18 = ($t3_4 + $t8_9);
1176          $t18_19 = $t2_3.$get().addr($t17_18);
1177          $t19_20 = $t18_19.$get();
1178          $t20_21 = addWithCarry($t16_17, $t19_20, 0);
1179          $t21_22 = $t20_21[0];
1180          $t22_23 = $t20_21[1];
1181          $t23_24 = ($t15_16 + $t22_23);
1182          $t24_25 = addWithCarry($t21_22, $t7_8, 0);
1183          $t25_26 = $t24_25[0];
1184          $t26_27 = $t24_25[1];
1185          $t27_28 = ($t23_24 + $t26_27);
1186          $t28_29 = ($t3_4 + $t8_9);
1187          $t29_30 = $t2_3.$get().addr($t28_29);
1188          $t29_30.$set($t25_26);
1189          $t30_31 = ($t8_9 + 1);
1190          $t7_8 = $t27_28;
1191          $t8_9 = $t30_31;
1192          $block = 4; break;
1193          break;
1194        }
1195        case 6: {
1196          $t31_32 = ($t3_4 + 4);
1197          $t32_33 = $t2_3.$get().addr($t31_32);
1198          $t32_33.$set($t7_8);
1199          $t33_34 = ($t3_4 + 1);
1200          $t3_4 = $t33_34;
1201          $block = 1; break;
1202          break;
1203        }
1204      }
1205    }
1206  }
1207  
1208  export function scalarNeg(a) {
1209    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
1210    let $block = 0;
1211    while (true) {
1212      switch ($block) {
1213        case 0: {
1214          $t0_1 = feZero.$get();
1215          $t1_2 = (a === $t0_1);
1216          if ($t1_2) {
1217            $block = 1; break;
1218          }
1219          else {
1220            $block = 2; break;
1221          }
1222          break;
1223        }
1224        case 1: {
1225          $t2_3 = feZero.$get();
1226          return $t2_3;
1227          break;
1228        }
1229        case 2: {
1230          $t3_4 = curveN.$get();
1231          $t4_5 = scalarSub($t3_4, a);
1232          return $t4_5;
1233          break;
1234        }
1235      }
1236    }
1237  }
1238  
1239  export function scalarSub(a, b) {
1240    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78;
1241    let $block = 0;
1242    while (true) {
1243      switch ($block) {
1244        case 0: {
1245          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1246          $t0_1.$set($rt.builtin.cloneValue(a));
1247          $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1248          $t1_2.$set($rt.builtin.cloneValue(b));
1249          $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1250          $t3_4 = $t0_1.$get().addr(0);
1251          $t4_5 = $t3_4.$get();
1252          $t5_6 = $t1_2.$get().addr(0);
1253          $t6_7 = $t5_6.$get();
1254          $t7_8 = subWithBorrow($t4_5, $t6_7, 0);
1255          $t8_9 = $t7_8[0];
1256          $t9_10 = $t2_3.$get().addr(0);
1257          $t9_10.$set($t8_9);
1258          $t10_11 = $t7_8[1];
1259          $t11_12 = $t2_3.$get().addr(1);
1260          $t12_13 = $t11_12.$get();
1261          $t13_14 = $t0_1.$get().addr(1);
1262          $t14_15 = $t13_14.$get();
1263          $t15_16 = ($t12_13 + $t14_15);
1264          $t16_17 = $t1_2.$get().addr(1);
1265          $t17_18 = $t16_17.$get();
1266          $t18_19 = subWithBorrow($t15_16, $t17_18, $t10_11);
1267          $t19_20 = $t18_19[0];
1268          $t20_21 = $t2_3.$get().addr(1);
1269          $t20_21.$set($t19_20);
1270          $t21_22 = $t18_19[1];
1271          $t22_23 = $t2_3.$get().addr(2);
1272          $t23_24 = $t22_23.$get();
1273          $t24_25 = $t0_1.$get().addr(2);
1274          $t25_26 = $t24_25.$get();
1275          $t26_27 = ($t23_24 + $t25_26);
1276          $t27_28 = $t1_2.$get().addr(2);
1277          $t28_29 = $t27_28.$get();
1278          $t29_30 = subWithBorrow($t26_27, $t28_29, $t21_22);
1279          $t30_31 = $t29_30[0];
1280          $t31_32 = $t2_3.$get().addr(2);
1281          $t31_32.$set($t30_31);
1282          $t32_33 = $t29_30[1];
1283          $t33_34 = $t2_3.$get().addr(3);
1284          $t34_35 = $t33_34.$get();
1285          $t35_36 = $t0_1.$get().addr(3);
1286          $t36_37 = $t35_36.$get();
1287          $t37_38 = ($t34_35 + $t36_37);
1288          $t38_39 = $t1_2.$get().addr(3);
1289          $t39_40 = $t38_39.$get();
1290          $t40_41 = subWithBorrow($t37_38, $t39_40, $t32_33);
1291          $t41_42 = $t40_41[0];
1292          $t42_43 = $t2_3.$get().addr(3);
1293          $t42_43.$set($t41_42);
1294          $t43_44 = $t40_41[1];
1295          $t44_45 = ($t43_44 !== 0);
1296          if ($t44_45) {
1297            $block = 1; break;
1298          }
1299          else {
1300            $block = 2; break;
1301          }
1302          break;
1303        }
1304        case 1: {
1305          $t45_46 = $t2_3.$get().addr(0);
1306          $t46_47 = $t45_46.$get();
1307          $t47_48 = curveN.$get().addr(0);
1308          $t48_49 = $t47_48.$get();
1309          $t49_50 = addWithCarry($t46_47, $t48_49, 0);
1310          $t50_51 = $t49_50[0];
1311          $t51_52 = $t2_3.$get().addr(0);
1312          $t51_52.$set($t50_51);
1313          $t52_53 = $t49_50[1];
1314          $t53_54 = $t2_3.$get().addr(1);
1315          $t54_55 = $t53_54.$get();
1316          $t55_56 = curveN.$get().addr(1);
1317          $t56_57 = $t55_56.$get();
1318          $t57_58 = addWithCarry($t54_55, $t56_57, $t52_53);
1319          $t58_59 = $t57_58[0];
1320          $t59_60 = $t2_3.$get().addr(1);
1321          $t59_60.$set($t58_59);
1322          $t60_61 = $t57_58[1];
1323          $t61_62 = $t2_3.$get().addr(2);
1324          $t62_63 = $t61_62.$get();
1325          $t63_64 = curveN.$get().addr(2);
1326          $t64_65 = $t63_64.$get();
1327          $t65_66 = addWithCarry($t62_63, $t64_65, $t60_61);
1328          $t66_67 = $t65_66[0];
1329          $t67_68 = $t2_3.$get().addr(2);
1330          $t67_68.$set($t66_67);
1331          $t68_69 = $t65_66[1];
1332          $t69_70 = $t2_3.$get().addr(3);
1333          $t70_71 = $t69_70.$get();
1334          $t71_72 = curveN.$get().addr(3);
1335          $t72_73 = $t71_72.$get();
1336          $t73_74 = addWithCarry($t70_71, $t72_73, $t68_69);
1337          $t74_75 = $t73_74[0];
1338          $t75_76 = $t2_3.$get().addr(3);
1339          $t75_76.$set($t74_75);
1340          $t76_77 = $t73_74[1];
1341          $block = 2; break;
1342          break;
1343        }
1344        case 2: {
1345          $t77_78 = $t2_3.$get();
1346          return $t77_78;
1347          break;
1348        }
1349      }
1350    }
1351  }
1352  
1353  export function scalarInv(a) {
1354    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
1355    $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1356    $t1_2 = $t0_1.$get().addr(0);
1357    $t2_3 = $t0_1.$get().addr(1);
1358    $t3_4 = $t0_1.$get().addr(2);
1359    $t4_5 = $t0_1.$get().addr(3);
1360    $t1_2.$set(13822214165235122495);
1361    $t2_3.$set(13451932020343611451);
1362    $t3_4.$set(18446744073709551614);
1363    $t4_5.$set(18446744073709551615);
1364    $t5_6 = $t0_1.$get();
1365    $t6_7 = scalarExp(a, $t5_6);
1366    return $t6_7;
1367  }
1368  
1369  export function scalarExp(base, exp) {
1370    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
1371    let $block = 0;
1372    while (true) {
1373      switch ($block) {
1374        case 0: {
1375          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1376          $t0_1.$set($rt.builtin.cloneValue(exp));
1377          $t1_2 = feOne.$get();
1378          $t2_3 = $t1_2;
1379          $t3_4 = base;
1380          $t4_5 = 0;
1381          $block = 1; break;
1382          break;
1383        }
1384        case 1: {
1385          $t5_6 = ($t4_5 < 4);
1386          if ($t5_6) {
1387            $block = 2; break;
1388          }
1389          else {
1390            $block = 3; break;
1391          }
1392          break;
1393        }
1394        case 2: {
1395          $t6_7 = $t0_1.$get().addr($t4_5);
1396          $t7_8 = $t6_7.$get();
1397          $t8_9 = $t2_3;
1398          $t9_10 = $t3_4;
1399          $t10_11 = $t7_8;
1400          $t11_12 = 0;
1401          $block = 4; break;
1402          break;
1403        }
1404        case 3: {
1405          return $t2_3;
1406          break;
1407        }
1408        case 4: {
1409          $t12_13 = ($t11_12 < 64);
1410          if ($t12_13) {
1411            $block = 5; break;
1412          }
1413          else {
1414            $block = 6; break;
1415          }
1416          break;
1417        }
1418        case 5: {
1419          $t13_14 = $rt.builtin.int64and($t10_11, 1);
1420          $t14_15 = ($t13_14 === 1);
1421          if ($t14_15) {
1422            $block = 7; break;
1423          }
1424          else {
1425            $t17_18 = $t8_9;
1426            $block = 8; break;
1427          }
1428          break;
1429        }
1430        case 6: {
1431          $t15_16 = ($t4_5 + 1);
1432          $t2_3 = $t8_9;
1433          $t3_4 = $t9_10;
1434          $t4_5 = $t15_16;
1435          $block = 1; break;
1436          break;
1437        }
1438        case 7: {
1439          $t16_17 = scalarMul($t8_9, $t9_10);
1440          $t17_18 = $t16_17;
1441          $block = 8; break;
1442          break;
1443        }
1444        case 8: {
1445          $t18_19 = scalarMul($t9_10, $t9_10);
1446          $t19_20 = Math.trunc($t10_11 / (2 ** 1));
1447          $t20_21 = ($t11_12 + 1);
1448          $t8_9 = $t17_18;
1449          $t9_10 = $t18_19;
1450          $t10_11 = $t19_20;
1451          $t11_12 = $t20_21;
1452          $block = 4; break;
1453          break;
1454        }
1455      }
1456    }
1457  }
1458  
1459  export function scalarReduceFull(t) {
1460    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88, $t88_89, $t89_90, $t90_91, $t91_92, $t92_93, $t93_94, $t94_95, $t95_96, $t96_97, $t97_98, $t98_99, $t99_100, $t100_101, $t101_102, $t102_103, $t103_104, $t104_105, $t105_106, $t106_107, $t107_108, $t108_109, $t109_110, $t110_111, $t111_112, $t112_113, $t113_114, $t114_115, $t115_116, $t116_117, $t117_118, $t118_119;
1461    let $block = 0;
1462    while (true) {
1463      switch ($block) {
1464        case 0: {
1465          $t0_1 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1466          $t1_2 = $t0_1.$get().addr(0);
1467          $t2_3 = $t0_1.$get().addr(1);
1468          $t3_4 = $t0_1.$get().addr(2);
1469          $t1_2.$set(4624529908474429119);
1470          $t2_3.$set(4994812053365940164);
1471          $t3_4.$set(1);
1472          $t4_5 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1473          $t5_6 = $t0_1.$get();
1474          $t6_7 = scalarFoldHigh(t, $t5_6);
1475          $t4_5.$set($rt.builtin.cloneValue($t6_7));
1476          $t7_8 = $t4_5.$get();
1477          $t8_9 = $t0_1.$get();
1478          $t9_10 = scalarFoldHigh($t7_8, $t8_9);
1479          $t4_5.$set($rt.builtin.cloneValue($t9_10));
1480          $t10_11 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1481          $t11_12 = $t4_5.$get().addr(0);
1482          $t12_13 = $t11_12.$get();
1483          $t13_14 = $t10_11.$get().addr(0);
1484          $t13_14.$set($t12_13);
1485          $t14_15 = $t4_5.$get().addr(1);
1486          $t15_16 = $t14_15.$get();
1487          $t16_17 = $t10_11.$get().addr(1);
1488          $t16_17.$set($t15_16);
1489          $t17_18 = $t4_5.$get().addr(2);
1490          $t18_19 = $t17_18.$get();
1491          $t19_20 = $t10_11.$get().addr(2);
1492          $t19_20.$set($t18_19);
1493          $t20_21 = $t4_5.$get().addr(3);
1494          $t21_22 = $t20_21.$get();
1495          $t22_23 = $t10_11.$get().addr(3);
1496          $t22_23.$set($t21_22);
1497          $t23_24 = $t4_5.$get().addr(4);
1498          $t24_25 = $t23_24.$get();
1499          $t25_26 = ($t24_25 !== 0);
1500          if ($t25_26) {
1501            $block = 1; break;
1502          }
1503          else {
1504            $block = 4; break;
1505          }
1506          break;
1507        }
1508        case 1: {
1509          $t26_27 = $t4_5.$get().addr(4);
1510          $t27_28 = $t26_27.$get();
1511          $t28_29 = $t0_1.$get().addr(0);
1512          $t29_30 = $t28_29.$get();
1513          $t30_31 = mul64($t27_28, $t29_30);
1514          $t31_32 = $t30_31[0];
1515          $t32_33 = $t30_31[1];
1516          $t33_34 = $t10_11.$get().addr(0);
1517          $t34_35 = $t33_34.$get();
1518          $t35_36 = addWithCarry($t32_33, $t34_35, 0);
1519          $t36_37 = $t35_36[0];
1520          $t37_38 = $t35_36[1];
1521          $t38_39 = ($t31_32 + $t37_38);
1522          $t39_40 = $t10_11.$get().addr(0);
1523          $t39_40.$set($t36_37);
1524          $t40_41 = $t4_5.$get().addr(4);
1525          $t41_42 = $t40_41.$get();
1526          $t42_43 = $t0_1.$get().addr(1);
1527          $t43_44 = $t42_43.$get();
1528          $t44_45 = mul64($t41_42, $t43_44);
1529          $t45_46 = $t44_45[0];
1530          $t46_47 = $t44_45[1];
1531          $t47_48 = $t10_11.$get().addr(1);
1532          $t48_49 = $t47_48.$get();
1533          $t49_50 = addWithCarry($t46_47, $t48_49, 0);
1534          $t50_51 = $t49_50[0];
1535          $t51_52 = $t49_50[1];
1536          $t52_53 = ($t45_46 + $t51_52);
1537          $t53_54 = addWithCarry($t50_51, $t38_39, 0);
1538          $t54_55 = $t53_54[0];
1539          $t55_56 = $t53_54[1];
1540          $t56_57 = ($t52_53 + $t55_56);
1541          $t57_58 = $t10_11.$get().addr(1);
1542          $t57_58.$set($t54_55);
1543          $t58_59 = $t4_5.$get().addr(4);
1544          $t59_60 = $t58_59.$get();
1545          $t60_61 = $t0_1.$get().addr(2);
1546          $t61_62 = $t60_61.$get();
1547          $t62_63 = mul64($t59_60, $t61_62);
1548          $t63_64 = $t62_63[0];
1549          $t64_65 = $t62_63[1];
1550          $t65_66 = $t10_11.$get().addr(2);
1551          $t66_67 = $t65_66.$get();
1552          $t67_68 = addWithCarry($t64_65, $t66_67, 0);
1553          $t68_69 = $t67_68[0];
1554          $t69_70 = $t67_68[1];
1555          $t70_71 = ($t63_64 + $t69_70);
1556          $t71_72 = addWithCarry($t68_69, $t56_57, 0);
1557          $t72_73 = $t71_72[0];
1558          $t73_74 = $t71_72[1];
1559          $t74_75 = ($t70_71 + $t73_74);
1560          $t75_76 = $t10_11.$get().addr(2);
1561          $t75_76.$set($t72_73);
1562          $t76_77 = $t10_11.$get().addr(3);
1563          $t77_78 = $t76_77.$get();
1564          $t78_79 = addWithCarry($t77_78, $t74_75, 0);
1565          $t79_80 = $t78_79[0];
1566          $t80_81 = $t10_11.$get().addr(3);
1567          $t80_81.$set($t79_80);
1568          $t81_82 = $t78_79[1];
1569          $block = 4; break;
1570          break;
1571        }
1572        case 2: {
1573          $t82_83 = $t10_11.$get().addr(0);
1574          $t83_84 = $t82_83.$get();
1575          $t84_85 = curveN.$get().addr(0);
1576          $t85_86 = $t84_85.$get();
1577          $t86_87 = subWithBorrow($t83_84, $t85_86, 0);
1578          $t87_88 = $t86_87[0];
1579          $t88_89 = $t10_11.$get().addr(0);
1580          $t88_89.$set($t87_88);
1581          $t89_90 = $t86_87[1];
1582          $t90_91 = $t10_11.$get().addr(1);
1583          $t91_92 = $t90_91.$get();
1584          $t92_93 = curveN.$get().addr(1);
1585          $t93_94 = $t92_93.$get();
1586          $t94_95 = subWithBorrow($t91_92, $t93_94, $t89_90);
1587          $t95_96 = $t94_95[0];
1588          $t96_97 = $t10_11.$get().addr(1);
1589          $t96_97.$set($t95_96);
1590          $t97_98 = $t94_95[1];
1591          $t98_99 = $t10_11.$get().addr(2);
1592          $t99_100 = $t98_99.$get();
1593          $t100_101 = curveN.$get().addr(2);
1594          $t101_102 = $t100_101.$get();
1595          $t102_103 = subWithBorrow($t99_100, $t101_102, $t97_98);
1596          $t103_104 = $t102_103[0];
1597          $t104_105 = $t10_11.$get().addr(2);
1598          $t104_105.$set($t103_104);
1599          $t105_106 = $t102_103[1];
1600          $t106_107 = $t10_11.$get().addr(3);
1601          $t107_108 = $t106_107.$get();
1602          $t108_109 = curveN.$get().addr(3);
1603          $t109_110 = $t108_109.$get();
1604          $t110_111 = subWithBorrow($t107_108, $t109_110, $t105_106);
1605          $t111_112 = $t110_111[0];
1606          $t112_113 = $t10_11.$get().addr(3);
1607          $t112_113.$set($t111_112);
1608          $t113_114 = $t110_111[1];
1609          $block = 4; break;
1610          break;
1611        }
1612        case 3: {
1613          $t114_115 = $t10_11.$get();
1614          return $t114_115;
1615          break;
1616        }
1617        case 4: {
1618          $t115_116 = $t10_11.$get();
1619          $t116_117 = curveN.$get();
1620          $t117_118 = feCmp($t115_116, $t116_117);
1621          $t118_119 = ($t117_118 >= 0);
1622          if ($t118_119) {
1623            $block = 2; break;
1624          }
1625          else {
1626            $block = 3; break;
1627          }
1628          break;
1629        }
1630      }
1631    }
1632  }
1633  
1634  export function scalarFoldHigh(t, cc) {
1635    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60;
1636    let $block = 0;
1637    while (true) {
1638      switch ($block) {
1639        case 0: {
1640          $t0_1 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1641          $t0_1.$set($rt.builtin.cloneValue(t));
1642          $t1_2 = { $value: $rt.builtin.makeSlice(3, 3, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1643          $t1_2.$set($rt.builtin.cloneValue(cc));
1644          $t2_3 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1645          $t3_4 = $t0_1.$get().addr(0);
1646          $t4_5 = $t3_4.$get();
1647          $t5_6 = $t2_3.$get().addr(0);
1648          $t5_6.$set($t4_5);
1649          $t6_7 = $t0_1.$get().addr(1);
1650          $t7_8 = $t6_7.$get();
1651          $t8_9 = $t2_3.$get().addr(1);
1652          $t8_9.$set($t7_8);
1653          $t9_10 = $t0_1.$get().addr(2);
1654          $t10_11 = $t9_10.$get();
1655          $t11_12 = $t2_3.$get().addr(2);
1656          $t11_12.$set($t10_11);
1657          $t12_13 = $t0_1.$get().addr(3);
1658          $t13_14 = $t12_13.$get();
1659          $t14_15 = $t2_3.$get().addr(3);
1660          $t14_15.$set($t13_14);
1661          $t15_16 = 0;
1662          $block = 1; break;
1663          break;
1664        }
1665        case 1: {
1666          $t16_17 = ($t15_16 < 4);
1667          if ($t16_17) {
1668            $block = 2; break;
1669          }
1670          else {
1671            $block = 4; break;
1672          }
1673          break;
1674        }
1675        case 2: {
1676          $t17_18 = ($t15_16 + 4);
1677          $t18_19 = $t0_1.$get().addr($t17_18);
1678          $t19_20 = $t18_19.$get();
1679          $t20_21 = ($t19_20 === 0);
1680          if ($t20_21) {
1681            $block = 3; break;
1682          }
1683          else {
1684            $block = 5; break;
1685          }
1686          break;
1687        }
1688        case 3: {
1689          $t21_22 = ($t15_16 + 1);
1690          $t15_16 = $t21_22;
1691          $block = 1; break;
1692          break;
1693        }
1694        case 4: {
1695          $t22_23 = $t2_3.$get();
1696          return $t22_23;
1697          break;
1698        }
1699        case 5: {
1700          $t23_24 = 0;
1701          $t24_25 = 0;
1702          $block = 6; break;
1703          break;
1704        }
1705        case 6: {
1706          $t25_26 = ($t24_25 < 3);
1707          if ($t25_26) {
1708            $block = 7; break;
1709          }
1710          else {
1711            $block = 8; break;
1712          }
1713          break;
1714        }
1715        case 7: {
1716          $t26_27 = ($t15_16 + 4);
1717          $t27_28 = $t0_1.$get().addr($t26_27);
1718          $t28_29 = $t27_28.$get();
1719          $t29_30 = $t1_2.$get().addr($t24_25);
1720          $t30_31 = $t29_30.$get();
1721          $t31_32 = mul64($t28_29, $t30_31);
1722          $t32_33 = $t31_32[0];
1723          $t33_34 = $t31_32[1];
1724          $t34_35 = ($t15_16 + $t24_25);
1725          $t35_36 = $t2_3.$get().addr($t34_35);
1726          $t36_37 = $t35_36.$get();
1727          $t37_38 = addWithCarry($t33_34, $t36_37, 0);
1728          $t38_39 = $t37_38[0];
1729          $t39_40 = $t37_38[1];
1730          $t40_41 = ($t32_33 + $t39_40);
1731          $t41_42 = addWithCarry($t38_39, $t23_24, 0);
1732          $t42_43 = $t41_42[0];
1733          $t43_44 = $t41_42[1];
1734          $t44_45 = ($t40_41 + $t43_44);
1735          $t45_46 = ($t15_16 + $t24_25);
1736          $t46_47 = $t2_3.$get().addr($t45_46);
1737          $t46_47.$set($t42_43);
1738          $t47_48 = ($t24_25 + 1);
1739          $t23_24 = $t44_45;
1740          $t24_25 = $t47_48;
1741          $block = 6; break;
1742          break;
1743        }
1744        case 8: {
1745          $t48_49 = ($t15_16 + 3);
1746          $t49_50 = $t23_24;
1747          $t50_51 = $t48_49;
1748          $block = 9; break;
1749          break;
1750        }
1751        case 9: {
1752          $t51_52 = ($t49_50 !== 0);
1753          if ($t51_52) {
1754            $block = 11; break;
1755          }
1756          else {
1757            $block = 3; break;
1758          }
1759          break;
1760        }
1761        case 10: {
1762          $t52_53 = $t2_3.$get().addr($t50_51);
1763          $t53_54 = $t52_53.$get();
1764          $t54_55 = addWithCarry($t53_54, $t49_50, 0);
1765          $t55_56 = $t54_55[0];
1766          $t56_57 = $t2_3.$get().addr($t50_51);
1767          $t56_57.$set($t55_56);
1768          $t57_58 = $t54_55[1];
1769          $t58_59 = ($t50_51 + 1);
1770          $t49_50 = $t57_58;
1771          $t50_51 = $t58_59;
1772          $block = 9; break;
1773          break;
1774        }
1775        case 11: {
1776          $t59_60 = ($t50_51 < 8);
1777          if ($t59_60) {
1778            $block = 10; break;
1779          }
1780          else {
1781            $block = 3; break;
1782          }
1783          break;
1784        }
1785      }
1786    }
1787  }
1788  
1789  export function scalarIsZero(s) {
1790    let $t0_1, $t1_2;
1791    $t0_1 = feZero.$get();
1792    $t1_2 = (s === $t0_1);
1793    return $t1_2;
1794  }
1795  
1796  export function scalarFromBytes(b) {
1797    let $t0_1;
1798    $t0_1 = feFromBytes(b);
1799    return $t0_1;
1800  }
1801  
1802  export function feAdd(a, b) {
1803    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37;
1804    $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1805    $t0_1.$set($rt.builtin.cloneValue(a));
1806    $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1807    $t1_2.$set($rt.builtin.cloneValue(b));
1808    $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1809    $t3_4 = $t0_1.$get().addr(0);
1810    $t4_5 = $t3_4.$get();
1811    $t5_6 = $t1_2.$get().addr(0);
1812    $t6_7 = $t5_6.$get();
1813    $t7_8 = addWithCarry($t4_5, $t6_7, 0);
1814    $t8_9 = $t7_8[0];
1815    $t9_10 = $t2_3.$get().addr(0);
1816    $t9_10.$set($t8_9);
1817    $t10_11 = $t7_8[1];
1818    $t11_12 = $t0_1.$get().addr(1);
1819    $t12_13 = $t11_12.$get();
1820    $t13_14 = $t1_2.$get().addr(1);
1821    $t14_15 = $t13_14.$get();
1822    $t15_16 = addWithCarry($t12_13, $t14_15, $t10_11);
1823    $t16_17 = $t15_16[0];
1824    $t17_18 = $t2_3.$get().addr(1);
1825    $t17_18.$set($t16_17);
1826    $t18_19 = $t15_16[1];
1827    $t19_20 = $t0_1.$get().addr(2);
1828    $t20_21 = $t19_20.$get();
1829    $t21_22 = $t1_2.$get().addr(2);
1830    $t22_23 = $t21_22.$get();
1831    $t23_24 = addWithCarry($t20_21, $t22_23, $t18_19);
1832    $t24_25 = $t23_24[0];
1833    $t25_26 = $t2_3.$get().addr(2);
1834    $t25_26.$set($t24_25);
1835    $t26_27 = $t23_24[1];
1836    $t27_28 = $t0_1.$get().addr(3);
1837    $t28_29 = $t27_28.$get();
1838    $t29_30 = $t1_2.$get().addr(3);
1839    $t30_31 = $t29_30.$get();
1840    $t31_32 = addWithCarry($t28_29, $t30_31, $t26_27);
1841    $t32_33 = $t31_32[0];
1842    $t33_34 = $t2_3.$get().addr(3);
1843    $t33_34.$set($t32_33);
1844    $t34_35 = $t31_32[1];
1845    $t35_36 = $t2_3.$get();
1846    $t36_37 = feReduce($t35_36, $t34_35);
1847    return $t36_37;
1848  }
1849  
1850  export function feSub(a, b) {
1851    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69;
1852    let $block = 0;
1853    while (true) {
1854      switch ($block) {
1855        case 0: {
1856          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1857          $t0_1.$set($rt.builtin.cloneValue(a));
1858          $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1859          $t1_2.$set($rt.builtin.cloneValue(b));
1860          $t2_3 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1861          $t3_4 = $t0_1.$get().addr(0);
1862          $t4_5 = $t3_4.$get();
1863          $t5_6 = $t1_2.$get().addr(0);
1864          $t6_7 = $t5_6.$get();
1865          $t7_8 = subWithBorrow($t4_5, $t6_7, 0);
1866          $t8_9 = $t7_8[0];
1867          $t9_10 = $t2_3.$get().addr(0);
1868          $t9_10.$set($t8_9);
1869          $t10_11 = $t7_8[1];
1870          $t11_12 = $t0_1.$get().addr(1);
1871          $t12_13 = $t11_12.$get();
1872          $t13_14 = $t1_2.$get().addr(1);
1873          $t14_15 = $t13_14.$get();
1874          $t15_16 = subWithBorrow($t12_13, $t14_15, $t10_11);
1875          $t16_17 = $t15_16[0];
1876          $t17_18 = $t2_3.$get().addr(1);
1877          $t17_18.$set($t16_17);
1878          $t18_19 = $t15_16[1];
1879          $t19_20 = $t0_1.$get().addr(2);
1880          $t20_21 = $t19_20.$get();
1881          $t21_22 = $t1_2.$get().addr(2);
1882          $t22_23 = $t21_22.$get();
1883          $t23_24 = subWithBorrow($t20_21, $t22_23, $t18_19);
1884          $t24_25 = $t23_24[0];
1885          $t25_26 = $t2_3.$get().addr(2);
1886          $t25_26.$set($t24_25);
1887          $t26_27 = $t23_24[1];
1888          $t27_28 = $t0_1.$get().addr(3);
1889          $t28_29 = $t27_28.$get();
1890          $t29_30 = $t1_2.$get().addr(3);
1891          $t30_31 = $t29_30.$get();
1892          $t31_32 = subWithBorrow($t28_29, $t30_31, $t26_27);
1893          $t32_33 = $t31_32[0];
1894          $t33_34 = $t2_3.$get().addr(3);
1895          $t33_34.$set($t32_33);
1896          $t34_35 = $t31_32[1];
1897          $t35_36 = ($t34_35 !== 0);
1898          if ($t35_36) {
1899            $block = 1; break;
1900          }
1901          else {
1902            $block = 2; break;
1903          }
1904          break;
1905        }
1906        case 1: {
1907          $t36_37 = $t2_3.$get().addr(0);
1908          $t37_38 = $t36_37.$get();
1909          $t38_39 = feP.$get().addr(0);
1910          $t39_40 = $t38_39.$get();
1911          $t40_41 = addWithCarry($t37_38, $t39_40, 0);
1912          $t41_42 = $t40_41[0];
1913          $t42_43 = $t2_3.$get().addr(0);
1914          $t42_43.$set($t41_42);
1915          $t43_44 = $t40_41[1];
1916          $t44_45 = $t2_3.$get().addr(1);
1917          $t45_46 = $t44_45.$get();
1918          $t46_47 = feP.$get().addr(1);
1919          $t47_48 = $t46_47.$get();
1920          $t48_49 = addWithCarry($t45_46, $t47_48, $t43_44);
1921          $t49_50 = $t48_49[0];
1922          $t50_51 = $t2_3.$get().addr(1);
1923          $t50_51.$set($t49_50);
1924          $t51_52 = $t48_49[1];
1925          $t52_53 = $t2_3.$get().addr(2);
1926          $t53_54 = $t52_53.$get();
1927          $t54_55 = feP.$get().addr(2);
1928          $t55_56 = $t54_55.$get();
1929          $t56_57 = addWithCarry($t53_54, $t55_56, $t51_52);
1930          $t57_58 = $t56_57[0];
1931          $t58_59 = $t2_3.$get().addr(2);
1932          $t58_59.$set($t57_58);
1933          $t59_60 = $t56_57[1];
1934          $t60_61 = $t2_3.$get().addr(3);
1935          $t61_62 = $t60_61.$get();
1936          $t62_63 = feP.$get().addr(3);
1937          $t63_64 = $t62_63.$get();
1938          $t64_65 = addWithCarry($t61_62, $t63_64, $t59_60);
1939          $t65_66 = $t64_65[0];
1940          $t66_67 = $t2_3.$get().addr(3);
1941          $t66_67.$set($t65_66);
1942          $t67_68 = $t64_65[1];
1943          $block = 2; break;
1944          break;
1945        }
1946        case 2: {
1947          $t68_69 = $t2_3.$get();
1948          return $t68_69;
1949          break;
1950        }
1951      }
1952    }
1953  }
1954  
1955  export function feNeg(a) {
1956    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
1957    let $block = 0;
1958    while (true) {
1959      switch ($block) {
1960        case 0: {
1961          $t0_1 = feZero.$get();
1962          $t1_2 = (a === $t0_1);
1963          if ($t1_2) {
1964            $block = 1; break;
1965          }
1966          else {
1967            $block = 2; break;
1968          }
1969          break;
1970        }
1971        case 1: {
1972          $t2_3 = feZero.$get();
1973          return $t2_3;
1974          break;
1975        }
1976        case 2: {
1977          $t3_4 = feP.$get();
1978          $t4_5 = feSub($t3_4, a);
1979          return $t4_5;
1980          break;
1981        }
1982      }
1983    }
1984  }
1985  
1986  export function feMul(a, b) {
1987    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34;
1988    let $block = 0;
1989    while (true) {
1990      switch ($block) {
1991        case 0: {
1992          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1993          $t0_1.$set($rt.builtin.cloneValue(a));
1994          $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1995          $t1_2.$set($rt.builtin.cloneValue(b));
1996          $t2_3 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
1997          $t3_4 = 0;
1998          $block = 1; break;
1999          break;
2000        }
2001        case 1: {
2002          $t4_5 = ($t3_4 < 4);
2003          if ($t4_5) {
2004            $block = 2; break;
2005          }
2006          else {
2007            $block = 3; break;
2008          }
2009          break;
2010        }
2011        case 2: {
2012          $t7_8 = 0;
2013          $t8_9 = 0;
2014          $block = 4; break;
2015          break;
2016        }
2017        case 3: {
2018          $t5_6 = $t2_3.$get();
2019          $t6_7 = feReduceFull($t5_6);
2020          return $t6_7;
2021          break;
2022        }
2023        case 4: {
2024          $t9_10 = ($t8_9 < 4);
2025          if ($t9_10) {
2026            $block = 5; break;
2027          }
2028          else {
2029            $block = 6; break;
2030          }
2031          break;
2032        }
2033        case 5: {
2034          $t10_11 = $t0_1.$get().addr($t3_4);
2035          $t11_12 = $t10_11.$get();
2036          $t12_13 = $t1_2.$get().addr($t8_9);
2037          $t13_14 = $t12_13.$get();
2038          $t14_15 = mul64($t11_12, $t13_14);
2039          $t15_16 = $t14_15[0];
2040          $t16_17 = $t14_15[1];
2041          $t17_18 = ($t3_4 + $t8_9);
2042          $t18_19 = $t2_3.$get().addr($t17_18);
2043          $t19_20 = $t18_19.$get();
2044          $t20_21 = addWithCarry($t16_17, $t19_20, 0);
2045          $t21_22 = $t20_21[0];
2046          $t22_23 = $t20_21[1];
2047          $t23_24 = ($t15_16 + $t22_23);
2048          $t24_25 = addWithCarry($t21_22, $t7_8, 0);
2049          $t25_26 = $t24_25[0];
2050          $t26_27 = $t24_25[1];
2051          $t27_28 = ($t23_24 + $t26_27);
2052          $t28_29 = ($t3_4 + $t8_9);
2053          $t29_30 = $t2_3.$get().addr($t28_29);
2054          $t29_30.$set($t25_26);
2055          $t30_31 = ($t8_9 + 1);
2056          $t7_8 = $t27_28;
2057          $t8_9 = $t30_31;
2058          $block = 4; break;
2059          break;
2060        }
2061        case 6: {
2062          $t31_32 = ($t3_4 + 4);
2063          $t32_33 = $t2_3.$get().addr($t31_32);
2064          $t32_33.$set($t7_8);
2065          $t33_34 = ($t3_4 + 1);
2066          $t3_4 = $t33_34;
2067          $block = 1; break;
2068          break;
2069        }
2070      }
2071    }
2072  }
2073  
2074  export function feSqr(a) {
2075    let $t0_1;
2076    $t0_1 = feMul(a, a);
2077    return $t0_1;
2078  }
2079  
2080  export function feInv(a) {
2081    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2082    $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2083    $t1_2 = $t0_1.$get().addr(0);
2084    $t2_3 = $t0_1.$get().addr(1);
2085    $t3_4 = $t0_1.$get().addr(2);
2086    $t4_5 = $t0_1.$get().addr(3);
2087    $t1_2.$set(18446744069414583341);
2088    $t2_3.$set(18446744073709551615);
2089    $t3_4.$set(18446744073709551615);
2090    $t4_5.$set(18446744073709551615);
2091    $t5_6 = $t0_1.$get();
2092    $t6_7 = feExp(a, $t5_6);
2093    return $t6_7;
2094  }
2095  
2096  export function feExp(base, exp) {
2097    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21;
2098    let $block = 0;
2099    while (true) {
2100      switch ($block) {
2101        case 0: {
2102          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2103          $t0_1.$set($rt.builtin.cloneValue(exp));
2104          $t1_2 = feOne.$get();
2105          $t2_3 = $t1_2;
2106          $t3_4 = base;
2107          $t4_5 = 0;
2108          $block = 1; break;
2109          break;
2110        }
2111        case 1: {
2112          $t5_6 = ($t4_5 < 4);
2113          if ($t5_6) {
2114            $block = 2; break;
2115          }
2116          else {
2117            $block = 3; break;
2118          }
2119          break;
2120        }
2121        case 2: {
2122          $t6_7 = $t0_1.$get().addr($t4_5);
2123          $t7_8 = $t6_7.$get();
2124          $t8_9 = $t2_3;
2125          $t9_10 = $t3_4;
2126          $t10_11 = $t7_8;
2127          $t11_12 = 0;
2128          $block = 4; break;
2129          break;
2130        }
2131        case 3: {
2132          return $t2_3;
2133          break;
2134        }
2135        case 4: {
2136          $t12_13 = ($t11_12 < 64);
2137          if ($t12_13) {
2138            $block = 5; break;
2139          }
2140          else {
2141            $block = 6; break;
2142          }
2143          break;
2144        }
2145        case 5: {
2146          $t13_14 = $rt.builtin.int64and($t10_11, 1);
2147          $t14_15 = ($t13_14 === 1);
2148          if ($t14_15) {
2149            $block = 7; break;
2150          }
2151          else {
2152            $t17_18 = $t8_9;
2153            $block = 8; break;
2154          }
2155          break;
2156        }
2157        case 6: {
2158          $t15_16 = ($t4_5 + 1);
2159          $t2_3 = $t8_9;
2160          $t3_4 = $t9_10;
2161          $t4_5 = $t15_16;
2162          $block = 1; break;
2163          break;
2164        }
2165        case 7: {
2166          $t16_17 = feMul($t8_9, $t9_10);
2167          $t17_18 = $t16_17;
2168          $block = 8; break;
2169          break;
2170        }
2171        case 8: {
2172          $t18_19 = feSqr($t9_10);
2173          $t19_20 = Math.trunc($t10_11 / (2 ** 1));
2174          $t20_21 = ($t11_12 + 1);
2175          $t8_9 = $t17_18;
2176          $t9_10 = $t18_19;
2177          $t10_11 = $t19_20;
2178          $t11_12 = $t20_21;
2179          $block = 4; break;
2180          break;
2181        }
2182      }
2183    }
2184  }
2185  
2186  export function feSqrt(a) {
2187    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10;
2188    let $block = 0;
2189    while (true) {
2190      switch ($block) {
2191        case 0: {
2192          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2193          $t1_2 = $t0_1.$get().addr(0);
2194          $t2_3 = $t0_1.$get().addr(1);
2195          $t3_4 = $t0_1.$get().addr(2);
2196          $t4_5 = $t0_1.$get().addr(3);
2197          $t1_2.$set(18446744072635809548);
2198          $t2_3.$set(18446744073709551615);
2199          $t3_4.$set(18446744073709551615);
2200          $t4_5.$set(4611686018427387903);
2201          $t5_6 = $t0_1.$get();
2202          $t6_7 = feExp(a, $t5_6);
2203          $t7_8 = feSqr($t6_7);
2204          $t8_9 = ($t7_8 === a);
2205          if ($t8_9) {
2206            $block = 1; break;
2207          }
2208          else {
2209            $block = 2; break;
2210          }
2211          break;
2212        }
2213        case 1: {
2214          return [$t6_7, true];
2215          break;
2216        }
2217        case 2: {
2218          $t9_10 = feZero.$get();
2219          return [$t9_10, false];
2220          break;
2221        }
2222      }
2223    }
2224  }
2225  
2226  export function feFromBytes(b) {
2227    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17;
2228    let $block = 0;
2229    while (true) {
2230      switch ($block) {
2231        case 0: {
2232          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2233          $t1_2 = $rt.builtin.len(b);
2234          $t2_3 = ($t1_2 < 32);
2235          if ($t2_3) {
2236            $block = 1; break;
2237          }
2238          else {
2239            $block = 2; break;
2240          }
2241          break;
2242        }
2243        case 1: {
2244          $t3_4 = $t0_1.$get();
2245          return $t3_4;
2246          break;
2247        }
2248        case 2: {
2249          $t4_5 = $rt.builtin.sliceSlice(b, 0, 8, undefined);
2250          $t5_6 = beUint64($t4_5);
2251          $t6_7 = $t0_1.$get().addr(3);
2252          $t6_7.$set($t5_6);
2253          $t7_8 = $rt.builtin.sliceSlice(b, 8, 16, undefined);
2254          $t8_9 = beUint64($t7_8);
2255          $t9_10 = $t0_1.$get().addr(2);
2256          $t9_10.$set($t8_9);
2257          $t10_11 = $rt.builtin.sliceSlice(b, 16, 24, undefined);
2258          $t11_12 = beUint64($t10_11);
2259          $t12_13 = $t0_1.$get().addr(1);
2260          $t12_13.$set($t11_12);
2261          $t13_14 = $rt.builtin.sliceSlice(b, 24, 32, undefined);
2262          $t14_15 = beUint64($t13_14);
2263          $t15_16 = $t0_1.$get().addr(0);
2264          $t15_16.$set($t14_15);
2265          $t16_17 = $t0_1.$get();
2266          return $t16_17;
2267          break;
2268        }
2269      }
2270    }
2271  }
2272  
2273  export function feToBytes(a) {
2274    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19;
2275    $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2276    $t0_1.$set($rt.builtin.cloneValue(a));
2277    $t1_2 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2278    $t2_3 = $rt.builtin.sliceSlice($t1_2.$get(), 0, 8, undefined);
2279    $t3_4 = $t0_1.$get().addr(3);
2280    $t4_5 = $t3_4.$get();
2281    $t5_6 = putBeUint64($t2_3, $t4_5);
2282    $t6_7 = $rt.builtin.sliceSlice($t1_2.$get(), 8, 16, undefined);
2283    $t7_8 = $t0_1.$get().addr(2);
2284    $t8_9 = $t7_8.$get();
2285    $t9_10 = putBeUint64($t6_7, $t8_9);
2286    $t10_11 = $rt.builtin.sliceSlice($t1_2.$get(), 16, 24, undefined);
2287    $t11_12 = $t0_1.$get().addr(1);
2288    $t12_13 = $t11_12.$get();
2289    $t13_14 = putBeUint64($t10_11, $t12_13);
2290    $t14_15 = $rt.builtin.sliceSlice($t1_2.$get(), 24, 32, undefined);
2291    $t15_16 = $t0_1.$get().addr(0);
2292    $t16_17 = $t15_16.$get();
2293    $t17_18 = putBeUint64($t14_15, $t16_17);
2294    $t18_19 = $t1_2.$get();
2295    return $t18_19;
2296  }
2297  
2298  export function feIsZero(a) {
2299    let $t0_1, $t1_2;
2300    $t0_1 = feZero.$get();
2301    $t1_2 = (a === $t0_1);
2302    return $t1_2;
2303  }
2304  
2305  export function feIsEven(a) {
2306    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5;
2307    $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2308    $t0_1.$set($rt.builtin.cloneValue(a));
2309    $t1_2 = $t0_1.$get().addr(0);
2310    $t2_3 = $t1_2.$get();
2311    $t3_4 = $rt.builtin.int64and($t2_3, 1);
2312    $t4_5 = ($t3_4 === 0);
2313    return $t4_5;
2314  }
2315  
2316  export function feCmp(a, b) {
2317    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15;
2318    let $block = 0;
2319    while (true) {
2320      switch ($block) {
2321        case 0: {
2322          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2323          $t0_1.$set($rt.builtin.cloneValue(a));
2324          $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2325          $t1_2.$set($rt.builtin.cloneValue(b));
2326          $t2_3 = 3;
2327          $block = 1; break;
2328          break;
2329        }
2330        case 1: {
2331          $t3_4 = ($t2_3 >= 0);
2332          if ($t3_4) {
2333            $block = 2; break;
2334          }
2335          else {
2336            $block = 3; break;
2337          }
2338          break;
2339        }
2340        case 2: {
2341          $t4_5 = $t0_1.$get().addr($t2_3);
2342          $t5_6 = $t4_5.$get();
2343          $t6_7 = $t1_2.$get().addr($t2_3);
2344          $t7_8 = $t6_7.$get();
2345          $t8_9 = ($t5_6 < $t7_8);
2346          if ($t8_9) {
2347            $block = 4; break;
2348          }
2349          else {
2350            $block = 5; break;
2351          }
2352          break;
2353        }
2354        case 3: {
2355          return 0;
2356          break;
2357        }
2358        case 4: {
2359          return -1;
2360          break;
2361        }
2362        case 5: {
2363          $t9_10 = $t0_1.$get().addr($t2_3);
2364          $t10_11 = $t9_10.$get();
2365          $t11_12 = $t1_2.$get().addr($t2_3);
2366          $t12_13 = $t11_12.$get();
2367          $t13_14 = ($t10_11 > $t12_13);
2368          if ($t13_14) {
2369            $block = 6; break;
2370          }
2371          else {
2372            $block = 7; break;
2373          }
2374          break;
2375        }
2376        case 6: {
2377          return 1;
2378          break;
2379        }
2380        case 7: {
2381          $t14_15 = ($t2_3 - 1);
2382          $t2_3 = $t14_15;
2383          $block = 1; break;
2384          break;
2385        }
2386      }
2387    }
2388  }
2389  
2390  export function feReduce(r, carry) {
2391    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39;
2392    let $block = 0;
2393    while (true) {
2394      switch ($block) {
2395        case 0: {
2396          $t0_1 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2397          $t0_1.$set($rt.builtin.cloneValue(r));
2398          $t1_2 = (carry !== 0);
2399          if ($t1_2) {
2400            $block = 1; break;
2401          }
2402          else {
2403            $block = 3; break;
2404          }
2405          break;
2406        }
2407        case 1: {
2408          $t2_3 = $t0_1.$get().addr(0);
2409          $t3_4 = $t2_3.$get();
2410          $t4_5 = feP.$get().addr(0);
2411          $t5_6 = $t4_5.$get();
2412          $t6_7 = subWithBorrow($t3_4, $t5_6, 0);
2413          $t7_8 = $t6_7[0];
2414          $t8_9 = $t0_1.$get().addr(0);
2415          $t8_9.$set($t7_8);
2416          $t9_10 = $t6_7[1];
2417          $t10_11 = $t0_1.$get().addr(1);
2418          $t11_12 = $t10_11.$get();
2419          $t12_13 = feP.$get().addr(1);
2420          $t13_14 = $t12_13.$get();
2421          $t14_15 = subWithBorrow($t11_12, $t13_14, $t9_10);
2422          $t15_16 = $t14_15[0];
2423          $t16_17 = $t0_1.$get().addr(1);
2424          $t16_17.$set($t15_16);
2425          $t17_18 = $t14_15[1];
2426          $t18_19 = $t0_1.$get().addr(2);
2427          $t19_20 = $t18_19.$get();
2428          $t20_21 = feP.$get().addr(2);
2429          $t21_22 = $t20_21.$get();
2430          $t22_23 = subWithBorrow($t19_20, $t21_22, $t17_18);
2431          $t23_24 = $t22_23[0];
2432          $t24_25 = $t0_1.$get().addr(2);
2433          $t24_25.$set($t23_24);
2434          $t25_26 = $t22_23[1];
2435          $t26_27 = $t0_1.$get().addr(3);
2436          $t27_28 = $t26_27.$get();
2437          $t28_29 = feP.$get().addr(3);
2438          $t29_30 = $t28_29.$get();
2439          $t30_31 = subWithBorrow($t27_28, $t29_30, $t25_26);
2440          $t31_32 = $t30_31[0];
2441          $t32_33 = $t0_1.$get().addr(3);
2442          $t32_33.$set($t31_32);
2443          $t33_34 = $t30_31[1];
2444          $block = 2; break;
2445          break;
2446        }
2447        case 2: {
2448          $t34_35 = $t0_1.$get();
2449          return $t34_35;
2450          break;
2451        }
2452        case 3: {
2453          $t35_36 = $t0_1.$get();
2454          $t36_37 = feP.$get();
2455          $t37_38 = feCmp($t35_36, $t36_37);
2456          $t38_39 = ($t37_38 >= 0);
2457          if ($t38_39) {
2458            $block = 1; break;
2459          }
2460          else {
2461            $block = 2; break;
2462          }
2463          break;
2464        }
2465      }
2466    }
2467  }
2468  
2469  export function feReduceFull(t) {
2470    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80, $t80_81, $t81_82, $t82_83, $t83_84, $t84_85, $t85_86, $t86_87, $t87_88;
2471    let $block = 0;
2472    while (true) {
2473      switch ($block) {
2474        case 0: {
2475          $t0_1 = { $value: $rt.builtin.makeSlice(8, 8, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2476          $t0_1.$set($rt.builtin.cloneValue(t));
2477          $t1_2 = { $value: $rt.builtin.makeSlice(4, 4, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
2478          $t2_3 = 0;
2479          $t3_4 = 0;
2480          $block = 1; break;
2481          break;
2482        }
2483        case 1: {
2484          $t4_5 = ($t3_4 < 4);
2485          if ($t4_5) {
2486            $block = 2; break;
2487          }
2488          else {
2489            $block = 3; break;
2490          }
2491          break;
2492        }
2493        case 2: {
2494          $t5_6 = ($t3_4 + 4);
2495          $t6_7 = $t0_1.$get().addr($t5_6);
2496          $t7_8 = $t6_7.$get();
2497          $t8_9 = mul64($t7_8, 4294968273);
2498          $t9_10 = $t8_9[0];
2499          $t10_11 = $t8_9[1];
2500          $t11_12 = $t0_1.$get().addr($t3_4);
2501          $t12_13 = $t11_12.$get();
2502          $t13_14 = addWithCarry($t10_11, $t12_13, 0);
2503          $t14_15 = $t13_14[0];
2504          $t15_16 = $t13_14[1];
2505          $t16_17 = ($t9_10 + $t15_16);
2506          $t17_18 = addWithCarry($t14_15, $t2_3, 0);
2507          $t18_19 = $t17_18[0];
2508          $t19_20 = $t17_18[1];
2509          $t20_21 = ($t16_17 + $t19_20);
2510          $t21_22 = $t1_2.$get().addr($t3_4);
2511          $t21_22.$set($t18_19);
2512          $t22_23 = ($t3_4 + 1);
2513          $t2_3 = $t20_21;
2514          $t3_4 = $t22_23;
2515          $block = 1; break;
2516          break;
2517        }
2518        case 3: {
2519          $t23_24 = ($t2_3 !== 0);
2520          if ($t23_24) {
2521            $block = 4; break;
2522          }
2523          else {
2524            $block = 5; break;
2525          }
2526          break;
2527        }
2528        case 4: {
2529          $t24_25 = mul64($t2_3, 4294968273);
2530          $t25_26 = $t24_25[0];
2531          $t26_27 = $t24_25[1];
2532          $t27_28 = $t1_2.$get().addr(0);
2533          $t28_29 = $t27_28.$get();
2534          $t29_30 = addWithCarry($t28_29, $t26_27, 0);
2535          $t30_31 = $t29_30[0];
2536          $t31_32 = $t1_2.$get().addr(0);
2537          $t31_32.$set($t30_31);
2538          $t32_33 = $t29_30[1];
2539          $t33_34 = $t1_2.$get().addr(1);
2540          $t34_35 = $t33_34.$get();
2541          $t35_36 = addWithCarry($t34_35, $t25_26, $t32_33);
2542          $t36_37 = $t35_36[0];
2543          $t37_38 = $t1_2.$get().addr(1);
2544          $t37_38.$set($t36_37);
2545          $t38_39 = $t35_36[1];
2546          $t39_40 = $t1_2.$get().addr(2);
2547          $t40_41 = $t39_40.$get();
2548          $t41_42 = addWithCarry($t40_41, 0, $t38_39);
2549          $t42_43 = $t41_42[0];
2550          $t43_44 = $t1_2.$get().addr(2);
2551          $t43_44.$set($t42_43);
2552          $t44_45 = $t41_42[1];
2553          $t45_46 = $t1_2.$get().addr(3);
2554          $t46_47 = $t45_46.$get();
2555          $t47_48 = addWithCarry($t46_47, 0, $t44_45);
2556          $t48_49 = $t47_48[0];
2557          $t49_50 = $t1_2.$get().addr(3);
2558          $t49_50.$set($t48_49);
2559          $t50_51 = $t47_48[1];
2560          $block = 5; break;
2561          break;
2562        }
2563        case 5: {
2564          $t51_52 = $t1_2.$get();
2565          $t52_53 = feP.$get();
2566          $t53_54 = feCmp($t51_52, $t52_53);
2567          $t54_55 = ($t53_54 >= 0);
2568          if ($t54_55) {
2569            $block = 6; break;
2570          }
2571          else {
2572            $block = 7; break;
2573          }
2574          break;
2575        }
2576        case 6: {
2577          $t55_56 = $t1_2.$get().addr(0);
2578          $t56_57 = $t55_56.$get();
2579          $t57_58 = feP.$get().addr(0);
2580          $t58_59 = $t57_58.$get();
2581          $t59_60 = subWithBorrow($t56_57, $t58_59, 0);
2582          $t60_61 = $t59_60[0];
2583          $t61_62 = $t1_2.$get().addr(0);
2584          $t61_62.$set($t60_61);
2585          $t62_63 = $t59_60[1];
2586          $t63_64 = $t1_2.$get().addr(1);
2587          $t64_65 = $t63_64.$get();
2588          $t65_66 = feP.$get().addr(1);
2589          $t66_67 = $t65_66.$get();
2590          $t67_68 = subWithBorrow($t64_65, $t66_67, $t62_63);
2591          $t68_69 = $t67_68[0];
2592          $t69_70 = $t1_2.$get().addr(1);
2593          $t69_70.$set($t68_69);
2594          $t70_71 = $t67_68[1];
2595          $t71_72 = $t1_2.$get().addr(2);
2596          $t72_73 = $t71_72.$get();
2597          $t73_74 = feP.$get().addr(2);
2598          $t74_75 = $t73_74.$get();
2599          $t75_76 = subWithBorrow($t72_73, $t74_75, $t70_71);
2600          $t76_77 = $t75_76[0];
2601          $t77_78 = $t1_2.$get().addr(2);
2602          $t77_78.$set($t76_77);
2603          $t78_79 = $t75_76[1];
2604          $t79_80 = $t1_2.$get().addr(3);
2605          $t80_81 = $t79_80.$get();
2606          $t81_82 = feP.$get().addr(3);
2607          $t82_83 = $t81_82.$get();
2608          $t83_84 = subWithBorrow($t80_81, $t82_83, $t78_79);
2609          $t84_85 = $t83_84[0];
2610          $t85_86 = $t1_2.$get().addr(3);
2611          $t85_86.$set($t84_85);
2612          $t86_87 = $t83_84[1];
2613          $block = 7; break;
2614          break;
2615        }
2616        case 7: {
2617          $t87_88 = $t1_2.$get();
2618          return $t87_88;
2619          break;
2620        }
2621      }
2622    }
2623  }
2624  
2625  export function addWithCarry(a, b, carry) {
2626    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2627    let $block = 0;
2628    while (true) {
2629      switch ($block) {
2630        case 0: {
2631          $t0_1 = (a + b);
2632          $t1_2 = ($t0_1 + carry);
2633          $t2_3 = ($t1_2 < a);
2634          if ($t2_3) {
2635            $block = 1; break;
2636          }
2637          else {
2638            $block = 3; break;
2639          }
2640          break;
2641        }
2642        case 1: {
2643          $t3_4 = 1;
2644          $block = 2; break;
2645          break;
2646        }
2647        case 2: {
2648          return [$t1_2, $t3_4];
2649          break;
2650        }
2651        case 3: {
2652          $t4_5 = ($t1_2 === a);
2653          if ($t4_5) {
2654            $block = 4; break;
2655          }
2656          else {
2657            $t3_4 = 0;
2658            $block = 2; break;
2659          }
2660          break;
2661        }
2662        case 4: {
2663          $t5_6 = $rt.builtin.int64or(b, carry);
2664          $t6_7 = ($t5_6 !== 0);
2665          if ($t6_7) {
2666            $block = 1; break;
2667          }
2668          else {
2669            $t3_4 = 0;
2670            $block = 2; break;
2671          }
2672          break;
2673        }
2674      }
2675    }
2676  }
2677  
2678  export function subWithBorrow(a, b, borrow) {
2679    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7;
2680    let $block = 0;
2681    while (true) {
2682      switch ($block) {
2683        case 0: {
2684          $t0_1 = (a - b);
2685          $t1_2 = ($t0_1 - borrow);
2686          $t2_3 = (b + borrow);
2687          $t3_4 = (a < $t2_3);
2688          if ($t3_4) {
2689            $block = 1; break;
2690          }
2691          else {
2692            $block = 3; break;
2693          }
2694          break;
2695        }
2696        case 1: {
2697          $t4_5 = 1;
2698          $block = 2; break;
2699          break;
2700        }
2701        case 2: {
2702          return [$t1_2, $t4_5];
2703          break;
2704        }
2705        case 3: {
2706          $t5_6 = (borrow !== 0);
2707          if ($t5_6) {
2708            $block = 4; break;
2709          }
2710          else {
2711            $t4_5 = 0;
2712            $block = 2; break;
2713          }
2714          break;
2715        }
2716        case 4: {
2717          $t6_7 = (b === 18446744073709551615);
2718          if ($t6_7) {
2719            $block = 1; break;
2720          }
2721          else {
2722            $t4_5 = 0;
2723            $block = 2; break;
2724          }
2725          break;
2726        }
2727      }
2728    }
2729  }
2730  
2731  export function mul64(a, b) {
2732    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22;
2733    let $block = 0;
2734    while (true) {
2735      switch ($block) {
2736        case 0: {
2737          $t0_1 = Math.trunc(a / (2 ** 32));
2738          $t1_2 = $rt.builtin.int64and(a, 4294967295);
2739          $t2_3 = Math.trunc(b / (2 ** 32));
2740          $t3_4 = $rt.builtin.int64and(b, 4294967295);
2741          $t4_5 = ($t1_2 * $t3_4);
2742          $t5_6 = ($t0_1 * $t3_4);
2743          $t6_7 = ($t1_2 * $t2_3);
2744          $t7_8 = ($t0_1 * $t2_3);
2745          $t8_9 = Math.trunc($t4_5 / (2 ** 32));
2746          $t9_10 = ($t5_6 + $t8_9);
2747          $t10_11 = ($t9_10 < $t5_6);
2748          if ($t10_11) {
2749            $block = 1; break;
2750          }
2751          else {
2752            $t12_13 = $t7_8;
2753            $block = 2; break;
2754          }
2755          break;
2756        }
2757        case 1: {
2758          $t11_12 = ($t7_8 + 4294967296);
2759          $t12_13 = $t11_12;
2760          $block = 2; break;
2761          break;
2762        }
2763        case 2: {
2764          $t13_14 = ($t9_10 + $t6_7);
2765          $t14_15 = ($t13_14 < $t9_10);
2766          if ($t14_15) {
2767            $block = 3; break;
2768          }
2769          else {
2770            $t16_17 = $t12_13;
2771            $block = 4; break;
2772          }
2773          break;
2774        }
2775        case 3: {
2776          $t15_16 = ($t12_13 + 4294967296);
2777          $t16_17 = $t15_16;
2778          $block = 4; break;
2779          break;
2780        }
2781        case 4: {
2782          $t17_18 = ($t13_14 * (2 ** 32));
2783          $t18_19 = $rt.builtin.int64and($t4_5, 4294967295);
2784          $t19_20 = $rt.builtin.int64or($t17_18, $t18_19);
2785          $t20_21 = Math.trunc($t13_14 / (2 ** 32));
2786          $t21_22 = ($t16_17 + $t20_21);
2787          return [$t21_22, $t19_20];
2788          break;
2789        }
2790      }
2791    }
2792  }
2793  
2794  export function beUint64(b) {
2795    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38;
2796    $t0_1 = b.addr(0);
2797    $t1_2 = $t0_1.$get();
2798    $t2_3 = $t1_2;
2799    $t3_4 = ($t2_3 * (2 ** 56));
2800    $t4_5 = b.addr(1);
2801    $t5_6 = $t4_5.$get();
2802    $t6_7 = $t5_6;
2803    $t7_8 = ($t6_7 * (2 ** 48));
2804    $t8_9 = $rt.builtin.int64or($t3_4, $t7_8);
2805    $t9_10 = b.addr(2);
2806    $t10_11 = $t9_10.$get();
2807    $t11_12 = $t10_11;
2808    $t12_13 = ($t11_12 * (2 ** 40));
2809    $t13_14 = $rt.builtin.int64or($t8_9, $t12_13);
2810    $t14_15 = b.addr(3);
2811    $t15_16 = $t14_15.$get();
2812    $t16_17 = $t15_16;
2813    $t17_18 = ($t16_17 * (2 ** 32));
2814    $t18_19 = $rt.builtin.int64or($t13_14, $t17_18);
2815    $t19_20 = b.addr(4);
2816    $t20_21 = $t19_20.$get();
2817    $t21_22 = $t20_21;
2818    $t22_23 = ($t21_22 * (2 ** 24));
2819    $t23_24 = $rt.builtin.int64or($t18_19, $t22_23);
2820    $t24_25 = b.addr(5);
2821    $t25_26 = $t24_25.$get();
2822    $t26_27 = $t25_26;
2823    $t27_28 = ($t26_27 * (2 ** 16));
2824    $t28_29 = $rt.builtin.int64or($t23_24, $t27_28);
2825    $t29_30 = b.addr(6);
2826    $t30_31 = $t29_30.$get();
2827    $t31_32 = $t30_31;
2828    $t32_33 = ($t31_32 * (2 ** 8));
2829    $t33_34 = $rt.builtin.int64or($t28_29, $t32_33);
2830    $t34_35 = b.addr(7);
2831    $t35_36 = $t34_35.$get();
2832    $t36_37 = $t35_36;
2833    $t37_38 = $rt.builtin.int64or($t33_34, $t36_37);
2834    return $t37_38;
2835  }
2836  
2837  export function putBeUint64(b, v) {
2838    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23;
2839    $t0_1 = Math.trunc(v / (2 ** 56));
2840    $t1_2 = ($t0_1 & 0xFF);
2841    $t2_3 = b.addr(0);
2842    $t2_3.$set($t1_2);
2843    $t3_4 = Math.trunc(v / (2 ** 48));
2844    $t4_5 = ($t3_4 & 0xFF);
2845    $t5_6 = b.addr(1);
2846    $t5_6.$set($t4_5);
2847    $t6_7 = Math.trunc(v / (2 ** 40));
2848    $t7_8 = ($t6_7 & 0xFF);
2849    $t8_9 = b.addr(2);
2850    $t8_9.$set($t7_8);
2851    $t9_10 = Math.trunc(v / (2 ** 32));
2852    $t10_11 = ($t9_10 & 0xFF);
2853    $t11_12 = b.addr(3);
2854    $t11_12.$set($t10_11);
2855    $t12_13 = Math.trunc(v / (2 ** 24));
2856    $t13_14 = ($t12_13 & 0xFF);
2857    $t14_15 = b.addr(4);
2858    $t14_15.$set($t13_14);
2859    $t15_16 = Math.trunc(v / (2 ** 16));
2860    $t16_17 = ($t15_16 & 0xFF);
2861    $t17_18 = b.addr(5);
2862    $t17_18.$set($t16_17);
2863    $t18_19 = Math.trunc(v / (2 ** 8));
2864    $t19_20 = ($t18_19 & 0xFF);
2865    $t20_21 = b.addr(6);
2866    $t20_21.$set($t19_20);
2867    $t21_22 = (v & 0xFF);
2868    $t22_23 = b.addr(7);
2869    $t22_23.$set($t21_22);
2870    return;
2871  }
2872  
2873  export function Point$isInfinity(p) {
2874    let $t0_1, $t1_2, $t2_3, $t3_4;
2875    $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2876    $t0_1.$set($rt.builtin.cloneValue(p));
2877    $t1_2 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
2878    $t2_3 = $t1_2.$get();
2879    $t3_4 = feIsZero($t2_3);
2880    return $t3_4;
2881  }
2882  
2883  $rt.types.getType('common/crypto/secp256k1.Point')?.methods?.set('isInfinity', Point$isInfinity);
2884  export function Point$toAffine(p) {
2885    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25;
2886    let $block = 0;
2887    while (true) {
2888      switch ($block) {
2889        case 0: {
2890          $t0_1 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0), Z: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2891          $t0_1.$set($rt.builtin.cloneValue(p));
2892          $t1_2 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
2893          $t2_3 = $t1_2.$get();
2894          $t3_4 = feIsZero($t2_3);
2895          if ($t3_4) {
2896            $block = 1; break;
2897          }
2898          else {
2899            $block = 2; break;
2900          }
2901          break;
2902        }
2903        case 1: {
2904          $t4_5 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2905          $t5_6 = { $get() { return $t4_5.$get().X; }, $set(v) { const obj = $t4_5.$get(); obj.X = v; $t4_5.$set(obj); } };
2906          $t6_7 = feZero.$get();
2907          $t7_8 = { $get() { return $t4_5.$get().Y; }, $set(v) { const obj = $t4_5.$get(); obj.Y = v; $t4_5.$set(obj); } };
2908          $t8_9 = feZero.$get();
2909          $t5_6.$set($rt.builtin.cloneValue($t6_7));
2910          $t7_8.$set($rt.builtin.cloneValue($t8_9));
2911          $t9_10 = $t4_5.$get();
2912          return $t9_10;
2913          break;
2914        }
2915        case 2: {
2916          $t10_11 = { $get() { return $t0_1.$get().Z; }, $set(v) { const obj = $t0_1.$get(); obj.Z = v; $t0_1.$set(obj); } };
2917          $t11_12 = $t10_11.$get();
2918          $t12_13 = feInv($t11_12);
2919          $t13_14 = feSqr($t12_13);
2920          $t14_15 = feMul($t13_14, $t12_13);
2921          $t15_16 = { $value: { X: $rt.builtin.makeSlice(4, 4, 0), Y: $rt.builtin.makeSlice(4, 4, 0) }, $get() { return this.$value; }, $set(v) { this.$value = v; } };
2922          $t16_17 = { $get() { return $t15_16.$get().X; }, $set(v) { const obj = $t15_16.$get(); obj.X = v; $t15_16.$set(obj); } };
2923          $t17_18 = { $get() { return $t0_1.$get().X; }, $set(v) { const obj = $t0_1.$get(); obj.X = v; $t0_1.$set(obj); } };
2924          $t18_19 = $t17_18.$get();
2925          $t19_20 = feMul($t18_19, $t13_14);
2926          $t20_21 = { $get() { return $t15_16.$get().Y; }, $set(v) { const obj = $t15_16.$get(); obj.Y = v; $t15_16.$set(obj); } };
2927          $t21_22 = { $get() { return $t0_1.$get().Y; }, $set(v) { const obj = $t0_1.$get(); obj.Y = v; $t0_1.$set(obj); } };
2928          $t22_23 = $t21_22.$get();
2929          $t23_24 = feMul($t22_23, $t14_15);
2930          $t16_17.$set($rt.builtin.cloneValue($t19_20));
2931          $t20_21.$set($rt.builtin.cloneValue($t23_24));
2932          $t24_25 = $t15_16.$get();
2933          return $t24_25;
2934          break;
2935        }
2936      }
2937    }
2938  }
2939  
2940  $rt.types.getType('common/crypto/secp256k1.Point')?.methods?.set('toAffine', Point$toAffine);
2941