#Centipede Write individual user feature counts to fuzzing-stats*.csv reports

PiperOrigin-RevId: 617704863
diff --git a/centipede/centipede.cc b/centipede/centipede.cc
index e295a3d..059499d 100644
--- a/centipede/centipede.cc
+++ b/centipede/centipede.cc
@@ -238,6 +238,22 @@
           .num_bounded_path_features = fs_.CountFeatures(fd::kBoundedPath),
           .num_pc_pair_features = fs_.CountFeatures(fd::kPCPair),
           .num_user_features = fs_.CountFeatures(fd::kUserDomains),
+          .num_user0_features = fs_.CountFeatures(fd::kUserDomains[0]),
+          .num_user1_features = fs_.CountFeatures(fd::kUserDomains[1]),
+          .num_user2_features = fs_.CountFeatures(fd::kUserDomains[2]),
+          .num_user3_features = fs_.CountFeatures(fd::kUserDomains[3]),
+          .num_user4_features = fs_.CountFeatures(fd::kUserDomains[4]),
+          .num_user5_features = fs_.CountFeatures(fd::kUserDomains[5]),
+          .num_user6_features = fs_.CountFeatures(fd::kUserDomains[6]),
+          .num_user7_features = fs_.CountFeatures(fd::kUserDomains[7]),
+          .num_user8_features = fs_.CountFeatures(fd::kUserDomains[8]),
+          .num_user9_features = fs_.CountFeatures(fd::kUserDomains[9]),
+          .num_user10_features = fs_.CountFeatures(fd::kUserDomains[10]),
+          .num_user11_features = fs_.CountFeatures(fd::kUserDomains[11]),
+          .num_user12_features = fs_.CountFeatures(fd::kUserDomains[12]),
+          .num_user13_features = fs_.CountFeatures(fd::kUserDomains[13]),
+          .num_user14_features = fs_.CountFeatures(fd::kUserDomains[14]),
+          .num_user15_features = fs_.CountFeatures(fd::kUserDomains[15]),
           .num_unknown_features = fs_.CountFeatures(fd::kUnknown),
           .num_funcs_in_frontier = coverage_frontier_.NumFunctionsInFrontier(),
       },
diff --git a/centipede/stats.h b/centipede/stats.h
index cd870f7..012a218 100644
--- a/centipede/stats.h
+++ b/centipede/stats.h
@@ -66,6 +66,22 @@
   uint64_t num_bounded_path_features = 0;
   uint64_t num_pc_pair_features = 0;
   uint64_t num_user_features = 0;
+  uint64_t num_user0_features = 0;
+  uint64_t num_user1_features = 0;
+  uint64_t num_user2_features = 0;
+  uint64_t num_user3_features = 0;
+  uint64_t num_user4_features = 0;
+  uint64_t num_user5_features = 0;
+  uint64_t num_user6_features = 0;
+  uint64_t num_user7_features = 0;
+  uint64_t num_user8_features = 0;
+  uint64_t num_user9_features = 0;
+  uint64_t num_user10_features = 0;
+  uint64_t num_user11_features = 0;
+  uint64_t num_user12_features = 0;
+  uint64_t num_user13_features = 0;
+  uint64_t num_user14_features = 0;
+  uint64_t num_user15_features = 0;
   uint64_t num_unknown_features = 0;
   uint64_t num_funcs_in_frontier = 0;
 
