{ "cells": [ { "cell_type": "markdown", "id": "ffe4a0f6-6f41-47fe-856e-cff892d63b6e", "metadata": {}, "source": [ "# SPU Inside" ] }, { "cell_type": "markdown", "id": "f93887c6-3641-479c-a58e-b8e2f57a9254", "metadata": {}, "source": [ "SPU is a virtual device backed by an MPC engine, which provides an *arithmetic black box* abstraction to front-end users. Just like other *black boxes*, it's not easy to understand what happened inside it.\n", "\n", "For this reason, SPU provides some features to show what happened inside it, this document demonstrates these features. \n", "\n", "## Simulation\n", "\n", "As the name suggests, *multi-party computation* is born to be distributed system with multiple participants, which makes it harder to setup, debug and inspect. So SPU provides a *simulation module* that uses threads to simulate multi-parties in a single process. All parties acts exactly the same as in production environment, so we can use it as a playground to inspect the internals of SPU.\n", "\n", "To use the simulation module, we can simple do" ] }, { "cell_type": "code", "execution_count": 1, "id": "0ad5b8d2-42b1-4a52-bce7-029ad140b092", "metadata": {}, "outputs": [], "source": [ "import spu\n", "import jax.numpy as jnp\n", "import numpy as np\n", "\n", "# import spu simulation module\n", "import spu.utils.simulation as pps" ] }, { "cell_type": "markdown", "id": "a7f6c030-f1d8-4c7b-a854-05037a867c4c", "metadata": {}, "source": [ "Now we can create SPU simulator and run program on it." ] }, { "cell_type": "code", "execution_count": 2, "id": "c462ad19-fa12-46b8-8461-3e8e4d736820", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "[[ 6. 8.]\n", " [10. 12.]]\n" ] } ], "source": [ "# create a simulator with ABY3 x Ring64 protocol.\n", "protocol = spu.ProtocolKind.ABY3\n", "field = spu.FieldType.FM64\n", "simulator = pps.Simulator.simple(3, protocol, field)\n", "\n", "# decorate a jnp function to a simulated function\n", "spu_add = pps.sim_jax(simulator, jnp.add)\n", "\n", "# now we can call spu_fn like normal jnp fn.\n", "x = np.array([[1., 2.], [3., 4.]])\n", "y = np.array([[5., 6.], [7., 8.]])\n", "\n", "# the function is simulated on SPU VM, which use 3 threads to simulate different parties.\n", "# the actual progress is exactly the same as real distributed version. \n", "z = spu_add(x, y)\n", "\n", "print(z)" ] }, { "cell_type": "markdown", "id": "af286f9b-76de-40c6-a8bd-562e25056a2b", "metadata": {}, "source": [ "In the above code.\n", "- First, we create an SPU simulator backed by *ABY3* protocol with *FM64* field.\n", "- Then we decorates a jax function `jax.add` to make it a SPU simulated function.\n", "- Then we can use the simulated function just like normal python functions.\n", "\n", "As the result suggests, it behaves like a python function, we can also print the compiled pphlo program with" ] }, { "cell_type": "code", "execution_count": 3, "id": "0e72f4d7-ce6b-4be0-952a-5abd28e94596", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "module @xla_computation_add attributes {mhlo.cross_program_prefetches = [], mhlo.dynamic_parameter_bindings = [], mhlo.is_dynamic = false, mhlo.use_auto_spmd_partitioning = false} {\n", " func.func @main(%arg0: tensor<2x2x!pphlo.sec>, %arg1: tensor<2x2x!pphlo.sec>) -> tensor<2x2x!pphlo.sec> {\n", " %0 = \"pphlo.add\"(%arg0, %arg1) : (tensor<2x2x!pphlo.sec>, tensor<2x2x!pphlo.sec>) -> tensor<2x2x!pphlo.sec>\n", " return %0 : tensor<2x2x!pphlo.sec>\n", " }\n", "}\n", "\n" ] } ], "source": [ "print(spu_add.pphlo)" ] }, { "cell_type": "markdown", "id": "758889fd-930b-4ee0-a3c3-aba55f634840", "metadata": {}, "source": [ "The above code is a pphlo dialect in [MLIR](https://mlir.llvm.org/) format, which defines a `main` function that accepts two arguments and returns the sum as result.\n", "\n", "Besides single `jax.numpy` op, we can simulate any jax function on SPU, i.e." ] }, { "cell_type": "code", "execution_count": 4, "id": "e39965e9-763e-4e8c-a01c-c277ac82a2cf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "module @xla_computation_sigmoid attributes {mhlo.cross_program_prefetches = [], mhlo.dynamic_parameter_bindings = [], mhlo.is_dynamic = false, mhlo.use_auto_spmd_partitioning = false} {\n", " func.func @main(%arg0: tensor<2x2x!pphlo.sec>) -> tensor<2x2x!pphlo.sec> {\n", " %0 = \"pphlo.constant\"() {value = dense<1.000000e+00> : tensor<2x2xf32>} : () -> tensor<2x2x!pphlo.pub>\n", " %1 = \"pphlo.negate\"(%arg0) : (tensor<2x2x!pphlo.sec>) -> tensor<2x2x!pphlo.sec>\n", " %2 = \"pphlo.exponential\"(%1) : (tensor<2x2x!pphlo.sec>) -> tensor<2x2x!pphlo.sec>\n", " %3 = \"pphlo.add\"(%2, %0) : (tensor<2x2x!pphlo.sec>, tensor<2x2x!pphlo.pub>) -> tensor<2x2x!pphlo.sec>\n", " %4 = \"pphlo.divide\"(%0, %3) : (tensor<2x2x!pphlo.pub>, tensor<2x2x!pphlo.sec>) -> tensor<2x2x!pphlo.sec>\n", " return %4 : tensor<2x2x!pphlo.sec>\n", " }\n", "}\n", "\n" ] } ], "source": [ "def sigmoid(x):\n", " return 1 / (1 + jnp.exp(-x))\n", "\n", "spu_sigmoid = pps.sim_jax(simulator, sigmoid)\n", "spu_sigmoid(x)\n", "\n", "print(spu_sigmoid.pphlo)" ] }, { "cell_type": "markdown", "id": "beaf5df8-be1f-4aad-89c7-37ac71009985", "metadata": {}, "source": [ "The above code is `spu function` which is composed of spu builtin ops.\n", "\n", "Note: since spu use [JIT](https://en.wikipedia.org/wiki/Just-in-time_compilation) compilation, so we have to execute the function before printing the compiled bytecode." ] }, { "cell_type": "markdown", "id": "e21cbc2d-525c-4026-8477-2455e4937d77", "metadata": {}, "source": [ "## Profling\n", "\n", "Besides simple simulation, we can profile the simulated program, although the profiling result could NOT be \n", "used as a reference of SPU perf, it still gives some information of what happened.\n", "\n", "To use profiling, we have enabled some feature flags." ] }, { "cell_type": "code", "execution_count": 5, "id": "a073c67c-9a29-41d8-b5e9-33d286ab6021", "metadata": {}, "outputs": [], "source": [ "config = spu.RuntimeConfig(protocol=protocol, field=field)\n", "config.enable_pphlo_profile = True\n", "simulator = pps.Simulator(3, config)" ] }, { "cell_type": "markdown", "id": "ca5d2117-b5a2-4902-a724-6e51372016c2", "metadata": {}, "source": [ "`enable_pphlo_profile` tells SPU runtime to print information about pphlo, now, let's run the function on this new runtime." ] }, { "cell_type": "code", "execution_count": 6, "id": "46826fca-6ded-4405-9a3c-81d8d74b4714", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2023-02-25 08:28:41.147] [info] [api.cc:131] [Profiling] SPU execution sigmoid completed, input processing took 3.9e-07s, execution took 0.001579826s, output processing took 5.9e-07s, total time 0.001580806s.\n", "[2023-02-25 08:28:41.147] [info] [api.cc:163] HLO profiling: total time 0.001053574\n", "[2023-02-25 08:28:41.147] [info] [api.cc:166] - pphlo.add, executed 1 times, duration 4.35e-06s\n", "[2023-02-25 08:28:41.147] [info] [api.cc:166] - pphlo.constant, executed 1 times, duration 1.0905e-05s\n", "[2023-02-25 08:28:41.147] [info] [api.cc:166] - pphlo.divide, executed 1 times, duration 0.000771116s\n", "[2023-02-25 08:28:41.147] [info] [api.cc:166] - pphlo.exponential, executed 1 times, duration 0.000243988s\n", "[2023-02-25 08:28:41.147] [info] [api.cc:166] - pphlo.negate, executed 1 times, duration 2.3215e-05s\n", "[2023-02-25 08:28:41.147] [info] [api.cc:175] Link details: total send bytes 3568, send actions 89\n" ] } ], "source": [ "spu_sigmoid = pps.sim_jax(simulator, sigmoid)\n", "z = spu_sigmoid(x)" ] }, { "cell_type": "markdown", "id": "15ceca0a-737f-42e8-b46c-751e788e62bd", "metadata": {}, "source": [ "The above log tells the total execution time and the detailed statistics of each builtin function.\n", "\n", "Besides the `enable_pphlo_profile` feature flag, SPU has other flags like `enable_hal_profile` to dump runtime information in different levels of instructions.\n", "\n", "## Tracing\n", "\n", "*Profiling* can only tell the statistics of SPU instructions, it's still hard to understand what happened inside it.\n", "*Tracing* is a feature that used to print verbose `call stack`, which helps to understand/inspect what exactly happened.\n", "\n", "To enable tracing features, just set `enable_action_trace` in the runtime config." ] }, { "cell_type": "code", "execution_count": 7, "id": "918f3728-11f7-4a19-b49e-ac9e16c87955", "metadata": {}, "outputs": [], "source": [ "config = spu.RuntimeConfig(protocol=protocol, field=field)\n", "config.enable_action_trace = True\n", "simulator = pps.Simulator(3, config)" ] }, { "cell_type": "markdown", "id": "e1767cb2-fb8c-4f89-83fe-91c332aef1cc", "metadata": {}, "source": [ "Now, let's run another function on this `tracing enabled` simulator." ] }, { "cell_type": "code", "execution_count": 8, "id": "0837177f-6406-454a-ac9e-780e4d4cd8db", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2023-02-25 08:28:45.293] [TR] [B] hlo.pphlo.multiply()\n", "[2023-02-25 08:28:45.293] [TR] [B] hal.mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [B] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:28:45.293] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:28:45.293] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:28:45.293] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:28:45.293] [TR] [E] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:28:45.293] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:28:45.293] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:28:45.293] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:28:45.293] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:28:45.293] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:28:45.293] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:28:45.293] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:28:45.293] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [E] hal.mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:28:45.293] [TR] [E] hlo.pphlo.multiply()\n" ] } ], "source": [ "spu_mul = pps.sim_jax(simulator, jnp.multiply)\n", "z = spu_mul(x, y)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b39bc0e3-ba47-4cad-8e49-ad397f289f26", "metadata": {}, "source": [ "At the first glance, the trace log is a bit of frustrating, so it worth a little while to explain it.\n", "\n", "At the very begining, is the entry point of `multiply` function.\n", "\n", "Each line follows the format as below:\n", "```\n", "[timestamp] [TR] [B/E] module.op(value_type...)\n", "```\n", "\n", "For example, the second line `[timestamp] [TR] [B] hal.mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)` means:\n", "- this is a tracing log indicated by `[TR]`\n", "- the function begins/ends `[B/E]`\n", "- the module is `hal`\n", "- the operator is `mul`\n", "- the two args are both `Value<2x2xSFXP,s=2,1>`\n", "\n", "Note, `hlo` is short for `High Level Operations`, `hal` is short for `Hardware Abstraction Layer`, `mpc` is short for `Multi-Party Computation`.\n", "\n", "The `Value<2x2xSFXP,s=2,1>` means it's a **S**ecret **F**i**X**ed **P**ointed tensor with shape(**2x2**) and strides(**2,1**). \n", "\n", "1. the runtime dispatches the function according parameters datatype (in this case *fxp*), then calls the corresponding fixed point handle function `hal.f_mul`, the prefix `f_` means its for fixed point.\n", "2. the runtime dispatches `hal.f_mul` to the untyped version `hal._mul` which operates on `rings`.\n", "3. the runtime dispatches `hal._mul` according to the *visibility* type, since both parameters are **secret**, so `hal._mul_ss` is called, the postfix `_ss` indicates that it operates on two secrets.\n", "\n", "Then the function `hal._mul_ss` is dispatched to the MPC layer, the signature becomes more complicated.\n", "```\n", "mpc.mul_ss(ArrayRef<4xaby3.AShr>,ArrayRef<4xaby3.AShr>)\n", "```\n", "The signature of this operation is the same as above, `mpc.mul_ss` indicates the module is `mpc` and the operation is `mul_ss`.\n", "\n", "The type `ArrayRef<4xaby3.AShr>` has two notable differences:\n", "1. unlike hal ops, mpc ops operates on 1D-array instead of tensor, which makes it a more standard SIMD instruction.\n", "2. the type `aby3.AShr` is protocol-dependent, in this case, it's an *ABY3* arithmetic share in FM64.\n", "\n", "Finally, it's dispatched to `mpc.mul_aa`, the postfix `_aa` indicates both parameters are arithmetic shares, then the ABY3 share addition protocol is performed.\n", "\n", "But `f_mul` could not be done with ring multiplication only, we have to `truncate` the result to make the fixed point legal, in the following lines, `hal._trunc` is called and finally dispatched to `mpc.trunc_a` protocol." ] }, { "cell_type": "markdown", "id": "3f80f56e-1e1d-49fc-866d-e91faed5b10e", "metadata": {}, "source": [ "The above example is pretty straight forward, now let's make it harder.\n", "\n", "Fixed point reciprocal is done with [Goldschmidt](https://en.wikipedia.org/wiki/Division_algorithm#Goldschmidt_division) approximation algorithm, the algorithm itself is not that simple, and when it's executed on MPC, things become more complicated.\n", "\n", "It takes a lot of effort to understand how it works, let's directly see the tracing result." ] }, { "cell_type": "code", "execution_count": 9, "id": "2bddac60-6e07-459b-8d26-6d77efdfb3d5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2023-02-25 08:33:10.167] [TR] [B] hlo.pphlo.constant()\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.constant(PtBufferView<0x7fd4b80acd10,xPT_F32,>, {})\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.make_pub2k(PtBufferView<0x7fd4b80acd10,xPT_F32,>)\n", "[2023-02-25 08:33:10.167] [TR] [E] hal.make_pub2k(PtBufferView<0x7fd4b80acd10,xPT_F32,>)\n", "[2023-02-25 08:33:10.167] [TR] [E] hal.constant(PtBufferView<0x7fd4b80acd10,xPT_F32,>, {})\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.167] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.167] [TR] [E] hlo.pphlo.constant()\n", "[2023-02-25 08:33:10.167] [TR] [B] hlo.pphlo.divide()\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.div(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.dtype_cast(Value<2x2xPFXP,s=0,0>, FXP)\n", "[2023-02-25 08:33:10.167] [TR] [E] hal.dtype_cast(Value<2x2xPFXP,s=0,0>, FXP)\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.dtype_cast(Value<2x2xSFXP,s=2,1>, FXP)\n", "[2023-02-25 08:33:10.167] [TR] [E] hal.dtype_cast(Value<2x2xSFXP,s=2,1>, FXP)\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.f_div(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.167] [TR] [B] hal.div_goldschmidt(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.167] [TR] [B] hal._msb(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.167] [TR] [B] hal._msb_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.msb_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.msb_a2b(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 63)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 63)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.msb_a2b(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] mpc.msb_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.167] [TR] [E] hal._msb_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.167] [TR] [E] hal._msb(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.167] [TR] [B] hal._make_p(0)\n", "[2023-02-25 08:33:10.167] [TR] [B] mpc.make_p(0)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.make_p(0)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._make_p(0)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.BShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.b2a(ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.b2a(ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.BShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._make_p(1)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._prefix_or(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._make_p(0)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.make_p(0)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.make_p(0)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._make_p(0)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xSFXP,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.a2b(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.a2b(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bp(ArrayRef<4xaby3.BShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bp(ArrayRef<4xaby3.BShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xSFXP,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift_s(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift_s(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift(Value<2x2xS*,s=2,1>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift_s(Value<2x2xS*,s=2,1>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift_s(Value<2x2xS*,s=2,1>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift(Value<2x2xS*,s=2,1>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift(Value<2x2xS*,s=2,1>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift_s(Value<2x2xS*,s=2,1>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift_s(Value<2x2xS*,s=2,1>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift(Value<2x2xS*,s=2,1>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift(Value<2x2xS*,s=2,1>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift_s(Value<2x2xS*,s=2,1>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift_s(Value<2x2xS*,s=2,1>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift(Value<2x2xS*,s=2,1>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift(Value<2x2xS*,s=2,1>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift_s(Value<2x2xS*,s=2,1>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift_s(Value<2x2xS*,s=2,1>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift(Value<2x2xS*,s=2,1>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift(Value<2x2xS*,s=2,1>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift_s(Value<2x2xS*,s=2,1>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift_s(Value<2x2xS*,s=2,1>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift(Value<2x2xS*,s=2,1>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._and(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._prefix_or(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._rshift_s(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.rshift_s(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift_s(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._rshift(Value<2x2xS*,s=2,1>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._xor(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._bitrev(Value<2x2xS*,s=2,1>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._bitrev_s(Value<2x2xS*,s=2,1>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.bitrev_s(ArrayRef<4xaby3.BShr>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.bitrev_b(ArrayRef<4xaby3.BShr>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.bitrev_b(ArrayRef<4xaby3.BShr>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.bitrev_s(ArrayRef<4xaby3.BShr>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._bitrev_s(Value<2x2xS*,s=2,1>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._bitrev(Value<2x2xS*,s=2,1>, 0, 36)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.b2a(ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.add_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.add_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.b2a(ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.168] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.168] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.constant(PtBufferView<0x7fd4e8ff6440,xPT_I32,>, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.make_pub2k(PtBufferView<0x7fd4e8ff6440,xPT_I32,>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.make_pub2k(PtBufferView<0x7fd4e8ff6440,xPT_I32,>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.constant(PtBufferView<0x7fd4e8ff6440,xPT_I32,>, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.constant(PtBufferView<0x7fd4e8ff6440,xPT_F32,>, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.make_pub2k(PtBufferView<0x7fd4e8ff6440,xPT_F32,>)\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.make_pub2k(PtBufferView<0x7fd4e8ff6440,xPT_F32,>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [E] hal.constant(PtBufferView<0x7fd4e8ff6440,xPT_F32,>, {2,2})\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._mul(Value<2x2xPI32,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.168] [TR] [B] hal._mul_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPI32,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPI32,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xPI32,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_sub(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_sub(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.constant(PtBufferView<0x7fd4e8ff6440,xPT_F32,>, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.make_pub2k(PtBufferView<0x7fd4e8ff6440,xPT_F32,>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.make_pub2k(PtBufferView<0x7fd4e8ff6440,xPT_F32,>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.constant(PtBufferView<0x7fd4e8ff6440,xPT_F32,>, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_sub(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_add(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_sub(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_square(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_square(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_add(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_sp(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xPFXP,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.b2a(ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.and_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 2)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 4)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 8)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 16)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 32)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.and_bb(ArrayRef<8xaby3.BShr>, ArrayRef<8xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.lshift_b(ArrayRef<4xaby3.BShr>, 1)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.xor_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_bb(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.b2a(ArrayRef<4xaby3.BShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.BShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_ss(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_a(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.trunc_s(ArrayRef<4xaby3.AShr>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc_s(Value<2x2xS*,s=2,1>, 18)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._trunc(Value<2x2xS*,s=2,1>, 0)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_mul(Value<2x2xSFXP,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._make_p(1)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.broadcast_to(Value, {2,2})\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_a(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.not_s(ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not_s(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._not(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ap(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_sp(ArrayRef<4xaby3.AShr>, ArrayRef<4xPub2k>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_sp(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xP*,s=0,0>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._negate(Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._sub(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.mul_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul_ss(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mul(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [B] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_aa(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] mpc.add_ss(ArrayRef<4xaby3.AShr>, ArrayRef<4xaby3.AShr>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add_ss(Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._add(Value<2x2xSFXP,s=2,1>, Value<2x2xS*,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal._mux(Value<2x2xS*,s=2,1>, Value<2x2xS*,s=2,1>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.div_goldschmidt(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.f_div(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hal.div(Value<2x2xPFXP,s=0,0>, Value<2x2xSFXP,s=2,1>)\n", "[2023-02-25 08:33:10.169] [TR] [E] hlo.pphlo.divide()\n" ] } ], "source": [ "spu_reciprocal = pps.sim_jax(simulator, jnp.reciprocal)\n", "z = spu_reciprocal(x)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9a3fdc33-ad15-4165-a86d-1dda143465c0", "metadata": {}, "source": [ "Surprise, it's really a lot of ops!\n", "\n", "Yes, that's why MPC is still relatively slow and why SPU wants to optimize it :P\n", "\n", "The `reciprocal` is still a relative simple operator, you can try more complicated op like `convolution`." ] }, { "cell_type": "markdown", "id": "d28fb8c7-5ca5-44e7-a795-1edd042a6f1e", "metadata": {}, "source": [ "## Misc\n", "\n", "Simulation could be used to inspect other parts of SPU, i.e. the *fixed point arithmetic* accuracy.\n", "\n", "As the above example indicates, non-linear functions like `reciprocal` and `exp` are approximated with some numeric methods, so the result is not as accurate as floating point arithmetic.\n", "\n", "For example." ] }, { "cell_type": "code", "execution_count": null, "id": "132ec47e", "metadata": {}, "outputs": [], "source": [ "%pip install matplotlib" ] }, { "cell_type": "code", "execution_count": 10, "id": "9d4b6845-f129-490a-8be5-3e86ec5430a6", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "\n", "simulator = pps.Simulator.simple(3, protocol, spu.FieldType.FM128)\n", "spu_exp = pps.sim_jax(simulator, jnp.exp)\n", "\n", "x = np.arange(0.,23.) \n", "spu_y = spu_exp(x)\n", "jax_y = jnp.exp(x)\n", "plt.title(\"Matplotlib demo\") \n", "plt.plot(x,spu_y)\n", "plt.plot(x,jax_y)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "dff64df6-0586-414e-96ea-1e35cdec0e29", "metadata": {}, "source": [ "As we can see, the SPU version of `exp` (blue line) diverges with the standard version when input is larger. " ] }, { "cell_type": "markdown", "id": "8c0e7ae9-72c3-43af-adb4-b273b16883ec", "metadata": {}, "source": [ "Finally, SPU, as a secure computation, behaves very differently from CPU, both in accuracy and cost model, when you are not sure about how it works, simulate on it! " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.16" }, "vscode": { "interpreter": { "hash": "830c23f57e6253683b92f2449db82410e6451d1b59048f91eefc53b20217e543" } } }, "nbformat": 4, "nbformat_minor": 5 }