From 05d3ee287563efaee6538b4cf1a7e1560cd4d8a5 Mon Sep 17 00:00:00 2001 From: Ivo Kubjas Date: Thu, 16 Jan 2025 13:24:04 +0100 Subject: [PATCH] fix(ecpair): ensure last non-trivial input pair goes to ML+finalexp circuit (#524) * fix: set inputresult only once * fix: copy only actual inputs going to pairing (no trivial pairs) * fix: non-exclusive G2 membership or pairing check * fix: enable index consistency check when interleaved G2 membership We may interleave in the same rows the G2 membership and pairing check inputs. Currently when we have interleaved then we disable the index consisitency check. * fix: do not project pair IDs and total pairings * fix: add constraint to check totalpairs correctness * test: add IS_RESULT column to test cases and uniform reformat * feat: allow outputting CSV in hex * feat: add utility method to write the module * test: check also IS_RESULT in test cases * test: add test case modules * test: add regression test case * feat: add testdata generator for ecpair * feat: add tests for manual generation of EC edge cases * fix: accumulator consistency assignment in case of one valid point * docs: describe assignment * fix: indexing when non-sequential valid points * test: run tests on generated data * feat: generate all cases for 1-5 input pairs * test: skip long tests * fix: test imports * enable ecpair * perf: parallelize testcase testing --------- Co-authored-by: gusiri --- prover/utils/csvtraces/csvtraces.go | 13 +- prover/zkevm/prover/ecpair/ecpair.go | 5 +- .../zkevm/prover/ecpair/ecpair_assignment.go | 109 ++- .../zkevm/prover/ecpair/ecpair_constraints.go | 40 +- prover/zkevm/prover/ecpair/ecpair_test.go | 70 +- .../prover/ecpair/ecpair_with_circuit_test.go | 31 + .../testdata/ecpair_double_pair_module.csv | 258 +++--- .../ecpair/testdata/ecpair_empty_module.csv | 1 + .../ecpair_failing_double_pair_module.csv | 258 +++--- .../testdata/ecpair_regression_1_input.csv | 51 ++ .../testdata/ecpair_regression_1_module.csv | 129 +++ .../ecpair/testdata/ecpair_trace_module.csv | 257 ++++++ .../testdata/ecpair_triple_pair_module.csv | 514 ++++++------ .../testdata/ecpair_two_pairings_module.csv | 514 ++++++------ .../testdata_generator_manual_test.go | 765 ++++++++++++++++++ .../testdata/testdata_generator_test.go | 583 +++++++++++++ prover/zkevm/zkevm.go | 17 +- 17 files changed, 2805 insertions(+), 810 deletions(-) create mode 100644 prover/zkevm/prover/ecpair/testdata/ecpair_empty_module.csv create mode 100644 prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_input.csv create mode 100644 prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_module.csv create mode 100644 prover/zkevm/prover/ecpair/testdata/ecpair_trace_module.csv create mode 100644 prover/zkevm/prover/ecpair/testdata/testdata_generator_manual_test.go create mode 100644 prover/zkevm/prover/ecpair/testdata/testdata_generator_test.go diff --git a/prover/utils/csvtraces/csvtraces.go b/prover/utils/csvtraces/csvtraces.go index a5d2f1ca4..ffa3d6acd 100644 --- a/prover/utils/csvtraces/csvtraces.go +++ b/prover/utils/csvtraces/csvtraces.go @@ -20,6 +20,7 @@ type cfg struct { nbRows int skipPrePaddingZero bool filterOn ifaces.Column + inHex bool } type Option func(*cfg) error @@ -47,6 +48,12 @@ func FilterOn(col ifaces.Column) Option { } } +// InHex sets the CSV printer to print the values in hexadecimal +func InHex(c *cfg) error { + c.inHex = true + return nil +} + type CsvTrace struct { mapped map[string][]field.Element @@ -110,7 +117,11 @@ func FmtCsv(w io.Writer, run *wizard.ProverRuntime, cols []ifaces.Column, option } if assignment[c][r].IsUint64() { - fmtVals = append(fmtVals, assignment[c][r].String()) + if cfg.inHex { + fmtVals = append(fmtVals, "0x"+assignment[c][r].Text(16)) + } else { + fmtVals = append(fmtVals, assignment[c][r].String()) + } continue } diff --git a/prover/zkevm/prover/ecpair/ecpair.go b/prover/zkevm/prover/ecpair/ecpair.go index ab2fdcb20..52f882d0a 100644 --- a/prover/zkevm/prover/ecpair/ecpair.go +++ b/prover/zkevm/prover/ecpair/ecpair.go @@ -108,11 +108,12 @@ func newECPair(comp *wizard.CompiledIOP, limits *Limits, ecSource *ECPairSource) res.csInstanceIDChangeWhenNewInstance(comp) res.csAccumulatorInit(comp) res.csAccumulatorConsistency(comp) + res.csTotalPairs(comp) res.csLastPairToFinalExp(comp) res.csIndexConsistency(comp) res.csAccumulatorMask(comp) // only Unaligned Pairing data or G2 membership data is active at a time - res.csExclusiveUnalignedDatas(comp) + res.csPairingDataOrMembershipActive(comp) // only to Miller loop or to FinalExp res.csExclusivePairingCircuitMasks(comp) @@ -241,6 +242,7 @@ type UnalignedPairingData struct { ToMillerLoopCircuitMask ifaces.Column ToFinalExpCircuitMask ifaces.Column + IsResultOfInstance ifaces.Column IsFirstLineOfInstance ifaces.Column IsFirstLineOfPrevAccumulator ifaces.Column IsFirstLineOfCurrAccumulator ifaces.Column @@ -263,6 +265,7 @@ func newUnalignedPairingData(comp *wizard.CompiledIOP, limits *Limits) *Unaligne IsFirstLineOfInstance: createCol("IS_FIRST_LINE_OF_INSTANCE"), IsFirstLineOfPrevAccumulator: createCol("IS_FIRST_LINE_OF_PREV_ACC"), IsFirstLineOfCurrAccumulator: createCol("IS_FIRST_LINE_OF_CURR_ACC"), + IsResultOfInstance: createCol("IS_RESULT"), IsAccumulatorPrev: createCol("IS_ACCUMULATOR_PREV"), IsAccumulatorCurr: createCol("IS_ACCUMULATOR_CURR"), IsAccumulatorInit: createCol("IS_ACCUMULATOR_INIT"), diff --git a/prover/zkevm/prover/ecpair/ecpair_assignment.go b/prover/zkevm/prover/ecpair/ecpair_assignment.go index ba1e28b6a..2cc78dcfa 100644 --- a/prover/zkevm/prover/ecpair/ecpair_assignment.go +++ b/prover/zkevm/prover/ecpair/ecpair_assignment.go @@ -88,10 +88,18 @@ func (ec *ECPair) assignPairingData(run *wizard.ProverRuntime) { dstIndex = common.NewVectorBuilder(ec.UnalignedPairingData.Index) dstIsFirstPrev = common.NewVectorBuilder(ec.UnalignedPairingData.IsFirstLineOfPrevAccumulator) dstIsFirstCurr = common.NewVectorBuilder(ec.UnalignedPairingData.IsFirstLineOfCurrAccumulator) + dstIsResult = common.NewVectorBuilder(ec.UnalignedPairingData.IsResultOfInstance) ) for currPos := 0; currPos < len(srcLimbs); { - // we need to check if the current position is a pairing or not. If not, then skip it. + // we need to check if the current position is a pairing or not. If not, + // then skip it. + // + // this also skips inputs to the current pairing instance which do not + // require passing to the pairing circuit (full-trivial or half-trivial + // inputs). But this is fine as it doesn't change the result as trivial + // result ML is 1. Only non-trivial input pairs affect the pairing check + // result. if srcIsPairing[currPos].IsZero() { currPos++ continue @@ -100,28 +108,42 @@ func (ec *ECPair) assignPairingData(run *wizard.ProverRuntime) { // input data. We iterate over the data to get the number of pairing // inputs. nbInputs := 1 // we start with 1 because we always have at least one pairing input + // we may have trivial input pairs in-between the non-trivial ones. We + // mark which inputs we are interested in. + actualInputs := []int{0} // we started when isPairing is 1, this means that we have non-trivial input. for { if srcIsRes[currPos+nbInputs*(nbG1Limbs+nbG2Limbs)].IsOne() { break } + if srcIsPairing[currPos+nbInputs*(nbG1Limbs+nbG2Limbs)].IsOne() { + actualInputs = append(actualInputs, nbInputs) + } nbInputs++ } + nbActualTotalPairs := len(actualInputs) // now, we have continous chunk of data that is for the pairing. Prepare it for processing. - pairingInG1 = make([][nbG1Limbs]field.Element, nbInputs) - pairingInG2 = make([][nbG2Limbs]field.Element, nbInputs) - for i := 0; i < nbInputs; i++ { + pairingInG1 = make([][nbG1Limbs]field.Element, nbActualTotalPairs) + pairingInG2 = make([][nbG2Limbs]field.Element, nbActualTotalPairs) + for ii, i := range actualInputs { for j := 0; j < nbG1Limbs; j++ { - pairingInG1[i][j] = srcLimbs[currPos+i*(nbG1Limbs+nbG2Limbs)+j] + pairingInG1[ii][j] = srcLimbs[currPos+i*(nbG1Limbs+nbG2Limbs)+j] } for j := 0; j < nbG2Limbs; j++ { - pairingInG2[i][j] = srcLimbs[currPos+i*(nbG1Limbs+nbG2Limbs)+nbG1Limbs+j] + pairingInG2[ii][j] = srcLimbs[currPos+i*(nbG1Limbs+nbG2Limbs)+nbG1Limbs+j] } - inputResult[0] = srcLimbs[currPos+(i+1)*(nbG1Limbs+nbG2Limbs)] - inputResult[1] = srcLimbs[currPos+(i+1)*(nbG1Limbs+nbG2Limbs)+1] } + inputResult[0] = srcLimbs[currPos+nbInputs*(nbG1Limbs+nbG2Limbs)] + inputResult[1] = srcLimbs[currPos+nbInputs*(nbG1Limbs+nbG2Limbs)+1] limbs := processPairingData(pairingInG1, pairingInG2, inputResult) instanceId := srcID[currPos] // processed data has the input limbs, but we have entered the intermediate Gt accumulator values + + // generic assignment. We push the static values for the current instance: + // - the limbs (interleaved with accumulator values) + // - indicator for the first row of the whole pairingcheck instance + // - the instance id + // - the index of the current limb + // - activeness of the submodule for i := 0; i < len(limbs); i++ { dstLimb.PushField(limbs[i]) if i == 0 { @@ -133,15 +155,24 @@ func (ec *ECPair) assignPairingData(run *wizard.ProverRuntime) { dstIndex.PushInt(i) dstIsActive.PushOne() } - for i := 0; i < nbInputs-1; i++ { + // now we push the dynamic values per Miller loop. We send all valid + // pairs except the last to Miller loop (not Miller loop + finalexp!) + // circuit. Keep in mind if there is only a single valid pair then this + // loop is skipped. + for ii := range actualInputs[:len(actualInputs)-1] { + // first we indicate for the accumulator if it is the first one, previous or current for j := 0; j < nbGtLimbs; j++ { dstIsComputed.PushOne() dstIsPulling.PushZero() - if i == 0 { + if ii == 0 { + // we handle first accumulator separately to be able to + // constrain that the initial accumulator value is correct. dstIsAccInit.PushOne() dstIsAccPrev.PushZero() dstIsFirstPrev.PushZero() } else { + // we're not in the first pair of points, so we indicate + // that the accumulator consistency needs to be checked. dstIsAccInit.PushZero() if j == 0 { dstIsFirstPrev.PushOne() @@ -153,6 +184,8 @@ func (ec *ECPair) assignPairingData(run *wizard.ProverRuntime) { dstIsAccCurr.PushZero() dstIsFirstCurr.PushZero() } + // now we push the dynamic values for the actual inputs to the pairing check circuit (coming from the arithmetization). + // essentially we only mark that this limb came directly from arithmetization. for j := nbGtLimbs; j < nbGtLimbs+nbG1Limbs+nbG2Limbs; j++ { dstIsPulling.PushOne() dstIsComputed.PushZero() @@ -162,6 +195,7 @@ func (ec *ECPair) assignPairingData(run *wizard.ProverRuntime) { dstIsFirstPrev.PushZero() dstIsFirstCurr.PushZero() } + // finally, we need to indicate that the next limbs are for the current accumulator for j := nbGtLimbs + nbG1Limbs + nbG2Limbs; j < 2*nbGtLimbs+nbG1Limbs+nbG2Limbs; j++ { dstIsComputed.PushOne() dstIsPulling.PushZero() @@ -175,54 +209,92 @@ func (ec *ECPair) assignPairingData(run *wizard.ProverRuntime) { } dstIsAccCurr.PushOne() } + // we also set the static values for all limbs in this pairs of points. These are: + // - true mark for miller loop circuit + // - false mark for the ML+finalexp circuit + // - the pair ID + // - the total number of pairs + // - false mark that current limb is for the result for j := 0; j < nbG1Limbs+nbG2Limbs+2*nbGtLimbs; j++ { dstToMillerLoop.PushOne() dstToFinalExp.PushZero() - dstPairId.PushInt(i + 1) - dstTotalPairs.PushInt(nbInputs) + dstPairId.PushInt(ii + 1) + dstTotalPairs.PushInt(nbActualTotalPairs) + dstIsResult.PushZero() } } + // we need to handle the final pair of points separately. The + // ML+finalexp circuit does not take the current accumulator as an + // input, but rather the expected pairing check result. + // + // first we set the masks for the accumulator limbs. for j := 0; j < nbGtLimbs; j++ { dstIsComputed.PushOne() dstIsPulling.PushZero() - dstPairId.PushInt(nbInputs) - dstIsAccInit.PushZero() - dstIsAccPrev.PushOne() + dstPairId.PushInt(nbActualTotalPairs) + // handle separately the case when there is only one valid input + // pair. In this case, the first valid pair also includes the + // accumulator initialization. + if nbActualTotalPairs == 1 { + dstIsAccInit.PushOne() + dstIsAccPrev.PushZero() + } else { + dstIsAccInit.PushZero() + dstIsAccPrev.PushOne() + } dstIsAccCurr.PushZero() if j == 0 { - dstIsFirstPrev.PushOne() + // handle separately the case when there is only one valid + // input. In this case we don't have the previous accumulator. + if nbActualTotalPairs == 1 { + dstIsFirstPrev.PushZero() + } else { + dstIsFirstPrev.PushOne() + } } else { dstIsFirstPrev.PushZero() } dstIsFirstCurr.PushZero() + dstIsResult.PushZero() } + // similarly for the final pair of points, we need to indicate that the + // G1/G2 points come directly from the arithmetization. for j := nbGtLimbs; j < nbGtLimbs+nbG1Limbs+nbG2Limbs; j++ { dstIsPulling.PushOne() dstIsComputed.PushZero() - dstPairId.PushInt(nbInputs) + dstPairId.PushInt(nbActualTotalPairs) dstIsAccInit.PushZero() dstIsAccPrev.PushZero() dstIsAccCurr.PushZero() dstIsFirstPrev.PushZero() dstIsFirstCurr.PushZero() + dstIsResult.PushZero() } + // finally, we need to indicate that the result of the pairing check + // comes directly from the arithmetization. this is a bit explicit loop, + // but it's easier to understand. for j := nbGtLimbs + nbG1Limbs + nbG2Limbs; j < nbGtLimbs+nbG1Limbs+nbG2Limbs+2; j++ { dstIsPulling.PushOne() dstIsComputed.PushZero() + // NB! for the result the Pair ID is 0. This is important to keep in + // mind as we set some constraints based on this. dstPairId.PushZero() dstIsAccInit.PushZero() dstIsAccPrev.PushZero() dstIsAccCurr.PushZero() dstIsFirstPrev.PushZero() dstIsFirstCurr.PushZero() + dstIsResult.PushOne() } + // finally we set the static masks for the final pair of points. for j := 0; j < nbG1Limbs+nbG2Limbs+nbGtLimbs+2; j++ { dstToFinalExp.PushOne() dstToMillerLoop.PushZero() - dstTotalPairs.PushInt(nbInputs) + dstTotalPairs.PushInt(nbActualTotalPairs) } currPos += nbInputs*(nbG1Limbs+nbG2Limbs) + 2 } + // Finally, we pad and assign the assigned data. dstIsActive.PadAndAssign(run, field.Zero()) dstLimb.PadAndAssign(run, field.Zero()) dstPairId.PadAndAssign(run, field.Zero()) @@ -239,6 +311,7 @@ func (ec *ECPair) assignPairingData(run *wizard.ProverRuntime) { dstIndex.PadAndAssign(run, field.Zero()) dstIsFirstPrev.PadAndAssign(run, field.Zero()) dstIsFirstCurr.PadAndAssign(run, field.Zero()) + dstIsResult.PadAndAssign(run, field.Zero()) } func processPairingData(pairingInG1 [][nbG1Limbs]field.Element, pairingInG2 [][nbG2Limbs]field.Element, inputResult [2]field.Element) []field.Element { diff --git a/prover/zkevm/prover/ecpair/ecpair_constraints.go b/prover/zkevm/prover/ecpair/ecpair_constraints.go index 932cca482..cae32bf68 100644 --- a/prover/zkevm/prover/ecpair/ecpair_constraints.go +++ b/prover/zkevm/prover/ecpair/ecpair_constraints.go @@ -55,8 +55,8 @@ func (ec *ECPair) csProjections(comp *wizard.CompiledIOP) { // we project data from the arithmetization correctly to the unaligned part of the circuit projection.InsertProjection( comp, ifaces.QueryIDf("%v_PROJECTION_PAIRING", nameECPair), - []ifaces.Column{ec.ECPairSource.Limb, ec.ECPairSource.AccPairings, ec.ECPairSource.TotalPairings, ec.ECPairSource.ID}, - []ifaces.Column{ec.UnalignedPairingData.Limb, ec.UnalignedPairingData.PairID, ec.UnalignedPairingData.TotalPairs, ec.UnalignedPairingData.InstanceID}, + []ifaces.Column{ec.ECPairSource.Limb, ec.ECPairSource.ID, ec.ECPairSource.IsEcPairingResult}, + []ifaces.Column{ec.UnalignedPairingData.Limb, ec.UnalignedPairingData.InstanceID, ec.UnalignedPairingData.IsResultOfInstance}, ec.ECPairSource.CsEcpairing, ec.UnalignedPairingData.IsPulling, ) @@ -159,6 +159,23 @@ func (ec *ECPair) csAccumulatorConsistency(comp *wizard.CompiledIOP) { ) } +func (ec *ECPair) csTotalPairs(comp *wizard.CompiledIOP) { + // total pairs corresponds to the number of pairs in the instance. for this + // we check that when the limb corresponds to the result, then the PairID of + // the shifted by two corresponds to the total pairs. the limb corresponds + // to the result when its PairID is 0 (for input pairs the indexing starts + // from 1). + comp.InsertGlobal( + roundNr, + ifaces.QueryIDf("%v_TOTAL_PAIRS", nameECPair), + sym.Mul( + ec.UnalignedPairingData.IsActive, + ec.UnalignedPairingData.IsResultOfInstance, + sym.Sub(ec.UnalignedPairingData.TotalPairs, column.Shift(ec.UnalignedPairingData.PairID, -2)), // we have two limbs for the result, shift by two gets to the input + ), + ) +} + func (ec *ECPair) csLastPairToFinalExp(comp *wizard.CompiledIOP) { // if the last pair then the final exp circuit should be active @@ -191,7 +208,6 @@ func (ec *ECPair) csIndexConsistency(comp *wizard.CompiledIOP) { ifaces.QueryIDf("%v_INDEX_INCREMENT", nameECPair), sym.Mul( ec.UnalignedPairingData.IsActive, - sym.Sub(1, ec.UnalignedG2MembershipData.IsPulling, ec.UnalignedG2MembershipData.IsComputed), // we dont use index in the G2 membership check sym.Sub(1, ec.UnalignedPairingData.IsFirstLineOfInstance), sym.Sub(ec.UnalignedPairingData.Index, column.Shift(ec.UnalignedPairingData.Index, -1), 1), ), @@ -276,11 +292,19 @@ func (ec *ECPair) csAccumulatorMask(comp *wizard.CompiledIOP) { ) } -func (ec *ECPair) csExclusiveUnalignedDatas(comp *wizard.CompiledIOP) { - common.MustBeMutuallyExclusiveBinaryFlags(comp, ec.IsActive, []ifaces.Column{ - ec.UnalignedG2MembershipData.ToG2MembershipCircuitMask, - ec.UnalignedPairingData.IsActive, - }) +func (ec *ECPair) csPairingDataOrMembershipActive(comp *wizard.CompiledIOP) { + // when module is active, then either pairing data or membership data is + // active. Can also be both. + comp.InsertGlobal( + roundNr, + ifaces.QueryIDf("%v_PAIRING_OR_MEMBERSHIP_ACTIVE", nameECPair), + sym.Add( + ec.IsActive, + sym.Neg(ec.UnalignedPairingData.IsActive), + sym.Neg(ec.UnalignedG2MembershipData.ToG2MembershipCircuitMask), + sym.Mul(ec.UnalignedPairingData.IsActive, ec.UnalignedG2MembershipData.ToG2MembershipCircuitMask), + ), + ) } func (ec *ECPair) csExclusivePairingCircuitMasks(comp *wizard.CompiledIOP) { diff --git a/prover/zkevm/prover/ecpair/ecpair_test.go b/prover/zkevm/prover/ecpair/ecpair_test.go index 50fa06f29..21e1f4822 100644 --- a/prover/zkevm/prover/ecpair/ecpair_test.go +++ b/prover/zkevm/prover/ecpair/ecpair_test.go @@ -1,10 +1,12 @@ package ecpair import ( + "os" "testing" "github.com/consensys/linea-monorepo/prover/protocol/compiler/dummy" "github.com/consensys/linea-monorepo/prover/protocol/dedicated/plonk" + "github.com/consensys/linea-monorepo/prover/protocol/ifaces" "github.com/consensys/linea-monorepo/prover/protocol/wizard" "github.com/consensys/linea-monorepo/prover/utils/csvtraces" ) @@ -49,17 +51,25 @@ var pairingDataTestCases = []pairingDataTestCase{ { // empty input to test edge case and input fillers InputFName: "testdata/ecpair_empty.csv", - ModuleFName: "", + ModuleFName: "testdata/ecpair_empty_module.csv", NbMillerLoops: 2, NbFinalExps: 2, }, { // trace test InputFName: "testdata/ecpair_trace_input.csv", - ModuleFName: "", + ModuleFName: "testdata/ecpair_trace_module.csv", NbMillerLoops: 2, NbFinalExps: 1, }, + { + // regression test in Linea Sepolia transaction 0x7afcf5eddbe09d85c8d0b1e3608b755b9baed1a59d8589ebcaf50e7603074139 + InputFName: "testdata/ecpair_regression_1_input.csv", + ModuleFName: "testdata/ecpair_regression_1_module.csv", + NbMillerLoops: 2, + NbFinalExps: 1, + NbSubgroupChecks: 1, + }, } func testModule(t *testing.T, tc pairingDataTestCase, withPairingCircuit, withG2MembershipCircuit bool, checkPairingModule, checkSubgroupModule bool) { @@ -149,6 +159,7 @@ func testModule(t *testing.T, tc pairingDataTestCase, withPairingCircuit, withG2 "ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV", "ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC", "ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR", + "ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT", "ECPAIR_UNALIGNED_PAIRING_DATA_LIMB", "ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT", "ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT", @@ -205,3 +216,58 @@ func TestMembership(t *testing.T) { testModule(t, tc, false, false, false, true) } } + +func writeModule(t *testing.T, run *wizard.ProverRuntime, outFile string, mod *ECPair) { + // this is utility function for being able to write the module output to a + // file. it is useful for testcase generation. NB! when generating testcase + // then manually check the correctness of the file before committing it. + w, err := os.Create(outFile) + if err != nil { + t.Fatal(err) + } + defer w.Close() + csvtraces.FmtCsv(w, run, []ifaces.Column{ + // // module activation + // mod.IsActive, + + // // source + // mod.ECPairSource.ID, + // mod.ECPairSource.Index, + // mod.ECPairSource.Limb, + // mod.ECPairSource.SuccessBit, + // mod.ECPairSource.AccPairings, + // mod.ECPairSource.TotalPairings, + // mod.ECPairSource.IsEcPairingData, + // mod.ECPairSource.IsEcPairingResult, + // mod.ECPairSource.CsEcpairing, + // mod.ECPairSource.CsG2Membership, + + // // for pairing module test + // mod.UnalignedPairingData.IsActive, + // mod.UnalignedPairingData.Index, + // mod.UnalignedPairingData.InstanceID, + // mod.UnalignedPairingData.IsFirstLineOfInstance, + // mod.UnalignedPairingData.IsAccumulatorInit, + // mod.UnalignedPairingData.IsFirstLineOfPrevAccumulator, + // mod.UnalignedPairingData.IsAccumulatorPrev, + // mod.UnalignedPairingData.IsFirstLineOfCurrAccumulator, + // mod.UnalignedPairingData.IsAccumulatorCurr, + // mod.UnalignedPairingData.IsResultOfInstance, + // mod.UnalignedPairingData.IsComputed, + // mod.UnalignedPairingData.IsPulling, + // mod.UnalignedPairingData.PairID, + // mod.UnalignedPairingData.TotalPairs, + // mod.UnalignedPairingData.Limb, + // mod.UnalignedPairingData.ToMillerLoopCircuitMask, + // mod.UnalignedPairingData.ToFinalExpCircuitMask, + + // // for subgroup module module test + // mod.UnalignedG2MembershipData.IsComputed, + // mod.UnalignedG2MembershipData.IsPulling, + // mod.UnalignedG2MembershipData.Limb, + // mod.UnalignedG2MembershipData.SuccessBit, + // mod.UnalignedG2MembershipData.ToG2MembershipCircuitMask, + }, + []csvtraces.Option{csvtraces.InHex}, + ) +} diff --git a/prover/zkevm/prover/ecpair/ecpair_with_circuit_test.go b/prover/zkevm/prover/ecpair/ecpair_with_circuit_test.go index f7df56d7f..4af8dacd6 100644 --- a/prover/zkevm/prover/ecpair/ecpair_with_circuit_test.go +++ b/prover/zkevm/prover/ecpair/ecpair_with_circuit_test.go @@ -3,7 +3,12 @@ package ecpair import ( + "os" + "path/filepath" + "strings" "testing" + + "github.com/consensys/linea-monorepo/prover/utils/parallel" ) func TestPairingDataCircuit(t *testing.T) { @@ -17,3 +22,29 @@ func TestMembershipCircuit(t *testing.T) { testModule(t, tc, false, true, false, true) } } + +func TestGeneratedData(t *testing.T) { + // in order to run the test, you need to have generated the different test + // cases. Run the test [TestGenerateECPairTestCases] at + // prover/zkevm/prover/ecpair/testdata/testdata_generator_test.go to + // generate all inputs. + t.Skip("long test, run manually when needed") + var generatedData []pairingDataTestCase + filepath.Walk("testdata/generated", func(path string, info os.FileInfo, err error) error { + if strings.HasSuffix(path, "input.csv") { + tc := pairingDataTestCase{ + InputFName: path, + NbMillerLoops: 5, + NbFinalExps: 1, + NbSubgroupChecks: 5, + } + generatedData = append(generatedData, tc) + } + return nil + }) + parallel.Execute(len(generatedData), func(start, end int) { + for i := start; i < end; i++ { + testModule(t, generatedData[i], true, true, true, true) + } + }) +} diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_double_pair_module.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_double_pair_module.csv index bcef32bda..033e3a876 100644 --- a/prover/zkevm/prover/ecpair/testdata/ecpair_double_pair_module.csv +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_double_pair_module.csv @@ -1,129 +1,129 @@ -ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT -0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 -0x1,0x1,0x2,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x4,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x5,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x7,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x8,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x9,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xa,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xb,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xc,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xd,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xe,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xf,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x10,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x11,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x12,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x13,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x14,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x15,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x16,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x17,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x13364879816394e38a2d72bde23bda93,0x1,0x0 -0x1,0x1,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xcd39885c6bfdedbc45e6bafcfc8fa685,0x1,0x0 -0x1,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe0e4c9d03746d287b341d52461946a1,0x1,0x0 -0x1,0x1,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xc865002c35ba9bd6b789fc26a526d121,0x1,0x0 -0x1,0x1,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0e82be8514331e947408a3a27a54d580,0x1,0x0 -0x1,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x1,0x0 -0x1,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0f89c9a7bb2eb9418d2d89310306196d,0x1,0x0 -0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x1,0x0 -0x1,0x1,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x1,0x0 -0x1,0x1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x1,0x0 -0x1,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x11497987c563ade267b3bdfcc9c04022,0x1,0x0 -0x1,0x1,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x1,0x0 -0x1,0x1,0x24,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x1,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x1,0x0 -0x1,0x1,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x4c95627608bdbb0235762c7048400f93,0x1,0x0 -0x1,0x1,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x1,0x0 -0x1,0x1,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x1,0x0 -0x1,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x1,0x0 -0x1,0x1,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x1,0x0 -0x1,0x1,0x2a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2b45ce688738a571621b63dba9880856,0x1,0x0 -0x1,0x1,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x1,0x0 -0x1,0x1,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x653b8af047158278411df902874a82a,0x1,0x0 -0x1,0x1,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x1,0x0 -0x1,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1373a842ceca78f2ae076804f168559c,0x1,0x0 -0x1,0x1,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x1,0x0 -0x1,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x1,0x0 -0x1,0x1,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2f12833bfd8a1711d7947461776699df,0x1,0x0 -0x1,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x1,0x0 -0x1,0x1,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x1,0x0 -0x1,0x1,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x1,0x0 -0x1,0x1,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x1,0x0 -0x1,0x1,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x22af99c52785193aa8920826c0d96380,0x1,0x0 -0x1,0x1,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x1,0x0 -0x1,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x1,0x0 -0x1,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x217f227c48e2682613693d3afb8231e,0x1,0x0 -0x1,0x1,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x5641ef4d251e87484afef7cae876258,0x1,0x0 -0x1,0x1,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x1,0x0 -0x1,0x1,0x3c,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x0,0x1 -0x1,0x1,0x3d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x4c95627608bdbb0235762c7048400f93,0x0,0x1 -0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x0,0x1 -0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x0,0x1 -0x1,0x1,0x40,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x0,0x1 -0x1,0x1,0x41,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x0,0x1 -0x1,0x1,0x42,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2b45ce688738a571621b63dba9880856,0x0,0x1 -0x1,0x1,0x43,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x0,0x1 -0x1,0x1,0x44,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x653b8af047158278411df902874a82a,0x0,0x1 -0x1,0x1,0x45,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x0,0x1 -0x1,0x1,0x46,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1373a842ceca78f2ae076804f168559c,0x0,0x1 -0x1,0x1,0x47,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x0,0x1 -0x1,0x1,0x48,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x0,0x1 -0x1,0x1,0x49,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2f12833bfd8a1711d7947461776699df,0x0,0x1 -0x1,0x1,0x4a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x0,0x1 -0x1,0x1,0x4b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x0,0x1 -0x1,0x1,0x4c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x0,0x1 -0x1,0x1,0x4d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x0,0x1 -0x1,0x1,0x4e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x22af99c52785193aa8920826c0d96380,0x0,0x1 -0x1,0x1,0x4f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x0,0x1 -0x1,0x1,0x50,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x0,0x1 -0x1,0x1,0x51,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x217f227c48e2682613693d3afb8231e,0x0,0x1 -0x1,0x1,0x52,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x5641ef4d251e87484afef7cae876258,0x0,0x1 -0x1,0x1,0x53,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x0,0x1 -0x1,0x1,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xb9624a62e115247146d4643e8d4daf0,0x0,0x1 -0x1,0x1,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x0,0x1 -0x1,0x1,0x56,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1cb9908c06bf3099f1538277102b31e3,0x0,0x1 -0x1,0x1,0x57,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1d022dc64770bc130df14daef72830e4,0x0,0x1 -0x1,0x1,0x58,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x2977858b214a3cb43fa4024976dd1675,0x0,0x1 -0x1,0x1,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9b1bf5367e6318da3545e697b9931671,0x0,0x1 -0x1,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x06fcfd4b9ca03fb145ff273e480efda3,0x0,0x1 -0x1,0x1,0x5b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc8a7aef64882efcbd8920b4458e1ef3d,0x0,0x1 -0x1,0x1,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x281508326108309778f9cdf9c39a4c4d,0x0,0x1 -0x1,0x1,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc90a405c0cfbfd5d20fec4e47acce66f,0x0,0x1 -0x1,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x10d24b6f0b87c1e3f78b80b967bac765,0x0,0x1 -0x1,0x1,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x763f38c53a4377e9a97e2761758a92f1,0x0,0x1 -0x1,0x1,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x0,0x0,0x1 -0x1,0x1,0x61,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x1,0x0,0x1 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT +0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 +0x1,0x1,0x2,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x4,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x5,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x7,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x8,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x9,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xa,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xb,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xc,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xd,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xe,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xf,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x10,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x11,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x12,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x13,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x14,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x15,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x16,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x17,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x13364879816394e38a2d72bde23bda93,0x1,0x0 +0x1,0x1,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xcd39885c6bfdedbc45e6bafcfc8fa685,0x1,0x0 +0x1,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe0e4c9d03746d287b341d52461946a1,0x1,0x0 +0x1,0x1,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xc865002c35ba9bd6b789fc26a526d121,0x1,0x0 +0x1,0x1,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe82be8514331e947408a3a27a54d580,0x1,0x0 +0x1,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x1,0x0 +0x1,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf89c9a7bb2eb9418d2d89310306196d,0x1,0x0 +0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x1,0x0 +0x1,0x1,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x1,0x0 +0x1,0x1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x1,0x0 +0x1,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x11497987c563ade267b3bdfcc9c04022,0x1,0x0 +0x1,0x1,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x1,0x0 +0x1,0x1,0x24,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x1,0x0 +0x1,0x1,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x4c95627608bdbb0235762c7048400f93,0x1,0x0 +0x1,0x1,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x1,0x0 +0x1,0x1,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x1,0x0 +0x1,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x1,0x0 +0x1,0x1,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x1,0x0 +0x1,0x1,0x2a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2b45ce688738a571621b63dba9880856,0x1,0x0 +0x1,0x1,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x1,0x0 +0x1,0x1,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x653b8af047158278411df902874a82a,0x1,0x0 +0x1,0x1,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x1,0x0 +0x1,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1373a842ceca78f2ae076804f168559c,0x1,0x0 +0x1,0x1,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x1,0x0 +0x1,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x1,0x0 +0x1,0x1,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2f12833bfd8a1711d7947461776699df,0x1,0x0 +0x1,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x1,0x0 +0x1,0x1,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x1,0x0 +0x1,0x1,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x1,0x0 +0x1,0x1,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x1,0x0 +0x1,0x1,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x22af99c52785193aa8920826c0d96380,0x1,0x0 +0x1,0x1,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x1,0x0 +0x1,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x1,0x0 +0x1,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x217f227c48e2682613693d3afb8231e,0x1,0x0 +0x1,0x1,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x5641ef4d251e87484afef7cae876258,0x1,0x0 +0x1,0x1,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x1,0x0 +0x1,0x1,0x3c,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x0,0x1 +0x1,0x1,0x3d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x4c95627608bdbb0235762c7048400f93,0x0,0x1 +0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x0,0x1 +0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x0,0x1 +0x1,0x1,0x40,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x0,0x1 +0x1,0x1,0x41,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x0,0x1 +0x1,0x1,0x42,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2b45ce688738a571621b63dba9880856,0x0,0x1 +0x1,0x1,0x43,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x0,0x1 +0x1,0x1,0x44,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x653b8af047158278411df902874a82a,0x0,0x1 +0x1,0x1,0x45,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x0,0x1 +0x1,0x1,0x46,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1373a842ceca78f2ae076804f168559c,0x0,0x1 +0x1,0x1,0x47,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x0,0x1 +0x1,0x1,0x48,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x0,0x1 +0x1,0x1,0x49,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2f12833bfd8a1711d7947461776699df,0x0,0x1 +0x1,0x1,0x4a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x0,0x1 +0x1,0x1,0x4b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x0,0x1 +0x1,0x1,0x4c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x0,0x1 +0x1,0x1,0x4d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x0,0x1 +0x1,0x1,0x4e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x22af99c52785193aa8920826c0d96380,0x0,0x1 +0x1,0x1,0x4f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x0,0x1 +0x1,0x1,0x50,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x0,0x1 +0x1,0x1,0x51,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x217f227c48e2682613693d3afb8231e,0x0,0x1 +0x1,0x1,0x52,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x5641ef4d251e87484afef7cae876258,0x0,0x1 +0x1,0x1,0x53,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x0,0x1 +0x1,0x1,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xb9624a62e115247146d4643e8d4daf0,0x0,0x1 +0x1,0x1,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x0,0x1 +0x1,0x1,0x56,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1cb9908c06bf3099f1538277102b31e3,0x0,0x1 +0x1,0x1,0x57,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1d022dc64770bc130df14daef72830e4,0x0,0x1 +0x1,0x1,0x58,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x2977858b214a3cb43fa4024976dd1675,0x0,0x1 +0x1,0x1,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9b1bf5367e6318da3545e697b9931671,0x0,0x1 +0x1,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x6fcfd4b9ca03fb145ff273e480efda3,0x0,0x1 +0x1,0x1,0x5b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc8a7aef64882efcbd8920b4458e1ef3d,0x0,0x1 +0x1,0x1,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x281508326108309778f9cdf9c39a4c4d,0x0,0x1 +0x1,0x1,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc90a405c0cfbfd5d20fec4e47acce66f,0x0,0x1 +0x1,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x10d24b6f0b87c1e3f78b80b967bac765,0x0,0x1 +0x1,0x1,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x763f38c53a4377e9a97e2761758a92f1,0x0,0x1 +0x1,0x1,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x0,0x0,0x1 +0x1,0x1,0x61,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x1,0x0,0x1 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_empty_module.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_empty_module.csv new file mode 100644 index 000000000..0b22726c4 --- /dev/null +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_empty_module.csv @@ -0,0 +1 @@ +ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_failing_double_pair_module.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_failing_double_pair_module.csv index 0d7099470..602be4f74 100644 --- a/prover/zkevm/prover/ecpair/testdata/ecpair_failing_double_pair_module.csv +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_failing_double_pair_module.csv @@ -1,129 +1,129 @@ -ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT -0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 -0x1,0x1,0x2,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x4,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x5,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x7,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x8,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x9,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xa,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xb,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xc,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xd,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xe,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xf,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x10,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x11,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x12,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x13,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x14,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x15,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x16,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x17,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x219db76fd15c77e92376ec7ccdf3795a,0x1,0x0 -0x1,0x1,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x96b20b521116027d63df9d7a4d76bcef,0x1,0x0 -0x1,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0692f74fd48f12f945546eb1daaa688b,0x1,0x0 -0x1,0x1,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe31ef7b9f6338c8c452d69a386f0a098,0x1,0x0 -0x1,0x1,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0f679eca6f21e702c5613627661a31b7,0x1,0x0 -0x1,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa5b99a766175a8ceebadf12135d8c0a0,0x1,0x0 -0x1,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0a23a4431ea9ca09eb5787a8a0a7bb52,0x1,0x0 -0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x30a7cf5dc4fbf71edbda6ae0faca4000,0x1,0x0 -0x1,0x1,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0715261e3e5eb7991d5dbe83f4cd963c,0x1,0x0 -0x1,0x1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xd8eb1975c583801573dc432c2c677165,0x1,0x0 -0x1,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x142ed84e025468f2aa7a6fe50839c23a,0x1,0x0 -0x1,0x1,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa3e99559088d53289092e02ffd59e84d,0x1,0x0 -0x1,0x1,0x24,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x1,0x2,0x2519fb9fc917e5401ef8ae1dc4e0fcf6,0x1,0x0 -0x1,0x1,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xe73ec610c73dedfaecdc78b4cfed5fae,0x1,0x0 -0x1,0x1,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x532dd87a224b3c74c0972336084d8cf,0x1,0x0 -0x1,0x1,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xd63ea1761e1b3eb06330f9a70a334bb3,0x1,0x0 -0x1,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1be66119d8e9cb15799f97c5765a4f8f,0x1,0x0 -0x1,0x1,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x7945a28f14dda8ff8d91e8e7472250dc,0x1,0x0 -0x1,0x1,0x2a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1445016cdd9b1f1521bc8554163ed0d8,0x1,0x0 -0x1,0x1,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1d69bb89e43261ea0cd55460902d1502,0x1,0x0 -0x1,0x1,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x27c2852669c9bb985bb057af1b521490,0x1,0x0 -0x1,0x1,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x9e44217a7c12ccc32c1a38dfddb3e4f9,0x1,0x0 -0x1,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x213cd09f21a19a3ba7bf07cfb2af15db,0x1,0x0 -0x1,0x1,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x484f312ecb72e9937bb9d118dc40bb98,0x1,0x0 -0x1,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x278d3989a6a313a5ae46832637fb035d,0x1,0x0 -0x1,0x1,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x27160f6e52a0177a893c3b8cfc3a16dd,0x1,0x0 -0x1,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xf2867d79c66c1b03b24b76190f1cddb,0x1,0x0 -0x1,0x1,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x507f66b1e126b7d5f6b8fb575b98f4e3,0x1,0x0 -0x1,0x1,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x190f41a349878e7007fa72a919920ebe,0x1,0x0 -0x1,0x1,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x4afaca4694c9b0a0848e46598d1f80fd,0x1,0x0 -0x1,0x1,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x274ebf234ca143dd8a07c1ffff2ed891,0x1,0x0 -0x1,0x1,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xb7638a696e66fe108cb6a122e36c2c9d,0x1,0x0 -0x1,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x26f9711c5e431d68483d1c20ad498818,0x1,0x0 -0x1,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2f3ae73e50cb72160c69a85e3b6cf774,0x1,0x0 -0x1,0x1,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x967d0cd5a60dd7aedeb12ef807e2ce8,0x1,0x0 -0x1,0x1,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x43aad3aff198259e8706389ab5add7c1,0x1,0x0 -0x1,0x1,0x3c,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2519fb9fc917e5401ef8ae1dc4e0fcf6,0x0,0x1 -0x1,0x1,0x3d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xe73ec610c73dedfaecdc78b4cfed5fae,0x0,0x1 -0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x532dd87a224b3c74c0972336084d8cf,0x0,0x1 -0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xd63ea1761e1b3eb06330f9a70a334bb3,0x0,0x1 -0x1,0x1,0x40,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1be66119d8e9cb15799f97c5765a4f8f,0x0,0x1 -0x1,0x1,0x41,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x7945a28f14dda8ff8d91e8e7472250dc,0x0,0x1 -0x1,0x1,0x42,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1445016cdd9b1f1521bc8554163ed0d8,0x0,0x1 -0x1,0x1,0x43,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1d69bb89e43261ea0cd55460902d1502,0x0,0x1 -0x1,0x1,0x44,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x27c2852669c9bb985bb057af1b521490,0x0,0x1 -0x1,0x1,0x45,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x9e44217a7c12ccc32c1a38dfddb3e4f9,0x0,0x1 -0x1,0x1,0x46,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x213cd09f21a19a3ba7bf07cfb2af15db,0x0,0x1 -0x1,0x1,0x47,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x484f312ecb72e9937bb9d118dc40bb98,0x0,0x1 -0x1,0x1,0x48,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x278d3989a6a313a5ae46832637fb035d,0x0,0x1 -0x1,0x1,0x49,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x27160f6e52a0177a893c3b8cfc3a16dd,0x0,0x1 -0x1,0x1,0x4a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xf2867d79c66c1b03b24b76190f1cddb,0x0,0x1 -0x1,0x1,0x4b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x507f66b1e126b7d5f6b8fb575b98f4e3,0x0,0x1 -0x1,0x1,0x4c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x190f41a349878e7007fa72a919920ebe,0x0,0x1 -0x1,0x1,0x4d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x4afaca4694c9b0a0848e46598d1f80fd,0x0,0x1 -0x1,0x1,0x4e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x274ebf234ca143dd8a07c1ffff2ed891,0x0,0x1 -0x1,0x1,0x4f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xb7638a696e66fe108cb6a122e36c2c9d,0x0,0x1 -0x1,0x1,0x50,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x26f9711c5e431d68483d1c20ad498818,0x0,0x1 -0x1,0x1,0x51,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2f3ae73e50cb72160c69a85e3b6cf774,0x0,0x1 -0x1,0x1,0x52,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x967d0cd5a60dd7aedeb12ef807e2ce8,0x0,0x1 -0x1,0x1,0x53,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x43aad3aff198259e8706389ab5add7c1,0x0,0x1 -0x1,0x1,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1ae800da67a6c22f94d05578d1361f25,0x0,0x1 -0x1,0x1,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x422a9f478669101d5b117f57fcb741e1,0x0,0x1 -0x1,0x1,0x56,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x15ded9e40e5489c82b473115f1d4b409,0x0,0x1 -0x1,0x1,0x57,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9e93aa996ad2346e8b46a2aa0db7832c,0x0,0x1 -0x1,0x1,0x58,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x2e1b4d36165dbb3f03664c4e77181c95,0x0,0x1 -0x1,0x1,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x285a1f1bb08fac1599d9c06095085cf0,0x0,0x1 -0x1,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x286dcf3fe302f14b9df2d19119a97c81,0x0,0x1 -0x1,0x1,0x5b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x70a68443dafe5001dcc450abf66cb1b9,0x0,0x1 -0x1,0x1,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x23e5cf5e441d3d12e4b63d4d16eea2dd,0x0,0x1 -0x1,0x1,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xdc6005a79a59c812fbd4050870691a91,0x0,0x1 -0x1,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x11cfc60ff4ceb85b8af413347b760f13,0x0,0x1 -0x1,0x1,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x4325aead086b2761e0a16039ab1f12aa,0x0,0x1 -0x1,0x1,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x0,0x0,0x1 -0x1,0x1,0x61,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x0,0x0,0x1 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT +0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 +0x1,0x1,0x2,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x4,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x5,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x7,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x8,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x9,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xa,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xb,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xc,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xd,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xe,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xf,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x10,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x11,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x12,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x13,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x14,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x15,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x16,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x17,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x219db76fd15c77e92376ec7ccdf3795a,0x1,0x0 +0x1,0x1,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x96b20b521116027d63df9d7a4d76bcef,0x1,0x0 +0x1,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x692f74fd48f12f945546eb1daaa688b,0x1,0x0 +0x1,0x1,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe31ef7b9f6338c8c452d69a386f0a098,0x1,0x0 +0x1,0x1,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf679eca6f21e702c5613627661a31b7,0x1,0x0 +0x1,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa5b99a766175a8ceebadf12135d8c0a0,0x1,0x0 +0x1,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa23a4431ea9ca09eb5787a8a0a7bb52,0x1,0x0 +0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x30a7cf5dc4fbf71edbda6ae0faca4000,0x1,0x0 +0x1,0x1,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x715261e3e5eb7991d5dbe83f4cd963c,0x1,0x0 +0x1,0x1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xd8eb1975c583801573dc432c2c677165,0x1,0x0 +0x1,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x142ed84e025468f2aa7a6fe50839c23a,0x1,0x0 +0x1,0x1,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa3e99559088d53289092e02ffd59e84d,0x1,0x0 +0x1,0x1,0x24,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1,0x2,0x2519fb9fc917e5401ef8ae1dc4e0fcf6,0x1,0x0 +0x1,0x1,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xe73ec610c73dedfaecdc78b4cfed5fae,0x1,0x0 +0x1,0x1,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x532dd87a224b3c74c0972336084d8cf,0x1,0x0 +0x1,0x1,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xd63ea1761e1b3eb06330f9a70a334bb3,0x1,0x0 +0x1,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1be66119d8e9cb15799f97c5765a4f8f,0x1,0x0 +0x1,0x1,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x7945a28f14dda8ff8d91e8e7472250dc,0x1,0x0 +0x1,0x1,0x2a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1445016cdd9b1f1521bc8554163ed0d8,0x1,0x0 +0x1,0x1,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1d69bb89e43261ea0cd55460902d1502,0x1,0x0 +0x1,0x1,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x27c2852669c9bb985bb057af1b521490,0x1,0x0 +0x1,0x1,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x9e44217a7c12ccc32c1a38dfddb3e4f9,0x1,0x0 +0x1,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x213cd09f21a19a3ba7bf07cfb2af15db,0x1,0x0 +0x1,0x1,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x484f312ecb72e9937bb9d118dc40bb98,0x1,0x0 +0x1,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x278d3989a6a313a5ae46832637fb035d,0x1,0x0 +0x1,0x1,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x27160f6e52a0177a893c3b8cfc3a16dd,0x1,0x0 +0x1,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xf2867d79c66c1b03b24b76190f1cddb,0x1,0x0 +0x1,0x1,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x507f66b1e126b7d5f6b8fb575b98f4e3,0x1,0x0 +0x1,0x1,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x190f41a349878e7007fa72a919920ebe,0x1,0x0 +0x1,0x1,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x4afaca4694c9b0a0848e46598d1f80fd,0x1,0x0 +0x1,0x1,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x274ebf234ca143dd8a07c1ffff2ed891,0x1,0x0 +0x1,0x1,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xb7638a696e66fe108cb6a122e36c2c9d,0x1,0x0 +0x1,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x26f9711c5e431d68483d1c20ad498818,0x1,0x0 +0x1,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2f3ae73e50cb72160c69a85e3b6cf774,0x1,0x0 +0x1,0x1,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x967d0cd5a60dd7aedeb12ef807e2ce8,0x1,0x0 +0x1,0x1,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x43aad3aff198259e8706389ab5add7c1,0x1,0x0 +0x1,0x1,0x3c,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2519fb9fc917e5401ef8ae1dc4e0fcf6,0x0,0x1 +0x1,0x1,0x3d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xe73ec610c73dedfaecdc78b4cfed5fae,0x0,0x1 +0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x532dd87a224b3c74c0972336084d8cf,0x0,0x1 +0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xd63ea1761e1b3eb06330f9a70a334bb3,0x0,0x1 +0x1,0x1,0x40,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1be66119d8e9cb15799f97c5765a4f8f,0x0,0x1 +0x1,0x1,0x41,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x7945a28f14dda8ff8d91e8e7472250dc,0x0,0x1 +0x1,0x1,0x42,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1445016cdd9b1f1521bc8554163ed0d8,0x0,0x1 +0x1,0x1,0x43,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1d69bb89e43261ea0cd55460902d1502,0x0,0x1 +0x1,0x1,0x44,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x27c2852669c9bb985bb057af1b521490,0x0,0x1 +0x1,0x1,0x45,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x9e44217a7c12ccc32c1a38dfddb3e4f9,0x0,0x1 +0x1,0x1,0x46,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x213cd09f21a19a3ba7bf07cfb2af15db,0x0,0x1 +0x1,0x1,0x47,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x484f312ecb72e9937bb9d118dc40bb98,0x0,0x1 +0x1,0x1,0x48,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x278d3989a6a313a5ae46832637fb035d,0x0,0x1 +0x1,0x1,0x49,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x27160f6e52a0177a893c3b8cfc3a16dd,0x0,0x1 +0x1,0x1,0x4a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xf2867d79c66c1b03b24b76190f1cddb,0x0,0x1 +0x1,0x1,0x4b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x507f66b1e126b7d5f6b8fb575b98f4e3,0x0,0x1 +0x1,0x1,0x4c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x190f41a349878e7007fa72a919920ebe,0x0,0x1 +0x1,0x1,0x4d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x4afaca4694c9b0a0848e46598d1f80fd,0x0,0x1 +0x1,0x1,0x4e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x274ebf234ca143dd8a07c1ffff2ed891,0x0,0x1 +0x1,0x1,0x4f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xb7638a696e66fe108cb6a122e36c2c9d,0x0,0x1 +0x1,0x1,0x50,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x26f9711c5e431d68483d1c20ad498818,0x0,0x1 +0x1,0x1,0x51,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2f3ae73e50cb72160c69a85e3b6cf774,0x0,0x1 +0x1,0x1,0x52,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x967d0cd5a60dd7aedeb12ef807e2ce8,0x0,0x1 +0x1,0x1,0x53,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x43aad3aff198259e8706389ab5add7c1,0x0,0x1 +0x1,0x1,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1ae800da67a6c22f94d05578d1361f25,0x0,0x1 +0x1,0x1,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x422a9f478669101d5b117f57fcb741e1,0x0,0x1 +0x1,0x1,0x56,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x15ded9e40e5489c82b473115f1d4b409,0x0,0x1 +0x1,0x1,0x57,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9e93aa996ad2346e8b46a2aa0db7832c,0x0,0x1 +0x1,0x1,0x58,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x2e1b4d36165dbb3f03664c4e77181c95,0x0,0x1 +0x1,0x1,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x285a1f1bb08fac1599d9c06095085cf0,0x0,0x1 +0x1,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x286dcf3fe302f14b9df2d19119a97c81,0x0,0x1 +0x1,0x1,0x5b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x70a68443dafe5001dcc450abf66cb1b9,0x0,0x1 +0x1,0x1,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x23e5cf5e441d3d12e4b63d4d16eea2dd,0x0,0x1 +0x1,0x1,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xdc6005a79a59c812fbd4050870691a91,0x0,0x1 +0x1,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x11cfc60ff4ceb85b8af413347b760f13,0x0,0x1 +0x1,0x1,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x4325aead086b2761e0a16039ab1f12aa,0x0,0x1 +0x1,0x1,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x0,0x0,0x1 +0x1,0x1,0x61,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x0,0x0,0x1 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_input.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_input.csv new file mode 100644 index 000000000..278d9801b --- /dev/null +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_input.csv @@ -0,0 +1,51 @@ +ECDATA_CS_PAIRING,ECDATA_ID,ECDATA_LIMB,ECDATA_SUCCESS_BIT,ECDATA_INDEX,ECDATA_IS_DATA,ECDATA_IS_RES,ECDATA_ACC_PAIRINGS,ECDATA_TOTAL_PAIRINGS,ECDATA_CS_G2_MEMBERSHIP +0,29563,0x0,1,0,1,0,1,4,0 +0,29563,0x0,1,1,1,0,1,4,0 +0,29563,0x0,1,2,1,0,1,4,0 +0,29563,0x0,1,3,1,0,1,4,0 +0,29563,0x0,1,4,1,0,1,4,0 +0,29563,0x0,1,5,1,0,1,4,0 +0,29563,0x0,1,6,1,0,1,4,0 +0,29563,0x0,1,7,1,0,1,4,0 +0,29563,0x0,1,8,1,0,1,4,0 +0,29563,0x0,1,9,1,0,1,4,0 +0,29563,0x0,1,10,1,0,1,4,0 +0,29563,0x0,1,11,1,0,1,4,0 +1,29563,0x27c69626be302e46df0af1982d621c7b,1,12,1,0,2,4,0 +1,29563,0x358571d44f0c65c9207af46b2e4b9594,1,13,1,0,2,4,0 +1,29563,0x120b258a7d2bb21e213159d01dd4364f,1,14,1,0,2,4,0 +1,29563,0xa11f02c47337b94e73ce1ad65ee10ada,1,15,1,0,2,4,0 +1,29563,0xb7c8b8c2f08ad05c14efdb53212ef50,1,16,1,0,2,4,0 +1,29563,0x1ac66ce991a90c10c22608a6ef0c6daf,1,17,1,0,2,4,0 +1,29563,0xda86f1aa7f003fc49ba5257f6a1a31b,1,18,1,0,2,4,0 +1,29563,0x762fb2a71e26b2bf972ad9c5ce50aabd,1,19,1,0,2,4,0 +1,29563,0x20b3c0f5090994b976afe7fa30002668,1,20,1,0,2,4,0 +1,29563,0x9547288c6611bf5bb913d706309817fc,1,21,1,0,2,4,0 +1,29563,0x1b55dc31de4c20571c178adea2e97fc6,1,22,1,0,2,4,0 +1,29563,0xb5745f4727165ab056c3150134fa6856,1,23,1,0,2,4,0 +1,29563,0x1996a3bf3f09f5c3d609d0341d07a22a,1,24,1,0,3,4,0 +1,29563,0x30cc16bfe7e74afdd0770ff169502c92,1,25,1,0,3,4,0 +1,29563,0x2c8c2d7e802418dea505c1856cb9f95b,1,26,1,0,3,4,0 +1,29563,0x1ca0a26bec7e4f73d03e9958dff2081a,1,27,1,0,3,4,0 +1,29563,0x198e9393920d483a7260bfb731fb5d25,1,28,1,0,3,4,0 +1,29563,0xf1aa493335a9e71297e485b7aef312c2,1,29,1,0,3,4,0 +1,29563,0x1800deef121f1e76426a00665e5c4479,1,30,1,0,3,4,0 +1,29563,0x674322d4f75edadd46debd5cd992f6ed,1,31,1,0,3,4,0 +1,29563,0x90689d0585ff075ec9e99ad690c3395,1,32,1,0,3,4,0 +1,29563,0xbc4b313370b38ef355acdadcd122975b,1,33,1,0,3,4,0 +1,29563,0x12c85ea5db8c6deb4aab71808dcb408f,1,34,1,0,3,4,0 +1,29563,0xe3d1e7690c43d37b4ce6cc0166fa7daa,1,35,1,0,3,4,0 +0,29563,0x0,1,36,1,0,4,4,0 +0,29563,0x0,1,37,1,0,4,4,0 +0,29563,0x0,1,38,1,0,4,4,0 +0,29563,0x0,1,39,1,0,4,4,0 +0,29563,0xed5b8a199985a625f5a0b6a44275b4c,1,40,1,0,4,4,1 +0,29563,0x48874ea094387e322a9a65548e55baaf,1,41,1,0,4,4,1 +0,29563,0x14c46c51fbb5b9e3d065addbcdd76571,1,42,1,0,4,4,1 +0,29563,0x12f73bbcdfecec743c83cd36cd6a11a0,1,43,1,0,4,4,1 +0,29563,0xa898f0e4144460a4a5a7018ceea8ab5,1,44,1,0,4,4,1 +0,29563,0x6732baf61e32b9873d6cef5cb8457cbe,1,45,1,0,4,4,1 +0,29563,0x3f6ad521b15ce41febd3ec0579fa48f,1,46,1,0,4,4,1 +0,29563,0xd563b64f31711e6e2b133b1fc2dd4588,1,47,1,0,4,4,1 +1,29563,0,1,0,0,1,0,4,0 +1,29563,0,1,1,0,1,0,4,0 \ No newline at end of file diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_module.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_module.csv new file mode 100644 index 000000000..1e68c3596 --- /dev/null +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_regression_1_module.csv @@ -0,0 +1,129 @@ +ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT +0x1,0x1,0x0,0x737b,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x1,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 +0x1,0x1,0x2,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x3,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x4,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x5,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x6,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x7,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x8,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x9,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xa,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xb,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xc,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xd,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xe,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xf,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x10,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x11,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x12,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x13,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x14,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x15,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x16,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x17,0x737b,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x18,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x27c69626be302e46df0af1982d621c7b,0x1,0x0 +0x1,0x1,0x19,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x358571d44f0c65c9207af46b2e4b9594,0x1,0x0 +0x1,0x1,0x1a,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x120b258a7d2bb21e213159d01dd4364f,0x1,0x0 +0x1,0x1,0x1b,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa11f02c47337b94e73ce1ad65ee10ada,0x1,0x0 +0x1,0x1,0x1c,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xb7c8b8c2f08ad05c14efdb53212ef50,0x1,0x0 +0x1,0x1,0x1d,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x1ac66ce991a90c10c22608a6ef0c6daf,0x1,0x0 +0x1,0x1,0x1e,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xda86f1aa7f003fc49ba5257f6a1a31b,0x1,0x0 +0x1,0x1,0x1f,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x762fb2a71e26b2bf972ad9c5ce50aabd,0x1,0x0 +0x1,0x1,0x20,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x20b3c0f5090994b976afe7fa30002668,0x1,0x0 +0x1,0x1,0x21,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x9547288c6611bf5bb913d706309817fc,0x1,0x0 +0x1,0x1,0x22,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x1b55dc31de4c20571c178adea2e97fc6,0x1,0x0 +0x1,0x1,0x23,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xb5745f4727165ab056c3150134fa6856,0x1,0x0 +0x1,0x1,0x24,0x737b,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1,0x2,0x1137fc12353dc8b52b4a9fddbbaa3a5b,0x1,0x0 +0x1,0x1,0x25,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x17cbb12b76d31ccc72553270b505ac54,0x1,0x0 +0x1,0x1,0x26,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x759e8fb6f8a80d8fce8efdbd26d82e4,0x1,0x0 +0x1,0x1,0x27,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x11a5b0cf036373ff04fa1590f8535f43,0x1,0x0 +0x1,0x1,0x28,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x28cb8ef1fb08ff271b49d1816a451dbd,0x1,0x0 +0x1,0x1,0x29,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x24cb561c666914c1966961e99226a0e7,0x1,0x0 +0x1,0x1,0x2a,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x269a2a32ca8a7ead6dc1acb9b671d45b,0x1,0x0 +0x1,0x1,0x2b,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xd93846bfa6f32f7eb9458a7a98963640,0x1,0x0 +0x1,0x1,0x2c,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2eba69ac1e7fa1147b1dbdfde9190ebf,0x1,0x0 +0x1,0x1,0x2d,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x92b120d2f924214364944984c66619c9,0x1,0x0 +0x1,0x1,0x2e,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xb3539f69dc72810362b4aa2260e18cf,0x1,0x0 +0x1,0x1,0x2f,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x6e6230b3b5c234758d6944d67b361bfb,0x1,0x0 +0x1,0x1,0x30,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2ef88e7bca3f69d2612b56ce9699615f,0x1,0x0 +0x1,0x1,0x31,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x12f87428792a957fd1737013855ac876,0x1,0x0 +0x1,0x1,0x32,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x24f79206d5cb177e64b4d9053151ce77,0x1,0x0 +0x1,0x1,0x33,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xa45dabb1095f36a6edc58f5114644398,0x1,0x0 +0x1,0x1,0x34,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1db7f080e67a26c52952d71c7331ffbe,0x1,0x0 +0x1,0x1,0x35,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xdc137df9f4dd59feeb25c4f70d2ac3f5,0x1,0x0 +0x1,0x1,0x36,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1ad6a825f36bc860b8696c73736d33f8,0x1,0x0 +0x1,0x1,0x37,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xd82bd185f505f0ff786cf2e68ba47da6,0x1,0x0 +0x1,0x1,0x38,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1606a45c154325213c755b01be9903fa,0x1,0x0 +0x1,0x1,0x39,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x419de110d5c0cce0a57990de0a7d1413,0x1,0x0 +0x1,0x1,0x3a,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x8646892bb422186785938a4e3b5d520,0x1,0x0 +0x1,0x1,0x3b,0x737b,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xb7a6a2366c9bac68585391b8bd024367,0x1,0x0 +0x1,0x1,0x3c,0x737b,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1137fc12353dc8b52b4a9fddbbaa3a5b,0x0,0x1 +0x1,0x1,0x3d,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x17cbb12b76d31ccc72553270b505ac54,0x0,0x1 +0x1,0x1,0x3e,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x759e8fb6f8a80d8fce8efdbd26d82e4,0x0,0x1 +0x1,0x1,0x3f,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x11a5b0cf036373ff04fa1590f8535f43,0x0,0x1 +0x1,0x1,0x40,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x28cb8ef1fb08ff271b49d1816a451dbd,0x0,0x1 +0x1,0x1,0x41,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x24cb561c666914c1966961e99226a0e7,0x0,0x1 +0x1,0x1,0x42,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x269a2a32ca8a7ead6dc1acb9b671d45b,0x0,0x1 +0x1,0x1,0x43,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xd93846bfa6f32f7eb9458a7a98963640,0x0,0x1 +0x1,0x1,0x44,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2eba69ac1e7fa1147b1dbdfde9190ebf,0x0,0x1 +0x1,0x1,0x45,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x92b120d2f924214364944984c66619c9,0x0,0x1 +0x1,0x1,0x46,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xb3539f69dc72810362b4aa2260e18cf,0x0,0x1 +0x1,0x1,0x47,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x6e6230b3b5c234758d6944d67b361bfb,0x0,0x1 +0x1,0x1,0x48,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2ef88e7bca3f69d2612b56ce9699615f,0x0,0x1 +0x1,0x1,0x49,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x12f87428792a957fd1737013855ac876,0x0,0x1 +0x1,0x1,0x4a,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x24f79206d5cb177e64b4d9053151ce77,0x0,0x1 +0x1,0x1,0x4b,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xa45dabb1095f36a6edc58f5114644398,0x0,0x1 +0x1,0x1,0x4c,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1db7f080e67a26c52952d71c7331ffbe,0x0,0x1 +0x1,0x1,0x4d,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xdc137df9f4dd59feeb25c4f70d2ac3f5,0x0,0x1 +0x1,0x1,0x4e,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1ad6a825f36bc860b8696c73736d33f8,0x0,0x1 +0x1,0x1,0x4f,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xd82bd185f505f0ff786cf2e68ba47da6,0x0,0x1 +0x1,0x1,0x50,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1606a45c154325213c755b01be9903fa,0x0,0x1 +0x1,0x1,0x51,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x419de110d5c0cce0a57990de0a7d1413,0x0,0x1 +0x1,0x1,0x52,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x8646892bb422186785938a4e3b5d520,0x0,0x1 +0x1,0x1,0x53,0x737b,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xb7a6a2366c9bac68585391b8bd024367,0x0,0x1 +0x1,0x1,0x54,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1996a3bf3f09f5c3d609d0341d07a22a,0x0,0x1 +0x1,0x1,0x55,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x30cc16bfe7e74afdd0770ff169502c92,0x0,0x1 +0x1,0x1,0x56,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x2c8c2d7e802418dea505c1856cb9f95b,0x0,0x1 +0x1,0x1,0x57,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1ca0a26bec7e4f73d03e9958dff2081a,0x0,0x1 +0x1,0x1,0x58,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x198e9393920d483a7260bfb731fb5d25,0x0,0x1 +0x1,0x1,0x59,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xf1aa493335a9e71297e485b7aef312c2,0x0,0x1 +0x1,0x1,0x5a,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1800deef121f1e76426a00665e5c4479,0x0,0x1 +0x1,0x1,0x5b,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x674322d4f75edadd46debd5cd992f6ed,0x0,0x1 +0x1,0x1,0x5c,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x90689d0585ff075ec9e99ad690c3395,0x0,0x1 +0x1,0x1,0x5d,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xbc4b313370b38ef355acdadcd122975b,0x0,0x1 +0x1,0x1,0x5e,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x12c85ea5db8c6deb4aab71808dcb408f,0x0,0x1 +0x1,0x1,0x5f,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xe3d1e7690c43d37b4ce6cc0166fa7daa,0x0,0x1 +0x1,0x1,0x60,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x0,0x0,0x1 +0x1,0x1,0x61,0x737b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x0,0x0,0x1 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_trace_module.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_trace_module.csv new file mode 100644 index 000000000..6426b4188 --- /dev/null +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_trace_module.csv @@ -0,0 +1,257 @@ +ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT +0x1,0x1,0x0,0x3f,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x1,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x1,0x1,0x0 +0x1,0x1,0x2,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x3,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x4,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x5,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x6,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x7,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x8,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x9,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xa,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xb,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xc,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xd,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xe,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xf,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x10,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x11,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x12,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x13,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x14,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x15,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x16,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x17,0x3f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x18,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x1395d002b3ca9180fb924650ef0656e,0x1,0x0 +0x1,0x1,0x19,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xad838fd027d487fed681de0d674c30da,0x1,0x0 +0x1,0x1,0x1a,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x97c3a9a072f9c85edf7a36812f8ee05,0x1,0x0 +0x1,0x1,0x1b,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xe2cc73140749dcd7d29ceb34a8412188,0x1,0x0 +0x1,0x1,0x1c,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x2bd3295ff81c577fe772543783411c36,0x1,0x0 +0x1,0x1,0x1d,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xf463676d9692ca4250588fbad0b44dc7,0x1,0x0 +0x1,0x1,0x1e,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x7d8d8329e62324af8091e3a4ffe5a57,0x1,0x0 +0x1,0x1,0x1f,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xcb8664d1f5f6838c55261177118e9313,0x1,0x0 +0x1,0x1,0x20,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x230f1851ba0d3d7d36c8603c7118c86b,0x1,0x0 +0x1,0x1,0x21,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xd2b6a7a1610c4af9e907cb702beff1d8,0x1,0x0 +0x1,0x1,0x22,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x12843e703009c1c1a2f1088dcf4d91e9,0x1,0x0 +0x1,0x1,0x23,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xed43189aa6327cae9a68be22a1aee5cb,0x1,0x0 +0x1,0x1,0x24,0x3f,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1,0x3,0x1cf132423a3757d094ef99ada67c9cbb,0x1,0x0 +0x1,0x1,0x25,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xc05ccf866f830043032e06e07dd88a31,0x1,0x0 +0x1,0x1,0x26,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xe30c42cccdf4b6d6c6b05a463b60438,0x1,0x0 +0x1,0x1,0x27,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x170d4ed7935fd1235d19cfc5ee258ba9,0x1,0x0 +0x1,0x1,0x28,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x2cf4fca7e570f69fd5ff51d0d0424699,0x1,0x0 +0x1,0x1,0x29,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x54f670cce3aa1a95a1e3609a24de1507,0x1,0x0 +0x1,0x1,0x2a,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x2e3f1c8b74e6d5303c5dade8d1338d3c,0x1,0x0 +0x1,0x1,0x2b,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x4a0d2a9c4be4cbecd7975385e41cf3b,0x1,0x0 +0x1,0x1,0x2c,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x1841621784db87a58dfc93fd299f7b3e,0x1,0x0 +0x1,0x1,0x2d,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xf0e2f3f8f2a9afca5ce416419edefc72,0x1,0x0 +0x1,0x1,0x2e,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x2f3f5baa49d8c5f9e7b7ae29843c5d35,0x1,0x0 +0x1,0x1,0x2f,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x5f953e4c1e0813885afc2291cd154ede,0x1,0x0 +0x1,0x1,0x30,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x1510a127c5c44cbd93e51dea529b9321,0x1,0x0 +0x1,0x1,0x31,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x50cf06bd0bb7688b9965b90bcedc1af9,0x1,0x0 +0x1,0x1,0x32,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xc9593cee20457e4c62ab5da575f2647,0x1,0x0 +0x1,0x1,0x33,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xf06055f2fd530e59c2896039eab80ee7,0x1,0x0 +0x1,0x1,0x34,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x1b3b112aba7d3a132fcb8c05ae86b218,0x1,0x0 +0x1,0x1,0x35,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x4f132790848da73fa7883daae019a05c,0x1,0x0 +0x1,0x1,0x36,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x233fc6eac88cfd1649495fdf1acdd1b,0x1,0x0 +0x1,0x1,0x37,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xe5d86687e5043ba455a40e42f7d63e3b,0x1,0x0 +0x1,0x1,0x38,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x24a697c910c684744ebad59980360b2c,0x1,0x0 +0x1,0x1,0x39,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xf19c2c4ffd895fb7e84e7aaaf658b917,0x1,0x0 +0x1,0x1,0x3a,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x1834997d6a586ada4ad6e9cf19b11316,0x1,0x0 +0x1,0x1,0x3b,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xd0eae21499fa324cad4e71e9c7c2c161,0x1,0x0 +0x1,0x1,0x3c,0x3f,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x1cf132423a3757d094ef99ada67c9cbb,0x1,0x0 +0x1,0x1,0x3d,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xc05ccf866f830043032e06e07dd88a31,0x1,0x0 +0x1,0x1,0x3e,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xe30c42cccdf4b6d6c6b05a463b60438,0x1,0x0 +0x1,0x1,0x3f,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x170d4ed7935fd1235d19cfc5ee258ba9,0x1,0x0 +0x1,0x1,0x40,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x2cf4fca7e570f69fd5ff51d0d0424699,0x1,0x0 +0x1,0x1,0x41,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x54f670cce3aa1a95a1e3609a24de1507,0x1,0x0 +0x1,0x1,0x42,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x2e3f1c8b74e6d5303c5dade8d1338d3c,0x1,0x0 +0x1,0x1,0x43,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x4a0d2a9c4be4cbecd7975385e41cf3b,0x1,0x0 +0x1,0x1,0x44,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x1841621784db87a58dfc93fd299f7b3e,0x1,0x0 +0x1,0x1,0x45,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xf0e2f3f8f2a9afca5ce416419edefc72,0x1,0x0 +0x1,0x1,0x46,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x2f3f5baa49d8c5f9e7b7ae29843c5d35,0x1,0x0 +0x1,0x1,0x47,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x5f953e4c1e0813885afc2291cd154ede,0x1,0x0 +0x1,0x1,0x48,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x1510a127c5c44cbd93e51dea529b9321,0x1,0x0 +0x1,0x1,0x49,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x50cf06bd0bb7688b9965b90bcedc1af9,0x1,0x0 +0x1,0x1,0x4a,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xc9593cee20457e4c62ab5da575f2647,0x1,0x0 +0x1,0x1,0x4b,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xf06055f2fd530e59c2896039eab80ee7,0x1,0x0 +0x1,0x1,0x4c,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x1b3b112aba7d3a132fcb8c05ae86b218,0x1,0x0 +0x1,0x1,0x4d,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x4f132790848da73fa7883daae019a05c,0x1,0x0 +0x1,0x1,0x4e,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x233fc6eac88cfd1649495fdf1acdd1b,0x1,0x0 +0x1,0x1,0x4f,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xe5d86687e5043ba455a40e42f7d63e3b,0x1,0x0 +0x1,0x1,0x50,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x24a697c910c684744ebad59980360b2c,0x1,0x0 +0x1,0x1,0x51,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xf19c2c4ffd895fb7e84e7aaaf658b917,0x1,0x0 +0x1,0x1,0x52,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x1834997d6a586ada4ad6e9cf19b11316,0x1,0x0 +0x1,0x1,0x53,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xd0eae21499fa324cad4e71e9c7c2c161,0x1,0x0 +0x1,0x1,0x54,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x5dcb6449ff95e1a04c3132ce3be82a8,0x1,0x0 +0x1,0x1,0x55,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x97811d2087e082e0399985449942a45b,0x1,0x0 +0x1,0x1,0x56,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0xcb5122006e9b7ceb5307fa4015b132b,0x1,0x0 +0x1,0x1,0x57,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x3945bb972c83459f598659fc4b5a9d32,0x1,0x0 +0x1,0x1,0x58,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x12618811f3e9fa06644d43cfe3f69c6c,0x1,0x0 +0x1,0x1,0x59,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x17a738128de60f8f3ebb4266bab29be6,0x1,0x0 +0x1,0x1,0x5a,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0xa5a6c2ec01c4d1374078ae1bbea91d,0x1,0x0 +0x1,0x1,0x5b,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0xea8e938c1275226a1ce51db5e7de53d1,0x1,0x0 +0x1,0x1,0x5c,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x2da43ecc11a0095a72454bb08fb4d111,0x1,0x0 +0x1,0x1,0x5d,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x6facadcab482a1107ae67a12bb3c19f2,0x1,0x0 +0x1,0x1,0x5e,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x1e2f128bf79945a370324b82c36c1e63,0x1,0x0 +0x1,0x1,0x5f,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x509b122c023bd8163495526bb030a216,0x1,0x0 +0x1,0x1,0x60,0x3f,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x2,0x3,0x292cd168c3ef2c37a8f27c5bbe7c2dff,0x1,0x0 +0x1,0x1,0x61,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x5a46ba655fbb57ec5efc46b9973b7d65,0x1,0x0 +0x1,0x1,0x62,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x2cb7ca0140a3f91e02d365e4c31275f8,0x1,0x0 +0x1,0x1,0x63,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xc1856d0a6cb28650b2d9266980ca00ef,0x1,0x0 +0x1,0x1,0x64,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x19814a3786275c07e02bd384361d4b7e,0x1,0x0 +0x1,0x1,0x65,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x6f30fe1bc74fb180719d75ef9a9609d3,0x1,0x0 +0x1,0x1,0x66,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x17bf6e240bd7895eddbf10206905e6ad,0x1,0x0 +0x1,0x1,0x67,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xffed4359fee5622b68a81e6314f292ce,0x1,0x0 +0x1,0x1,0x68,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xff7294fed8bd9ec7e86e15b083c00b2,0x1,0x0 +0x1,0x1,0x69,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x927517d94b16c0133605486bfd90e477,0x1,0x0 +0x1,0x1,0x6a,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x191e2bbfd9f4989a3d1a54d21470f96e,0x1,0x0 +0x1,0x1,0x6b,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xfbf902cf06d4d6d995258e0ea9a9df06,0x1,0x0 +0x1,0x1,0x6c,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x141076b6ccff6c662090b71a1af7c79f,0x1,0x0 +0x1,0x1,0x6d,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x26700ab52e2da324955b3865ef94f595,0x1,0x0 +0x1,0x1,0x6e,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xfac823941439c8120d2c0a637e63e45,0x1,0x0 +0x1,0x1,0x6f,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x832bca89f3a3bf0132fc34d8a9ba3c22,0x1,0x0 +0x1,0x1,0x70,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xe3ab8880e570c3e1871ccac25453c9d,0x1,0x0 +0x1,0x1,0x71,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x9da82ce39eb65dcda6b5e65d7f37e82e,0x1,0x0 +0x1,0x1,0x72,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x3a1a183f2a698f9d2f14235c7c4e1fc,0x1,0x0 +0x1,0x1,0x73,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x5e2ce6aad082abaeb72e02c435c01ff3,0x1,0x0 +0x1,0x1,0x74,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x13b007062ca2e328423d9f6e4afbcdb5,0x1,0x0 +0x1,0x1,0x75,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xcb16f68b149ea5375803535399011725,0x1,0x0 +0x1,0x1,0x76,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x19523563e9858fcfded6c6ab452074cb,0x1,0x0 +0x1,0x1,0x77,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xdb8f9c7ee417eb2ae8917809a44547ff,0x1,0x0 +0x1,0x1,0x78,0x3f,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x292cd168c3ef2c37a8f27c5bbe7c2dff,0x0,0x1 +0x1,0x1,0x79,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x5a46ba655fbb57ec5efc46b9973b7d65,0x0,0x1 +0x1,0x1,0x7a,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x2cb7ca0140a3f91e02d365e4c31275f8,0x0,0x1 +0x1,0x1,0x7b,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xc1856d0a6cb28650b2d9266980ca00ef,0x0,0x1 +0x1,0x1,0x7c,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x19814a3786275c07e02bd384361d4b7e,0x0,0x1 +0x1,0x1,0x7d,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x6f30fe1bc74fb180719d75ef9a9609d3,0x0,0x1 +0x1,0x1,0x7e,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x17bf6e240bd7895eddbf10206905e6ad,0x0,0x1 +0x1,0x1,0x7f,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xffed4359fee5622b68a81e6314f292ce,0x0,0x1 +0x1,0x1,0x80,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xff7294fed8bd9ec7e86e15b083c00b2,0x0,0x1 +0x1,0x1,0x81,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x927517d94b16c0133605486bfd90e477,0x0,0x1 +0x1,0x1,0x82,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x191e2bbfd9f4989a3d1a54d21470f96e,0x0,0x1 +0x1,0x1,0x83,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xfbf902cf06d4d6d995258e0ea9a9df06,0x0,0x1 +0x1,0x1,0x84,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x141076b6ccff6c662090b71a1af7c79f,0x0,0x1 +0x1,0x1,0x85,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x26700ab52e2da324955b3865ef94f595,0x0,0x1 +0x1,0x1,0x86,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xfac823941439c8120d2c0a637e63e45,0x0,0x1 +0x1,0x1,0x87,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x832bca89f3a3bf0132fc34d8a9ba3c22,0x0,0x1 +0x1,0x1,0x88,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xe3ab8880e570c3e1871ccac25453c9d,0x0,0x1 +0x1,0x1,0x89,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x9da82ce39eb65dcda6b5e65d7f37e82e,0x0,0x1 +0x1,0x1,0x8a,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x3a1a183f2a698f9d2f14235c7c4e1fc,0x0,0x1 +0x1,0x1,0x8b,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x5e2ce6aad082abaeb72e02c435c01ff3,0x0,0x1 +0x1,0x1,0x8c,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x13b007062ca2e328423d9f6e4afbcdb5,0x0,0x1 +0x1,0x1,0x8d,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xcb16f68b149ea5375803535399011725,0x0,0x1 +0x1,0x1,0x8e,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x19523563e9858fcfded6c6ab452074cb,0x0,0x1 +0x1,0x1,0x8f,0x3f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xdb8f9c7ee417eb2ae8917809a44547ff,0x0,0x1 +0x1,0x1,0x90,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x1296d042f33ccbb814746e187aa20af4,0x0,0x1 +0x1,0x1,0x91,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x9bd503356de4846abee08da9e32ae2ac,0x0,0x1 +0x1,0x1,0x92,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0xb980019d2af83b353aa8c2efda45f16,0x0,0x1 +0x1,0x1,0x93,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0xce523b99452118be7ae5dd1e92e0e4ec,0x0,0x1 +0x1,0x1,0x94,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x12cd1b1242354b35cd8d2493c487b52,0x0,0x1 +0x1,0x1,0x95,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x411d111c80e8cfb97080e2db1af5f705,0x0,0x1 +0x1,0x1,0x96,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x20ca232ed2582feeca2d56a589eec30c,0x0,0x1 +0x1,0x1,0x97,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x27075a44aced8382d87cd43c011aeeb0,0x0,0x1 +0x1,0x1,0x98,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x2df7d0d9ae47467ca500b528f38ac384,0x0,0x1 +0x1,0x1,0x99,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x33885d6a59db6ecd7d27d37145e75360,0x0,0x1 +0x1,0x1,0x9a,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x1e4d8d4d8878cad4de8dbb31ec11d1ec,0x0,0x1 +0x1,0x1,0x9b,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0xd7b40617c46bb7189ccab201b9bdbaab,0x0,0x1 +0x1,0x1,0x9c,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x3,0x0,0x0,0x1 +0x1,0x1,0x9d,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x3,0x1,0x0,0x1 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_triple_pair_module.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_triple_pair_module.csv index 1ef3848fe..a59d72f85 100644 --- a/prover/zkevm/prover/ecpair/testdata/ecpair_triple_pair_module.csv +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_triple_pair_module.csv @@ -1,257 +1,257 @@ -ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT -0x1,0x1,0x0,0x0,0x1,0x3,0x1,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x1,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x1,0x0 -0x1,0x1,0x2,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x3,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x4,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x5,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x6,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x7,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x8,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x9,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0xa,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0xb,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0xc,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0xd,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0xe,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0xf,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x10,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x11,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x12,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x13,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x14,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x15,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x16,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x17,0x0,0x1,0x3,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0 -0x1,0x1,0x18,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x100fb2006c3a4409ce06f6c2d535564c,0x1,0x0 -0x1,0x1,0x19,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x92e592aeb426d6c035bb8c0a50202e6d,0x1,0x0 -0x1,0x1,0x1a,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1275964141a90f3170592ade82174d09,0x1,0x0 -0x1,0x1,0x1b,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xde3cc7f5b79f260f51c143e3268ba06d,0x1,0x0 -0x1,0x1,0x1c,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x2e607689d1161c5cb3d6ed870a5b6f47,0x1,0x0 -0x1,0x1,0x1d,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xb19627c2c51d3d2eb72f81c540ff9f9d,0x1,0x0 -0x1,0x1,0x1e,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x09d2b2eb399326d9cc552e9753afaeab,0x1,0x0 -0x1,0x1,0x1f,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xbb29985def8b5800f32145223ff61d48,0x1,0x0 -0x1,0x1,0x20,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x03a5907084b1f9ee93a1fa011b31b383,0x1,0x0 -0x1,0x1,0x21,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x60b7d50b789fbe32d3733176ffd9d46a,0x1,0x0 -0x1,0x1,0x22,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x2e8b82b3506125e8b67bb867604a8892,0x1,0x0 -0x1,0x1,0x23,0x0,0x1,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x7b9695a8d131627503a0f63bfe5d0cca,0x1,0x0 -0x1,0x1,0x24,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3b453509cb62c429d8a86ea1cf46897,0x1,0x0 -0x1,0x1,0x25,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xfc8f75a5184afbfee72be2a8ac39ab6,0x1,0x0 -0x1,0x1,0x26,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x258732ffd31c5ae816e163e3458108dd,0x1,0x0 -0x1,0x1,0x27,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x99caaa2e258abab37bb4b1e675e792b4,0x1,0x0 -0x1,0x1,0x28,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x8dc4617a012a931507f27b285f48a99,0x1,0x0 -0x1,0x1,0x29,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2c0cc58a0906a3a6ef6e5378a04addf2,0x1,0x0 -0x1,0x1,0x2a,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x185514250c1eaff2fdc813fd31c55772,0x1,0x0 -0x1,0x1,0x2b,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x81316979a26c9fdb191f6abac2a0bcf2,0x1,0x0 -0x1,0x1,0x2c,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x26a52e43327b03b40c3b36854698ed02,0x1,0x0 -0x1,0x1,0x2d,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x572116a2bc8995a07550a2c11b3f1bb3,0x1,0x0 -0x1,0x1,0x2e,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x22a813b81101fa27e07888a4c1ee151b,0x1,0x0 -0x1,0x1,0x2f,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xd5c7de0e174ce72545ed2796a057e0f5,0x1,0x0 -0x1,0x1,0x30,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1755fc232224e41b6b375a49c842eed,0x1,0x0 -0x1,0x1,0x31,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xe4e0cf3cce99d1664c5e8489205e9461,0x1,0x0 -0x1,0x1,0x32,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2b80c453b72e713a9ee7304f7c598ebe,0x1,0x0 -0x1,0x1,0x33,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xe28aeb3c386d4c2dfe575197636a578b,0x1,0x0 -0x1,0x1,0x34,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x225235e07cb0c897a4d26f2f76019f3,0x1,0x0 -0x1,0x1,0x35,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xec0c5349a3d4d57e9ab9e9b48f3ba9b3,0x1,0x0 -0x1,0x1,0x36,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2864b7882cf2e11ed3bffbff7cb788ca,0x1,0x0 -0x1,0x1,0x37,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x30f1e0743e45d9900320f9e6890f6817,0x1,0x0 -0x1,0x1,0x38,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x29293f07fccd8ac29bf0501e823696f,0x1,0x0 -0x1,0x1,0x39,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x71ba1b75f369441cf66cb0c6d8127ad0,0x1,0x0 -0x1,0x1,0x3a,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x15d7ace2db3651ba26cc0852ffa53be9,0x1,0x0 -0x1,0x1,0x3b,0x0,0x1,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x40a41876d29c7d3d9efea184a2f58712,0x1,0x0 -0x1,0x1,0x3c,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x3b453509cb62c429d8a86ea1cf46897,0x1,0x0 -0x1,0x1,0x3d,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xfc8f75a5184afbfee72be2a8ac39ab6,0x1,0x0 -0x1,0x1,0x3e,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x258732ffd31c5ae816e163e3458108dd,0x1,0x0 -0x1,0x1,0x3f,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x99caaa2e258abab37bb4b1e675e792b4,0x1,0x0 -0x1,0x1,0x40,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x8dc4617a012a931507f27b285f48a99,0x1,0x0 -0x1,0x1,0x41,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2c0cc58a0906a3a6ef6e5378a04addf2,0x1,0x0 -0x1,0x1,0x42,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x185514250c1eaff2fdc813fd31c55772,0x1,0x0 -0x1,0x1,0x43,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x81316979a26c9fdb191f6abac2a0bcf2,0x1,0x0 -0x1,0x1,0x44,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x26a52e43327b03b40c3b36854698ed02,0x1,0x0 -0x1,0x1,0x45,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x572116a2bc8995a07550a2c11b3f1bb3,0x1,0x0 -0x1,0x1,0x46,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x22a813b81101fa27e07888a4c1ee151b,0x1,0x0 -0x1,0x1,0x47,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xd5c7de0e174ce72545ed2796a057e0f5,0x1,0x0 -0x1,0x1,0x48,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1755fc232224e41b6b375a49c842eed,0x1,0x0 -0x1,0x1,0x49,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xe4e0cf3cce99d1664c5e8489205e9461,0x1,0x0 -0x1,0x1,0x4a,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2b80c453b72e713a9ee7304f7c598ebe,0x1,0x0 -0x1,0x1,0x4b,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xe28aeb3c386d4c2dfe575197636a578b,0x1,0x0 -0x1,0x1,0x4c,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x225235e07cb0c897a4d26f2f76019f3,0x1,0x0 -0x1,0x1,0x4d,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xec0c5349a3d4d57e9ab9e9b48f3ba9b3,0x1,0x0 -0x1,0x1,0x4e,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2864b7882cf2e11ed3bffbff7cb788ca,0x1,0x0 -0x1,0x1,0x4f,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x30f1e0743e45d9900320f9e6890f6817,0x1,0x0 -0x1,0x1,0x50,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x29293f07fccd8ac29bf0501e823696f,0x1,0x0 -0x1,0x1,0x51,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x71ba1b75f369441cf66cb0c6d8127ad0,0x1,0x0 -0x1,0x1,0x52,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x15d7ace2db3651ba26cc0852ffa53be9,0x1,0x0 -0x1,0x1,0x53,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x40a41876d29c7d3d9efea184a2f58712,0x1,0x0 -0x1,0x1,0x54,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1f5ca3dcd416ce988b93b505e473fbc8,0x1,0x0 -0x1,0x1,0x55,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xa510b9a25ba4af91a01cbf2d66496ba7,0x1,0x0 -0x1,0x1,0x56,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x2ab07af451260653f5d92e48135636fe,0x1,0x0 -0x1,0x1,0x57,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x6e69bfad773e8c1806b4e4bb128048f9,0x1,0x0 -0x1,0x1,0x58,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1e311797d9d7b0c3b1658f72e16632e3,0x1,0x0 -0x1,0x1,0x59,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x927ad04f742ded7fe801e8df6e137325,0x1,0x0 -0x1,0x1,0x5a,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1d0510803ef7512c7915a6879d460c72,0x1,0x0 -0x1,0x1,0x5b,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x27480a98574d5d306828694e1640ec2b,0x1,0x0 -0x1,0x1,0x5c,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0bb8fd9936c7a8c8f4a3d9ce97735df5,0x1,0x0 -0x1,0x1,0x5d,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x41af0c73696dff5f92c6eb248f949a18,0x1,0x0 -0x1,0x1,0x5e,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x15f8308390c00f0a0e1ebcd08626f1ec,0x1,0x0 -0x1,0x1,0x5f,0x0,0x2,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x57a14cac88cd49f9d0e3caaa20ce36e9,0x1,0x0 -0x1,0x1,0x60,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x152e268cc785bd6c948a88b3091ef9a3,0x1,0x0 -0x1,0x1,0x61,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x708426323c268b89b2a5e02478ccdda6,0x1,0x0 -0x1,0x1,0x62,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2f6d0a4127a8a6f986490f9f8322397c,0x1,0x0 -0x1,0x1,0x63,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x82c9cdc9f0d6ec378eda15ec3dc78b6f,0x1,0x0 -0x1,0x1,0x64,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x21da9702fb1d05b6c0a1007d0b9c160e,0x1,0x0 -0x1,0x1,0x65,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x9d8d0a02fedddd4bce9598f5787c284,0x1,0x0 -0x1,0x1,0x66,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2b46be639fc122126b7e0efbc5398fe8,0x1,0x0 -0x1,0x1,0x67,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x67d9dd3ecc9160db686aaed5bbbd2cbc,0x1,0x0 -0x1,0x1,0x68,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x20d3e1ac646cf95fbf02ad4589eb173d,0x1,0x0 -0x1,0x1,0x69,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x8501b392226c7a7e7818b5781887ef0e,0x1,0x0 -0x1,0x1,0x6a,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xcb19e117479b79a6b64d592612adf5d,0x1,0x0 -0x1,0x1,0x6b,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xaacf84e0e323906338a778d53c6d57d2,0x1,0x0 -0x1,0x1,0x6c,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1dd39eb06e7c88b5e3fea51f0bcefc0d,0x1,0x0 -0x1,0x1,0x6d,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xb11c23cd9f2f7108861555162026536d,0x1,0x0 -0x1,0x1,0x6e,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x290860069e0d24d4363147d4f3d6760a,0x1,0x0 -0x1,0x1,0x6f,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x4fb8917396a450547f84fb7e70c9999f,0x1,0x0 -0x1,0x1,0x70,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2ca828fba83798a17db205631e9903d,0x1,0x0 -0x1,0x1,0x71,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xe19924a9209f0fe7c06025b0851fbfe9,0x1,0x0 -0x1,0x1,0x72,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x6f263094fe06ea7acc71974bc64d7dd,0x1,0x0 -0x1,0x1,0x73,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xf167b0ea71dc77d57f39fd46d42db5e4,0x1,0x0 -0x1,0x1,0x74,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x12809c90c9533ba0d7159a9631812b01,0x1,0x0 -0x1,0x1,0x75,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xef3180f718d6e3693eeaf24f05ff6804,0x1,0x0 -0x1,0x1,0x76,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1821399d4a5711ca9d4e6b605b0c6ff2,0x1,0x0 -0x1,0x1,0x77,0x0,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x89ca237ebf99d460e8d0a9301e74a664,0x1,0x0 -0x1,0x1,0x78,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x152e268cc785bd6c948a88b3091ef9a3,0x0,0x1 -0x1,0x1,0x79,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x708426323c268b89b2a5e02478ccdda6,0x0,0x1 -0x1,0x1,0x7a,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2f6d0a4127a8a6f986490f9f8322397c,0x0,0x1 -0x1,0x1,0x7b,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x82c9cdc9f0d6ec378eda15ec3dc78b6f,0x0,0x1 -0x1,0x1,0x7c,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x21da9702fb1d05b6c0a1007d0b9c160e,0x0,0x1 -0x1,0x1,0x7d,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x9d8d0a02fedddd4bce9598f5787c284,0x0,0x1 -0x1,0x1,0x7e,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2b46be639fc122126b7e0efbc5398fe8,0x0,0x1 -0x1,0x1,0x7f,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x67d9dd3ecc9160db686aaed5bbbd2cbc,0x0,0x1 -0x1,0x1,0x80,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x20d3e1ac646cf95fbf02ad4589eb173d,0x0,0x1 -0x1,0x1,0x81,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x8501b392226c7a7e7818b5781887ef0e,0x0,0x1 -0x1,0x1,0x82,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xcb19e117479b79a6b64d592612adf5d,0x0,0x1 -0x1,0x1,0x83,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xaacf84e0e323906338a778d53c6d57d2,0x0,0x1 -0x1,0x1,0x84,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1dd39eb06e7c88b5e3fea51f0bcefc0d,0x0,0x1 -0x1,0x1,0x85,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xb11c23cd9f2f7108861555162026536d,0x0,0x1 -0x1,0x1,0x86,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x290860069e0d24d4363147d4f3d6760a,0x0,0x1 -0x1,0x1,0x87,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x4fb8917396a450547f84fb7e70c9999f,0x0,0x1 -0x1,0x1,0x88,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x2ca828fba83798a17db205631e9903d,0x0,0x1 -0x1,0x1,0x89,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xe19924a9209f0fe7c06025b0851fbfe9,0x0,0x1 -0x1,0x1,0x8a,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x6f263094fe06ea7acc71974bc64d7dd,0x0,0x1 -0x1,0x1,0x8b,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xf167b0ea71dc77d57f39fd46d42db5e4,0x0,0x1 -0x1,0x1,0x8c,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x12809c90c9533ba0d7159a9631812b01,0x0,0x1 -0x1,0x1,0x8d,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xef3180f718d6e3693eeaf24f05ff6804,0x0,0x1 -0x1,0x1,0x8e,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1821399d4a5711ca9d4e6b605b0c6ff2,0x0,0x1 -0x1,0x1,0x8f,0x0,0x3,0x3,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x89ca237ebf99d460e8d0a9301e74a664,0x0,0x1 -0x1,0x1,0x90,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0c8671a7e8f372087c46b7b82c53c183,0x0,0x1 -0x1,0x1,0x91,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xd09453270e38045cb7372662d4716f8d,0x0,0x1 -0x1,0x1,0x92,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x20dd05e87836797d4507cc8917ed1079,0x0,0x1 -0x1,0x1,0x93,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xa10fe34dc7536969843e4cbe868a64ac,0x0,0x1 -0x1,0x1,0x94,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x24e48d89873ad5ebcf0f7022c01020b5,0x0,0x1 -0x1,0x1,0x95,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x10458a3dfc798231e6b5d5f17c8c9e1c,0x0,0x1 -0x1,0x1,0x96,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x2f3ba4b3c58fd37398ceef826e29c853,0x0,0x1 -0x1,0x1,0x97,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x7048f7fec19180f89f4961bf0b00e9c1,0x0,0x1 -0x1,0x1,0x98,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x2ed87dc23279bee95b8caada387b5f5e,0x0,0x1 -0x1,0x1,0x99,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x04fdd666fda2df2aac57457ecfb62014,0x0,0x1 -0x1,0x1,0x9a,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1b77c09a4389d4d50e5b78a8dca80583,0x0,0x1 -0x1,0x1,0x9b,0x0,0x3,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1056618bfe329ac4dcc8ee73ec818284,0x0,0x1 -0x1,0x1,0x9c,0x0,0x0,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1 -0x1,0x1,0x9d,0x0,0x0,0x3,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT +0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x1,0x1,0x0 +0x1,0x1,0x2,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x4,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x5,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x7,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x8,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x9,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xa,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xb,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xc,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xd,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xe,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0xf,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x10,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x11,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x12,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x13,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x14,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x15,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x16,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x17,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x3,0x0,0x1,0x0 +0x1,0x1,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x100fb2006c3a4409ce06f6c2d535564c,0x1,0x0 +0x1,0x1,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x92e592aeb426d6c035bb8c0a50202e6d,0x1,0x0 +0x1,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x1275964141a90f3170592ade82174d09,0x1,0x0 +0x1,0x1,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xde3cc7f5b79f260f51c143e3268ba06d,0x1,0x0 +0x1,0x1,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x2e607689d1161c5cb3d6ed870a5b6f47,0x1,0x0 +0x1,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xb19627c2c51d3d2eb72f81c540ff9f9d,0x1,0x0 +0x1,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x9d2b2eb399326d9cc552e9753afaeab,0x1,0x0 +0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0xbb29985def8b5800f32145223ff61d48,0x1,0x0 +0x1,0x1,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x3a5907084b1f9ee93a1fa011b31b383,0x1,0x0 +0x1,0x1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x60b7d50b789fbe32d3733176ffd9d46a,0x1,0x0 +0x1,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x2e8b82b3506125e8b67bb867604a8892,0x1,0x0 +0x1,0x1,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x3,0x7b9695a8d131627503a0f63bfe5d0cca,0x1,0x0 +0x1,0x1,0x24,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1,0x3,0x3b453509cb62c429d8a86ea1cf46897,0x1,0x0 +0x1,0x1,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xfc8f75a5184afbfee72be2a8ac39ab6,0x1,0x0 +0x1,0x1,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x258732ffd31c5ae816e163e3458108dd,0x1,0x0 +0x1,0x1,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x99caaa2e258abab37bb4b1e675e792b4,0x1,0x0 +0x1,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x8dc4617a012a931507f27b285f48a99,0x1,0x0 +0x1,0x1,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x2c0cc58a0906a3a6ef6e5378a04addf2,0x1,0x0 +0x1,0x1,0x2a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x185514250c1eaff2fdc813fd31c55772,0x1,0x0 +0x1,0x1,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x81316979a26c9fdb191f6abac2a0bcf2,0x1,0x0 +0x1,0x1,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x26a52e43327b03b40c3b36854698ed02,0x1,0x0 +0x1,0x1,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x572116a2bc8995a07550a2c11b3f1bb3,0x1,0x0 +0x1,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x22a813b81101fa27e07888a4c1ee151b,0x1,0x0 +0x1,0x1,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xd5c7de0e174ce72545ed2796a057e0f5,0x1,0x0 +0x1,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x1755fc232224e41b6b375a49c842eed,0x1,0x0 +0x1,0x1,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xe4e0cf3cce99d1664c5e8489205e9461,0x1,0x0 +0x1,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x2b80c453b72e713a9ee7304f7c598ebe,0x1,0x0 +0x1,0x1,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xe28aeb3c386d4c2dfe575197636a578b,0x1,0x0 +0x1,0x1,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x225235e07cb0c897a4d26f2f76019f3,0x1,0x0 +0x1,0x1,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0xec0c5349a3d4d57e9ab9e9b48f3ba9b3,0x1,0x0 +0x1,0x1,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x2864b7882cf2e11ed3bffbff7cb788ca,0x1,0x0 +0x1,0x1,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x30f1e0743e45d9900320f9e6890f6817,0x1,0x0 +0x1,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x29293f07fccd8ac29bf0501e823696f,0x1,0x0 +0x1,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x71ba1b75f369441cf66cb0c6d8127ad0,0x1,0x0 +0x1,0x1,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x15d7ace2db3651ba26cc0852ffa53be9,0x1,0x0 +0x1,0x1,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x3,0x40a41876d29c7d3d9efea184a2f58712,0x1,0x0 +0x1,0x1,0x3c,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x3b453509cb62c429d8a86ea1cf46897,0x1,0x0 +0x1,0x1,0x3d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xfc8f75a5184afbfee72be2a8ac39ab6,0x1,0x0 +0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x258732ffd31c5ae816e163e3458108dd,0x1,0x0 +0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x99caaa2e258abab37bb4b1e675e792b4,0x1,0x0 +0x1,0x1,0x40,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x8dc4617a012a931507f27b285f48a99,0x1,0x0 +0x1,0x1,0x41,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x2c0cc58a0906a3a6ef6e5378a04addf2,0x1,0x0 +0x1,0x1,0x42,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x185514250c1eaff2fdc813fd31c55772,0x1,0x0 +0x1,0x1,0x43,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x81316979a26c9fdb191f6abac2a0bcf2,0x1,0x0 +0x1,0x1,0x44,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x26a52e43327b03b40c3b36854698ed02,0x1,0x0 +0x1,0x1,0x45,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x572116a2bc8995a07550a2c11b3f1bb3,0x1,0x0 +0x1,0x1,0x46,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x22a813b81101fa27e07888a4c1ee151b,0x1,0x0 +0x1,0x1,0x47,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xd5c7de0e174ce72545ed2796a057e0f5,0x1,0x0 +0x1,0x1,0x48,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x1755fc232224e41b6b375a49c842eed,0x1,0x0 +0x1,0x1,0x49,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xe4e0cf3cce99d1664c5e8489205e9461,0x1,0x0 +0x1,0x1,0x4a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x2b80c453b72e713a9ee7304f7c598ebe,0x1,0x0 +0x1,0x1,0x4b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xe28aeb3c386d4c2dfe575197636a578b,0x1,0x0 +0x1,0x1,0x4c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x225235e07cb0c897a4d26f2f76019f3,0x1,0x0 +0x1,0x1,0x4d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0xec0c5349a3d4d57e9ab9e9b48f3ba9b3,0x1,0x0 +0x1,0x1,0x4e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x2864b7882cf2e11ed3bffbff7cb788ca,0x1,0x0 +0x1,0x1,0x4f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x30f1e0743e45d9900320f9e6890f6817,0x1,0x0 +0x1,0x1,0x50,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x29293f07fccd8ac29bf0501e823696f,0x1,0x0 +0x1,0x1,0x51,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x71ba1b75f369441cf66cb0c6d8127ad0,0x1,0x0 +0x1,0x1,0x52,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x15d7ace2db3651ba26cc0852ffa53be9,0x1,0x0 +0x1,0x1,0x53,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x3,0x40a41876d29c7d3d9efea184a2f58712,0x1,0x0 +0x1,0x1,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x1f5ca3dcd416ce988b93b505e473fbc8,0x1,0x0 +0x1,0x1,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0xa510b9a25ba4af91a01cbf2d66496ba7,0x1,0x0 +0x1,0x1,0x56,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x2ab07af451260653f5d92e48135636fe,0x1,0x0 +0x1,0x1,0x57,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x6e69bfad773e8c1806b4e4bb128048f9,0x1,0x0 +0x1,0x1,0x58,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x1e311797d9d7b0c3b1658f72e16632e3,0x1,0x0 +0x1,0x1,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x927ad04f742ded7fe801e8df6e137325,0x1,0x0 +0x1,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x1d0510803ef7512c7915a6879d460c72,0x1,0x0 +0x1,0x1,0x5b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x27480a98574d5d306828694e1640ec2b,0x1,0x0 +0x1,0x1,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0xbb8fd9936c7a8c8f4a3d9ce97735df5,0x1,0x0 +0x1,0x1,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x41af0c73696dff5f92c6eb248f949a18,0x1,0x0 +0x1,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x15f8308390c00f0a0e1ebcd08626f1ec,0x1,0x0 +0x1,0x1,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x57a14cac88cd49f9d0e3caaa20ce36e9,0x1,0x0 +0x1,0x1,0x60,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x2,0x3,0x152e268cc785bd6c948a88b3091ef9a3,0x1,0x0 +0x1,0x1,0x61,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x708426323c268b89b2a5e02478ccdda6,0x1,0x0 +0x1,0x1,0x62,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x2f6d0a4127a8a6f986490f9f8322397c,0x1,0x0 +0x1,0x1,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x82c9cdc9f0d6ec378eda15ec3dc78b6f,0x1,0x0 +0x1,0x1,0x64,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x21da9702fb1d05b6c0a1007d0b9c160e,0x1,0x0 +0x1,0x1,0x65,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x9d8d0a02fedddd4bce9598f5787c284,0x1,0x0 +0x1,0x1,0x66,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x2b46be639fc122126b7e0efbc5398fe8,0x1,0x0 +0x1,0x1,0x67,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x67d9dd3ecc9160db686aaed5bbbd2cbc,0x1,0x0 +0x1,0x1,0x68,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x20d3e1ac646cf95fbf02ad4589eb173d,0x1,0x0 +0x1,0x1,0x69,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x8501b392226c7a7e7818b5781887ef0e,0x1,0x0 +0x1,0x1,0x6a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xcb19e117479b79a6b64d592612adf5d,0x1,0x0 +0x1,0x1,0x6b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xaacf84e0e323906338a778d53c6d57d2,0x1,0x0 +0x1,0x1,0x6c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x1dd39eb06e7c88b5e3fea51f0bcefc0d,0x1,0x0 +0x1,0x1,0x6d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xb11c23cd9f2f7108861555162026536d,0x1,0x0 +0x1,0x1,0x6e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x290860069e0d24d4363147d4f3d6760a,0x1,0x0 +0x1,0x1,0x6f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x4fb8917396a450547f84fb7e70c9999f,0x1,0x0 +0x1,0x1,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x2ca828fba83798a17db205631e9903d,0x1,0x0 +0x1,0x1,0x71,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xe19924a9209f0fe7c06025b0851fbfe9,0x1,0x0 +0x1,0x1,0x72,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x6f263094fe06ea7acc71974bc64d7dd,0x1,0x0 +0x1,0x1,0x73,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xf167b0ea71dc77d57f39fd46d42db5e4,0x1,0x0 +0x1,0x1,0x74,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x12809c90c9533ba0d7159a9631812b01,0x1,0x0 +0x1,0x1,0x75,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0xef3180f718d6e3693eeaf24f05ff6804,0x1,0x0 +0x1,0x1,0x76,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x1821399d4a5711ca9d4e6b605b0c6ff2,0x1,0x0 +0x1,0x1,0x77,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x3,0x89ca237ebf99d460e8d0a9301e74a664,0x1,0x0 +0x1,0x1,0x78,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x152e268cc785bd6c948a88b3091ef9a3,0x0,0x1 +0x1,0x1,0x79,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x708426323c268b89b2a5e02478ccdda6,0x0,0x1 +0x1,0x1,0x7a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x2f6d0a4127a8a6f986490f9f8322397c,0x0,0x1 +0x1,0x1,0x7b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x82c9cdc9f0d6ec378eda15ec3dc78b6f,0x0,0x1 +0x1,0x1,0x7c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x21da9702fb1d05b6c0a1007d0b9c160e,0x0,0x1 +0x1,0x1,0x7d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x9d8d0a02fedddd4bce9598f5787c284,0x0,0x1 +0x1,0x1,0x7e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x2b46be639fc122126b7e0efbc5398fe8,0x0,0x1 +0x1,0x1,0x7f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x67d9dd3ecc9160db686aaed5bbbd2cbc,0x0,0x1 +0x1,0x1,0x80,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x20d3e1ac646cf95fbf02ad4589eb173d,0x0,0x1 +0x1,0x1,0x81,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x8501b392226c7a7e7818b5781887ef0e,0x0,0x1 +0x1,0x1,0x82,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xcb19e117479b79a6b64d592612adf5d,0x0,0x1 +0x1,0x1,0x83,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xaacf84e0e323906338a778d53c6d57d2,0x0,0x1 +0x1,0x1,0x84,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x1dd39eb06e7c88b5e3fea51f0bcefc0d,0x0,0x1 +0x1,0x1,0x85,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xb11c23cd9f2f7108861555162026536d,0x0,0x1 +0x1,0x1,0x86,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x290860069e0d24d4363147d4f3d6760a,0x0,0x1 +0x1,0x1,0x87,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x4fb8917396a450547f84fb7e70c9999f,0x0,0x1 +0x1,0x1,0x88,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x2ca828fba83798a17db205631e9903d,0x0,0x1 +0x1,0x1,0x89,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xe19924a9209f0fe7c06025b0851fbfe9,0x0,0x1 +0x1,0x1,0x8a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x6f263094fe06ea7acc71974bc64d7dd,0x0,0x1 +0x1,0x1,0x8b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xf167b0ea71dc77d57f39fd46d42db5e4,0x0,0x1 +0x1,0x1,0x8c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x12809c90c9533ba0d7159a9631812b01,0x0,0x1 +0x1,0x1,0x8d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0xef3180f718d6e3693eeaf24f05ff6804,0x0,0x1 +0x1,0x1,0x8e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x1821399d4a5711ca9d4e6b605b0c6ff2,0x0,0x1 +0x1,0x1,0x8f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x3,0x3,0x89ca237ebf99d460e8d0a9301e74a664,0x0,0x1 +0x1,0x1,0x90,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0xc8671a7e8f372087c46b7b82c53c183,0x0,0x1 +0x1,0x1,0x91,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0xd09453270e38045cb7372662d4716f8d,0x0,0x1 +0x1,0x1,0x92,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x20dd05e87836797d4507cc8917ed1079,0x0,0x1 +0x1,0x1,0x93,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0xa10fe34dc7536969843e4cbe868a64ac,0x0,0x1 +0x1,0x1,0x94,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x24e48d89873ad5ebcf0f7022c01020b5,0x0,0x1 +0x1,0x1,0x95,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x10458a3dfc798231e6b5d5f17c8c9e1c,0x0,0x1 +0x1,0x1,0x96,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x2f3ba4b3c58fd37398ceef826e29c853,0x0,0x1 +0x1,0x1,0x97,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x7048f7fec19180f89f4961bf0b00e9c1,0x0,0x1 +0x1,0x1,0x98,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x2ed87dc23279bee95b8caada387b5f5e,0x0,0x1 +0x1,0x1,0x99,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x4fdd666fda2df2aac57457ecfb62014,0x0,0x1 +0x1,0x1,0x9a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x1b77c09a4389d4d50e5b78a8dca80583,0x0,0x1 +0x1,0x1,0x9b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x3,0x1056618bfe329ac4dcc8ee73ec818284,0x0,0x1 +0x1,0x1,0x9c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x3,0x0,0x0,0x1 +0x1,0x1,0x9d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x3,0x1,0x0,0x1 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 diff --git a/prover/zkevm/prover/ecpair/testdata/ecpair_two_pairings_module.csv b/prover/zkevm/prover/ecpair/testdata/ecpair_two_pairings_module.csv index 9a5b8368f..1ac1becf5 100644 --- a/prover/zkevm/prover/ecpair/testdata/ecpair_two_pairings_module.csv +++ b/prover/zkevm/prover/ecpair/testdata/ecpair_two_pairings_module.csv @@ -1,257 +1,257 @@ -ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT -0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 -0x1,0x1,0x2,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x4,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x5,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x7,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x8,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x9,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xa,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xb,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xc,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xd,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xe,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xf,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x10,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x11,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x12,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x13,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x14,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x15,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x16,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x17,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x13364879816394e38a2d72bde23bda93,0x1,0x0 -0x1,0x1,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xcd39885c6bfdedbc45e6bafcfc8fa685,0x1,0x0 -0x1,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0e0e4c9d03746d287b341d52461946a1,0x1,0x0 -0x1,0x1,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xc865002c35ba9bd6b789fc26a526d121,0x1,0x0 -0x1,0x1,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0e82be8514331e947408a3a27a54d580,0x1,0x0 -0x1,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x1,0x0 -0x1,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0f89c9a7bb2eb9418d2d89310306196d,0x1,0x0 -0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x1,0x0 -0x1,0x1,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x1,0x0 -0x1,0x1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x1,0x0 -0x1,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x11497987c563ade267b3bdfcc9c04022,0x1,0x0 -0x1,0x1,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x1,0x0 -0x1,0x1,0x24,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x1,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x1,0x0 -0x1,0x1,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x4c95627608bdbb0235762c7048400f93,0x1,0x0 -0x1,0x1,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x1,0x0 -0x1,0x1,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x1,0x0 -0x1,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x1,0x0 -0x1,0x1,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x1,0x0 -0x1,0x1,0x2a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2b45ce688738a571621b63dba9880856,0x1,0x0 -0x1,0x1,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x1,0x0 -0x1,0x1,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x653b8af047158278411df902874a82a,0x1,0x0 -0x1,0x1,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x1,0x0 -0x1,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1373a842ceca78f2ae076804f168559c,0x1,0x0 -0x1,0x1,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x1,0x0 -0x1,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x1,0x0 -0x1,0x1,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2f12833bfd8a1711d7947461776699df,0x1,0x0 -0x1,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x1,0x0 -0x1,0x1,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x1,0x0 -0x1,0x1,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x1,0x0 -0x1,0x1,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x1,0x0 -0x1,0x1,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x22af99c52785193aa8920826c0d96380,0x1,0x0 -0x1,0x1,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x1,0x0 -0x1,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x1,0x0 -0x1,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x217f227c48e2682613693d3afb8231e,0x1,0x0 -0x1,0x1,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x5641ef4d251e87484afef7cae876258,0x1,0x0 -0x1,0x1,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x1,0x0 -0x1,0x1,0x3c,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x0,0x1 -0x1,0x1,0x3d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x4c95627608bdbb0235762c7048400f93,0x0,0x1 -0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x0,0x1 -0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x0,0x1 -0x1,0x1,0x40,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x0,0x1 -0x1,0x1,0x41,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x0,0x1 -0x1,0x1,0x42,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2b45ce688738a571621b63dba9880856,0x0,0x1 -0x1,0x1,0x43,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x0,0x1 -0x1,0x1,0x44,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x653b8af047158278411df902874a82a,0x0,0x1 -0x1,0x1,0x45,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x0,0x1 -0x1,0x1,0x46,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1373a842ceca78f2ae076804f168559c,0x0,0x1 -0x1,0x1,0x47,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x0,0x1 -0x1,0x1,0x48,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x0,0x1 -0x1,0x1,0x49,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2f12833bfd8a1711d7947461776699df,0x0,0x1 -0x1,0x1,0x4a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x0,0x1 -0x1,0x1,0x4b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x0,0x1 -0x1,0x1,0x4c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x0,0x1 -0x1,0x1,0x4d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x0,0x1 -0x1,0x1,0x4e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x22af99c52785193aa8920826c0d96380,0x0,0x1 -0x1,0x1,0x4f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x0,0x1 -0x1,0x1,0x50,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x0,0x1 -0x1,0x1,0x51,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x217f227c48e2682613693d3afb8231e,0x0,0x1 -0x1,0x1,0x52,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x5641ef4d251e87484afef7cae876258,0x0,0x1 -0x1,0x1,0x53,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x0,0x1 -0x1,0x1,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x0b9624a62e115247146d4643e8d4daf0,0x0,0x1 -0x1,0x1,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x0,0x1 -0x1,0x1,0x56,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1cb9908c06bf3099f1538277102b31e3,0x0,0x1 -0x1,0x1,0x57,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1d022dc64770bc130df14daef72830e4,0x0,0x1 -0x1,0x1,0x58,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x2977858b214a3cb43fa4024976dd1675,0x0,0x1 -0x1,0x1,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9b1bf5367e6318da3545e697b9931671,0x0,0x1 -0x1,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x06fcfd4b9ca03fb145ff273e480efda3,0x0,0x1 -0x1,0x1,0x5b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc8a7aef64882efcbd8920b4458e1ef3d,0x0,0x1 -0x1,0x1,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x281508326108309778f9cdf9c39a4c4d,0x0,0x1 -0x1,0x1,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc90a405c0cfbfd5d20fec4e47acce66f,0x0,0x1 -0x1,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x10d24b6f0b87c1e3f78b80b967bac765,0x0,0x1 -0x1,0x1,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x763f38c53a4377e9a97e2761758a92f1,0x0,0x1 -0x1,0x1,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x0,0x0,0x1 -0x1,0x1,0x61,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x1,0x0,0x1 -0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x1,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 -0x1,0x1,0x2,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x3,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x4,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x5,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x6,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x7,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x8,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x9,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xa,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xb,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xc,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xd,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xe,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0xf,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x10,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x11,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x12,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x13,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x14,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x15,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x16,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x17,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 -0x1,0x1,0x18,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0b9624a62e115247146d4643e8d4daf0,0x1,0x0 -0x1,0x1,0x19,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x1,0x0 -0x1,0x1,0x1a,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x13aabde6da726f8fc6fcc33f7156267a,0x1,0x0 -0x1,0x1,0x1b,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x7a7f3ccb21010e7a2e2f3e67e154cc63,0x1,0x0 -0x1,0x1,0x1c,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0e82be8514331e947408a3a27a54d580,0x1,0x0 -0x1,0x1,0x1d,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x1,0x0 -0x1,0x1,0x1e,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x0f89c9a7bb2eb9418d2d89310306196d,0x1,0x0 -0x1,0x1,0x1f,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x1,0x0 -0x1,0x1,0x20,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x1,0x0 -0x1,0x1,0x21,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x1,0x0 -0x1,0x1,0x22,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x11497987c563ade267b3bdfcc9c04022,0x1,0x0 -0x1,0x1,0x23,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x1,0x0 -0x1,0x1,0x24,0x1,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x1,0x2,0x1d986c0862b80ece8d231a383cb73943,0x1,0x0 -0x1,0x1,0x25,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x3dbbc8770d85f0584f6dc86875624cea,0x1,0x0 -0x1,0x1,0x26,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x3c51f8072e2a8a07f6a06f5088e9ab2,0x1,0x0 -0x1,0x1,0x27,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xdbc106c833cd19dffcb9e1073ec1805c,0x1,0x0 -0x1,0x1,0x28,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x24ef30331e45aacaa2c0db503198129d,0x1,0x0 -0x1,0x1,0x29,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x698da943542b3b26946e11a08dc6144,0x1,0x0 -0x1,0x1,0x2a,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x229bffeec7cae24f754f3353492e06b7,0x1,0x0 -0x1,0x1,0x2b,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x38b7714ed0c32e48e7afaf62a4efa110,0x1,0x0 -0x1,0x1,0x2c,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x10bc1cc6e37e745faa3ed918cc36edc9,0x1,0x0 -0x1,0x1,0x2d,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x21edc644688a0705476f795d39af8b66,0x1,0x0 -0x1,0x1,0x2e,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2adcf726eec4f68995c3207f92aea375,0x1,0x0 -0x1,0x1,0x2f,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xfcd13ed4fe7b43ad615735680a4485e7,0x1,0x0 -0x1,0x1,0x30,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1f0e7e775eefc2a5672928b4efc2c508,0x1,0x0 -0x1,0x1,0x31,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xd1b9522023a1105027220223481cad5e,0x1,0x0 -0x1,0x1,0x32,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x241401f805f060cf5e55b76d0a1d9703,0x1,0x0 -0x1,0x1,0x33,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x623d8250a84288f9a9d6b32e4a79ab25,0x1,0x0 -0x1,0x1,0x34,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2aefa1de34a54b19496ac527550823fc,0x1,0x0 -0x1,0x1,0x35,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x4b742adbe4a5e836b5a4c3c601d721be,0x1,0x0 -0x1,0x1,0x36,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x2feeac4095267db703b602ff985fc423,0x1,0x0 -0x1,0x1,0x37,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x235e6c11ea98a28c6a34a72c6ee2ddc,0x1,0x0 -0x1,0x1,0x38,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x1d75dcc79d6ddd435182ca5de99635c0,0x1,0x0 -0x1,0x1,0x39,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x212f3e7e80bdfa698ac725005f8dae63,0x1,0x0 -0x1,0x1,0x3a,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0x5aeef8c0490c8356ffdd4913155eb21,0x1,0x0 -0x1,0x1,0x3b,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x2,0xd66a1367a4c8c3f6c041b4227c1bf352,0x1,0x0 -0x1,0x1,0x3c,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1d986c0862b80ece8d231a383cb73943,0x0,0x1 -0x1,0x1,0x3d,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x3dbbc8770d85f0584f6dc86875624cea,0x0,0x1 -0x1,0x1,0x3e,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x3c51f8072e2a8a07f6a06f5088e9ab2,0x0,0x1 -0x1,0x1,0x3f,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xdbc106c833cd19dffcb9e1073ec1805c,0x0,0x1 -0x1,0x1,0x40,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x24ef30331e45aacaa2c0db503198129d,0x0,0x1 -0x1,0x1,0x41,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x698da943542b3b26946e11a08dc6144,0x0,0x1 -0x1,0x1,0x42,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x229bffeec7cae24f754f3353492e06b7,0x0,0x1 -0x1,0x1,0x43,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x38b7714ed0c32e48e7afaf62a4efa110,0x0,0x1 -0x1,0x1,0x44,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x10bc1cc6e37e745faa3ed918cc36edc9,0x0,0x1 -0x1,0x1,0x45,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x21edc644688a0705476f795d39af8b66,0x0,0x1 -0x1,0x1,0x46,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2adcf726eec4f68995c3207f92aea375,0x0,0x1 -0x1,0x1,0x47,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xfcd13ed4fe7b43ad615735680a4485e7,0x0,0x1 -0x1,0x1,0x48,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1f0e7e775eefc2a5672928b4efc2c508,0x0,0x1 -0x1,0x1,0x49,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xd1b9522023a1105027220223481cad5e,0x0,0x1 -0x1,0x1,0x4a,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x241401f805f060cf5e55b76d0a1d9703,0x0,0x1 -0x1,0x1,0x4b,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x623d8250a84288f9a9d6b32e4a79ab25,0x0,0x1 -0x1,0x1,0x4c,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2aefa1de34a54b19496ac527550823fc,0x0,0x1 -0x1,0x1,0x4d,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x4b742adbe4a5e836b5a4c3c601d721be,0x0,0x1 -0x1,0x1,0x4e,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x2feeac4095267db703b602ff985fc423,0x0,0x1 -0x1,0x1,0x4f,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x235e6c11ea98a28c6a34a72c6ee2ddc,0x0,0x1 -0x1,0x1,0x50,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x1d75dcc79d6ddd435182ca5de99635c0,0x0,0x1 -0x1,0x1,0x51,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x212f3e7e80bdfa698ac725005f8dae63,0x0,0x1 -0x1,0x1,0x52,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0x5aeef8c0490c8356ffdd4913155eb21,0x0,0x1 -0x1,0x1,0x53,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x2,0xd66a1367a4c8c3f6c041b4227c1bf352,0x0,0x1 -0x1,0x1,0x54,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x0b9624a62e115247146d4643e8d4daf0,0x0,0x1 -0x1,0x1,0x55,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x0,0x1 -0x1,0x1,0x56,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1cb9908c06bf3099f1538277102b31e3,0x0,0x1 -0x1,0x1,0x57,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1d022dc64770bc130df14daef72830e4,0x0,0x1 -0x1,0x1,0x58,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x0e82be8514331e947408a3a27a54d580,0x0,0x1 -0x1,0x1,0x59,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x0,0x1 -0x1,0x1,0x5a,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x0f89c9a7bb2eb9418d2d89310306196d,0x0,0x1 -0x1,0x1,0x5b,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x0,0x1 -0x1,0x1,0x5c,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x0,0x1 -0x1,0x1,0x5d,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x0,0x1 -0x1,0x1,0x5e,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x11497987c563ade267b3bdfcc9c04022,0x0,0x1 -0x1,0x1,0x5f,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x0,0x1 -0x1,0x1,0x60,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x0,0x0,0x1 -0x1,0x1,0x61,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x2,0x1,0x0,0x1 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +ECPAIR_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACTIVE,ECPAIR_UNALIGNED_PAIRING_DATA_INDEX,ECPAIR_UNALIGNED_PAIRING_DATA_INSTANCE_ID,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_INSTANCE,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_INIT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_PREV_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_PREV,ECPAIR_UNALIGNED_PAIRING_DATA_IS_FIRST_LINE_OF_CURR_ACC,ECPAIR_UNALIGNED_PAIRING_DATA_IS_ACCUMULATOR_CURR,ECPAIR_UNALIGNED_PAIRING_DATA_IS_RESULT,ECPAIR_UNALIGNED_PAIRING_DATA_IS_COMPUTED,ECPAIR_UNALIGNED_PAIRING_DATA_IS_PULLING,ECPAIR_UNALIGNED_PAIRING_DATA_PAIR_ID,ECPAIR_UNALIGNED_PAIRING_DATA_TOTAL_PAIRS,ECPAIR_UNALIGNED_PAIRING_DATA_LIMB,ECPAIR_UNALIGNED_PAIRING_DATA_TO_MILLER_LOOP_CIRCUIT,ECPAIR_UNALIGNED_PAIRING_DATA_TO_FINAL_EXP_CIRCUIT +0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 +0x1,0x1,0x2,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x4,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x5,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x6,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x7,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x8,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x9,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xa,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xb,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xc,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xd,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xe,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xf,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x10,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x11,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x12,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x13,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x14,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x15,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x16,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x17,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x13364879816394e38a2d72bde23bda93,0x1,0x0 +0x1,0x1,0x19,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xcd39885c6bfdedbc45e6bafcfc8fa685,0x1,0x0 +0x1,0x1,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe0e4c9d03746d287b341d52461946a1,0x1,0x0 +0x1,0x1,0x1b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xc865002c35ba9bd6b789fc26a526d121,0x1,0x0 +0x1,0x1,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe82be8514331e947408a3a27a54d580,0x1,0x0 +0x1,0x1,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x1,0x0 +0x1,0x1,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf89c9a7bb2eb9418d2d89310306196d,0x1,0x0 +0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x1,0x0 +0x1,0x1,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x1,0x0 +0x1,0x1,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x1,0x0 +0x1,0x1,0x22,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x11497987c563ade267b3bdfcc9c04022,0x1,0x0 +0x1,0x1,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x1,0x0 +0x1,0x1,0x24,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x1,0x0 +0x1,0x1,0x25,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x4c95627608bdbb0235762c7048400f93,0x1,0x0 +0x1,0x1,0x26,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x1,0x0 +0x1,0x1,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x1,0x0 +0x1,0x1,0x28,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x1,0x0 +0x1,0x1,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x1,0x0 +0x1,0x1,0x2a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2b45ce688738a571621b63dba9880856,0x1,0x0 +0x1,0x1,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x1,0x0 +0x1,0x1,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x653b8af047158278411df902874a82a,0x1,0x0 +0x1,0x1,0x2d,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x1,0x0 +0x1,0x1,0x2e,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1373a842ceca78f2ae076804f168559c,0x1,0x0 +0x1,0x1,0x2f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x1,0x0 +0x1,0x1,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x1,0x0 +0x1,0x1,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2f12833bfd8a1711d7947461776699df,0x1,0x0 +0x1,0x1,0x32,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x1,0x0 +0x1,0x1,0x33,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x1,0x0 +0x1,0x1,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x1,0x0 +0x1,0x1,0x35,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x1,0x0 +0x1,0x1,0x36,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x22af99c52785193aa8920826c0d96380,0x1,0x0 +0x1,0x1,0x37,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x1,0x0 +0x1,0x1,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x1,0x0 +0x1,0x1,0x39,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x217f227c48e2682613693d3afb8231e,0x1,0x0 +0x1,0x1,0x3a,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x5641ef4d251e87484afef7cae876258,0x1,0x0 +0x1,0x1,0x3b,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x1,0x0 +0x1,0x1,0x3c,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1fc57e97fc7f579bbc2ba220d9b10d46,0x0,0x1 +0x1,0x1,0x3d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x4c95627608bdbb0235762c7048400f93,0x0,0x1 +0x1,0x1,0x3e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2b4305dcdfcf51d41a169cbe7b4e89d4,0x0,0x1 +0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x59f4578a51cdbe050925fc0b9312aa86,0x0,0x1 +0x1,0x1,0x40,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1133d6c9d0cacf4e7cd03b8ae8654f3b,0x0,0x1 +0x1,0x1,0x41,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xfbfc80323c91c70825d4aa8accfd77b8,0x0,0x1 +0x1,0x1,0x42,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2b45ce688738a571621b63dba9880856,0x0,0x1 +0x1,0x1,0x43,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x9dd4ff917cefc257d7cfe3ea571e206a,0x0,0x1 +0x1,0x1,0x44,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x653b8af047158278411df902874a82a,0x0,0x1 +0x1,0x1,0x45,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x401206aafb12aa7c2d704f51f115d8c2,0x0,0x1 +0x1,0x1,0x46,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1373a842ceca78f2ae076804f168559c,0x0,0x1 +0x1,0x1,0x47,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1781cbb3451085c1166bdadbc7c92688,0x0,0x1 +0x1,0x1,0x48,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2c8c1f272129cf6b0866ad1d8f3ac818,0x0,0x1 +0x1,0x1,0x49,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2f12833bfd8a1711d7947461776699df,0x0,0x1 +0x1,0x1,0x4a,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x16e10599cfcd3537d808d197ce64c2c5,0x0,0x1 +0x1,0x1,0x4b,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xdaf005b2c0be94b08c52e30acfb098e,0x0,0x1 +0x1,0x1,0x4c,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xd5d04cfad426760d9019d3d15b98aee,0x0,0x1 +0x1,0x1,0x4d,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x8c37f28a10bb3cfa2f3971505c77db23,0x0,0x1 +0x1,0x1,0x4e,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x22af99c52785193aa8920826c0d96380,0x0,0x1 +0x1,0x1,0x4f,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xe8213976bbbab27922a2cd8c8fe4adeb,0x0,0x1 +0x1,0x1,0x50,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xa6356a8a0caaec7d1a28661b990a20b,0x0,0x1 +0x1,0x1,0x51,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x217f227c48e2682613693d3afb8231e,0x0,0x1 +0x1,0x1,0x52,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x5641ef4d251e87484afef7cae876258,0x0,0x1 +0x1,0x1,0x53,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xc199d8553a68a9408d2603bd9ff29c36,0x0,0x1 +0x1,0x1,0x54,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xb9624a62e115247146d4643e8d4daf0,0x0,0x1 +0x1,0x1,0x55,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x0,0x1 +0x1,0x1,0x56,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1cb9908c06bf3099f1538277102b31e3,0x0,0x1 +0x1,0x1,0x57,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1d022dc64770bc130df14daef72830e4,0x0,0x1 +0x1,0x1,0x58,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x2977858b214a3cb43fa4024976dd1675,0x0,0x1 +0x1,0x1,0x59,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9b1bf5367e6318da3545e697b9931671,0x0,0x1 +0x1,0x1,0x5a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x6fcfd4b9ca03fb145ff273e480efda3,0x0,0x1 +0x1,0x1,0x5b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc8a7aef64882efcbd8920b4458e1ef3d,0x0,0x1 +0x1,0x1,0x5c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x281508326108309778f9cdf9c39a4c4d,0x0,0x1 +0x1,0x1,0x5d,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xc90a405c0cfbfd5d20fec4e47acce66f,0x0,0x1 +0x1,0x1,0x5e,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x10d24b6f0b87c1e3f78b80b967bac765,0x0,0x1 +0x1,0x1,0x5f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x763f38c53a4377e9a97e2761758a92f1,0x0,0x1 +0x1,0x1,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x0,0x0,0x1 +0x1,0x1,0x61,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x1,0x0,0x1 +0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x1,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x1,0x1,0x0 +0x1,0x1,0x2,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x3,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x4,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x5,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x6,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x7,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x8,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x9,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xa,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xb,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xc,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xd,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xe,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0xf,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x10,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x11,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x12,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x13,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x14,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x15,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x16,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x17,0x1,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x2,0x0,0x1,0x0 +0x1,0x1,0x18,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xb9624a62e115247146d4643e8d4daf0,0x1,0x0 +0x1,0x1,0x19,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x1,0x0 +0x1,0x1,0x1a,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x13aabde6da726f8fc6fcc33f7156267a,0x1,0x0 +0x1,0x1,0x1b,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x7a7f3ccb21010e7a2e2f3e67e154cc63,0x1,0x0 +0x1,0x1,0x1c,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xe82be8514331e947408a3a27a54d580,0x1,0x0 +0x1,0x1,0x1d,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x1,0x0 +0x1,0x1,0x1e,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf89c9a7bb2eb9418d2d89310306196d,0x1,0x0 +0x1,0x1,0x1f,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x1,0x0 +0x1,0x1,0x20,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x1,0x0 +0x1,0x1,0x21,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x1,0x0 +0x1,0x1,0x22,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x11497987c563ade267b3bdfcc9c04022,0x1,0x0 +0x1,0x1,0x23,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x1,0x0 +0x1,0x1,0x24,0x1,0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x1,0x0,0x1,0x2,0x1d986c0862b80ece8d231a383cb73943,0x1,0x0 +0x1,0x1,0x25,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x3dbbc8770d85f0584f6dc86875624cea,0x1,0x0 +0x1,0x1,0x26,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x3c51f8072e2a8a07f6a06f5088e9ab2,0x1,0x0 +0x1,0x1,0x27,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xdbc106c833cd19dffcb9e1073ec1805c,0x1,0x0 +0x1,0x1,0x28,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x24ef30331e45aacaa2c0db503198129d,0x1,0x0 +0x1,0x1,0x29,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x698da943542b3b26946e11a08dc6144,0x1,0x0 +0x1,0x1,0x2a,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x229bffeec7cae24f754f3353492e06b7,0x1,0x0 +0x1,0x1,0x2b,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x38b7714ed0c32e48e7afaf62a4efa110,0x1,0x0 +0x1,0x1,0x2c,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x10bc1cc6e37e745faa3ed918cc36edc9,0x1,0x0 +0x1,0x1,0x2d,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x21edc644688a0705476f795d39af8b66,0x1,0x0 +0x1,0x1,0x2e,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2adcf726eec4f68995c3207f92aea375,0x1,0x0 +0x1,0x1,0x2f,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xfcd13ed4fe7b43ad615735680a4485e7,0x1,0x0 +0x1,0x1,0x30,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1f0e7e775eefc2a5672928b4efc2c508,0x1,0x0 +0x1,0x1,0x31,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xd1b9522023a1105027220223481cad5e,0x1,0x0 +0x1,0x1,0x32,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x241401f805f060cf5e55b76d0a1d9703,0x1,0x0 +0x1,0x1,0x33,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x623d8250a84288f9a9d6b32e4a79ab25,0x1,0x0 +0x1,0x1,0x34,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2aefa1de34a54b19496ac527550823fc,0x1,0x0 +0x1,0x1,0x35,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x4b742adbe4a5e836b5a4c3c601d721be,0x1,0x0 +0x1,0x1,0x36,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x2feeac4095267db703b602ff985fc423,0x1,0x0 +0x1,0x1,0x37,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x235e6c11ea98a28c6a34a72c6ee2ddc,0x1,0x0 +0x1,0x1,0x38,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x1d75dcc79d6ddd435182ca5de99635c0,0x1,0x0 +0x1,0x1,0x39,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x212f3e7e80bdfa698ac725005f8dae63,0x1,0x0 +0x1,0x1,0x3a,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0x5aeef8c0490c8356ffdd4913155eb21,0x1,0x0 +0x1,0x1,0x3b,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x1,0x2,0xd66a1367a4c8c3f6c041b4227c1bf352,0x1,0x0 +0x1,0x1,0x3c,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1d986c0862b80ece8d231a383cb73943,0x0,0x1 +0x1,0x1,0x3d,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x3dbbc8770d85f0584f6dc86875624cea,0x0,0x1 +0x1,0x1,0x3e,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x3c51f8072e2a8a07f6a06f5088e9ab2,0x0,0x1 +0x1,0x1,0x3f,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xdbc106c833cd19dffcb9e1073ec1805c,0x0,0x1 +0x1,0x1,0x40,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x24ef30331e45aacaa2c0db503198129d,0x0,0x1 +0x1,0x1,0x41,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x698da943542b3b26946e11a08dc6144,0x0,0x1 +0x1,0x1,0x42,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x229bffeec7cae24f754f3353492e06b7,0x0,0x1 +0x1,0x1,0x43,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x38b7714ed0c32e48e7afaf62a4efa110,0x0,0x1 +0x1,0x1,0x44,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x10bc1cc6e37e745faa3ed918cc36edc9,0x0,0x1 +0x1,0x1,0x45,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x21edc644688a0705476f795d39af8b66,0x0,0x1 +0x1,0x1,0x46,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2adcf726eec4f68995c3207f92aea375,0x0,0x1 +0x1,0x1,0x47,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xfcd13ed4fe7b43ad615735680a4485e7,0x0,0x1 +0x1,0x1,0x48,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1f0e7e775eefc2a5672928b4efc2c508,0x0,0x1 +0x1,0x1,0x49,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xd1b9522023a1105027220223481cad5e,0x0,0x1 +0x1,0x1,0x4a,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x241401f805f060cf5e55b76d0a1d9703,0x0,0x1 +0x1,0x1,0x4b,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x623d8250a84288f9a9d6b32e4a79ab25,0x0,0x1 +0x1,0x1,0x4c,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2aefa1de34a54b19496ac527550823fc,0x0,0x1 +0x1,0x1,0x4d,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x4b742adbe4a5e836b5a4c3c601d721be,0x0,0x1 +0x1,0x1,0x4e,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x2feeac4095267db703b602ff985fc423,0x0,0x1 +0x1,0x1,0x4f,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x235e6c11ea98a28c6a34a72c6ee2ddc,0x0,0x1 +0x1,0x1,0x50,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x1d75dcc79d6ddd435182ca5de99635c0,0x0,0x1 +0x1,0x1,0x51,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x212f3e7e80bdfa698ac725005f8dae63,0x0,0x1 +0x1,0x1,0x52,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0x5aeef8c0490c8356ffdd4913155eb21,0x0,0x1 +0x1,0x1,0x53,0x1,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,0x0,0x2,0x2,0xd66a1367a4c8c3f6c041b4227c1bf352,0x0,0x1 +0x1,0x1,0x54,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xb9624a62e115247146d4643e8d4daf0,0x0,0x1 +0x1,0x1,0x55,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x7ff180000fcf9f02c84cc5692b2c0526,0x0,0x1 +0x1,0x1,0x56,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1cb9908c06bf3099f1538277102b31e3,0x0,0x1 +0x1,0x1,0x57,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x1d022dc64770bc130df14daef72830e4,0x0,0x1 +0x1,0x1,0x58,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xe82be8514331e947408a3a27a54d580,0x0,0x1 +0x1,0x1,0x59,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x9866db37d74db5abc7de8f0d3d0f7ee3,0x0,0x1 +0x1,0x1,0x5a,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xf89c9a7bb2eb9418d2d89310306196d,0x0,0x1 +0x1,0x1,0x5b,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xf1ae8d9de0173f3e1151487bb5157cd7,0x0,0x1 +0x1,0x1,0x5c,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x10b30b9925aace81dcec2ccce77c3eea,0x0,0x1 +0x1,0x1,0x5d,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0xa949c366d7cd71a6a6748bcdd996b762,0x0,0x1 +0x1,0x1,0x5e,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x11497987c563ade267b3bdfcc9c04022,0x0,0x1 +0x1,0x1,0x5f,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x2,0x3e25664c3bcdd28858b1daa7ac249034,0x0,0x1 +0x1,0x1,0x60,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x0,0x0,0x1 +0x1,0x1,0x61,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1,0x0,0x2,0x1,0x0,0x1 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 diff --git a/prover/zkevm/prover/ecpair/testdata/testdata_generator_manual_test.go b/prover/zkevm/prover/ecpair/testdata/testdata_generator_manual_test.go new file mode 100644 index 000000000..7f0eb91a3 --- /dev/null +++ b/prover/zkevm/prover/ecpair/testdata/testdata_generator_manual_test.go @@ -0,0 +1,765 @@ +package testdata + +import ( + "crypto/rand" + "fmt" + "math/big" + "testing" + + "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/consensys/gnark-crypto/ecc/bn254/fp" + "github.com/consensys/gnark-crypto/ecc/bn254/fr" + "github.com/consensys/gnark/test" +) + +func TestPairingCheckData(t *testing.T) { + t.Skip("skipping test, called manually when needed") + assert := test.NewAssert(t) + _, _, p, q := bn254.Generators() + + var u, v fr.Element + u.SetInt64(1234) + v.SetInt64(5678) + // u.SetRandom() + // v.SetRandom() + + p.ScalarMultiplication(&p, u.BigInt(new(big.Int))) + q.ScalarMultiplication(&q, v.BigInt(new(big.Int))) + + var p1, p2 bn254.G1Affine + var q1, q2 bn254.G2Affine + p1.Double(&p) + p2.Neg(&p) + q1.Set(&q) + q2.Double(&q) + + ok, err := bn254.PairingCheck([]bn254.G1Affine{p1, p2}, []bn254.G2Affine{q1, q2}) + assert.NoError(err) + assert.True(ok) + + px := p1.X.Bytes() + py := p1.Y.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n", px[0:16], px[16:32], py[0:16], py[16:32]) + qxre := q1.X.A0.Bytes() + qxim := q1.X.A1.Bytes() + qyre := q1.Y.A0.Bytes() + qyim := q1.Y.A1.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n", + qxre[0:16], qxre[16:32], qxim[0:16], qxim[16:32], qyre[0:16], qyre[16:32], qyim[0:16], qyim[16:32]) + + p2x := p2.X.Bytes() + p2y := p2.Y.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n", p2x[0:16], p2x[16:32], p2y[0:16], p2y[16:32]) + q2xre := q2.X.A0.Bytes() + q2xim := q2.X.A1.Bytes() + q2yre := q2.Y.A0.Bytes() + q2yim := q2.Y.A1.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n", + q2xre[0:16], q2xre[16:32], q2xim[0:16], q2xim[16:32], q2yre[0:16], q2yre[16:32], q2yim[0:16], q2yim[16:32]) +} + +func TestPairingFailingCheckData(t *testing.T) { + t.Skip("skipping test, called manually when needed") + assert := test.NewAssert(t) + var p2 bn254.G1Affine + var q2 bn254.G2Affine + _, _, p, q := bn254.Generators() + + var u, v fr.Element + u.SetInt64(6235) + v.SetInt64(76235) + // u.SetRandom() + // v.SetRandom() + + p.ScalarMultiplication(&p, big.NewInt(12390)) + q.ScalarMultiplication(&q, big.NewInt(12489)) + p2.ScalarMultiplicationBase(big.NewInt(79975)) + q2.ScalarMultiplicationBase(big.NewInt(48916)) + + ok, err := bn254.PairingCheck([]bn254.G1Affine{p, p2}, []bn254.G2Affine{q, q2}) + assert.NoError(err) + assert.False(ok) + + px := p.X.Bytes() + py := p.Y.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n", px[0:16], px[16:32], py[0:16], py[16:32]) + qxre := q.X.A0.Bytes() + qxim := q.X.A1.Bytes() + qyre := q.Y.A0.Bytes() + qyim := q.Y.A1.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n", + qxre[0:16], qxre[16:32], qxim[0:16], qxim[16:32], qyre[0:16], qyre[16:32], qyim[0:16], qyim[16:32]) + + p2x := p2.X.Bytes() + p2y := p2.Y.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n", p2x[0:16], p2x[16:32], p2y[0:16], p2y[16:32]) + q2xre := q2.X.A0.Bytes() + q2xim := q2.X.A1.Bytes() + q2yre := q2.Y.A0.Bytes() + q2yim := q2.Y.A1.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n", + q2xre[0:16], q2xre[16:32], q2xim[0:16], q2xim[16:32], q2yre[0:16], q2yre[16:32], q2yim[0:16], q2yim[16:32]) +} + +func TestAddData(t *testing.T) { + t.Skip("skipping test, called manually when needed") + for i := 0; i < 4; i++ { + var p, q bn254.G1Affine + s1, err := rand.Int(rand.Reader, fr.Modulus()) + if err != nil { + t.Fatal(err) + } + s2, err := rand.Int(rand.Reader, fr.Modulus()) + if err != nil { + t.Fatal(err) + } + // s1 = big.NewInt(0) + // s2 = big.NewInt(0) + p.ScalarMultiplicationBase(s1) + q.ScalarMultiplicationBase(s2) + var r bn254.G1Affine + r.Add(&p, &q) + + pxb := p.X.Bytes() + pyb := p.Y.Bytes() + qxb := q.X.Bytes() + qyb := q.Y.Bytes() + rxb := r.X.Bytes() + ryb := r.Y.Bytes() + fmt.Println(i) + fmt.Printf("PXHI=0x%x\nPXLO=0x%x\nPYHI=0x%x\nPYLO=0x%x\nQXHI=0x%x\nQXLO=0x%x\nQYHI=0x%x\nQYLO=0x%x\nQXHI=0x%x\nQXLO=0x%x\nRYHI=0x%x\nRYLO=0x%x\n", + pxb[0:16], pxb[16:32], + pyb[0:16], pyb[16:32], + qxb[0:16], qxb[16:32], + qyb[0:16], qyb[16:32], + rxb[0:16], rxb[16:32], + ryb[0:16], ryb[16:32], + ) + } +} + +// small points +// malformed +// large coordinates +// coordinates in range but not satisfying the curve equation +// well-formed +// just a few points of the C1 curve drawn at random +// large points +// malformed +// large coordinates +// small coordinates but not satisfying the curve equation +// small coordinates, satisfying the curve equation but not belonging to the G2 subgroup +// well-formed +// just a few points on G2 drawn at random + +func TestDataSmallMalformedLarge(t *testing.T) { + t.Skip("skipping test, called manually when needed") + fmt.Println("fp = ", fp.Modulus()) + _, _, p, _ := bn254.Generators() + // var px [32]byte + // p.X.BigInt(new(big.Int)).FillBytes(px[:]) + // pb := p.X.Bytes() + // if !bytes.Equal(pb[:], px[:]) { + // t.Fatal("failed to marshal point") + // } + + // bound 2^256-modulus + bound := new(big.Int).Lsh(big.NewInt(1), 256) + bound.Sub(bound, fp.Modulus()) + + var buf [32]byte + + // test 1, X large and Y in range + x, _ := rand.Int(rand.Reader, bound) + x.Add(x, fp.Modulus()) + y, _ := rand.Int(rand.Reader, fp.Modulus()) + fmt.Println("= X large and Y in range (not necessarily satisfying curve equation) =") + x.FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + y.FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) + + // test 2, X large and Y in range + x, _ = rand.Int(rand.Reader, fp.Modulus()) + y, _ = rand.Int(rand.Reader, bound) + y.Add(y, fp.Modulus()) + fmt.Println("= X in range and Y large (not necessarily satisfying curve equation) =") + x.FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + y.FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) + + // test 3, X large and Y large + x, _ = rand.Int(rand.Reader, bound) + x.Add(x, fp.Modulus()) + y, _ = rand.Int(rand.Reader, bound) + y.Add(y, fp.Modulus()) + fmt.Println("= X large and Y large (not necessarily satisfying curve equation) =") + x.FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + y.FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) + + // test 4 - test 1 but satisfying curve equation + s, _ := rand.Int(rand.Reader, fr.Modulus()) + p.ScalarMultiplicationBase(s) + px := p.X.BigInt(new(big.Int)) + px.Add(px, fp.Modulus()) + fmt.Println("= X large and Y in range (satisfying curve equation) =") + px.FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + p.Y.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) + + // test 5 - test 2 but satisfying curve equation + s, _ = rand.Int(rand.Reader, fr.Modulus()) + p.ScalarMultiplicationBase(s) + py := p.X.BigInt(new(big.Int)) + py.Add(py, fp.Modulus()) + fmt.Println("= X in range and Y large (satisfying curve equation) =") + p.X.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + py.FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) + + // test 6 - test 3 but satisfying curve equation + s, _ = rand.Int(rand.Reader, fr.Modulus()) + p.ScalarMultiplicationBase(s) + px = p.X.BigInt(new(big.Int)) + px.Add(px, fp.Modulus()) + py = p.Y.BigInt(new(big.Int)) + py.Add(py, fp.Modulus()) + fmt.Println("= X large and Y large (satisfying curve equation) =") + px.FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + py.FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) +} + +func TestDataSmallMalformedNotCurve(t *testing.T) { + t.Skip("skipping test, called manually when needed") + px, _ := rand.Int(rand.Reader, fp.Modulus()) + py, _ := rand.Int(rand.Reader, fp.Modulus()) + var p bn254.G1Affine + p.X.SetBigInt(px) + p.Y.SetBigInt(py) + if p.IsOnCurve() { + t.Fatal("point is on curve") + } + fmt.Println("= X and Y in range but not satisfying curve equation =") + var buf [32]byte + px.FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + py.FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) +} + +func TestDataSmallWell(t *testing.T) { + t.Skip("skipping test, called manually when needed") + for i := 0; i < 5; i++ { + var p bn254.G1Affine + s, _ := rand.Int(rand.Reader, fr.Modulus()) + p.ScalarMultiplicationBase(s) + fmt.Println("= random point in G1 =") + var buf [32]byte + p.X.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("X = 0x%x\n", buf[:]) + p.Y.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("Y = 0x%x\n", buf[:]) + } +} + +func TestDataLargeMalformedLarge(t *testing.T) { + t.Skip("skipping test, called manually when needed") + // bound 2^256-modulus + bound := new(big.Int).Lsh(big.NewInt(1), 256) + bound.Sub(bound, fp.Modulus()) + + var buf [32]byte + + // test 1, XA large, XB in range, YA in range, YB in range + xa, _ := rand.Int(rand.Reader, bound) + xa.Add(xa, fp.Modulus()) + xb, _ := rand.Int(rand.Reader, fp.Modulus()) + ya, _ := rand.Int(rand.Reader, fp.Modulus()) + yb, _ := rand.Int(rand.Reader, fp.Modulus()) + var q bn254.G2Affine + q.X.A0.SetBigInt(xa) + q.X.A1.SetBigInt(xb) + q.Y.A0.SetBigInt(ya) + q.Y.A1.SetBigInt(yb) + if q.IsOnCurve() { + t.Fatal("point is on curve") + } + fmt.Println("= XA large, XB in range, YA in range, YB in range =") + xa.FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + xb.FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + ya.FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + yb.FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) + + // test 2, XA in range, XB large, YA in range, YB in range + xa, _ = rand.Int(rand.Reader, fp.Modulus()) + xb, _ = rand.Int(rand.Reader, bound) + xb.Add(xb, fp.Modulus()) + ya, _ = rand.Int(rand.Reader, fp.Modulus()) + yb, _ = rand.Int(rand.Reader, fp.Modulus()) + q.X.A0.SetBigInt(xa) + q.X.A1.SetBigInt(xb) + q.Y.A0.SetBigInt(ya) + q.Y.A1.SetBigInt(yb) + if q.IsOnCurve() { + t.Fatal("point is on curve") + } + fmt.Println("= XA in range, XB large, YA in range, YB in range =") + xa.FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + xb.FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + ya.FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + yb.FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) + + // test 3, XA in range, XB in range, YA large, YB in range + xa, _ = rand.Int(rand.Reader, fp.Modulus()) + xb, _ = rand.Int(rand.Reader, fp.Modulus()) + ya, _ = rand.Int(rand.Reader, bound) + ya.Add(ya, fp.Modulus()) + yb, _ = rand.Int(rand.Reader, fp.Modulus()) + q.X.A0.SetBigInt(xa) + q.X.A1.SetBigInt(xb) + q.Y.A0.SetBigInt(ya) + q.Y.A1.SetBigInt(yb) + if q.IsOnCurve() { + t.Fatal("point is on curve") + } + fmt.Println("= XA in range, XB in range, YA large, YB in range =") + xa.FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + xb.FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + ya.FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + yb.FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) + + // test 4, XA in range, XB in range, YA in range, YB large + xa, _ = rand.Int(rand.Reader, fp.Modulus()) + xb, _ = rand.Int(rand.Reader, fp.Modulus()) + ya, _ = rand.Int(rand.Reader, fp.Modulus()) + yb, _ = rand.Int(rand.Reader, bound) + yb.Add(yb, fp.Modulus()) + q.X.A0.SetBigInt(xa) + q.X.A1.SetBigInt(xb) + q.Y.A0.SetBigInt(ya) + q.Y.A1.SetBigInt(yb) + if q.IsOnCurve() { + t.Fatal("point is on curve") + } + fmt.Println("= XA in range, XB in range, YA in range, YB large =") + xa.FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + xb.FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + ya.FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + yb.FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) + + // test 5, point in subgroup, but overflowing + s, _ := rand.Int(rand.Reader, fr.Modulus()) + q.ScalarMultiplicationBase(s) + xa = q.X.A0.BigInt(new(big.Int)) + xa.Add(xa, fp.Modulus()) + xb = q.X.A1.BigInt(new(big.Int)) + xb.Add(xb, fp.Modulus()) + ya = q.Y.A0.BigInt(new(big.Int)) + ya.Add(ya, fp.Modulus()) + yb = q.Y.A1.BigInt(new(big.Int)) + yb.Add(yb, fp.Modulus()) + q.X.A0.SetBigInt(xa) + q.X.A1.SetBigInt(xb) + q.Y.A0.SetBigInt(ya) + q.Y.A1.SetBigInt(yb) + if !q.IsOnCurve() { + t.Fatal("point is on curve") + } + fmt.Println("= point in subgroup, but overflowing =") + xa.FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + xb.FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + ya.FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + yb.FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) +} + +func TestDataLargeMalformedNotCurve(t *testing.T) { + t.Skip("skipping test, called manually when needed") + var q bn254.G2Affine + var buf [32]byte + xa, _ := rand.Int(rand.Reader, fp.Modulus()) + xb, _ := rand.Int(rand.Reader, fp.Modulus()) + ya, _ := rand.Int(rand.Reader, fp.Modulus()) + yb, _ := rand.Int(rand.Reader, fp.Modulus()) + yb.Add(yb, fp.Modulus()) + q.X.A0.SetBigInt(xa) + q.X.A1.SetBigInt(xb) + q.Y.A0.SetBigInt(ya) + q.Y.A1.SetBigInt(yb) + if q.IsOnCurve() { + t.Fatal("point is on curve") + } + fmt.Println("= point not on curve =") + xa.FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + xb.FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + ya.FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + yb.FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) +} + +func TestDataLargeMalformedNotSubgroup(t *testing.T) { + t.Skip("skipping test, called manually when needed") + var x, right, left, tmp, z, ZZ bn254.E2 + for { + xa, _ := rand.Int(rand.Reader, fp.Modulus()) + xb, _ := rand.Int(rand.Reader, fp.Modulus()) + x.A0.SetBigInt(xa) + x.A1.SetBigInt(xb) + za, _ := rand.Int(rand.Reader, fp.Modulus()) + zb, _ := rand.Int(rand.Reader, fp.Modulus()) + z.A0.SetBigInt(za) + z.A1.SetBigInt(zb) + right.Square(&x).Mul(&right, &x) + ZZ.Square(&z) + tmp.Square(&ZZ).Mul(&tmp, &ZZ) + tmp.MulBybTwistCurveCoeff(&tmp) + right.Add(&right, &tmp) + if right.Legendre() == 1 { + break + } + } + left.Sqrt(&right) + QJac := bn254.G2Jac{ + X: x, + Y: left, + Z: z, + } + if !QJac.IsOnCurve() { + t.Fatal("point is not on curve Jac") + } + var q bn254.G2Affine + q.FromJacobian(&QJac) + if !q.IsOnCurve() { + t.Fatal("point is not on curve") + } + if q.IsInSubGroup() { + t.Fatal("point is in subgroup") + } + + var buf [32]byte + fmt.Println("= point not in subgroup but on curve =") + q.X.A0.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + q.X.A1.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + q.Y.A0.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + q.Y.A1.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) +} + +func TestDataLargeWell(t *testing.T) { + t.Skip("skipping test, called manually when needed") + for i := 0; i < 5; i++ { + var q bn254.G2Affine + s, _ := rand.Int(rand.Reader, fr.Modulus()) + q.ScalarMultiplicationBase(s) + fmt.Println("= random point in G2 =") + var buf [32]byte + q.X.A0.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("XA = 0x%x\n", buf[:]) + q.X.A1.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("XB = 0x%x\n", buf[:]) + q.Y.A0.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("YA = 0x%x\n", buf[:]) + q.Y.A1.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("YB = 0x%x\n", buf[:]) + } +} + +func TestDataValidPairing(t *testing.T) { + t.Skip("skipping test, called manually when needed") + assert := test.NewAssert(t) + // pairing where result is 1. Two pairs of inputs + + // sp1 * sq1 + sp2 * sq2 == 0 + // sq2 = (-sp1 * sq1) / sp2 + var p1, p2 bn254.G1Affine + var q1, q2 bn254.G2Affine + sp1, _ := rand.Int(rand.Reader, fr.Modulus()) + sp2, _ := rand.Int(rand.Reader, fr.Modulus()) + sq1, _ := rand.Int(rand.Reader, fr.Modulus()) + tmp := new(big.Int) + tmp.ModInverse(sp2, fr.Modulus()) + tmp.Mul(tmp, sp1) + tmp.Mul(tmp, sq1) + tmp.Neg(tmp) + sq2 := new(big.Int).Mod(tmp, fr.Modulus()) + + p1.ScalarMultiplicationBase(sp1) + p2.ScalarMultiplicationBase(sp2) + q1.ScalarMultiplicationBase(sq1) + q2.ScalarMultiplicationBase(sq2) + ok, err := bn254.PairingCheck([]bn254.G1Affine{p1, p2}, []bn254.G2Affine{q1, q2}) + assert.NoError(err) + assert.True(ok) + fmt.Println("= double successful pairing =") + printP(p1) + printQ(q1) + fmt.Println() + printP(p2) + printQ(q2) + + // pairing where result is 1. Three pairs of inputs + // e(a, 2b) * e(2a, 2b) * e(-2a, 3b) == 1 + // 2 + 4 - 6 == 0 + var p3 bn254.G1Affine + var q3 bn254.G2Affine + sq2, _ = rand.Int(rand.Reader, fr.Modulus()) + sp3, _ := rand.Int(rand.Reader, fr.Modulus()) + n := new(big.Int) + n.Add(n, new(big.Int).Mul(sp1, sq1)) + n.Add(n, new(big.Int).Mul(sp2, sq2)) + tmp.ModInverse(sp3, fr.Modulus()) + tmp.Mul(tmp, n) + tmp.Neg(tmp) + sq3 := new(big.Int).Mod(tmp, fr.Modulus()) + + p1.ScalarMultiplicationBase(sp1) + p2.ScalarMultiplicationBase(sp2) + p3.ScalarMultiplicationBase(sp3) + q1.ScalarMultiplicationBase(sq1) + q2.ScalarMultiplicationBase(sq2) + q3.ScalarMultiplicationBase(sq3) + ok, err = bn254.PairingCheck([]bn254.G1Affine{p1, p2, p3}, []bn254.G2Affine{q1, q2, q3}) + assert.NoError(err) + assert.True(ok) + fmt.Print("\n\n") + fmt.Println("= triple successful pairing =") + printP(p1) + printQ(q1) + fmt.Println() + printP(p2) + printQ(q2) + fmt.Println() + printP(p3) + printQ(q3) + + printPLimbs(p1) + printQLimbs(q1) + printPLimbs(p2) + printQLimbs(q2) + printPLimbs(p3) + printQLimbs(q3) + + // pairing where result is 1. Four pairs of inputs + // e(a, 2b) * e(3a, b) * e(a, 5b) * e(-2a, 5b) == 1 + // 2 + 3 + 5 - 10 == 0 + var p4 bn254.G1Affine + var q4 bn254.G2Affine + sq3, _ = rand.Int(rand.Reader, fr.Modulus()) + sp4, _ := rand.Int(rand.Reader, fr.Modulus()) + n = new(big.Int) + n.Add(n, new(big.Int).Mul(sp1, sq1)) + n.Add(n, new(big.Int).Mul(sp2, sq2)) + n.Add(n, new(big.Int).Mul(sp3, sq3)) + tmp.ModInverse(sp4, fr.Modulus()) + tmp.Mul(tmp, n) + tmp.Neg(tmp) + sq4 := new(big.Int).Mod(tmp, fr.Modulus()) + + p1.ScalarMultiplicationBase(sp1) + p2.ScalarMultiplicationBase(sp2) + p3.ScalarMultiplicationBase(sp3) + p4.ScalarMultiplicationBase(sp4) + q1.ScalarMultiplicationBase(sq1) + q2.ScalarMultiplicationBase(sq2) + q3.ScalarMultiplicationBase(sq3) + q4.ScalarMultiplicationBase(sq4) + ok, err = bn254.PairingCheck([]bn254.G1Affine{p1, p2, p3, p4}, []bn254.G2Affine{q1, q2, q3, q4}) + assert.NoError(err) + assert.True(ok) + fmt.Print("\n\n") + fmt.Println("= quadruple successful pairing =") + printP(p1) + printQ(q1) + fmt.Println() + printP(p2) + printQ(q2) + fmt.Println() + printP(p3) + printQ(q3) + fmt.Println() + printP(p4) + printQ(q4) +} + +func TestG2TestData(t *testing.T) { + t.Skip("skipping test, called manually when needed") + assert := test.NewAssert(t) + // test for a point not on the curve + var Q bn254.G2Affine + _, err := Q.X.A0.SetString("0x119606e6d3ea97cea4eff54433f5c7dbc026b8d0670ddfbe6441e31225028d31") + assert.NoError(err) + _, err = Q.X.A1.SetString("0x1d3df5be6084324da6333a6ad1367091ca9fbceb70179ec484543a58b8cb5d63") + assert.NoError(err) + _, err = Q.Y.A0.SetString("0x1b9a36ea373fe2c5b713557042ce6deb2907d34e12be595f9bbe84c144de86ef") + assert.NoError(err) + _, err = Q.Y.A1.SetString("0x49fe60975e8c78b7b31a6ed16a338ac8b28cf6a065cfd2ca47e9402882518ba0") + assert.NoError(err) + assert.False(Q.IsOnCurve()) + printQLimbs(Q) + + // test for a point on curve not in G2 + _, err = Q.X.A0.SetString("0x07192b9fd0e2a32e3e1caa8e59462b757326d48f641924e6a1d00d66478913eb") + assert.NoError(err) + _, err = Q.X.A1.SetString("0x15ce93f1b1c4946dd6cfbb3d287d9c9a1cdedb264bda7aada0844416d8a47a63") + assert.NoError(err) + _, err = Q.Y.A0.SetString("0x0fa65a9b48ba018361ed081e3b9e958451de5d9e8ae0bd251833ebb4b2fafc96") + assert.NoError(err) + _, err = Q.Y.A1.SetString("0x06e1f5e20f68f6dfa8a91a3bea048df66d9eaf56cc7f11215401f7e05027e0c6") + assert.NoError(err) + assert.True(Q.IsOnCurve()) + assert.False(Q.IsInSubGroup()) + printQLimbs(Q) + + // test for a point in G2 + Q.ScalarMultiplicationBase(big.NewInt(5678)) + printQLimbs(Q) +} + +func TestDummyMillerLoopData(t *testing.T) { + t.Skip("skipping test, called manually when needed") + assert := test.NewAssert(t) + _, _, p, q := bn254.Generators() + lines := bn254.PrecomputeLines(q) + mlres, err := bn254.MillerLoopFixedQ( + []bn254.G1Affine{p}, + [][2][len(bn254.LoopCounter)]bn254.LineEvaluationAff{lines}, + ) + assert.NoError(err) + var one bn254.GT + one.SetOne() + printTLimbs(one) + fmt.Println() + printPLimbs(p) + fmt.Println() + printQLimbs(q) + fmt.Println() + printTLimbs(mlres) +} + +func TestDummyMillerLoopFinalExpData(t *testing.T) { + t.Skip("skipping test, called manually when needed") + assert := test.NewAssert(t) + _, _, p, q := bn254.Generators() + var negP bn254.G1Affine + negP.ScalarMultiplicationBase(big.NewInt(-1)) + lines := bn254.PrecomputeLines(q) + mlres, err := bn254.MillerLoopFixedQ( + []bn254.G1Affine{negP}, + [][2][len(bn254.LoopCounter)]bn254.LineEvaluationAff{lines}, + ) + printTLimbs(mlres) + assert.NoError(err) + + mlres2, err := bn254.MillerLoopFixedQ( + []bn254.G1Affine{p}, + [][2][len(bn254.LoopCounter)]bn254.LineEvaluationAff{lines}, + ) + assert.NoError(err) + mlres.Mul(&mlres, &mlres2) + res := bn254.FinalExponentiation(&mlres) + assert.True(res.IsOne()) + assert.NoError(err) + // var one bn254.GT + fmt.Println() + printPLimbs(p) + fmt.Println() + printQLimbs(q) + // fmt.Println() + // printTLimbs(mlres) +} + +func TestDummyG2CheckData(t *testing.T) { + t.Skip("skipping test, called manually when needed") + assert := test.NewAssert(t) + _, _, _, q := bn254.Generators() + ok := q.IsInSubGroup() + assert.True(ok) + printQLimbs(q) +} + +func printP(P bn254.G1Affine) { + var buf [32]byte + P.X.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("Ax = 0x%x\n", buf[:]) + P.Y.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("Ay = 0x%x\n", buf[:]) +} + +func printQ(Q bn254.G2Affine) { + var buf [32]byte + Q.X.A0.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("BxRe = 0x%x\n", buf[:]) + Q.X.A1.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("BxIm = 0x%x\n", buf[:]) + Q.Y.A0.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("ByRe = 0x%x\n", buf[:]) + Q.Y.A1.BigInt(new(big.Int)).FillBytes(buf[:]) + fmt.Printf("ByIm = 0x%x\n", buf[:]) +} + +func printPLimbs(P bn254.G1Affine) { + px := P.X.Bytes() + py := P.Y.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n", px[0:16], px[16:32], py[0:16], py[16:32]) +} + +func printQLimbs(Q bn254.G2Affine) { + qxre := Q.X.A0.Bytes() + qxim := Q.X.A1.Bytes() + qyre := Q.Y.A0.Bytes() + qyim := Q.Y.A1.Bytes() + fmt.Printf("0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n", + qxre[0:16], qxre[16:32], qxim[0:16], qxim[16:32], qyre[0:16], qyre[16:32], qyim[0:16], qyim[16:32]) +} + +func printTLimbs(T bn254.GT) { + for i, bb := range [][32]byte{ + T.C0.B0.A0.Bytes(), + T.C0.B0.A1.Bytes(), + T.C0.B1.A0.Bytes(), + T.C0.B1.A1.Bytes(), + T.C0.B2.A0.Bytes(), + T.C0.B2.A1.Bytes(), + T.C1.B0.A0.Bytes(), + T.C1.B0.A1.Bytes(), + T.C1.B1.A0.Bytes(), + T.C1.B1.A1.Bytes(), + T.C1.B2.A0.Bytes(), + T.C1.B2.A1.Bytes(), + } { + _ = i + fmt.Printf("0x%x\n0x%x\n", bb[0:16], bb[16:32]) + } +} diff --git a/prover/zkevm/prover/ecpair/testdata/testdata_generator_test.go b/prover/zkevm/prover/ecpair/testdata/testdata_generator_test.go new file mode 100644 index 000000000..483ddd902 --- /dev/null +++ b/prover/zkevm/prover/ecpair/testdata/testdata_generator_test.go @@ -0,0 +1,583 @@ +package testdata + +import ( + "crypto/rand" + "encoding/csv" + "fmt" + "math/big" + "os" + "strconv" + "testing" + + "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/consensys/gnark-crypto/ecc/bn254/fp" + "github.com/consensys/gnark-crypto/ecc/bn254/fr" +) + +type inputType int + +const ( + fullTrivial inputType = iota // (0, 0) + leftTrivialValid // (0, Q) + leftTrivialInvalid // (0, Q') where Q' is not in G2 + rightTrivialValid // (P, 0) + rightTrivialInvalid // (P', 0) where P' is not in G1 + nonTrivialLeftInvalid // (P, Q) where P is not in G1 + nonTrivialRightInvalid // (P, Q) where Q is not in G2 + fullInvalid // (P, Q) where P and Q not in G1 and G2 respectively + nonTrivial // (P, Q) +) + +var choices = []inputType{fullTrivial, leftTrivialValid, leftTrivialInvalid, rightTrivialValid, rightTrivialInvalid, nonTrivialLeftInvalid, nonTrivialRightInvalid, fullInvalid, nonTrivial} + +func (i inputType) String() string { + switch i { + case fullTrivial: + return "full-trivial" + case leftTrivialValid: + return "left-trivial-valid" + case leftTrivialInvalid: + return "left-trivial-invalid" + case rightTrivialValid: + return "right-trivial-valid" + case rightTrivialInvalid: + return "right-trivial-invalid" + case nonTrivialLeftInvalid: + return "non-trivial-left-invalid" + case nonTrivialRightInvalid: + return "non-trivial-right-invalid" + case fullInvalid: + return "full-invalid" + case nonTrivial: + return "non-trivial" + default: + panic("unknown") + } +} + +func generateG1Infinity() bn254.G1Affine { + var p bn254.G1Affine + p.SetInfinity() + return p +} + +func generateG2Infinity() bn254.G2Affine { + var q bn254.G2Affine + q.SetInfinity() + return q +} + +func generateG1Invalid() bn254.G1Affine { + var p bn254.G1Affine + for { + px, _ := rand.Int(rand.Reader, fp.Modulus()) + py, _ := rand.Int(rand.Reader, fp.Modulus()) + p.X.SetBigInt(px) + p.Y.SetBigInt(py) + if !p.IsOnCurve() { + return p + } + } +} + +func generateG2Invalid() bn254.G2Affine { + var x, right, left, tmp, z, ZZ bn254.E2 + for { + xa, _ := rand.Int(rand.Reader, fp.Modulus()) + xb, _ := rand.Int(rand.Reader, fp.Modulus()) + x.A0.SetBigInt(xa) + x.A1.SetBigInt(xb) + za, _ := rand.Int(rand.Reader, fp.Modulus()) + zb, _ := rand.Int(rand.Reader, fp.Modulus()) + z.A0.SetBigInt(za) + z.A1.SetBigInt(zb) + right.Square(&x).Mul(&right, &x) + ZZ.Square(&z) + tmp.Square(&ZZ).Mul(&tmp, &ZZ) + tmp.MulBybTwistCurveCoeff(&tmp) + right.Add(&right, &tmp) + if right.Legendre() != 1 { + continue + } + left.Sqrt(&right) + QJac := bn254.G2Jac{ + X: x, + Y: left, + Z: z, + } + if !QJac.IsOnCurve() { + panic("point is not on curve Jac") + } + var q bn254.G2Affine + q.FromJacobian(&QJac) + if !q.IsOnCurve() { + continue + } + if q.IsInSubGroup() { + continue + } + return q + } +} + +func generateG1Valid() bn254.G1Affine { + var p bn254.G1Affine + var s fr.Element + s.SetRandom() + p.ScalarMultiplicationBase(s.BigInt(new(big.Int))) + return p +} + +func generateG2Valid() bn254.G2Affine { + var q bn254.G2Affine + var s fr.Element + s.SetRandom() + q.ScalarMultiplicationBase(s.BigInt(new(big.Int))) + return q +} + +func (i inputType) generatePair() (generatedPair inputPair) { + // here the pairingResult return value indicates if this input pair is + // invalid, i.e. it makes the whole pairing check to fail + // + // the cancelMemberships indicates if we should cancel the membership checks + // for other inputs in the pairing check. This is usually when G1 point is + // invalid in which case we don't need to check other G2 points. + var ip inputPair + ip.inputType = i + switch i { + case fullTrivial: + ip.P = generateG1Infinity() + ip.Q = generateG2Infinity() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = false + ip.MembershipSuccess = true + return ip + case leftTrivialValid: + ip.P = generateG1Infinity() + ip.Q = generateG2Valid() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = true + ip.MembershipSuccess = true + return ip + case leftTrivialInvalid: + ip.P = generateG1Infinity() + ip.Q = generateG2Invalid() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = true + ip.MembershipSuccess = false + return ip + case rightTrivialValid: + ip.P = generateG1Valid() + ip.Q = generateG2Infinity() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = false + ip.MembershipSuccess = true + return ip + case rightTrivialInvalid: + ip.P = generateG1Invalid() + ip.Q = generateG2Infinity() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = false + ip.MembershipSuccess = false + return ip + case nonTrivialLeftInvalid: + ip.P = generateG1Invalid() + ip.Q = generateG2Valid() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = false + ip.MembershipSuccess = false + return ip + case nonTrivialRightInvalid: + ip.P = generateG1Valid() + ip.Q = generateG2Invalid() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = true + ip.MembershipSuccess = false + return ip + case fullInvalid: + ip.P = generateG1Invalid() + ip.Q = generateG2Invalid() + ip.ToPairingCircuit = false + ip.ToMembershipCircuit = false + ip.MembershipSuccess = false + return ip + case nonTrivial: + ip.P = generateG1Valid() + ip.Q = generateG2Valid() + ip.ToPairingCircuit = true + ip.ToMembershipCircuit = false + ip.MembershipSuccess = false + return ip + default: + panic("not handled") + } +} + +type inputs []inputType + +type inputPair struct { + P bn254.G1Affine + Q bn254.G2Affine + + ToPairingCircuit bool + ToMembershipCircuit bool + + MembershipSuccess bool + + inputType inputType +} + +type testCase struct { + inputPairs []inputPair + inputs inputs + result bool +} + +func (l inputs) nbNonTrivial() int { + count := 0 + for _, input := range l { + if input == nonTrivial { + count++ + } + } + return count +} + +func (l inputs) generateValidInputs() []inputPair { + nb := l.nbNonTrivial() + sp := make([]fr.Element, nb) + sq := make([]fr.Element, nb) + for i := 0; i < nb; i++ { + sp[i].SetRandom() + sq[i].SetRandom() + } + var acc, tmp fr.Element + for i := 0; i < nb-1; i++ { + tmp.Mul(&sp[i], &sq[i]) + acc.Add(&acc, &tmp) + } + acc.Neg(&acc) + sq[nb-1].Div(&acc, &sp[nb-1]) + + pairs := make([]inputPair, nb) + var Ps []bn254.G1Affine + var Qs []bn254.G2Affine + bi := new(big.Int) + for i := 0; i < nb; i++ { + pairs[i].P.ScalarMultiplicationBase(sp[i].BigInt(bi)) + pairs[i].Q.ScalarMultiplicationBase(sq[i].BigInt(bi)) + pairs[i].ToPairingCircuit = true + pairs[i].ToMembershipCircuit = false + pairs[i].inputType = nonTrivial + pairs[i].MembershipSuccess = true + // for sanity check + Ps = append(Ps, pairs[i].P) + Qs = append(Qs, pairs[i].Q) + } + // sanity check + ok, err := bn254.PairingCheck(Ps, Qs) + if err != nil { + panic(err) + } + if !ok { + panic("invalid pairing") + } + return pairs +} + +func (l inputs) generateInvalidInputs() []inputPair { + nb := l.nbNonTrivial() + var s fr.Element + pairs := make([]inputPair, nb) + for i := 0; i < nb; i++ { + s.SetRandom() + pairs[i].P.ScalarMultiplicationBase(s.BigInt(new(big.Int))) + s.SetRandom() + pairs[i].Q.ScalarMultiplicationBase(s.BigInt(new(big.Int))) + pairs[i].ToPairingCircuit = true + pairs[i].ToMembershipCircuit = false + pairs[i].inputType = nonTrivial + pairs[i].MembershipSuccess = true + } + return pairs +} + +func (l inputs) generateTestCase() []testCase { + // count how many instances of what we have + counts := make(map[inputType]int) + for _, input := range l { + counts[input]++ + } + pairs := make([]inputPair, len(l)) + // if there is any invalid G1 point, we don't need to run anything + if counts[rightTrivialInvalid] > 0 || counts[nonTrivialLeftInvalid] > 0 || counts[fullInvalid] > 0 { + for i, input := range l { + pairs[i] = input.generatePair() + pairs[i].ToPairingCircuit = false + pairs[i].ToMembershipCircuit = false + pairs[i].MembershipSuccess = false + } + return []testCase{{inputPairs: pairs, result: false, inputs: l}} + } + // if there is any invalid G2 point, we only need to run membership check for that point + if counts[leftTrivialInvalid] > 0 || counts[nonTrivialRightInvalid] > 0 { + isFirstInvalid := true + for i, input := range l { + pairs[i] = input.generatePair() + pairs[i].ToPairingCircuit = false + if input == leftTrivialInvalid || input == nonTrivialRightInvalid { + pairs[i].ToMembershipCircuit = true + pairs[i].MembershipSuccess = false + if isFirstInvalid { + isFirstInvalid = false + } else { + pairs[i].ToPairingCircuit = false + } + } else { + pairs[i].ToMembershipCircuit = false + } + } + return []testCase{{inputPairs: pairs, result: false, inputs: l}} + } + // if for all points G2 are 0, we don't need to run anything + if counts[rightTrivialValid] == len(l) { + for i, input := range l { + pairs[i] = input.generatePair() + } + return []testCase{{inputPairs: pairs, result: true, inputs: l}} + } + + if l.nbNonTrivial() == 0 { + // should be combination of fullTrivial and leftTrivialValid. Then the G2 points need to go to the membership circuit + for i, input := range l { + pairs[i] = input.generatePair() + } + return []testCase{{inputPairs: pairs, result: true, inputs: l}} + } + if l.nbNonTrivial() == 1 { + invalidInputs := l.generateInvalidInputs() + for i, input := range l { + if input == nonTrivial { + pairs[i] = invalidInputs[0] + } else { + pairs[i] = input.generatePair() + } + } + return []testCase{{inputPairs: pairs, result: false, inputs: l}} + } + if l.nbNonTrivial() > 1 { + validInputs := l.generateValidInputs() + invalidInputs := l.generateInvalidInputs() + validPairs := make([]inputPair, len(l)) + invalidPairs := make([]inputPair, len(l)) + for i, input := range l { + if input == nonTrivial { + validPairs[i] = validInputs[0] + invalidPairs[i] = invalidInputs[0] + validInputs = validInputs[1:] + invalidInputs = invalidInputs[1:] + } else { + validPairs[i] = input.generatePair() + invalidPairs[i] = input.generatePair() + } + } + return []testCase{{inputPairs: validPairs, result: true, inputs: l}, {inputPairs: invalidPairs, result: false, inputs: l}} + } + panic("unexpected 2") +} + +func (ip *inputPair) WriteCSV(w *csv.Writer, ecdataId, ecDataIndex, acc, total int) (newIndex int, err error) { + // split G1 and G2 into limbs + px := ip.P.X.Bytes() + py := ip.P.Y.Bytes() + qxre := ip.Q.X.A0.Bytes() + qxim := ip.Q.X.A1.Bytes() + qyre := ip.Q.Y.A0.Bytes() + qyim := ip.Q.Y.A1.Bytes() + + limbs := []string{ + fmt.Sprintf("0x%x", px[0:16]), + fmt.Sprintf("0x%x", px[16:32]), + fmt.Sprintf("0x%x", py[0:16]), + fmt.Sprintf("0x%x", py[16:32]), + fmt.Sprintf("0x%x", qxim[0:16]), + fmt.Sprintf("0x%x", qxim[16:32]), + fmt.Sprintf("0x%x", qxre[0:16]), + fmt.Sprintf("0x%x", qxre[16:32]), + fmt.Sprintf("0x%x", qyim[0:16]), + fmt.Sprintf("0x%x", qyim[16:32]), + fmt.Sprintf("0x%x", qyre[0:16]), + fmt.Sprintf("0x%x", qyre[16:32]), + } + records := make([][]string, len(limbs)) + var ( + inputPairSuccess = formatBoolAsInt(ip.MembershipSuccess) + ToPairingCircuit = formatBoolAsInt(ip.ToPairingCircuit) + ) + for i, limb := range limbs { + isG2Part := i >= 4 + records[i] = []string{ + strconv.Itoa(ecdataId), + limb, + inputPairSuccess, + strconv.Itoa(ecDataIndex + i), + "1", + "0", + strconv.Itoa(acc), + strconv.Itoa(total), + ToPairingCircuit, + formatBoolAsInt(ip.ToMembershipCircuit && isG2Part), + } + } + if err := w.WriteAll(records); err != nil { + return ecDataIndex, err + } + return ecDataIndex + len(limbs), nil +} + +func (tc *testCase) WriteCSV(w *csv.Writer, ecdataId int) error { + var err error + var hasPairing bool + index := 0 + for i, ip := range tc.inputPairs { + if index, err = ip.WriteCSV(w, ecdataId, index, i+1, len(tc.inputPairs)); err != nil { + return err + } + hasPairing = hasPairing || ip.ToPairingCircuit + } + // write result + if err = w.Write([]string{ + strconv.Itoa(ecdataId), + "0", + formatBoolAsInt(tc.result), + "0", + "0", + "1", + "0", + strconv.Itoa(len(tc.inputPairs)), + formatBoolAsInt(hasPairing), + "0", + }); err != nil { + return err + } + if err = w.Write([]string{ + strconv.Itoa(ecdataId), + formatBoolAsInt(tc.result), + formatBoolAsInt(tc.result), + "1", + "0", + "1", + "0", + strconv.Itoa(len(tc.inputPairs)), + formatBoolAsInt(hasPairing), + "0", + }); err != nil { + return err + } + return nil +} + +func writeHeader(w *csv.Writer) error { + // record is + // - ECDATA_ID (int random increasing) + // - ECDATA_LIMB (int 128 bits) + // - ECDATA_SUCCESS_BIT (bool) + // - ECDATA_INDEX (int) + // - ECDATA_IS_DATA (bool) + // - ECDATA_IS_RES (bool) + // - ECDATA_ACC_PAIRINGS (int) + // - ECDATA_TOTAL_PAIRINGS (int) + // - ECDATA_CS_PAIRING (bool) + // - ECDATA_CS_G2_MEMBERSHIP (bool) + return w.Write([]string{ + "ECDATA_ID", + "ECDATA_LIMB", + "ECDATA_SUCCESS_BIT", + "ECDATA_INDEX", + "ECDATA_IS_DATA", + "ECDATA_IS_RES", + "ECDATA_ACC_PAIRINGS", + "ECDATA_TOTAL_PAIRINGS", + "ECDATA_CS_PAIRING", + "ECDATA_CS_G2_MEMBERSHIP", + }) +} + +func formatBoolAsInt(b bool) string { + if b { + return "1" + } + return "0" +} + +func generateTestCases(length int) []testCase { + // generate all possible combinations of inputs + // for each combination, generate all possible test cases + cartesianProduct := func(list []inputs) []inputs { + var ret []inputs + if len(list) == 0 { + for _, input := range choices { + ret = append(ret, inputs{input}) + } + return ret + } + for _, curr := range list { + for _, input := range choices { + newCurr := make(inputs, len(curr), len(curr)+1) + copy(newCurr, curr) + ret = append(ret, append(newCurr, input)) + } + } + return ret + } + cases := cartesianProduct(nil) + for i := 1; i < length; i++ { + cases = cartesianProduct(cases) + } + var allTestCases []testCase + for _, tc := range cases { + allTestCases = append(allTestCases, tc.generateTestCase()...) + } + return allTestCases +} + +func TestGenerateECPairTestCases(t *testing.T) { + t.Skip("long test, run manually when needed") + var generatedCases []testCase + for i := 1; i <= 5; i++ { + generatedCases = append(generatedCases, generateTestCases(i)...) + } + for i, tc := range generatedCases { + f, err := os.Create(fmt.Sprintf("generated/case-%06d_input.csv", i+1)) + if err != nil { + t.Fatal(err) + } + defer f.Close() + w := csv.NewWriter(f) + defer w.Flush() + if err := writeHeader(w); err != nil { + t.Fatal(err) + } + if err := tc.WriteCSV(w, i+1); err != nil { + t.Fatal(err) + } + } + fmt.Println(len(generatedCases)) +} + +func TestWriteTestCase(t *testing.T) { + // sanity test that nothing fails/panics etc + input := inputs{nonTrivial, nonTrivial, nonTrivial} + w := csv.NewWriter(os.Stdout) + if err := writeHeader(w); err != nil { + panic(err) + } + defer w.Flush() + testCases := input.generateTestCase() + for i, tc := range testCases { + if err := tc.WriteCSV(w, i); err != nil { + panic(err) + } + } +} diff --git a/prover/zkevm/zkevm.go b/prover/zkevm/zkevm.go index f3633e903..b17f5c229 100644 --- a/prover/zkevm/zkevm.go +++ b/prover/zkevm/zkevm.go @@ -7,6 +7,7 @@ import ( "github.com/consensys/linea-monorepo/prover/zkevm/arithmetization" "github.com/consensys/linea-monorepo/prover/zkevm/prover/ecarith" "github.com/consensys/linea-monorepo/prover/zkevm/prover/ecdsa" + "github.com/consensys/linea-monorepo/prover/zkevm/prover/ecpair" "github.com/consensys/linea-monorepo/prover/zkevm/prover/hash/keccak" "github.com/consensys/linea-monorepo/prover/zkevm/prover/hash/sha2" "github.com/consensys/linea-monorepo/prover/zkevm/prover/modexp" @@ -41,7 +42,7 @@ type ZkEvm struct { ecmul *ecarith.EcMul // ecpair is the module responsible for the proving the calls the ecpairing // precompile - // ecpair *ecpair.ECPair + ecpair *ecpair.ECPair // sha2 is the module responsible for doing the computation of the sha2 // precompile. sha2 *sha2.Sha2SingleProvider @@ -99,9 +100,9 @@ func newZkEVM(b *wizard.Builder, s *Settings) *ZkEvm { modexp = modexp.NewModuleZkEvm(comp, s.Modexp) ecadd = ecarith.NewEcAddZkEvm(comp, &s.Ecadd) ecmul = ecarith.NewEcMulZkEvm(comp, &s.Ecmul) - // ecpair = ecpair.NewECPairZkEvm(comp, &s.Ecpair) - sha2 = sha2.NewSha2ZkEvm(comp, s.Sha2) - publicInput = publicInput.NewPublicInputZkEVM(comp, &s.PublicInput, &stateManager.StateSummary) + ecpair = ecpair.NewECPairZkEvm(comp, &s.Ecpair) + sha2 = sha2.NewSha2ZkEvm(comp, s.Sha2) + publicInput = publicInput.NewPublicInputZkEVM(comp, &s.PublicInput, &stateManager.StateSummary) ) return &ZkEvm{ @@ -112,9 +113,9 @@ func newZkEVM(b *wizard.Builder, s *Settings) *ZkEvm { modexp: modexp, ecadd: ecadd, ecmul: ecmul, - // ecpair: ecpair, - sha2: sha2, - PublicInput: &publicInput, + ecpair: ecpair, + sha2: sha2, + PublicInput: &publicInput, } } @@ -135,7 +136,7 @@ func (z *ZkEvm) prove(input *Witness) (prover wizard.ProverStep) { z.modexp.Assign(run) z.ecadd.Assign(run) z.ecmul.Assign(run) - // z.ecpair.Assign(run) + z.ecpair.Assign(run) z.sha2.Run(run) z.PublicInput.Assign(run, input.L2BridgeAddress) }