@@ -124,18 +140,23 @@
   // In other words: do not change the names or the order of the old fields
   // without a very good reason.
   static constexpr std::initializer_list<FieldInfo> kFieldInfos = {
+      // Coverage 1.
       {
           &Stats::num_covered_pcs,
           "NumCoveredPcs",
           "Coverage",
           kFuzzStat | kMin | kMax | kAvg,
       },
+
+      // Execution.
       {
           &Stats::num_executions,
           "NumExecs",
           "Number of executions",
           kFuzzStat | kMin | kMax | kAvg,
       },
+
+      // Corpus.
       {
           &Stats::active_corpus_size,
           "ActiveCorpusSize",
@@ -154,18 +175,24 @@
           "Avg element size",
           kFuzzStat | kMin | kMax | kAvg,
       },
+
+      // Metadata.
       {
           &Stats::timestamp_unix_micros,
           "UnixMicros",
           "Timestamp",
           kTimestamp | kMin | kMax,
       },
+
+      // Execution 2.
       {
           &Stats::fuzz_time_sec,
           "FuzzTimeSec",
           "Fuzz time (sec)",
           kFuzzStat | kMin | kMax | kAvg,
       },
+
+      // Coverage 2.
       {
           &Stats::num_target_crashes,
           "NumProxyCrashes",
@@ -232,6 +259,7 @@
           "Num funcs in frontier",
           kFuzzStat | kMin | kMax | kAvg,
       },
+
       // Rusage. Each shard of a run is a thread of the same process, but it
       // measures the following metrics for the whole process. That means that
       // all the shards should return more or less the same number for the same
@@ -263,6 +291,105 @@
           "Engine rusage VSize (MB)",
           kRUsageStat | kMax,
       },
+
+      // Coverage 3. A breakdown of the total in `Stats::num_user_features` by
+      // individual feature types.
+      {
+          &Stats::num_user0_features,
+          "NumUser0Fts",
+          "Num user0 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user1_features,
+          "NumUser1Fts",
+          "Num user1 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user2_features,
+          "NumUser2Fts",
+          "Num user2 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user3_features,
+          "NumUser3Fts",
+          "Num user3 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user4_features,
+          "NumUser4Fts",
+          "Num user4 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user5_features,
+          "NumUser5Fts",
+          "Num user5 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user6_features,
+          "NumUser6Fts",
+          "Num user6 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user7_features,
+          "NumUser7Fts",
+          "Num user7 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user8_features,
+          "NumUser8Fts",
+          "Num user8 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user9_features,
+          "NumUser9Fts",
+          "Num user9 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user10_features,
+          "NumUser10Fts",
+          "Num user10 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user11_features,
+          "NumUser11Fts",
+          "Num user11 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user12_features,
+          "NumUser12Fts",
+          "Num user12 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user13_features,
+          "NumUser13Fts",
+          "Num user13 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user14_features,
+          "NumUser14Fts",
+          "Num user14 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
+      {
+          &Stats::num_user15_features,
+          "NumUser15Fts",
+          "Num user15 features",
+          kFuzzStat | kMin | kMax | kAvg,
+      },
   };
 };
 
diff --git a/centipede/stats_test.cc b/centipede/stats_test.cc
index 45b4f74..6336e21 100644
--- a/centipede/stats_test.cc
+++ b/centipede/stats_test.cc
@@ -92,6 +92,10 @@
             .num_bounded_path_features = 26 * j,
             .num_pc_pair_features = 27 * j,
             .num_user_features = 28 * j,
+            // NOTE: These two don't add up to `num_user_features`, but that's
+            // ok for the purposes of this test.
+            .num_user0_features = 28 * j + 1,
+            .num_user10_features = 28 * j + 2,
             .num_unknown_features = 29 * j,
             .num_funcs_in_frontier = 31 * j,
         },
@@ -173,6 +177,54 @@
         "Num funcs in frontier:",
         "  Experiment A: min:\t31\tmax:\t93\tavg:\t62.0\t--\t31\t93",
         "  Experiment B: min:\t62\tmax:\t124\tavg:\t93.0\t--\t62\t124",
+        "Num user0 features:",
+        "  Experiment A: min:\t29\tmax:\t85\tavg:\t57.0\t--\t29\t85",
+        "  Experiment B: min:\t57\tmax:\t113\tavg:\t85.0\t--\t57\t113",
+        "Num user1 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user2 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user3 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user4 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user5 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user6 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user7 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user8 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user9 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user10 features:",
+        "  Experiment A: min:\t30\tmax:\t86\tavg:\t58.0\t--\t30\t86",
+        "  Experiment B: min:\t58\tmax:\t114\tavg:\t86.0\t--\t58\t114",
+        "Num user11 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user12 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user13 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user14 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user15 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
         "Flags:",
         "  Experiment A: AAA",
         "  Experiment B: BBB",
@@ -205,6 +257,8 @@
       new_stats.num_bounded_path_features += 1;
       new_stats.num_pc_pair_features += 1;
       new_stats.num_user_features += 1;
+      new_stats.num_user0_features += 1;
+      new_stats.num_user10_features += 1;
       new_stats.num_unknown_features += 1;
       new_stats.num_funcs_in_frontier += 1;
 
@@ -274,6 +328,54 @@
         "Num funcs in frontier:",
         "  Experiment A: min:\t32\tmax:\t94\tavg:\t63.0\t--\t32\t94",
         "  Experiment B: min:\t63\tmax:\t125\tavg:\t94.0\t--\t63\t125",
+        "Num user0 features:",
+        "  Experiment A: min:\t30\tmax:\t86\tavg:\t58.0\t--\t30\t86",
+        "  Experiment B: min:\t58\tmax:\t114\tavg:\t86.0\t--\t58\t114",
+        "Num user1 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user2 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user3 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user4 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user5 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user6 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user7 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user8 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user9 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user10 features:",
+        "  Experiment A: min:\t31\tmax:\t87\tavg:\t59.0\t--\t31\t87",
+        "  Experiment B: min:\t59\tmax:\t115\tavg:\t87.0\t--\t59\t115",
+        "Num user11 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user12 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user13 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user14 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "Num user15 features:",
+        "  Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
+        "  Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0",
         "Flags:",
         "  Experiment A: AAA",
         "  Experiment B: BBB",
@@ -311,6 +413,10 @@
             .num_bounded_path_features = 26 * j,
             .num_pc_pair_features = 27 * j,
             .num_user_features = 28 * j,
+            // NOTE: These two don't add up to `num_user_features`, but that's
+            // ok for the purposes of this test.
+            .num_user0_features = 28 * j + 1,
+            .num_user10_features = 28 * j + 2,
             .num_unknown_features = 29 * j,
             .num_funcs_in_frontier = 31 * j,
         },
@@ -377,6 +483,8 @@
       new_stats.num_bounded_path_features += 1;
       new_stats.num_pc_pair_features += 1;
       new_stats.num_user_features += 1;
+      new_stats.num_user0_features += 1;
+      new_stats.num_user10_features += 1;
       new_stats.num_unknown_features += 1;
       new_stats.num_funcs_in_frontier += 1;
 
@@ -424,7 +532,23 @@
           "NumUnknownFts_Min,NumUnknownFts_Max,NumUnknownFts_Avg,"
           "NumFuncsInFrontier_Min,NumFuncsInFrontier_Max,NumFuncsInFrontier_Avg,"  // NOLINT
           "EngineRusageAvgCores_Max,EngineRusageCpuPct_Max,"
-          "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max,",
+          "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max,"
+          "NumUser0Fts_Min,NumUser0Fts_Max,NumUser0Fts_Avg,"
+          "NumUser1Fts_Min,NumUser1Fts_Max,NumUser1Fts_Avg,"
+          "NumUser2Fts_Min,NumUser2Fts_Max,NumUser2Fts_Avg,"
+          "NumUser3Fts_Min,NumUser3Fts_Max,NumUser3Fts_Avg,"
+          "NumUser4Fts_Min,NumUser4Fts_Max,NumUser4Fts_Avg,"
+          "NumUser5Fts_Min,NumUser5Fts_Max,NumUser5Fts_Avg,"
+          "NumUser6Fts_Min,NumUser6Fts_Max,NumUser6Fts_Avg,"
+          "NumUser7Fts_Min,NumUser7Fts_Max,NumUser7Fts_Avg,"
+          "NumUser8Fts_Min,NumUser8Fts_Max,NumUser8Fts_Avg,"
+          "NumUser9Fts_Min,NumUser9Fts_Max,NumUser9Fts_Avg,"
+          "NumUser10Fts_Min,NumUser10Fts_Max,NumUser10Fts_Avg,"
+          "NumUser11Fts_Min,NumUser11Fts_Max,NumUser11Fts_Avg,"
+          "NumUser12Fts_Min,NumUser12Fts_Max,NumUser12Fts_Avg,"
+          "NumUser13Fts_Min,NumUser13Fts_Max,NumUser13Fts_Avg,"
+          "NumUser14Fts_Min,NumUser14Fts_Max,NumUser14Fts_Avg,"
+          "NumUser15Fts_Min,NumUser15Fts_Max,NumUser15Fts_Avg,",
           // Line 1.
           "21,63,42.0,"
           "12,36,24.0,"
@@ -445,7 +569,23 @@
           "29,87,58.0,"
           "31,93,62.0,"
           "603,606,"
-          "609,612,",
+          "609,612,"
+          "29,85,57.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "30,86,58.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,",
           // Line 2.
           "21,64,42.5,"
           "12,37,24.5,"
@@ -466,7 +606,23 @@
           "29,88,58.5,"
           "31,94,62.5,"
           "604,607,"
-          "610,613,",
+          "610,613,"
+          "29,86,57.5,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "30,87,58.5,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,",
           "",  // empty line at EOF
           // clang-format on
       },
@@ -493,7 +649,23 @@
           "NumUnknownFts_Min,NumUnknownFts_Max,NumUnknownFts_Avg,"
           "NumFuncsInFrontier_Min,NumFuncsInFrontier_Max,NumFuncsInFrontier_Avg,"  // NOLINT
           "EngineRusageAvgCores_Max,EngineRusageCpuPct_Max,"
-          "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max,",
+          "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max,"
+          "NumUser0Fts_Min,NumUser0Fts_Max,NumUser0Fts_Avg,"
+          "NumUser1Fts_Min,NumUser1Fts_Max,NumUser1Fts_Avg,"
+          "NumUser2Fts_Min,NumUser2Fts_Max,NumUser2Fts_Avg,"
+          "NumUser3Fts_Min,NumUser3Fts_Max,NumUser3Fts_Avg,"
+          "NumUser4Fts_Min,NumUser4Fts_Max,NumUser4Fts_Avg,"
+          "NumUser5Fts_Min,NumUser5Fts_Max,NumUser5Fts_Avg,"
+          "NumUser6Fts_Min,NumUser6Fts_Max,NumUser6Fts_Avg,"
+          "NumUser7Fts_Min,NumUser7Fts_Max,NumUser7Fts_Avg,"
+          "NumUser8Fts_Min,NumUser8Fts_Max,NumUser8Fts_Avg,"
+          "NumUser9Fts_Min,NumUser9Fts_Max,NumUser9Fts_Avg,"
+          "NumUser10Fts_Min,NumUser10Fts_Max,NumUser10Fts_Avg,"
+          "NumUser11Fts_Min,NumUser11Fts_Max,NumUser11Fts_Avg,"
+          "NumUser12Fts_Min,NumUser12Fts_Max,NumUser12Fts_Avg,"
+          "NumUser13Fts_Min,NumUser13Fts_Max,NumUser13Fts_Avg,"
+          "NumUser14Fts_Min,NumUser14Fts_Max,NumUser14Fts_Avg,"
+          "NumUser15Fts_Min,NumUser15Fts_Max,NumUser15Fts_Avg,",
           // Line 1.
           "42,84,63.0,"
           "24,48,36.0,"
@@ -514,7 +686,23 @@
           "58,116,87.0,"
           "62,124,93.0,"
           "804,808,"
-          "812,816,",
+          "812,816,"
+          "57,113,85.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "58,114,86.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,",
           // Line 2.
           "42,85,63.5,"
           "24,49,36.5,"
@@ -535,7 +723,23 @@
           "58,117,87.5,"
           "62,125,93.5,"
           "805,809,"
-          "813,817,",
+          "813,817,"
+          "57,114,85.5,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "58,115,86.5,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,"
+          "0,0,0.0,",
           "",  // empty line at EOF
           // clang-format on
       },