From ce8a122e1c42f8dffc203ae3ef001321c9c79d44 Mon Sep 17 00:00:00 2001
From: mugurelionut <mugurelionut@gmail.com>
Date: Thu, 28 Nov 2019 14:18:19 +0100
Subject: [PATCH] find path improvement

---
 r2sol-old.cc   | 319 ++++++++++++++++++++++++++++++++++++++++---------
 r2sol.cc       |  99 +++++++++++----
 r2sol.exe      | Bin 75712 -> 76448 bytes
 run_local.py   |   4 +-
 scores.txt     | 182 +++++++++++-----------------
 tmp-scores.txt |  29 ++++-
 6 files changed, 432 insertions(+), 201 deletions(-)

diff --git a/r2sol-old.cc b/r2sol-old.cc
index c3b37f6..7ae3f34 100644
--- a/r2sol-old.cc
+++ b/r2sol-old.cc
@@ -72,7 +72,7 @@ namespace SOLVE {
 
 FILE* fin;
 char fname[128];
-int H, W, T, N, TINIT;
+int H, W, T, TEST, N, TINIT;
 double TSTART;
 
 struct Node {
@@ -98,7 +98,8 @@ void ReadTransitionsMap() {
     }
   }
   nnodes = 0;
-  T = 8 * (H + W + 20);
+  T = TMAX - 7;
+  //T = 8 * (H + W + 20);
   int row, col, o1, o2, num_transitions = 0;
   while (fscanf(fin, "%d %d %d %d", &row, &col, &o1, &o2) == 4) {
     if (row < 0 || col < 0 || o1 < 0 || o2 < 0) break;
@@ -314,11 +315,45 @@ bool reschedule;
 int num_done_agents, num_planned, num_reschedules, num_adjust_ipaths;
 int num_adjust_ipaths_without_full_plan_regeneration;
 
+int important_row[2 * NMAX], important_col[2 * NMAX];
+char visited[2 * NMAX];
+
+void DFSMarkCities(int aid) {
+  visited[aid] = 1;
+  static const int kMaxDiff = 2;
+  for (int aid2 = 0; aid2 < 2 * N; ++aid2) {
+    if (visited[aid2]) continue;
+    if (abs(important_row[aid] - important_row[aid2]) <= kMaxDiff && abs(important_col[aid] - important_col[aid2]) <= kMaxDiff)
+      DFSMarkCities(aid2);
+  }
+}
+
+void EstimateT() {
+  for (int aid = 0; aid < N; ++aid) {
+    const auto& agent_aid = agent[aid];
+    important_row[2 * aid] = agent_aid.poz_row;
+    important_col[2 * aid] = agent_aid.poz_col;
+    important_row[2 * aid + 1] = agent_aid.target_row;
+    important_col[2 * aid + 1] = agent_aid.target_col;
+    visited[2 * aid] = visited[2 * aid + 1] = 0;
+  }
+  int num_cities = 0;
+  for (int aid = 0; aid < 2 * N; ++aid) {
+    if (visited[aid]) continue;
+    DFSMarkCities(aid);
+    ++num_cities;
+  }
+  if (1.0 * N / num_cities < 20.0 - 1e-6)
+    TEST = (int)(8.0 * (H + W + 1.0 * N / num_cities));
+  else
+    TEST = 8 * (H + W + 20);
+  DBG(0, "(estimated) num_cities=%d TEST=%d\n", num_cities, TEST);
+}
+
 void ReadAgentsData(bool replay_mode = false) {
   fscanf(fin, "%d %d", &N, &TINIT);
   DBG(2, "[ReadAgentsData] N=%d TINIT=%d/%d\n", N, TINIT, T);
   assert(1 <= N && N < NMAX);
-  assert(TINIT < T);
   if (replay_mode) {
     fscanf(fin, "%d %d %d", &num_reschedules, &num_planned, &num_adjust_ipaths_without_full_plan_regeneration);
     reschedule = TINIT == 0;
@@ -445,6 +480,11 @@ void ReadAgentsData(bool replay_mode = false) {
     }
   }
   
+  if (TINIT == 0 || replay_mode) {
+    if (TINIT == 0) EstimateT();
+    else fscanf(fin, "%d", &T);
+  }
+  
   //exit(1);
 }
 
@@ -707,8 +747,21 @@ bool OverlapsOngoingMove(int t1, int t2, int node, const int covered_by[][MAXNOD
   if (!USE_SPACING_TO_AVOID_DEADLOCKS) return false;
 
   if (t1 < tend_ongoing_move[node]) return true;
+  //if (t2 <= tend_ongoing_move[node]) return true;
+
+  const int min_tstart = t2;//USE_STRICT_SPACING_TO_AVOID_DEADLOCKS ? t2 : t1;
+  //const int min_tstart = t1;//USE_STRICT_SPACING_TO_AVOID_DEADLOCKS ? t2 : t1;
+
   const int aid_t1 = is_covered[t1][node] == is_covered_idx ? covered_by[t1][node] : -1;
 
+  for (int tend = t2 + 1; tend <= t2 + 3 && tend <= T; ++tend) {
+    if (is_covered[tend][node] == is_covered_idx) {
+      const auto& aid = covered_by[tend][node];
+      const auto& agent_aid = agent[aid];
+      if (tend - agent_aid.cturns < min_tstart && (aid != aid_t1 || is_covered[tend - 1][node] != is_covered_idx)) return true;
+    }
+  }
+
   if (USE_STRICT_SPACING_TO_AVOID_DEADLOCKS) {
     for (int tend = t1 + 1; tend <= t2; ++tend) {
       if (is_covered[tend][node] == is_covered_idx) {
@@ -718,15 +771,6 @@ bool OverlapsOngoingMove(int t1, int t2, int node, const int covered_by[][MAXNOD
     }
   }
 
-  const int min_tstart = t2;//USE_STRICT_SPACING_TO_AVOID_DEADLOCKS ? t2 : t1;
-  for (int tend = t2 + 1; tend <= t2 + 3 && tend <= T; ++tend) {
-    if (is_covered[tend][node] == is_covered_idx) {
-      const auto& aid = covered_by[tend][node];
-      const auto& agent_aid = agent[aid];
-      if (tend - agent_aid.cturns < min_tstart && (aid != aid_t1 || is_covered[tend - 1][node] != is_covered_idx)) return true;
-    }
-  }
-
   /*for (int tend = t2 + 1; tend <= t2 + 3 && tend <= T; ++tend) {
     if (is_covered[tend][node] == is_covered_idx) {
       const auto& aid = covered_by[tend][node];
@@ -775,7 +819,7 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
   if (!agent_aid.inside_poz) {
     rnode = agent_aid.poz_node;
     ro = agent_aid.poz_o;
-    t1 = TINIT + max(agent_aid.malfunc - 1/*2*/, 0);    
+    t1 = TINIT + max(agent_aid.malfunc - 1, 0);    
     for (int tstart = t1; tstart < T; ++tstart) {
       if (!CanEnterCell(aid, tstart + 1, -1, rnode, covered_by, is_covered, is_covered_idx, tmp_path)) continue;
       int t2 = tstart + 1;
@@ -839,22 +883,27 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
     }
   }
 
-  int TMIN = T + 1, best_o = -1;
-  
-  /*if (aid == 126 || aid == 50) {
-    DBG(0, ">>> aid=%d\n", aid);
-    for (int t = 40; t <= 50 && t <= ipath[aid].tmax; ++t) DBG(0, "  t=%d node=%d\n", t, ipath[aid].p[t].node);
-  }*/
-  
+  int TMIN = T + 1, best_o = -1, best_node = -1, best_t1 = -1;
+    
   if (tmp_path_aid.tmax < TINIT || tmp_path_aid.p[tmp_path_aid.tmax].node == agent_aid.target_node) TMIN = tmp_path_aid.tmax;
   
-  while (hsize >= 1 /*&& TMIN > T*/) {
+  while (hsize >= 1) {
     int t, node, o, ct1;
     ExtractMinFromHeap(h, hsize, t, node, o, ct1);
-    //DBG(0, "aid=%d hsize=%d t=%d node=%d o=%d ct1=%d can_reach=%d/%d\n", aid, hsize, t, node, o, ct1, can_reach[t][node][o], can_reach_idx);
+    assert(0 <= t && t <= T);
     assert(can_reach[t][node][o] == can_reach_idx);
     if (ct1 != can_reach_with_t1[t][node][o]) continue;
-    if (t + dmin_aid[node][o] >= TMIN) break;
+
+    if (best_node == target_node && t + dmin_aid[node][o] > TMIN) break;
+    if (t > TMIN || t > T) continue;
+
+    if (t == T && (best_node < 0 || (best_node >= 0 && best_node != target_node && best_t1 < ct1))) {
+      TMIN = t;
+      best_node = node;
+      best_o = o;
+      best_t1 = ct1;
+      //assert(false);
+    }
 
     // Case 1: Wait.
     if (t + 1 < TMIN && CanEnterCell(aid, t + 1, node, node, covered_by, is_covered, is_covered_idx, tmp_path) &&
@@ -868,10 +917,10 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
         new_prev.o = o;
         new_prev.type = WAITED;
         const int est_tmin = t + 1 + dmin_aid[node][o];
-        if (est_tmin < TMIN) InsertIntoHeap(h, hsize, t + 1, node, o, ct1, est_tmin);
+        if ((t + 1 <= T && best_node != target_node) || est_tmin <= TMIN) InsertIntoHeap(h, hsize, t + 1, node, o, ct1, est_tmin);
       }
 
-    if (t + cturns >= TMIN) continue;
+    if (t + cturns > TMIN) continue;
 
     const int tarrive_node2 = t + cturns;
     if (!IsFreeTimeWindow(aid, t + 1, tarrive_node2 - 1, node, covered_by, is_covered, is_covered_idx, tmp_path)) continue;
@@ -893,7 +942,7 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
           new_prev.o = o;
           new_prev.type = STARTED_MOVING;
           const int est_tmin = tarrive_node2 + dmin_aid[node2][onext];
-          if (est_tmin < TMIN) InsertIntoHeap(h, hsize, tarrive_node2, node2, onext, ct1, est_tmin);
+          if ((tarrive_node2 <= T && best_node != target_node) || est_tmin <= TMIN) InsertIntoHeap(h, hsize, tarrive_node2, node2, onext, ct1, est_tmin);
         } else {
           can_reach[tarrive_node2][node2][onext] = can_reach_idx;
           can_reach_with_t1[tarrive_node2][node2][onext] = ct1;
@@ -902,24 +951,40 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
           new_prev.node = node;
           new_prev.o = o;
           new_prev.type = STARTED_MOVING;
-          if (tarrive_node2 < TMIN) {
+          if (best_node != target_node || tarrive_node2 < TMIN || (tarrive_node2 == TMIN && best_t1 < ct1)) {
             TMIN = tarrive_node2;
+            best_node = target_node;
             best_o = onext;
+            best_t1 = ct1;
           }
         }
       }
     }
   }
 
+  //if (agent_aid.inside_poz) assert(best_o >= 0);
   if (best_o < 0) return false;
+  if (best_node != target_node && !agent_aid.inside_poz) {
+    tmp_path_aid.tmax = T;
+    for (int t = TINIT; t <= T; ++t) {
+      auto& new_path_elem = tmp_path_aid.p[t];
+      new_path_elem.node = agent_aid.poz_node;
+      new_path_elem.o = agent_aid.poz_o;
+      new_path_elem.moving_to_node = new_path_elem.moving_to_o = -1;
+      new_path_elem.num_partial_turns = 0;
+      new_path_elem.how_i_got_here = OUTSIDE_SRC;
+    }   
+    return true;
+  }
+
+  //assert(best_node == target_node);
 
   tmp_path_aid.tmax = TMIN;
-  int ct = TMIN, cnode = target_node, co = best_o;
+  int ct = TMIN, cnode = best_node, co = best_o;
   while (1) {
     assert(can_reach[ct][cnode][co] == can_reach_idx);
     assert(ct >= can_reach_with_t1[ct][cnode][co]);
     const auto& cprev = prev[ct][cnode][co];
-    //DBG(0, "ct=%d cnode=%d co=%d cprev.t=%d cprev.type=%d\n", ct, cnode, co, cprev.t, cprev.type);
     if (cprev.t < 0) break;
     if (cprev.type == WAITED || cprev.type == MALFUNCTIONED) {
       // Wait 1 unit.
@@ -935,7 +1000,6 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
       int num_partial_turns = 0;
 
       for (int tmove = cprev.t; tmove < ct; ++tmove) {
-        //DBG(0, " tmove=%d npt=%d\n", tmove, num_partial_turns);
         auto& new_path_elem = tmp_path_aid.p[tmove + 1];
         ++num_partial_turns;
         if (num_partial_turns < agent_aid.cturns) {
@@ -1009,6 +1073,25 @@ void UncoverPath(int aid, const Path& path, int covered_by[][MAXNODES], int is_c
   }
 }
 
+void CoverPath1(int aid, const Path& path, int covered_by[][MAXNODES], int is_covered[][MAXNODES], int is_covered_idx) {
+  const auto& agent_aid = agent[aid];
+  if (!agent_aid.inside_poz) return;
+  for (int t = TINIT; t <= T; ++t) {
+    assert(is_covered[t][agent_aid.poz_node] != is_covered_idx);
+    is_covered[t][agent_aid.poz_node] = is_covered_idx;
+    covered_by[t][agent_aid.poz_node] = aid;
+  }
+}
+
+void UncoverPath1(int aid, const Path& path, int covered_by[][MAXNODES], int is_covered[][MAXNODES], int is_covered_idx) {
+  const auto& agent_aid = agent[aid];
+  if (!agent_aid.inside_poz) return;
+  for (int t = TINIT; t <= T; ++t) {
+    assert(is_covered[t][agent_aid.poz_node] == is_covered_idx && covered_by[t][agent_aid.poz_node] == aid);
+    is_covered[t][agent_aid.poz_node] = 0;
+  }
+}
+
 bool RunConsistencyChecks(Path path[], const int covered_by[][MAXNODES], const int is_covered[][MAXNODES], int is_covered_idx, bool crash_on_error = true) {
   for (int aid = 0; aid < N; ++aid) {
     const auto& agent_aid = agent[aid];
@@ -1160,10 +1243,12 @@ void CheckNonDeadlockPaths() {
   }
 }
 
-const double kScoreExponent = 1.0;//2.0;
-const double kMaxTmaxWeight = 0.0;
+double SCORE_EXPONENT1, SCORE_EXPONENT2;
+double MAX_TMAX_WEIGHT;
 
-void RandomPermutations(int tid, int ntries) {
+#define GetScore(t) (t <= TEST ? pow(1.0 * t / TEST, SCORE_EXPONENT1) : pow(1.0 * t / TEST, SCORE_EXPONENT2))
+
+/*void RandomPermutations(int tid, int ntries) {
   auto& pused_tid = pused[tid];
   auto& perm_tid = perm[tid];
   auto& xor128_tid = xor128[tid];
@@ -1198,20 +1283,20 @@ void RandomPermutations(int tid, int ntries) {
   int last_trial_update = -1, last_idx_update = -1;
 
   for (int trial = 1; trial <= ntries; ++trial) {
-    if (0&&tid == 0 && trial <= 2) {
+    if (tid == 0 && trial <= 1) {
       if (trial == 2) reverse(shpaths_sorted.begin(), shpaths_sorted.end());
       for (int i = 0; i < N; ++i) perm_tid[i] = shpaths_sorted[i].second;
     } else {
       for (int i = 0; i < N; ++i) pused_tid[i] = 0;
       int idx = 0;
-      if ((trial & 3) >= 2) {
+      if ((0&&trial & 3) >= 2) {
         for (int i = 0; i < N; ++i) {
           do {
             perm_tid[idx] = xor128_tid.rand() % N;
           } while (pused_tid[perm_tid[idx]]);
           pused_tid[perm_tid[idx++]] = 1;
         }
-      } else if ((trial & 3) == 1) {
+      } else if (0&&(trial & 3) == 1) {
         for (int cturns = MAX_CTURNS - 1; cturns >= 0; --cturns) {
           const auto& cturns_agents_cturns = cturns_agents[cturns];
           const auto& num_cturns_agents_cturns = num_cturns_agents[cturns];
@@ -1308,19 +1393,140 @@ void RandomPermutations(int tid, int ntries) {
     }
   }
 }
+*/
+
+void RandomPermutations(int tid, int ntries) {
+  auto& pused_tid = pused[tid];
+  auto& perm_tid = perm[tid];
+  auto& xor128_tid = xor128[tid];
+  auto& covered_by_tid = covered_by[tid];
+  auto& is_covered_tid = is_covered[tid];
+  auto& is_covered_idx_tid = is_covered_idx[tid];
+  auto& can_reach_tid = can_reach[tid];
+  auto& can_reach_idx_tid = can_reach_idx[tid];
+  auto& can_reach_with_t1_tid = can_reach_with_t1[tid];
+  auto& heap_tid = heap[tid];
+  auto& heap_size_tid = heap_size[tid];
+  auto& prev_tid = prev[tid];
+  auto& tmp_path_tid = tmp_path[tid];
+  auto& tmp_path2_tid = tmp_path2[tid];
+  auto& tmax_at_poz_node_tid = tmax_at_poz_node[tid];
+
+  if (tid == 0) {
+    shpaths_sorted.resize(N);
+    for (int aid = 0; aid < N; ++aid) {
+      shpaths_sorted[aid].second = aid;
+      const auto& agent_aid = agent[aid];
+      shpaths_sorted[aid].first = agent_aid.malfunc + dmin[aid][agent_aid.poz_node][agent_aid.poz_o];
+    }
+    sort(shpaths_sorted.begin(), shpaths_sorted.end());
+  }
+
+  for (int trial = 1; trial <= ntries; ++trial) {
+    if (tid == 0 && trial <= 1) {
+      for (int i = 0; i < N; ++i) perm_tid[i] = shpaths_sorted[i].second;
+      reverse(shpaths_sorted.begin(), shpaths_sorted.end());
+    } else {
+      for (int i = 0; i < N; ++i) pused_tid[i] = 0;
+      int idx = 0;
+      if (0&&(trial & 1) == 1) {
+        for (int cturns = MAX_CTURNS - 1; cturns >= 0; --cturns) {
+          const auto& cturns_agents_cturns = cturns_agents[cturns];
+          const auto& num_cturns_agents_cturns = num_cturns_agents[cturns];
+          for (int i = 0; i < num_cturns_agents_cturns; ++i) {
+            do {
+              perm_tid[idx] = cturns_agents_cturns[xor128_tid.rand() % num_cturns_agents_cturns];
+            } while (pused_tid[perm_tid[idx]]);
+            pused_tid[perm_tid[idx++]] = 1;
+          }
+        }
+      } else {
+        for (int cturns = 0; cturns < MAX_CTURNS; ++cturns) {
+          const auto& cturns_agents_cturns = cturns_agents[cturns];
+          const auto& num_cturns_agents_cturns = num_cturns_agents[cturns];
+          for (int i = 0; i < num_cturns_agents_cturns; ++i) {
+            do {
+              perm_tid[idx] = cturns_agents_cturns[xor128_tid.rand() % num_cturns_agents_cturns];
+            } while (pused_tid[perm_tid[idx]]);
+            pused_tid[perm_tid[idx++]] = 1;
+          }
+        }
+      }
+    }
+    ++is_covered_idx_tid;
+    for (int aid = 0; aid < N; ++aid) {
+      auto& tmax_at_poz_node_tid_aid = tmax_at_poz_node_tid[aid];
+      tmax_at_poz_node_tid_aid = -1;
+      auto& tmp_path_tid_aid = tmp_path_tid[aid];
+      CopyPath(ipath[aid], &tmp_path_tid_aid);
+      const auto& agent_aid = agent[aid];
+      if (agent_aid.status == DONE_REMOVED) continue;
+      CoverPath(aid, tmp_path_tid_aid, covered_by_tid, is_covered_tid, is_covered_idx_tid);
+      if (agent_aid.inside_poz) {
+        tmax_at_poz_node_tid_aid = TINIT;
+        for (int t = TINIT + 1; t <= tmp_path_tid_aid.tmax; ++t) {
+          const auto& path_elem = tmp_path_tid_aid.p[t];
+          if (path_elem.node != agent_aid.poz_node) break;
+          tmax_at_poz_node_tid_aid = t;
+        }
+      }
+    }
+    bool inconsistent = false;
+    for (int idx = 0; idx < N; ++idx) {
+      const auto& aid = perm_tid[idx];
+      const auto& agent_aid = agent[aid];
+      if (agent_aid.status == DONE_REMOVED) continue;
+      auto& tmp_path_tid_aid = tmp_path_tid[aid];
+      UncoverPath(aid, tmp_path_tid_aid, covered_by_tid, is_covered_tid, is_covered_idx_tid);
+      if (!FindBestPath(aid, covered_by_tid, is_covered_tid, is_covered_idx_tid, can_reach_tid, can_reach_idx_tid, can_reach_with_t1_tid, heap_tid, heap_size_tid, prev_tid, tmp_path_tid, &tmp_path2_tid[aid], tmax_at_poz_node_tid)) {
+        //inconsistent = true;
+        //break;
+      }
+      CoverPath(aid, tmp_path_tid_aid, covered_by_tid, is_covered_tid, is_covered_idx_tid);
+    }
+    if (!inconsistent && RunConsistencyChecks(tmp_path_tid, covered_by_tid, is_covered_tid, is_covered_idx_tid, false)) {   
+      int num_done_agents = 0;
+      double cost = 0.0;
+      int max_tmax = 0;
+      for (int aid = 0; aid < N; ++aid) {
+        const auto& agent_aid = agent[aid];
+        if (agent_aid.status == DONE_REMOVED) continue;      
+        const auto& tmp_path_tid_aid = tmp_path_tid[aid];
+        assert(tmp_path_tid_aid.tmax > TINIT);
+        if (tmp_path_tid_aid.tmax > TINIT && tmp_path_tid_aid.tmax <= T && tmp_path_tid_aid.p[tmp_path_tid_aid.tmax].node == agent_aid.target_node) {
+          ++num_done_agents;
+          cost += GetScore(tmp_path_tid_aid.tmax);
+          if (tmp_path_tid_aid.tmax > max_tmax) max_tmax = tmp_path_tid_aid.tmax;
+        }
+      }
+      if (num_done_agents >= 1) cost /= num_done_agents;
+
+      {
+        lock_guard<mutex> guard(m);
+        if (num_done_agents > MAX_DONE_AGENTS || (num_done_agents == MAX_DONE_AGENTS && cost < MIN_COST - 1e-6)) {
+          MAX_DONE_AGENTS = num_done_agents;
+          MIN_COST = cost;
+          updated_best_solution = true;        
+          CopyTmpPathToPath(tid);
+          DBG(0, "[RandomPermutations] rerun=%d tid=%d trial=%d/%d maxda=%d/%d minc=%.6lf time=%.3lf\n", rerun, tid, trial, ntries, MAX_DONE_AGENTS, num_planned, MIN_COST, GetTime() - TSTART);
+        }
+      }
+    }
+  }
+}
 
 bool any_best_solution_updates;
 
 void RegenerateFullPlan() {
+  ++num_reschedules;
   any_best_solution_updates = false;
   updated_best_solution = true;
   rerun = 0;
 
-  const int kMaxReruns = 2;//4;
-  
+  const int kMaxReruns = 4;//2;
+ 
   while (updated_best_solution && rerun < kMaxReruns) {
     updated_best_solution = false;
-    ++num_reschedules;
     ++rerun;
 
     for (int node = 0; node < nnodes; ++node) tend_ongoing_move[node] = TINIT;
@@ -1344,7 +1550,7 @@ void RegenerateFullPlan() {
       if (max_threads >= 2) th = new thread*[max_threads - 1];
 
       // Random Permutations.
-      const int kNumRandomPermutations = TINIT == 0 ? 10 : 6;
+      const int kNumRandomPermutations = TINIT == 0 ? 20 /*10*/ : 12 /*6*/;
       if (max_threads >= 2) {
         for (int tid = 0; tid + 1 < max_threads; ++tid) th[tid] = new thread([tid, kNumRandomPermutations]{
           RandomPermutations(tid, kNumRandomPermutations);
@@ -1498,7 +1704,7 @@ bool AdjustIPaths() {
       else new_path_elem.how_i_got_here = first_expected_step.how_i_got_here;
     } else new_path_elem.how_i_got_here = OUTSIDE_SRC;
     
-    const int tmin = TINIT + max(0, agent_aid.malfunc - (agent_aid.inside_poz ? /*1*/ 0 : /*2*/1));
+    const int tmin = TINIT + max(0, agent_aid.malfunc - (agent_aid.inside_poz ? 0 : 1));
     for (int t = TINIT + 1; t <= tmin && t <= T; ++t) {
       auto& new_path_elem = path_aid.p[t];
       memcpy(&new_path_elem, &path_aid.p[t - 1], sizeof(PathElem));
@@ -1629,7 +1835,7 @@ bool AdjustIPaths() {
 
       int tend_move = ipath_visiting_order_next_node[next_vidx_next_node].first;
 
-      //const bool print_debug = (aid == 56 || aid == 49 || aid == 27) && (curr_node == 191 || next_node == 191);
+      //const bool print_debug = (aid == 76 || aid == 24) && (curr_node == 117 || next_node == 117);
       const bool print_debug = false;      
 
       if (print_debug) DBG(0, "\n[AdjustIPaths-Debug-A] aid=%d next_aidx_aid=%d next_node=%d:(%d %d) next_vidx_next_node=%d curr_node=%d:(%d %d) t_curr_node=%d tend_move=%d(init) \n", aid, next_aidx_aid, next_node, node[next_node].row, node[next_node].col, next_vidx_next_node, curr_node, node[curr_node].row, node[curr_node].col, t_curr_node, tend_move);
@@ -1738,12 +1944,9 @@ bool AdjustIPaths() {
                 assert(next_vidx_next_node >= 1);
                 const int prev_aid = ipath_visiting_order_next_node[next_vidx_next_node - 1].second;
                 DBG(0,  "  prev_aid=%d\n", prev_aid);
-                if (agent_aid.target_node == next_node || agent[prev_aid].target_node == next_node) {
-                  SwapVisitingOrder(aid, next_aidx_aid, prev_aid);
-                  updated_visiting_order = true;
-                  break;
-                }
-                exit(1);
+                SwapVisitingOrder(aid, next_aidx_aid, prev_aid);
+                updated_visiting_order = true;
+                break;
               }
               if (new_path_elem->node != agent_aid.target_node) {
                 is_covered_0[t][new_path_elem->node] = is_covered_idx_0;
@@ -1797,7 +2000,7 @@ bool AdjustIPaths() {
           const auto& last_path_elem = path_aid1.p[path_aid1.tmax];
           int tend_move_aid1 = tend_move + (aid1 < aid && agent[aid1].target_node != next_node ? 1 : 0);
           const auto& agent_aid1 = agent[aid1];
-          if (USE_SPACING_TO_AVOID_DEADLOCKS && last_path_elem.num_partial_turns == 0) {
+          if (USE_SPACING_TO_AVOID_DEADLOCKS && last_path_elem.num_partial_turns == 0 && (next_aidx[aid1] > next_checkpoint[aid1] || agent[aid1].moving_to_node < 0)) {
             const int min_tstart = tend_move;//USE_STRICT_SPACING_TO_AVOID_DEADLOCKS ? tend_move : t_curr_node;
             assert(t_curr_node < tend_move);
             if (tend_move_aid1 - agent_aid1.cturns < min_tstart) tend_move_aid1 = min_tstart + agent_aid1.cturns;
@@ -1819,7 +2022,7 @@ bool AdjustIPaths() {
           const auto& last_path_elem = path_aid1.p[path_aid1.tmax];
           int tend_move_aid1 = tend_move + (aid1 < aid ? 1 : 0);
           const auto& agent_aid1 = agent[aid1];
-          if (USE_SPACING_TO_AVOID_DEADLOCKS && last_path_elem.num_partial_turns == 0) {
+          if (USE_SPACING_TO_AVOID_DEADLOCKS && last_path_elem.num_partial_turns == 0 && (next_aidx[aid1] > next_checkpoint[aid1] || agent[aid1].moving_to_node < 0)) {
             const int min_tstart = t_curr_node;//USE_STRICT_SPACING_TO_AVOID_DEADLOCKS ? tend_move : t_curr_node;
             assert(t_curr_node < tend_move);
             if (tend_move_aid1 - agent_aid1.cturns < min_tstart) tend_move_aid1 = min_tstart + agent_aid1.cturns;
@@ -1956,17 +2159,17 @@ bool AdjustIPaths() {
     assert(path_aid.tmax > TINIT);
     if (path_aid.p[path_aid.tmax].node == agent_aid.target_node) {
       ++MAX_DONE_AGENTS;
-      MIN_COST += pow(path_aid.tmax, kScoreExponent);
+      MIN_COST += GetScore(path_aid.tmax);
       if (path_aid.tmax > new_max_tmax) new_max_tmax = path_aid.tmax;
     } else {
       assert(path_aid.tmax == T);
     }
   }
-  MIN_COST += new_max_tmax * kMaxTmaxWeight;
-  
+  if (MAX_DONE_AGENTS >= 1) MIN_COST /= MAX_DONE_AGENTS;
+
   const bool changed_important_data = MAX_DONE_AGENTS != num_planned || new_max_tmax > max_tmax;
   if (changed_important_data) {
-    DBG(0, ">>> [AdjustIPaths] mda=%d/%d minc=%.3lf new_max_tmax=%d/%d\n", MAX_DONE_AGENTS, num_planned, MIN_COST, new_max_tmax, max_tmax);
+    DBG(0, ">>> [AdjustIPaths] mda=%d/%d minc=%.6lf new_max_tmax=%d/%d\n", MAX_DONE_AGENTS, num_planned, MIN_COST, new_max_tmax, max_tmax);
   }
 
   CheckNonDeadlockPaths();
@@ -2118,6 +2321,7 @@ void SaveDataForReplay(const char* testid) {
       fprintf(f, "%d %d %d %d\n", node[checkpoints_aid[cid]].row, node[checkpoints_aid[cid]].col, checkpoints_o_aid[cid], checkpoints_t_aid[cid]);
     }
   }
+  fprintf(f, "%d\n", T);
   fclose(f);
 }
 
@@ -2134,6 +2338,8 @@ void GetMoves(const char* testid, bool replay_mode = false) {
     ReinitDataStructures();
     ComputeShortestPaths();
   }
+  SCORE_EXPONENT1 = 2.0;//2.0;
+  SCORE_EXPONENT2 = 4.0;//3.0;
   DBG(2, "testid=%s TINIT=%d: resc=%d nda=%d npl=%d\n", testid, TINIT, reschedule, num_done_agents, num_planned);
   if (reschedule) {
     if (TINIT >= MIN_TINIT_FOR_SAVE_DATA_FOR_REPLAY) SaveDataForReplay(testid);
@@ -2142,7 +2348,7 @@ void GetMoves(const char* testid, bool replay_mode = false) {
       updated_paths_ok = AdjustIPaths();
       ++num_adjust_ipaths_without_full_plan_regeneration;
     }
-    const int kMaxNumAdjustIPathsWithoutFullPlanRegenartion = 10;
+    const int kMaxNumAdjustIPathsWithoutFullPlanRegenartion = 5;//10;
     if (!updated_paths_ok || num_adjust_ipaths_without_full_plan_regeneration > kMaxNumAdjustIPathsWithoutFullPlanRegenartion) {
       RegenerateFullPlan();
       if (TINIT >= 1 && any_best_solution_updates) AdjustIPaths();
@@ -2152,7 +2358,7 @@ void GetMoves(const char* testid, bool replay_mode = false) {
   WriteMoves(testid);
   if (TINIT == 0) total_time = 0.0;
   total_time += GetTime() - TSTART;
-  DBG(0, "[GetMoves] testid=%s TINIT=%d/%d ttime=%.3lf nresc=%d nadjip=%d nadjipwofpr=%d nda=%d npl=%d sum=%d/%d(%.2lf)\n", testid, TINIT, T, total_time, num_reschedules, num_adjust_ipaths, num_adjust_ipaths_without_full_plan_regeneration, num_done_agents, num_planned, num_done_agents + num_planned, N, 100.0 * (num_done_agents + num_planned) / N);
+  DBG(0, "[GetMoves] testid=%s TINIT=%d/%d ttime=%.3lf nresc=%d nadjip=%d nadjipwofpr=%d nda=%d npl=%d sum=%d/%d(%.2lf)\n", testid, TINIT, TEST, total_time, num_reschedules, num_adjust_ipaths, num_adjust_ipaths_without_full_plan_regeneration, num_done_agents, num_planned, num_done_agents + num_planned, N, 100.0 * (num_done_agents + num_planned) / N);
 
   /*for (int aid = 0; aid < N; ++aid) {
     if (aid == 27 || aid == 49 || aid == 56) {
@@ -2175,3 +2381,4 @@ int main() {
   SOLVE::GetMoves("1", true);
   return 0;
 }
+
diff --git a/r2sol.cc b/r2sol.cc
index 73bef06..20f210b 100644
--- a/r2sol.cc
+++ b/r2sol.cc
@@ -98,7 +98,8 @@ void ReadTransitionsMap() {
     }
   }
   nnodes = 0;
-  T = TMAX - 7;//8 * (H + W + 20);
+  T = TMAX - 7;
+  //T = 8 * (H + W + 20);
   int row, col, o1, o2, num_transitions = 0;
   while (fscanf(fin, "%d %d %d %d", &row, &col, &o1, &o2) == 4) {
     if (row < 0 || col < 0 || o1 < 0 || o2 < 0) break;
@@ -882,36 +883,43 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
     }
   }
 
-  int TMIN = T + 1, best_o = -1;
+  int TMIN = T + 1, best_o = -1, best_node = -1, best_t1 = -1;
     
   if (tmp_path_aid.tmax < TINIT || tmp_path_aid.p[tmp_path_aid.tmax].node == agent_aid.target_node) TMIN = tmp_path_aid.tmax;
   
-  while (hsize >= 1 /*&& TMIN > T*/) {
+  while (hsize >= 1) {
     int t, node, o, ct1;
     ExtractMinFromHeap(h, hsize, t, node, o, ct1);
-    //DBG(0, "aid=%d hsize=%d t=%d node=%d o=%d ct1=%d can_reach=%d/%d\n", aid, hsize, t, node, o, ct1, can_reach[t][node][o], can_reach_idx);
+    assert(0 <= t && t <= T);
     assert(can_reach[t][node][o] == can_reach_idx);
     if (ct1 != can_reach_with_t1[t][node][o]) continue;
-    if (t + dmin_aid[node][o] >= TMIN) break;
+    if (/*best_node == target_node &&*/ t + dmin_aid[node][o] > TMIN) break;
+    if (t > T) continue;
+
+    /*if (t == T && (best_node < 0 || (best_node >= 0 && best_node != target_node && best_t1 < ct1))) {
+      TMIN = t;
+      best_node = node;
+      best_o = o;
+      best_t1 = ct1;
+    }*/
 
     // Case 1: Wait.
-    if (t + 1 < TMIN && CanEnterCell(aid, t + 1, node, node, covered_by, is_covered, is_covered_idx, tmp_path) &&
+    if (t + 1 <= TMIN && t + 1 <= T && CanEnterCell(aid, t + 1, node, node, covered_by, is_covered, is_covered_idx, tmp_path) &&
         (can_reach[t + 1][node][o] != can_reach_idx || can_reach_with_t1[t + 1][node][o] < ct1) &&
           (agent_aid.inside_poz || t > ct1)) {
-        can_reach[t + 1][node][o] = can_reach_idx;
-        can_reach_with_t1[t + 1][node][o] = ct1;
-        auto& new_prev = prev[t + 1][node][o];
-        new_prev.t = t;
-        new_prev.node = node;
-        new_prev.o = o;
-        new_prev.type = WAITED;
-        const int est_tmin = t + 1 + dmin_aid[node][o];
-        if (est_tmin < TMIN) InsertIntoHeap(h, hsize, t + 1, node, o, ct1, est_tmin);
-      }
-
-    if (t + cturns >= TMIN) continue;
+      can_reach[t + 1][node][o] = can_reach_idx;
+      can_reach_with_t1[t + 1][node][o] = ct1;
+      auto& new_prev = prev[t + 1][node][o];
+      new_prev.t = t;
+      new_prev.node = node;
+      new_prev.o = o;
+      new_prev.type = WAITED;
+      const int est_tmin = t + 1 + dmin_aid[node][o];
+      if (best_node != target_node || est_tmin <= TMIN) InsertIntoHeap(h, hsize, t + 1, node, o, ct1, est_tmin);
+    }
 
     const int tarrive_node2 = t + cturns;
+    if (tarrive_node2 > TMIN || tarrive_node2 > T) continue;
     if (!IsFreeTimeWindow(aid, t + 1, tarrive_node2 - 1, node, covered_by, is_covered, is_covered_idx, tmp_path)) continue;
     
     // Case 2: Move.
@@ -931,7 +939,7 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
           new_prev.o = o;
           new_prev.type = STARTED_MOVING;
           const int est_tmin = tarrive_node2 + dmin_aid[node2][onext];
-          if (est_tmin < TMIN) InsertIntoHeap(h, hsize, tarrive_node2, node2, onext, ct1, est_tmin);
+          if (best_node != target_node || est_tmin <= TMIN) InsertIntoHeap(h, hsize, tarrive_node2, node2, onext, ct1, est_tmin);
         } else {
           can_reach[tarrive_node2][node2][onext] = can_reach_idx;
           can_reach_with_t1[tarrive_node2][node2][onext] = ct1;
@@ -940,19 +948,36 @@ bool FindBestPath(int aid, const int covered_by[][MAXNODES], const int is_covere
           new_prev.node = node;
           new_prev.o = o;
           new_prev.type = STARTED_MOVING;
-          if (tarrive_node2 < TMIN) {
+          if (best_node != target_node || tarrive_node2 < TMIN || (tarrive_node2 == TMIN && best_t1 < ct1)) {
             TMIN = tarrive_node2;
+            best_node = target_node;
             best_o = onext;
+            best_t1 = ct1;
           }
         }
       }
     }
   }
 
+  //if (agent_aid.inside_poz) assert(best_o >= 0);
   if (best_o < 0) return false;
+  if (best_node != target_node && !agent_aid.inside_poz) {
+    tmp_path_aid.tmax = T;
+    for (int t = TINIT; t <= T; ++t) {
+      auto& new_path_elem = tmp_path_aid.p[t];
+      new_path_elem.node = agent_aid.poz_node;
+      new_path_elem.o = agent_aid.poz_o;
+      new_path_elem.moving_to_node = new_path_elem.moving_to_o = -1;
+      new_path_elem.num_partial_turns = 0;
+      new_path_elem.how_i_got_here = OUTSIDE_SRC;
+    }   
+    return true;
+  }
+
+  //assert(best_node == target_node);
 
   tmp_path_aid.tmax = TMIN;
-  int ct = TMIN, cnode = target_node, co = best_o;
+  int ct = TMIN, cnode = best_node, co = best_o;
   while (1) {
     assert(can_reach[ct][cnode][co] == can_reach_idx);
     assert(ct >= can_reach_with_t1[ct][cnode][co]);
@@ -1045,6 +1070,25 @@ void UncoverPath(int aid, const Path& path, int covered_by[][MAXNODES], int is_c
   }
 }
 
+void CoverPath1(int aid, const Path& path, int covered_by[][MAXNODES], int is_covered[][MAXNODES], int is_covered_idx) {
+  const auto& agent_aid = agent[aid];
+  if (!agent_aid.inside_poz) return;
+  for (int t = TINIT; t <= T; ++t) {
+    assert(is_covered[t][agent_aid.poz_node] != is_covered_idx);
+    is_covered[t][agent_aid.poz_node] = is_covered_idx;
+    covered_by[t][agent_aid.poz_node] = aid;
+  }
+}
+
+void UncoverPath1(int aid, const Path& path, int covered_by[][MAXNODES], int is_covered[][MAXNODES], int is_covered_idx) {
+  const auto& agent_aid = agent[aid];
+  if (!agent_aid.inside_poz) return;
+  for (int t = TINIT; t <= T; ++t) {
+    assert(is_covered[t][agent_aid.poz_node] == is_covered_idx && covered_by[t][agent_aid.poz_node] == aid);
+    is_covered[t][agent_aid.poz_node] = 0;
+  }
+}
+
 bool RunConsistencyChecks(Path path[], const int covered_by[][MAXNODES], const int is_covered[][MAXNODES], int is_covered_idx, bool crash_on_error = true) {
   for (int aid = 0; aid < N; ++aid) {
     const auto& agent_aid = agent[aid];
@@ -1424,17 +1468,20 @@ void RandomPermutations(int tid, int ntries) {
         }
       }
     }
+    bool inconsistent = false;
     for (int idx = 0; idx < N; ++idx) {
       const auto& aid = perm_tid[idx];
       const auto& agent_aid = agent[aid];
       if (agent_aid.status == DONE_REMOVED) continue;
       auto& tmp_path_tid_aid = tmp_path_tid[aid];
       UncoverPath(aid, tmp_path_tid_aid, covered_by_tid, is_covered_tid, is_covered_idx_tid);
-      FindBestPath(aid, covered_by_tid, is_covered_tid, is_covered_idx_tid, can_reach_tid, can_reach_idx_tid, can_reach_with_t1_tid, heap_tid, heap_size_tid, prev_tid, tmp_path_tid, &tmp_path2_tid[aid], tmax_at_poz_node_tid);
+      if (!FindBestPath(aid, covered_by_tid, is_covered_tid, is_covered_idx_tid, can_reach_tid, can_reach_idx_tid, can_reach_with_t1_tid, heap_tid, heap_size_tid, prev_tid, tmp_path_tid, &tmp_path2_tid[aid], tmax_at_poz_node_tid)) {
+        //inconsistent = true;
+        //break;
+      }
       CoverPath(aid, tmp_path_tid_aid, covered_by_tid, is_covered_tid, is_covered_idx_tid);
     }
-    
-    if (RunConsistencyChecks(tmp_path_tid, covered_by_tid, is_covered_tid, is_covered_idx_tid, false)) {   
+    if (!inconsistent && RunConsistencyChecks(tmp_path_tid, covered_by_tid, is_covered_tid, is_covered_idx_tid, false)) {   
       int num_done_agents = 0;
       double cost = 0.0;
       int max_tmax = 0;
@@ -1468,6 +1515,7 @@ void RandomPermutations(int tid, int ntries) {
 bool any_best_solution_updates;
 
 void RegenerateFullPlan() {
+  ++num_reschedules;
   any_best_solution_updates = false;
   updated_best_solution = true;
   rerun = 0;
@@ -1476,7 +1524,6 @@ void RegenerateFullPlan() {
  
   while (updated_best_solution && rerun < kMaxReruns) {
     updated_best_solution = false;
-    ++num_reschedules;
     ++rerun;
 
     for (int node = 0; node < nnodes; ++node) tend_ongoing_move[node] = TINIT;
@@ -2119,7 +2166,7 @@ bool AdjustIPaths() {
 
   const bool changed_important_data = MAX_DONE_AGENTS != num_planned || new_max_tmax > max_tmax;
   if (changed_important_data) {
-    DBG(0, ">>> [AdjustIPaths] mda=%d/%d minc=%.3lf new_max_tmax=%d/%d\n", MAX_DONE_AGENTS, num_planned, MIN_COST, new_max_tmax, max_tmax);
+    DBG(0, ">>> [AdjustIPaths] mda=%d/%d minc=%.6lf new_max_tmax=%d/%d\n", MAX_DONE_AGENTS, num_planned, MIN_COST, new_max_tmax, max_tmax);
   }
 
   CheckNonDeadlockPaths();
diff --git a/r2sol.exe b/r2sol.exe
index d880c25cf96d662f43da3ac527f2231190ae955f..2cfca4c12a2f7749ec74179eef1cf436a5521965 100755
GIT binary patch
delta 37781
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
WJ#rY=`R>Y_<s2(s;68n`Ect)!$EK73

delta 35575
zcmagH3tUuH7dAdK%;=~C2NDz&6m3wvpip9tFv{Q=J?NmQsNlWEOw!5<io6XvjB-34
zB#)+*m3Fn#vb;oU23|ld3pFogrS(?tjF&_!rPSto*4~5p_W!=$fBZT7?EUQP+H0-7
z_S*Xl>rWV~zcg0H-nITN9s6YRK&MN1w#S<-OTu}yB>dTLdbj*e<FW5F?Jj+9&#gW@
z+7#*{d0da68UAm%$m3gX{%<%ljK@p%Tq$5rp>hU9sGRu{$IZ9?H;kkV_=H03Q+;;l
z>Z3gE-{Csy1U~Du?uL<_|6e`H4fP~fd)|;9{pR9FQ{KB0G4bBwjq&Exoczk)&wQu(
z4OVMBDry>(PQQriHBeed{6G5O7mwJkDsh^_5Nk9em$v9i>osS)=}p@7uxR}sT1{A6
zy_bD2VBb~R{YcrQUBUNJmh!CD+1N+_6{TwpVMeXU6vNUB*td&)k73`>)3<R2nx$5>
zr^DLmA7&N3%;4Wx73HQ_{k<$+!@k3`qo$$yUnrm9tX{jP*<$Tjv)$Ud=C`!h&3Rh$
z7U9~T<_J&kd+woe;h#|#hJPmfZ-)OmU2}Xl*O~E6|61r;;@gN&r)#CN;F&&z5Rvq{
zM9_dHGy(r}yFSy3a>ayZPLEo%LijY`Z3_#*U>04xK{t>Uie?FBT{je<N>)Al95|wx
zE;SS{YFCJMjk=6bytqBZ!*r7NXNyjryin@#_h*@O=%Bl)RQHu;8pflc`2CG*@MO}>
z4aJ{eaf41qoIXtqi$d&E+M0(|Ax3UWua4sB)jZt;8u3qNs6hR{3N(b`r~j268O_U`
z`&W8GDBb_B^y(*h{>J}FHzM(<*1lE8_D$`8)H;&ukbvoQx3tl%y0jzSZTg%J@+T6!
zmYUkCZM(Kj5JLYQXnXCGR&B#O+<`V~AGB(#HMX*}Yja0x0+SV@FC;|Ev9t{jk(K4?
zuQ@DjwQ`FkoVwfek+jE=T7^{VN7E-?+kjL*Qkw`%$V}}hQe(p{;oz;?pAt<U-d2;4
z8d6ydDc4ewT7p#Jc21pct#&_BH-=l<g(i?;8$)Alj#z8$NO;@u5cL^arPZK}Il`jd
zL~RG}$lGpf%|^|zGO~;3uU~b#VB$@D3!O6YMDdwaI&dzCPvTXI)0_nAS^PZ3i8z63
z7XOjrBu9ZQEdC9}iA;g@EPjmQMAkqhiyx*q5iC$jaZlo2N}&D+=CBMqDNeKtOk?p6
zDNceL$Yt?&DBhCdnJoS)#fhqc6c&Gh;ueZ0u=q-f6MX}bEWV855fs-U?g=I?rUW8&
zpy6+%B+jKcabMsZi$6heB6^^n#UG|PacH2L#UG$J2~S`Pi%&p&MkV6xBYEw)NYE8o
zB-P$0*&Xjck6e;`*8d?Io6)sW@?JFWAp!$`X9L*x#xk8QwOaD-H}9h<kyKMbU+w3p
zexq8Tp44l|R*vj`jjB;&e#gQiscFu)3_7XKGynm8kZIp?1a+pArj$BUa_G^Y&x)Fk
zYP0XU&$9>>uv#-wE43PE4p`_^O7)~(%9f8#k>npG?@tZ6c`nt|{#mL$d@BZsM!rSX
zU`$6;@w?DTWJwOzA=3Z~Y>h=Rl481sMOE@u7qtkU3)PE}vHB&or9FxjNNagX>(#o0
zcqEk996UFJRoRra)cyk?U2&hWAn8JSl;od5RmJ`eBK~mn#6J_gsWpA9DXn`L-XE@g
z)H+e$pncam*7(>P2A%eC>$~k+ZW7f7`z70j;{VcUCr;i63fK6ly5@l>z?F!9fcO|m
zzJWCVts88<CI*VMg6ILU?cTgvpbpWC>Xb0iR_`g6+$UXX^6>-OyU|LEUp_GxNbZ=2
z-p~fcd|+6<U%MJJqTQq&I^E96U}?<LSI<*m*S~@;M{5Ob#)obC?UJ^&jnh!JPy4IQ
zTfNTgJy4*y4okj6LU|sWr*Qu^l+Wkor>$k>pGV+duN`Td*=_})^Euj_qnp+N9jbMW
zeY~BCP%lRptYKwWz6|seZA)xgyN|X4E#YV%juyQH^fB%4*tVXfgpT8A@HtlY^%sE-
zx=u6<pGojo4xi)jc7hW)oK0{Zhif=Yx%_$#_aJx-hhGg<PVkS{Smmv@>O8ugqdD&7
zxQ=Sy$MK6FqWCBdPv`IlF93d>!$$}n&S58qhf?i64!=jRi^E+xOu76sIJ|=391q8v
zb9@ukK9u8g2p`E||7u2<&Qv^!!=nh!=I|j7x1rK4ID8Mm!#Mm7hr1Dc{tq_t)&$Q3
z>;bzd9M7Z){fy(ke*k<gFFu>Ye-dFfargwmPjfhj!=njSIlP15r#Rf3!|#G6{f}~Z
z4Z#yQ>=8I_q0WuucnRT;bG%^{8@Z3*6b=^<d_RYea`-8#J&It({>@KRBBl@OWg0KF
z+W%jUR0HuVc>a_$p??FVderciRNo9<-(p_hS*maE?~GIzwg7&R!)^|LjKKdIhd(EH
zF^5GCcP3Jlad<Pqi#VLf;T|-W2RU5fA-t61%{cBQu^Yni#|RGb$bU6PioOJQ1KgzD
zpxRk{hH$z1swDKNzA8*H_1lijq}?kW<1xi!K@G<^$5=<+*fCfO@<FF<FJCQ~E@>5U
z_vp83HF51d_agxk_r*&T#C(PT3xt|>f(GkDd!l06fkcOz8MLE1ov<_sOR!>p35n{+
z;G#cyVrwKyh1C#rnugpn4X7=887kWF9Uk=urRzr}weJ$C<_Ck&30aI$v;fuVv<dO;
zJPuXtAMH#H)|t+H(@=makRkqeJl32GbE#>EFJ3B;P0_4}qE(b+(HbkMqBWDABIzlE
zp3L;rUy_a1KqYmwQyJBybEz?JLm^;&`4E94%(B=K7F{Zo3$QFi+hIX%rk#%$!@B-`
zUQ6xRyXOR=x8g!=O0*ROJFxC*fnWDqFz9VG3O)gApps|pFDl{Ib=tCy>4yKjsMU4M
z7&PkZh5}K}vsxXC{`v?egRr6sSzYegRx3KN)qb@A9hiOVd_j(Uaj+bHKD*|pW`kwd
zc_Yx6Tj#Z`PK7an;DLg{b;ga<Yp0r}7iH6Pr?u)%9nzjT-B93I)W|EI4nEFtAH>S=
zV+K{5_~Om;1%u_hBRW)g#F!%=!F&$Ad0vZ5nBwV*I<xAGSobk@HCHdke08d!z@<MS
z%EosC>Mfe!@OCd;Ef9tG!^0_5OdleLDE|pQQ0z<2vI)Ho9mM3yzq*0R+oMSL+wdIt
ziq<eS{MP#<5oiT-o`x+MR-!(YP_+Ky%MAaX@I@SN!|_H0{&5`sl;DRse7%AdpGWY0
z99~cG6b_%}a2lz_SPm~Dn5G+zf6QT-O8@Ek6-##+&or4b&ElC>^GwN<=>+m%00Rl0
z&Ecmw+=bvB9PUK$BOD&j;TVF~a9Bt1V;t_!VKd;i{u1C#tf(yA*Z}^CS+`dEtMdrM
z>mO^wx^#-^x%O&-?c{<!5Q<MBG(%w{G<>8j?2=@t{Ycx`rGM(~&8WMP*KJi9ZK5D`
z{^^&f>P(%}ccv&4>@Yp!JxG20OP^>_cPAQl4AA=Don;w!mp(6B@0Zl%nRjVR?w-{0
zL)11y$TJ<=tX;gjy<x~#n%O$Y@Zb(D+xlqB?>2Gp)+VjS8r$M}q&^QNEm7K!)(k`M
z<61)Ed`IKEJWnjk+vlLLv;%A-Q1HL+pq~PndTQE8a2#0Rbx4zc#rc2KmYN*3Q~NG4
ztKS03d@s-Zv&=GgL>Ye~%Pi`2+3s9pj@x0$RxRa{YJo0^`SU;8*seXq7}fza?9Jp>
zjD_mDi`P}e>w26T-WFi}y7V^SE1Z5~Iow{`*VSQI`;OME+uhMm5}v?|pDAZu$<^%L
zdKm_9)n;|;?1?121IJ4^z6{m)tNg6`D-hV7fAi`KIQ%FSkpFoOA0zlWhX-)jMWyF*
zcq_qedF35AJZ&Z5i5y<Fk&Kl#9KX4gbuRT;;29h*rsAzQ{2hnip~mAmJdWU&9Nxp>
z!36*PU)J^e2=2(?S2$dUKKRdaIF{ge564S6t`T0%@ju@JPTN~d`28GylVoB8hrb~>
zio;nPzD$iT=I}0p`*8Sf4zHz=yE(j$;NE~esNKl%Y{Es3FCaXI7yo$)Bg|E5Jdwjw
z2=2+@S`N1&x;5kQAc7+}{1%75rPBZXg%Ku!;BXFm$~nH8@Pi!J6W)X4g&cmF;I}#a
z<C}oHb9fks#}mAa!}|zM;&4w64_pd(7KdLaxD$shOECWsq*2s&7sq{sx99jJ9~=2%
zqH8jTXAn$oC(!K+4!5S#5gZ;$u$9B_bGQgf#eex{Hu5Bb@8)nNgFW_FmjJH^PF6)s
zSS7O<8dtz77>73QLf5&CflbY#i&bFt%<}oxr?Gm>M%L+)VoXdT{+G+FU?^-r{j1Ow
zC1xjTP_u&eIwT59*F``znqEa(y6JU%3+gPSl${YgKBq;e^HmFF9ZWi1t!Y+mt`i2x
zWCXsTQ1%@x4<&6DN>IztuG8^|-RY&54{%eW&U8NXSZDHwo_yEpOmS2XH7)M-nr5`r
z=jmmWnJPUdRFtDq=;25DT^jEip(g(F-T_nz>w@x=t&s~bYWtD#(7J~|Z@{Ad3#FzY
zHGP{UpPn=E+~=NN>{-I|-CKsUXS4QB@;xd2ks_hex-u)|iG4uH7r-M(S>BYQ*mW3-
zJjpsov-Ea(F8)L_Wb$oBXT1A!ZLxx{T{uR(+=|)PdH)O(mfArn$!(fJS==#h1Y{q|
z;T!ODRfr6KhKKP-Uq?%(sfbZqA;ayeP*5Z3>rrq30EZ&_bh4=%9#Nxp^8rsmlYytN
zpCR-)9m>!e8LGf9x~CH5z04XFB4eIF{oZQ*RiVdTsukJmpZ-CP`EApI0_;9l?@g^n
zchPYgs<67cbG>Z3%rW0v&1n+5t5*v!5x#b?(lF+g07uLa9!q-x518CK1Xy&qO^@^h
zxB@;!8XoOSd6@hPLWdCbRHV>-x;0YS#wd-1uE>=5#3t?CK5;W&ze1z4ctzC#bIa&;
zsm4+T^d5<Dm};z+^fhRGN<wXc99QnUCiwnDe=^I!b}7^`x9Q2{U^bL6%U)XBebpty
zV1{OfIh2Kw4&^C$W-R+8`Lvdj(#><Q_@tzeo$4;7ypmD`b5#xhJ_XCRGT)k6XZ(QZ
zNa-nc&1rab&6*OVx@MGM+v`b^+%D@J7}MY|dza1Ns=}I0RGn&UK#Os<zRiWQdq6~o
zGQ<d}DSxU32x{M=cwlBU3hGQm0htM!M^M^I1xSOSKEjbmLP`k<w;pOJupJcCCkXK_
zw1C5o@=VdTI-%mMnaO4ODTJsp)>bQ2oDZe_$kXDevbA`&)p&%8N<3t{ha{0Lz2Ys@
z1g78c0-J&*>N9#dV+qDp3R=+kcF>6U1iXYiaz?rD*g}(k(N#!+7qY0&_SRxcLpJ{+
zNMu|Rs>6es5d#@gj1<jmN|!wJWHY_I47z2-O|n`Qu8^in_i_y-`26Ugv}iwRl8KWY
zlN^&BQyf$G)tYi^a-Dkkzz_g}==8e%)G_n~t~~zyZIx3WdaN^j(e&go8ADm+n7^uX
zonF&$6O>Ni*T3Mbs|5Wd*|g_v61*WU*;Ium(nMFGiAteOb;1t&=P0G5JqJVyUx#mj
zRsy2D)n=MT@mH#a9n~!wLcA`UW+Aafqp;ev5+#R{hA8_3IutA&0fdC5D-RQU^DqT+
zG?+go_e2PBS(qSnFS17BsUHfY{k&0=?(OVpV&cFUY$4!HD<iV#T3lClGciMxMj9fu
z_+N|wEtYO%Ehd)pFu9V4)Z%vjXnzSI+L-}~y`#mak(w<J$p!Lg0=}L~aR{EMg_&Ta
zIGDR{U*aOHKCYMhdWnCUcn5Mchx5;aaS-6X<+NOoXO{^qy7a}{kRHX}T&4vrt-^zT
z%HK(<#-y|R0W4I#&e8@cF{d0Gqx9D(U0Cr1WO7Khd%vXaw!(R$bIC>45=q@=U5kjM
z#$j7J-<pK#=b(BgR)(7Ygi&7Xs8N5BHNmCk#TzM8q_(MVf@el$wmOuYjSr%g9JvuI
z0JJB0kb`5;t%D13aD*J@+|=r^F6>Mt+MZ@g*oLO~pZFf5ahF-QQQhAC2_$U`K<{)@
z<x*NgA1B(oSFx^vo67GeEM^YF#u8Ro-I?v#_4Q1hJFt7EIto}Ff9!8S9XZ;gX_@+-
z+WTp-S!U6;g;7Dh0n^(B3YQQuF^TpGs1)7(VF9i1lKhQd{tk<LSV+so%<K8ycr1&N
znz>)cX`s#~>w5Hg7wI>uMv~;&M43bn%DdEDBMEk{OFrRJON^4rNkZ#tBzFd5^w9Y(
zYh;f6XSVD|`!!3j8J2&+q+S13Thgz)M}me<H@&%!#*jhU8a1X!-hFz>d%&3OtuxwU
zJsP#01PRK-sLTFDZ}1#R+8FLxJYrg)nC0fIH%iO~AC_al|0wammOmN)i>SY;mwarU
z(V)ErIwi?9l6)T9|D-n#aOcXr`LL&Yf2-x**V7Yt9dZtek6^t$zL$ENg=eq*7!WAj
zJ%}hV2DFR`ToJ)`+ooB-NE)9+m?^BPBT;^urzPMyejc77SgQ~)<w0Wee_aPX4<HNB
zg(O*1AX!l}GD+A3-#2ik(n{w$iidy=?ZR<`MIaX<y{{4e5Yy;gP>O+%@LY+m$z8y(
zb*46`k62fUiN+K09FsT|P6im3ZcrFZ^1(9{*c0dJhU)xRzUGec=U-!EO5VW3w6}Q}
zOJm!NXN;#7f!B0)C)yRdPhv``BMtZE*R)Uj5AblWJ|wSQsEW=!w0GxW66H<i&xvUW
zQRP4cj5-((uXi@9xA*^rD1jg*8?*Y2m$`FVBR@II!rR~hhOws=3)958nBMCc6?`eN
z$m+!Wt}^}gajrA442~oe_y($CXJ}vbL<yrsHy;Xpc$&ex2wucVHHO0y!5W9x5$xk|
zUk=|-u&0RQ3kcUZ9>ejLWWkT+@Dze~aQNEOtZ_F?cz-_*4<dLQhfi_%D=OWV!wCd$
z=WrE=FA>~$D(Io1=?UM$@#i^Cn-Krkr`XVbTmzWQ9B{#04xc4>Cx`bD{2_-Ya=3xu
z7diYo!816V!QnzL;Q0*pg!>2|%kg-QpNCJ%KN+~+kFTbM3LPz=yjywRD^D>p?4hPo
zc~b)j{)ofJI9yT!_%052Aow8;Z{={3hr06HNjA=#@J{V?aC{ZV1L%<dD-M50Fgq1f
z(~3F#5y9I5hfce~Kc+l+yoymg&lbw_Eb>$;;dA%ECpcbm2VH7-M2p>`W1RMTdRxO4
zvlgB)&eJY)q!X$YWM&Sfmg}+CFj<g@`jBX;uQN463_eQ4k}nJz>2wvIt%BoHay#Ng
z<(VWXRk&V{)hCJA;|za(_24?wcgO{0ghgyG>=P=YKP|_6ga@hSoKcS1&XNwwG1~@d
zKW1bY2L7NW*q<2F28O4vdSS;gsb`=;<g?Jg{(e|JZ1Fc2UM=waI+2}4Hl4*OreBZ>
ziK!rGqGK$ix$v(}9np!bHRb{b&IuC(FKa*ByTt#24XO74tib*G*^3S^t8dXh3T(+s
z7HZak0}F<PYC4KRJH~tcdY5Wn@|q>znR>`E4x^jfxmUhRjSs#A6)+YGy2tBB#^=a?
zIP!Ajo6KXLq{RQdfHXK1zB*5jomeC+jteWaT?6Has+Wi7+bo7+4PETjMH@Y++|b3U
zeLJX=VNqx8)}SG|e`43Y^D&SZyngg?3hb+&!~{ki!vs3U-{F~uKRM>!`B+=>tkEv4
zrzH;CRYBd4qI6dG5<*+}XCG@?=0roqi&{hGWW&^X+DJ!I$Ha373Y?0i(%}v0h4S}k
zate=GF-aIrAY$uk$2`4f6WozIKj7UkKE}GCLvQ@zmyA<Yf}iE^&yO<r@EpL29DbDG
zN)Fd@cmu)B0CRooavuW)x|SGpS+<Nyk2!D#<HJm|P2s*79y*I~2jMCxtfScp9Y?6~
zC)Pp%FS@vqIvrMKWqu@>N0CJBB(lwsSqCdA!3BHPk7x1|Q2)qHY8>kD>h(%mRS8)g
zM(nYeS3W;ec3JaXs3F#crxaLO9&0XYoew9e;M)X7Q1TNbw-hP4b1hX=pOU-)b$Bo6
zk$;j4_A50jNT*R@iT*dqy$?1L6AV3E?yoOC*Bf0ZtfLh8@C`WHaH+i(yI{STUCJhF
zBMM*W5;~-@m6#W_@HnuyD*KDI6pfa$7ws?Ig$cbNs0%>W;5IgLm=x0>7&~d{l)ukq
zcAg7~39xZy!v;z5mtzHX6gVc7RTu3hqsk1TN9%TrO7s@}H@5S_ias<+C<0^5WsOCS
zNs2B@Hb!(NTArgp?QmI3w06#pp61w_J7CqU1?ft&RpSylR-R)lmm=kSvz%+mcDMEZ
zr57shMQ0@U-lj}SiCLLrk&hnzQ*vWl%u9+&riDgW(Fl?LO?V95ie8zmMnC6LS_)Au
zMI|><6n11qit=dC{HRMd%OzT;krvOEz!8)Xm6=Eut@B+npJW<Zk|g8g+?XkXs*|8w
z!sKt1_xP519ix^@o!+b$lS+7AL}j`)|3W5Hn-1?llc>(s7pIL8<@2H(5aqw2Ge8gt
zyTw>eQKDuC4|ZKsMfopBei<ykPhjubPIzkM<4Vk^r?9$*SkCs1P_cpRWYmz0F3Ff|
z2MB*_H65i}=fg+f7ZoW%)E}~aE%=fI@RMW_6<EcYE(y#;SKz={h~r2JY-yEG_rz$u
z)gHa1|56HbVX$i@`3q1jQ>ytf%>UJAu$_{>C?>NZD9Ee8XHYxyr9zm)Tt8!C$pugX
zu9z?B8&Gl)dUWyDE-@^lQvS<!S*Z9BZlI=v!jK>-7{erMlBnz=LW=1gyBlo?YD`Pw
z=SjSB$0x*pB7{y9<xOlSC!zIebjm;~nLMKKF+@X^I)yzmtnhNgIh99aAz(N!+r~sk
zET0aGxf$mz)MO?80%Pc4Pz{MzG9w-G5UbM6gZft74^1Vx=UdG=?w@kpw`lHTN2+nV
zrNUDrBeX}7hN-<?0`sE#m^Z9ky+x(1Xp4>#e2#FWhHYZJjj>s6lVWs&Z!9q_i4)fN
zuW#-WNmNi&bm<$>lQJc4k^VQ^jRl?|>J+{0hOqoOHoZkOz2QApK_#h1@;nSt#F`|U
zG_{vGeYRB;mj6MWy-iK({%?$dIh{mm!{NP!EoKoDM39uak(BMemE*3<E<8vh66Gq!
z$EwluA{rTt)#M}X01olu_R;jjX1kxnp4RwLwtNNi3Uh=sd30;G$8svsEk#>v!S^sZ
z`NCGQaf|60ErsPzBLyw!e#K24EX7jTa;AusJiU=Da60nOk@vbVm1d{hm|eG@ZYN>;
z28ssWLL0ZuB4Ux@YV>F{eq7j-Zx-d2qWrMYB|l)U%ZjA#i1LJJQHiBaO70uk?%znb
zVp*$d^hZwRK9?J<0;Y3eUADd^yYMiLJV&l~+WNK-e4EM02rKjO?%RxJVZ}~TriF)j
z_kT1x<*yyshu<DV6dS~c%~6h8r2*;>ib}r4p-#N%y`dMDI5FoA?+t_Ct3Xxgo+#{@
zgT3lrxUQ%e<^lYPu{pZeD>LCi+nbt)MGJm9)VNQSf4k5>Brc*HD?$~DvV^hEw8*)U
z&eUU2h7LF_C2w`C!@JiY%DFeG?y^5I|K7cND2{`oO!>86hqd+W7IvUHP{oQp!TC7`
zkZiVfK3dOg(kf-u=+GoVBq6rfKMp^-;H)Dp0R=HB+g+EQu^7yR8uCeD^@o-c<zGpI
zMEWN{J&?ls0jt4`O6)!s?WYCw4ri5zgmotbRVS*(yBs#~sfw#d+3tf9E!2Hw%<W34
z<`)AF)}Esy;cPXdpHg5Jl~GV!QxT4|z|B~ktrqo*Rvv|N4+zW2zaT0L%}(2mg)Jzh
z>{Uv!otPgZLWtC!XaO<7*X1S{3yVJlzO%4nNTf??CZQa>uA-8SMPNjvOV&&BGv;y!
z_R)NeS9F2Vm_Vk$owlR%JBYS3g8DT^h?wB3r=d1+DC&(8b__+?`y^#N>TS#G9SO5x
z6sBOW<dIWR_l4I&6Z%hua#Mw+|EjQEQ)Q@Ei0X9VJ))qu5euLTlH9Z~xv<RicgWwn
zNGVAQUx-NR^Dn?Bft_)!UbOuoRCrpU(3l+g2e$g0cZ_F?jwoLvY4g8~4d7H-bBe!g
z;)cLW)Suo>BP1!E!^_Iw)0KjmcbEuw8U|F|NL1&T;Fw4(k&J4fK|RzvvVXvFb42(_
zW=iOqRCtnURMiqWBt80hp{$FE<YGQs)tEg+-sBYraQ^SA%XIn<6-NNH+Mt_-im$L%
z4p)u4DMggA+`w~x4)YIfyokh6&WJ+&B);HLxCYg<g6q3PQc+|M;YdN2jAVRZK~E}|
z%ypR-=v*e1)0(uhWr_Z4`Jl}OMO!fg%~2D~5Zh5?%~V>bqsTnNz<8=0#dw(;8gdrA
zG$CuTy(oJgHfEMT5h>4wi_+}<6SLTs>ifrH37Ij6kN$OsZ4)wMJa@rn6V#uv&nKhC
z_bnd4a<uNqke3RV(n5$z4H-2K@bf5GFNc{?W0vPw#PZBY585n#HSiir-sak-sV0pp
zN$vwo*Ecbi6S7@cPqRY?BpJG}IGHYlRm=zowJ=8#_Q09#Qmw6<RDbH35o&Z5mi`f+
zT*4Lw6P;c2qtWG&r&}e5d@)DOFc2ePT{D(Sdbs4utfi>jq4e=xDlw-g$G+Q8Fux6q
zPV$9$Zy1Yz&XIo&#8AI0?_fEyp?(qNtN&)buW|XKU<$0!PpFj?m-~#%eF91f{HN&T
zTC_%oJ762l)_0Lm)|{4E)%4RWFbSB-C9h*nN!l{F<W=khOIR@nYTzHeM+V$4T<twl
z%haB4Br>=lduvfO*zBq0<ip|Paw)tP`28^G^x3s>RFtferhdqM7iGKQ%5zy~!YClS
z#LJWDNhtdeJro$bp?`cC1>G~t=MY1yzwZ*|608d;;9dwgjxm~(V-IajqvA^R5>fwS
zdY)DE2<p377n)eI$t(g*I7MK3H(5v7Djl&&M)U}Bl~A4^iDd`&x8!cd)Q_9$ao3Z=
z&Q|kQ>y)`>Wtc^-J^D9phTcvUl`JUfgJ9jcVBJ0*6hc(+b;SdCcL2>lYssZRUt+5{
znk@26FmEoHx7H=MgsjNJz`R+JXtsEL;3E0-E6Ezm&32yx?~^?MqbPbDC}C1y`WBtU
zIn!rw1mZTGs4mb4cH)6+TsI88J>Lhuz7F***J0TwX3xb<-G^zX77eo}8gA|QPnV&Z
zyyKa$PkiJq!a^k4{#r2E(Y;Q>Qbmh3+Ak61MoG=f4)gjAD0mzTKZrF+dtr1&2N){G
zOj^H@cal_>X$Efu<ygc@v@4_Adfse=B@K()Cc-RK>(Rl$XG{~o)Y`@kbF9e{SpiL=
z2myeE)yk)9v4ZQUUWa_(!fd|Jy+bB&J4*frYx2KkVi9iSOela%%py6kI^_(j1INY|
z>X`!y%t$fTPkLbX6g@=4vecCW$@cD#b=WQmst44Aw2YPy6bw_N8*CFI1>Y>B!AWmz
zbinHYE=tcz!f76A{>>pgHrwjYW|$Dw%c>-27hct_j*0cq&H)SriA%!LKf3!qEc{{e
zX-R)w3ga|DMP#anb{~K52?p7|Jur@X&?G7(!RmahFM%IvkzxBaP>0mw2dGy?_hESc
zV06OYU)ac18CkO)x$fV(On)#(wcIP!)eudn6X#IYDI0Ba+(1b-V|n;Ta=5aG<bX6J
zHs~qMJ~6bCoHrADY1+E-wFR8g|Mmv9sfwwRn=j<=(4k?IBt<_5k@^2fQuK4mT#M~X
zPbblqWnN&keM$GrLk3E+|Dme|FjL&9<{yzVF3}zy*8}zzEqniH4Csia^)93<Feov7
zI+ivy1`G(zSB^1@(9>eTNF1q#YxCe`84WgofPFTJ0(;eLcv)IuLk75r;FTQS#NhzJ
z7k9&u2R@c?jpHiEUnTqqaKQZteucx2a@dE<bpH1MkApw^sZF<U%|g;+g0pnGQDa05
zejWOWv1R&;s2_?w2N~&@$sdh4zfaraE<FBYz2G+Cvoo{<<GULMF3}psPfPq3uKt~8
zc-uu2*~orC{r+vcNMU5cs*L&JL9IAH*|5x~y`DcM?{EnU{FfKlJAoCLN(BrkfMe1-
z-DV|<Dd|CY%|z>L+MV`>UdCZv6eZEVTE69^w-4ffFVl8R=xo?trhPr(Tf_B(+D8*R
zh3&Y0VC&Zt`|1aDDulU~i^27SA>DL$c-Y5mymuohe}eyFRWOKS6iFwPbq3e+fnTrE
zhE86WT8RCVQx33#j?tq;`3jM6*GwGRrB;veKa8TNdoXf=a4G(lRa*3vLc`^UG|!Yy
z?IVgX)^==VOj|OJjdf=}##*~WtD2J7{!4fZci!Tp7|P*!1TWp8U7ymm{R)DOymWI8
zrxQGMhj!o8hlWKE+%;7BSYG*fs(d>L$&BsLm{!Ah2bX;R1oGd<^N-{Cmr?%bwrl>W
zJ=(uOa3>Dm#o-|YkKV5Jn%2osW6*M@bu%=c(w>?&($NhL#+|3h#8lI!=CQWlKo9+|
zY-?I3VE&QNsPW&H9T}hAR}s{qSOp{{4!frCgJoK?`%?@jmumg*A7nTY(4M)!%<!dG
z3*O((u+6Kre_+^*a(FU#Ug9lOk7g}gM?-$yRyLSIf`8@k1`b~#_=gYaut_m>2IZ9)
zVe(bD#h;xWI<}Whi}8qC27SEe^-#Z-8QS3o?j3*mlnzDFglzh~c=ceZYJ2)!oqqrA
z+ulgHfCR<#(j=;9Unrlq@o!=IauRVh(*S|!^8($5PD}b|qbsMdnw#M<droP2?uBD(
zSK`7^by2gx{X5XH)ardR{*k2_l@N{t6R|za%a$9*)|pl#Gj(JP?kFvM9CUj95f_}<
zKc!wuJtivg&mk)g1HALJZqvtjIwCW&M2`U>N>M1aI`s_WQs|a`EN7w_nE&t=B3RmA
zoJes%{7-*?B>8}1`fCDn-4FPuPfB?0v*_`mq850~Xeu~Ku1T$S$v^U%<;(tgC<~j?
z)-8Sy3VZ4$`7-2TYwka?H32y$A{qB90$*&=5+028JdVaws~zK5N1Hn7LHXNv*XhRf
zI3)O6@b21pcPCQP4kRhz5*}GmoVxYLvxK!rK7h8Zta5)na)C&P)-=Ggc1EbsKoiXI
z$8TRMXh*9uqVToYd)&Oj{QZ$QaflnO)j!zZFnx>Ga>l)$J}Bu~t(b;Z;uc2uBL&pN
z<xq>^1CWS@$55&oGhr0OUomw@BD8@2kN43*dpfX!DRAmlc%i7!^umP}96uyqFM$!;
z)B|#A!ntC4;AT%?_KCVn<0&aYQd^lu&K-`l#H1Tnw7MDh83s;U`OqLk^81?Op_sNa
zL11*pp;VB6$={q>jL**39(gF%u=E*i=|hi4|1uKB|0t(2;-XU#_Z!i#2j0^xGvj(s
zzquKWT*iUO3k!~n50O8nl(H+9mwQ^)B5T5Xj7w}cH*4c&4(*f!aHwM06RHV22)%#T
z=3p>?0{VW}0&Vw9sn@n~bkSz-Efn<b?~exlaZ&_6-vk}>4_8%cnT1{S%QSc42t#^?
zwzcpH{X<&Uhd<Fjqy6;o0K>oxEn!xg=hR7@28D0<QkRF<vziuyF_QZ%P7(Z=J$XAB
zTJk4kVBK-+(0LGUlEQrn=96$dyp%*{huSw1v-C98q_39>kC!Io!<sMNBFWB;7{H$Q
zHo6Fqefcc6kvSkeC<cWU-njyTC2!B=6}3b~D{8;(C>4HI`f3%f4Q!V<5Cz}?0$2;W
z#na+}@w4!>fnRp&h}!$JoTmD*aNDuwQYfKtpXK^)B-Ele>k*^l9O%i1J<C|TWbsLQ
z9C$dZ6w?D^hznnuhBPpi?+Ed<5|c0*6{g2@Mo@%t#l+%)7RWGYSTI%ilQ=X=z2;IM
ztVX?0p4ml5d>2O<u&1fbc8@f|{f~<jp<@r1d|8x>_rty6p^aibz009SFLo$HcjMh`
z*;(yB-XE&e^z~?5k+C&+cDt0sw^5g*#J_;RW&2N2x=TK{a}bFaU6VX3bw4fDG=@pS
zC)JX-VGyj(?t3NuF~5Rki0AO@@Ti!Uph_GZj*=8-l}p*|p^=0CS3QAi6lcJ#yPh1L
zpDoupycyQ8qE;^0?(%j2n^?Koo|aApYw5r#bU0{>zYq0!a00QQN>W06V48SDmnSMJ
zF^*zfD?67%w+R)Sp$$aEXQosiVbGb$o`<0O)tG*>5b*MKPI_Gu_wRAO@9ThUWTg7y
zSbih<cS~t|BI%)sd<iVobdV|ub5<cG5-G3_z_HFs*}1A|-fRAYcS8EMm*h`$z+Ccn
zI#|JMmwFV_)1z=wwV)i0%mF5>_!G-<=_k}OOp}X<&@A6*hWTI_Bqgm~u0f|t!PM#t
zChX|sdL^$G&e`}ZbVH8zO4xNtwwmH!yw2r%#kpKI<$SKgami+4D3JQX9J;Y00&yvy
zF#5BbuFfjF#lo9F-Xzw|8yD_H1F9(;6%0{~8x_-Mx!_H&vq~>13#zcQ!JQl2*9#rd
zHVPH{8M7{^!krS_m#i~dQBTn24i+7jl$?!{G8W?ay+43E{0?PAitmu8Xag=>K7m@5
zt=x%j-|!i0?0pP_ZZ6rbdS>Pn2H8<CyfSM1cb|3Y=uie?o01Lh4USuKN*(DLt%|eI
z!g`l78Qv4xLW(sh*@d66V#M9yZ=x9Z{DK8<&{oIVO8mtw<io0GnBI0}A((7(l|zoU
zDyEAguNDMowngv_pAw?~G-!8_i^u{#p;>mOUcz4WQwb$8?<EA(oHO8&X7NHInZa0r
zPaI~0*+bhqqMK2)CCg|+sAx&+h2jC%sA;apuv)mWM1a8{OE^Qo0YR<9J2w}**s*Ji
z_DY3k*hrM(^%%-`hcOh85-fFZw*CvEtV_P;A3|?NK&&t|;L-4pD3=;jdHjKRdS@8T
zWTP`KMa`wYx}h|z=`N4L)M2*%^DJn7Ng;Jf+dI};m~*`oei=3|`ugB@Vj#4;F*mrK
z#5TA+g?*F83o<PjWO`DRColIeI{`6U09x<Q6qU)#(fa3yba_r&s5<oCA-HZ0@hHYU
z=(|fPMz?b|$_px$1*-(tf^vDmDonC}KW_HBl(B1b+z}AhAwFnJg%dlB5gMDtI)^ek
z)1^OHXIx4hf$yPg2}zebyweC;xb2ZB<$!m9#vxml!tDr_9)#Y2r9D+Rlwa`x%fA=Q
z<vT>oH5V%hcSAs|iMzrC-$2Tv8ncPZ7<Wnf(-68m6rd;Y-GvD38t-H-&RhT6Vd59+
zG!9YFi>Ewgxy~#(x;$_WODeIP7wSiGmZvj~Blv#40W#(+C#uu6B$^-P6C%Ff;^&73
zb!>xVvgPnQNfp1-%A!n0A59-0?9`Er$e37wu(jGDz-8_;_<sohad5EB6U(J8{5*{0
z)H70{k64`6Dk$L#9hlR6FF3abLe3Pg!&Wbp;RiHy-e>xT75ztPhL@U!3I&ada916d
z+<&>;r$r@I;v$QKzlp=tjI$tZFZ9Nxhx@;8dhxq-ryLsnss}GQ&JdE$;X*n7PsOG3
zq=Q$5{I4!7Q?`>J`K~SO8`67f%<}tJ55_5_q~8mgk|LGDRwp0`oeI=q;N<zR)ffNX
zv>4Pm*Fq!d>KM<^lS|>cmqZP^9P2+$=~PoHs-^{4S+EwY>YYgPSf^y{A<J$biXrh=
z%Hm#4k`CQv5!J_<+Q;A?M+pejbF?>&E``|vv5sB|DXynu1f>}cSd9+(APhCLy!V2@
zw`!vNg?8`by*>KVrTulq2OV-hOmJ1LPVbaQK%oyoIK=FbM_Ax<+UBzTS`<zO!iA-w
z@#;TeTF2{L3vKLND|s7Df-j25!W9+ie{g7OtuBw20pl*^6Gl?3G4*f=-{v$AsXLsp
zA}ufrY>2t|4D(QfdBE|Q-BgM37eSTSfBNEq_^U#cv&uhg17(YJRzWxVvaw#;;yX<^
zP%yu^XfjG1UqL142Mj($3I8MOsY}j-cU;MiM-fSV@bpBwj_slQ*pv5#mMiL(Y+87L
zI(=IVb~d7K^)MjleTVl7=)H$Y;T`X%ch>qGd`cCS?PiPteKS4FK=e_RugmcYVznl}
zWYFpT&2h@+-}?&flfnAXh)%gdiTR{7*W;vjZR-`&6jpXh%${jF9UGmf<g8+*Gn$Lp
zn0=MKZjpjqqu~)jrEmh=gRx>)um&Lc2*zNOFa|uDt2irjxtWn$1>w;7yE7`-4aiSQ
z(SHa%2^@t|sq&!fA$uY4E970S^CtuJuf<o>0TRhe>Y2bCri8-3htFlFfp3JL8%U(I
zk8_}nlP`nP^1i^|D0zn^PAu5uV!_3*pN1NAV_+!W1atH%JW${vV$_<l>AkF4(;lF>
z6~6@meH7C>cp}gBiWb0?826Hf0!Ue{X*K2Wn&x_NaZ@&xA%+d?-PmL+;Y%e_yrvSQ
z!O^=KN6|Xj4B0f2Z2qBy&jL;+nHLRs10D3xO=FSdgaT4cgJ(kc*pX&T<^*lrQ!_mn
z6*{nRSZdH~KQi=cfqvmguf3Wc+FkShV)WKF^QYs?OxR&sKg6KJG2GBnd%I-xR`9)u
z7C>(NY{Tt~|4gUZeXO45YDw_I))|#-l2e2J-{A{HH3h7iqK}oBsmSKSxH7QZGxOU1
z>P*}(S53R7nhS=jef!W6ArxFv$RPE5v8NJkX-O#OIgP3WR8?zQ-U~k)g!4R~OOv1O
z=y~HH=1C2of){mmzQLz)Tn3xQzA&l%&#h~6<|t2F6kNV?QnxyZ*t<1NBfa|FUx}Gi
z)=;3Ny*lK7-pIoJgw$#*gB2=Bz?~j($2Q?DFLL?k#^Nq~o02%ZxN-sSzEm6|0^u#@
z8ASB>v9phir)_H_QnB@9+g7$wO`aF%nNJC3Y%3nSbP+E}rENUAX?zoZveQYrv=iy=
zA67J!{6JVkO$W|z9<Lb7)58|@b-5eC2E*KWpFnJiaH2@QQuu|UN8_ye<X{EqwBy8)
zSAzfjp0u2#dmyIh3znaK?CN-=wCDhP^8=}|bU%>4{GmE&PdYD%mC}^vZJ_PN{TNG2
zbPrSZ32jnlRJxQ|xXX2Sj_v27dtJC&uFaX7?pch@KNeIF?6z(yZbuv2JJ<z8TJa{t
z?!qa5){B^zJH3^QE*?bXO1O-QyrwtjvG+;ld``rpTYd}Ep%ETIRDB%NJq#+{G_;;3
zqVESFg`{W`=5<Q)h>!)iE`oQniP-<&p81%7IaI@M!otKd=3b4rP1iQeYn_&f7$)G^
zN9Zjz`#Y1&w4Pt$tBH4>7$&)o;QR)1iKe2*xxlFQ2Orb|^M)B}25V{ahZwp?Xba|#
z^fZK1J*H=-56{oh?{g}HBWb@=F)D(#NE7?xBE-TL>~fvGGcq>4ixmA7?ts;!oCD>u
z_4Uqlv*5d#fXz~Ru2JwErza)X?8NOcmmb#}Mq`e%EcEVO`K=D5I|@s2z14P1h*5t<
zoSH1RbOBexgiyn}Xww$7F+69{N){v=#%F17Ey(qp_yt}JH6~&v*wSs>C@RKxL|lF-
zi?Kks)ns&zx}AtnDm>JjZat|nfnhBQvgE$^z|N%uW&Kg49SLk6FZW%hq)j@6*%*gq
zF>L~#<QNyeX_I}i6_vFoHsYpVM^abO6^@Vf+EWXY?|%D%;rWpC`yk~h{&gGauwY^0
zbogY6^jIe1Q}VUig`G!7IfxC<Vv+I>!vO#UWXx_|9!<1rO2!i|u&8djZW^n^|C|Yf
zOioZtl?xl_T|hG=OQfM(ivgV`;r9?!)Arq(&C{d*Gt+2ekL?C_$H_PMogB;b*MiJ2
zQ9dJ-MMK1qSNwVNc<ks>Fobp=6Gu+W)L!(Yb?b$89Jp_>+y{2T$vA$P0Ji}l=@wi}
z`ymX5sDLXWf_B|wji?aH_OyY**bB46TA_6>&G5W05h*kJlQ*-Q<Q_{+J-G|3gfSAe
z;fyQfPk^HXWtKSPNj?ZMdl>`b$!>;<HjGYKaR3q|(!iLTZdE+`Xipu4T_2KC52ap0
z#XApg0#ln>qki1RFiUc+1&+@Le<Yt-%=cwlLuq@%-g3>ds8<X7lONH~CB!Y&9E%2e
zUKMC;rXgiSiughQA(pYnB8L*^C2t{Uo1_?*g3Ocfm~T5REI)$|gbvV5Bc>B`O|s^v
z$5jbx4Izc6h?msCSWI#72u=O)52XF*x}g3WQOS6guJM(p$3j}t=f~0+Pzs*$j!!Ab
zj2S_9@~md9&Ej4$XVI58F(suLU<B0GA5?CujbGfO+botEhDEBdE%gQ%^8Rs<6ohdi
z{?{Seb*Z*-asQ5gU}EUts+{UpjrF#fkhdC2RO9E2)&5@G$@(eoL}7Dz8b2Q~zg;#?
z?fH$bqd0nR4e354`10Fm4sWM~*^}5IZIbWU$JA9}#8IgbCo5cf;wygAO1&|jGApR5
zbK+8v?=)BvKGw0Q*lGJtSn)YZp|eF$TID{FDH~TGFvh$PTNQ%ZZ1<=d52nX87ktm4
zJUjZu)e)-Hp~7CsqeI%;=f;O%Ju5{xH@?Phs7$hXa05pudyoVgO(oH#%PlnY!sEPZ
zOItMA7fmYjg-Ei|$+-irhD~o74w^he6}moSzlyZKJwfr!kQ+`DEIpHyRjp~)V=F=<
zD}F^IbR#Jn>#z;$o1j9cd$3QyIOq^H?Tazy0$lcrMt?K23s3V7;M5wE87t|p(qh)1
zA}MtLDo2g(=fdbD@a*b6C&#+<__e1P1y#^nV$-q<8;H)?`fsE#dd&)H3D7O2=wBV|
z=WMm_9BfE_6Z&;3#c*{vsCLMUsjpZW9dfn9wog#MggI%Om*i=Q-ew9F;B%c^!!8Gu
zYni^bp3N>;6$0Im!?}J61@?2PuqvFDAtU1dXEKt}5oJCmBN&<tHW!CLV2rc~%c0DE
z53De+X`bU>9Bsz-auXw}av#p$)iHXgbYD7@yl9(^Ui#Y5B(M`}(6xkmkSi5_$#@Re
z{%pwsn-;z#E;$`FVSA?-Af&!)jOp1ax9NcoQJ#w>UhS>In6~_&jay>%JiMLMkpPWu
zpNdD9dmr7AN`i%&RcmZcgEyln7R$~sHgR+M73u{9EiDRf24ZT4O+7Lm9`R2h+|k||
z5ZUsn<lfD$uDIM5_$Iy>oNinusC1D8{v_7pwY>juE4j5lmxRw;xPR059Jg_)q*y*1
zlJ2T83T3N6E?W2auQ(WCc*W-<7i1T^&3JV&M&q_<k`jqK#b&8{J#(JgY6R~$m`)f7
zhoKN3T8IObW6B6)It@6!F;{zZY4>577*hA|NXNw+KERx0EVX5Lg%xQ`05VFE+$x`J
zxr`FrW4j?SO%)3eMgmD6)gFHc!X&rRE?2~B*Os<5yuUyb%G+nGvz7vehh`N5p^VM=
zHkO7WPc5L5_K_&*<!8ux+%u8fP_g*Ixo@?p<?)^yOd*+`oQ%W2jJ1M#f#M;W(Tvl=
z3)Nnt4uz48mHAJoQiXMJMifR8|4k7V!)=WAkSEb$J1eLzAh=3YiY^6)VTbz9`GVv=
z#ILEU$@h;W<)d9Gw|d%6vgFHiBk}&k+uopFD0?3T>$2Eo3=vmiMBIrHDw1N*F$f^m
z%j9NMR{yJL!-YoQGT0TOZG=Vey@Dr5nNaarB&oO~lKURI#Do>^5Pxyt3V7)7$0x_q
zVkyd&3T2oXO4d`}9R<_r%A48=PYz`ni7$y~Sqb)bSWEgzkk1G%pA|54LDhqJ|G@u+
z(q#3czcAr&nSl2<Pz=*H<WIDXAD*uiwTX7fMQx)4Q)t)Ii42&swftA69{GAGYR`wa
z7~M<dwGZxv+8;;lm1yeEDKH&rGIHEU>x?VdVx`*ezDU9m{TzN(XbmMf(=CcnX6AJ+
zp(-EdRes-tb+~mVs_dv}^~-IsZ?eq^mI%>W#IC3^yUx?7bynLX9mwO04elJ~3%-%q
z#?uvGFcGn#lw&UFnb#^Za9^V~Rc+Jijc97Ql~DF;m{zJrd;DW@Hm2VzDih3PHpt_F
z<E9g{DCOy`QHOHZa5=9zuD4F?ANc&ro!mjU^5`<rr?7E`Lj2><5r=J3U7X;X!REo#
z1HGVEL&~W$?n6))I`~oe+vBe8jZ#fC&NE0P??ZmvZ}}2)_q0pvR?*e){upg!MVukk
zr9Dy+`_R*;nKb5Z0uNgj*(_e6LI-Ujk%kPds;kZ*OBinRiMC#vppGE^BR`QEKVS^5
zXX4J88l8)qQ%T*Aiu&`SEg%XmyrL0*^IcE`S7g9>B@owco*Pj9tRl%Btp!rpMU(iV
z;s5ugZ4zw+NE<?-U}fz4Bx>9^ny!P+{tb%Zk|4WqA;`wpdSN;JP9Lp=H6V!Vwt8O+
z&Cb?sydfsFgIhF5HKJ=K9U9HnS7+;S1-<q{g7)r;F0HfG7Z|t8D>>62pI@(?U6Ek;
zHcHc1#&~?&PmXoSy%ve;FtRb1h;WG6j=(qt%Q<YUOi>xAd}}Zm4!>nfJUq4=1@;x-
zJO64pc-b}>b32J~RK;IdwNrxu=QS`Ejr9L*W6T`oX<FA{abc*pEAdT4OvFt?W}V;;
z`0_W<A=hm~hOQXJAI`>b-4J@(uUhJ{83>c~UthqBtZZM7P0jMhQA%<*z*!nA*URi@
zq38_5wr~D95dSHu72L~Ii`utA(%L>7@1Y-)v9WwbTQKZ~EDZa<T+XDfY}kvtW7y?O
zXxLnNJJZL&@-t(TfdZdWfh=C2EiaHa00qXg0;QNnUDM>MwQ%f#P=7<DNtGzA=~D3|
zZUUVrIWNR3I^4F2KPW*Z;uaT)sWSiG$iN|{2;x(~;iY)%S|}rm(JSh-QlKN(i%DBq
z7O9zf{8j<(L{fU7A7v_p7>0x(isU40K7>Fq?sD1=c!Y{^*l=R0Dg}YJjf8;8*sNvX
zC72sYj_!Yo`Z_1%&vh!W5jDwsZ7>=I-+n66G&h*?OmIgmIxMei&YAAaf*xv?K9KVV
z(TK@d0jeee!v^Fy_#T?X3IYZm{GJqn`vw|6J(L!Zz8<<s2NM$Of|%kbx4!;spgTW2
zITkm>aM7{_mg`7K#x-~Twpg8mHei_b7C2fWmX>>YFD$-;GG~jl$y%3bk>F4G;aAP3
zdkXN(yns?w(CR_j)!FG+k0eN06{^Ax1umADcitiEB;I=*`&R6;F0^B87JAV=))qeu
zH3=2;;wMCLa*1YJm1KA_Pjj#8?5R9)alDeT1_pxNceH1|61@g)%3V+Dbfe*9c|%8D
zO4Y8@jblD9M_w*o`Z2c0ZGfsWP(!gli=50snU6Srj=?xsiGB+``uc6wqYsa59`8uc
z^I<bnBd9t|hNCp2y{;%;;-;<C-u;)P{~L|BK;yQ!kA$-6Y?AHIJgvpAjyJq;Ld#g)
z(-S@mYdtOt!2*sJR_qFG54oPVVMC{w9@~gLb4+S7PDgP9Ynp~Ak?sLfYE3sQK)f=i
znGU|OlK<j5fS+2pg$c_=UUKW0y$i%J^s|h=m1|%71}z{k)Kshe(&!`DGFz59u{1C5
z0Dp)>*-i|k#O&)uzuhLRNY`3EXMI>CAw7v7Qh}yXoRJP2Hf%NMgQ%FEL`J$%z5;d_
z&BH5i(YbSC^uzcuJ~jTx`zObWN@TXX8dhH>mZ4hQi@z}Z9|MLqW#!kgQaEit2<op!
zt@628gVChD^IV^PzhQ=U{>oM0@Xl1b{r*IVwz7z=`10XE0b9k=TIOJl#61uFHGgoW
zCame)yu2s*A(m+Otx44%(+bz587c;A>(^v?$ZQAmueb-l#s=cVf>1Z!(B*ln4RV+g
z-hf93yCw<-2_gdJ8~YyJ&ag)fHW&CO9UvBtf3^pmGr?b_Fy6DjF^ps@tpaS3dJL-I
zz|o82@d^*zA29>I+>8x<_>;Lu#(M{a6?x*a-Nuzp#rQ1VUs)(9y&x=$=)eY14-{(_
z{Cv2Iu&9>*xJwNSY{!MNZPXG@O?ILBZg7+C%;9wLbYgV5cpvEUsfVOJ+)Qvs4o~Co
zOZ@<^2OJMPkPf^P#~mDhkMKnv?Z(=tJ+)k~j-p%vp6l(7tdUJ!kSnl|S!i4nqqgpp
z?^&*Y7x8@8?nS;D<V$5IY~;4bi^+ASC;Id2Xh=8&&e=6J*Ll?;^f-jGmcuw_!C6a`
zX_yC@MA(jVJT2Koz-lb&&(3ZY`@ly-m#r{6hiza*Y@>2nF8^Q}yJC++4oAMD!2cg=
zo?aq42)4Y#lZh!QO>IFQ!(*xFA2@YX5<3vAPQAuD>G|S5-b*Dp69}9!i4tu}U&t5G
zLY?WY5FCg{#WN~x{^A+%erJ2D;q2K<Ylmq2UMSlR(BUn?>EMqJ#UR?wEqsE0^Vsco
zDk*r8nevTPXFsCD9cWlOeOniQL`0#zm&aDau3_RArVhdY!a-mG2$WxQ;RXC=MNxzt
zelI#el)4)s=)Vbc*x4R?8!(^|eFCeJOVBSaV83!fCG?>ZSNgFMbE!l$FL5l6l~{v`
z^WTLMGb%mQ%tAT*2r>u8L0Zs8HkG)-d0_)D@jWrz5A(4kU6oG;o`Vh6v^qlvJo64j
z2IndK#+721XJf96u)JeVp%`5pTZ6VRU2_1?TR#5#5a+i~Jvn$}j8h#reTy~!S${M?
zkh9p`y!pyLXx@$Hi2?+l<FJv#fqRGo999WF%i*7~83%z3;Cg=|haV;Q6o+d8dw@Sl
z#hY<_B;lWP{4HMGLhyg*vBpyf{*1%r9NwG?_#lU)2;R@(LJmJcw0@hzS3!=Q`#3y|
z!=6mSmvQ_!;d?pWljBKL`z*jBcYSoArJ%5Z-ri<!13S~LsYQ=A?a=TVZhxdy2)-pu
zJ*WM!krXoaaH7ppAuK-uwc>KO4DHaw^x<(Hp{x?RG28uzLjIn@YqZmI>A!#ydlO}`
zzVCqf`axh8GTq)zQ_IsFO5fCUtYiz{|99)f;V3;5r5)*g<)TVfF*C{8l?-+WJs67k
zO%eQ=jk9QMKwhWrx`)T*f}JkcUV&%qAbwfs@HoYCka5+h(b%<ABNH}q)A1&lV(<Pi
zwr@(_IpgRoCHmZG$9PRp+8P$6YDr2bkB;c6*uO4Bt=|1}{Ojk^?3r3XU1TZ7_2hLP
zLK+s8u1BRfyyUzKFGpLH+kkS)?7cX=h>3-arB=%U|7NNJzatCCKZ-riCw~q+X3W$J
zgKokqYa1L_6emq4S7iLU!6bi{l`zAGrHjY03){%rWSbMylyx*>?sbvRD}C3Ze-Bf;
z8CCwf_QO<Df5fEAM*?d|D2aT`!D;^`U3=u&_WJ%>`Li88t<Z#Mo4+rvNR$fqvQ4@g
zKjCF8Wav+Sr8Rm{{^rTCu+VVR2fs;Xnwt*)VVRj0eR`WS6W+GKkA60_BHAt!2)XbR
z#H^t&cyRz%0#Ypcs@h3j{N*@+Cw~$w+N}I&5_@?4%Vsh|X+ai7jJLtv%h`)f@G(_5
z@M;O1g(LAYGX4)4s)+lN9JzRPXLPP(EGB*%$WN2L`0(cOxB_V;ug}Q=TItJeJ&9ob
zT-u$|6v1o(WD2~1->g!MIKZ;+dFY?3xW`zh?C&B8^PTH|0&%WiSa;R%C>l+ANHE*7
z(Y#69tGAyf#t6TPC2Z$_kYI9nyoc~*96wIDEhLy6_jd<83ow}#WKWomt<&WNin;&b
zRVq-)srMIi5!sKy9q1oG_07VzBOk__-EpA6Ha`sxm#P~ig8%Dq@t~J_^0<8T`ad2Q
z=HK}VvWQL(qBdN-jWxUtJGF7@DF!DHEb=~=gkU&F{8b#*6MUJ&1sr~-9pL9V{Np`n
zf9EZZ58(I<gwN&pJ}AYVlQ`Ug!)B^|B8Oimco2tgvYo&EV<K1v;HIO#z_hchqa~Dg
zH_uzo^DaPD9)BdStAOxke4HO}ytWtWx&j{&$S{E5!MylN4)>v{JI3J-1UoqVB!^3=
zCtEpu6HK;qBCkA;!%;NMRmFHk54C?sIQ^6(CL)dFEoq#^RD5kV_Q{3SOab8Ds~U58
zZ_j*qDHelMt?#l^Pi#H#<A2!G7iw)bbn+BYbq9ELpGPx3e1_IG3-8TXf;Vz_Gl$y~
ze5oiH#P<7?sEju{Mk|BHga6;2&Lv0xA~rVI&qOj6hShd7v~z!SCYMUSMinde`N&K=
zoD~0HByiCvU=V4ekQ#Ex`_b{0$O@5G211tk*#kt6A9%FAPdoHVT=KP~amt*?af&Y2
zkq7RdnR{D~apSBU!ip=PTq%}Ww`fu8<2)spFOqWqb0o>jt^1io8`lP|g7HD+loX76
zE+2P!Yetr75HtV5Cm9??@CO_&<ZuDOZv(!)D2>H?GGpZ5NF({zGvIPH{i2#0{)`8i
zcb1|}_5<^&)m+)D_MP!`y=97NCA0(CSj!OiJ6W4)qq&%`p`@#nB%4}w#B)Dbp2ChB
z{wXRW>~+Fd0$0-V@Q9;=GTJ@i=U#mo2utnVvD@_Mit=$z58OT|OTbU>jRu4x`*^?Y
zG)jj5HYV3eZwAMl$AkB;mL6k<zNo9;@)f|CzvEEtv4!EK_E`oL6MSj-t~2dIR*VR{
zgv<WcHOOc>K^d!yTfu5w_y9qm(DP3ag)En=m6#V%KuOykr$xOM<5`RdOwN<zX!t&;
z0^Ig7EkFgZJxysS%}9iotie0Y5XEhk#~8}Y_wXlCVw5BYM#HWjiF9yVRWhbnF|}hA
zN13kN&!Q15I^{5s=6KAdACt$AM|sdK)Vvv)z?IU($$=-Rqm}*(dx#!-8VT;oe1N6z
zjvrg<_#*w-(oY@e$Cd)Cf#D+XWxvD*e;BD))>o`Ua$p<2nDfB@*-1oe5am9r)N6r5
zFfwO&Zd<R)AjuajG6%Lk&Ni9*{@JQ>Cs*k5NjCc-CB|K`lJXd?RrHbY!&2RUb#+Gv
z8u3$dT`((H?RD98b&Wxc4qNOc-(#>Y8LWeoQAzG=^*@4EB&Dy_L%(`x&X#Mlai?0v
zX^3)Hwv1CW+l8V5F8s!xe5I*_qJp2E$udgby|_$N17Ci2qbNIWO19(0SfvLyviAKr
z)fQ_b@dsOq((#Lha8ult3Mz~`{#D+C3QnMc?)a6+v2gpIhX+WkH|O{+72$UcE=#h}
z>VFLv=Oo2w%|XX=aD)+=O@10oSL_}8D_oVX!f5H!i5$mEv1<zA2(mc73Of!RJH)>h
z=!nFo0kH$vY?qpG1UUcuL3h$T6Gqukvy?tGvZ#%uw835(l*?_D<e}z$d=4e~D$dCR
z5Ar$QTJgpyLz@Df4x9Gm6og}3-G62}z&(5Gyp6u*TkAKTGk&;bn!ZI|_K57fgp7nd
zZR!UfZ|(kJKf~5(+j5(4J-sX6wDn+3vA+B4qGEgE^gfBx6J{4SJv}=8{!p6xu_ue{
ziM{*Ho-sg^_9bn7bYGhm_={}5&lSyjB~r^Zn73vgS)<>&=F3H4H28$6>kV02=5ecs
z{%ReTA>FirxF~_=ErWtV`fGR92+gf@x^oDZ!yTi`3<h6Ecn%@$bL$<!Ap4VOS$Giy
z`EwC2M>q}PdW5A2cT@UcT%3oOe9o|7(2B4UA^lQhLT)fv9)^?MIe1uygz9``G@_xI
z!Qd){TMC20(+JNY{2gKG!@*!*IDJZI14mf-7&?lza|=Q%!j#3xhwvQ2B<SNxZ!kCs
zVWu1m{)8|WVI#sVIC&94gLBLADvcSIgbvzrHWD%`f<gKf-OQE2;Qkiq5W>DKQE(MT
zgs}dVU@!p`(Y=bEBaB42jwtjRD2K4&F!F;!2}goK`Xh!Z2$P5c2y>~vFOVN$1Hvr`
zE58f|8)ES=tv(nuqJb?(gTZPPj64R?Yf&e<84?C*15Wfd&B;Iw+9N0K?!DFy2wiCU
zMB-r*MR1uiDwJqNI0yfi57PFW=xTVKf{p_yXEpxs#(WA0=>yYQ_Z9wEAq~4#D2a$j
zuVG{awUCMb4fwx%kT&pSmO;wY7N6`AFAjw;Ayp?vL{30H36FEY4KAdYYc(f_wyAW%
z9H1QdOvC?rpr5<6j;AJsS0dUM1gXjk1_x<Boa)jnJEB1!rf4lrCmXad?fz3SMn|i#
z&DyBb9ZUz2ak}>S=|P<>V2=9f!C-e3*A1s0=0}*F`*azICIS0NJ9;|ZG!svv7WMT+
z(?OQ@_}5QAEP`!Hz&_Z<vd`!E&PQ4q(w@2tk*tWw6$WQSY(-dhM1pF}ibz^+azvyo
zY37LN?`=LJ;+#HAr;qUKN1~qv2(u_<D5VTXN<Km-rF>zezI&Xl!WK4RqeHoiSe^#`
z*ibxdv;j{!D4mDUL8beJ{X6AH%0q2R5sk=GYM6w4=xz%BCxP|*Vhgzm&$>|&kxL9i
zBVxT_4@4wrzkJia*(AVQ=4s8&^oS@!hDt<x!F%wYN$Y(!PW%33bM2)w6Whl^PVyE7
zgH$PfXc~JVEq9T2*SAA@m*8<a#D{*Oo<77o%aK+J7c@*9_DRC`dZaBc)0TYOwI#VF
z*83oVVcL#wSL-KguJ2-7mO<Pa_XUFw=+SyxLA*`bp%J-;Aki#sa4S}OJ#xmuquDc5
zJGDqc+aGDL%h-onBmpie*A9QzwLQH}xE63-2!<J_>yNa&TCL^xJ(|(qperla27EuZ
z(<gW9bR9Zanwu*z9+*=)l8}v12Twq1jgM*Xec#sFqGd~DaI`Xf*E=(}w~i{KkA7~h
zYqU;Z650I42k+J{eSdfREqysZ8RNia_)N$DJP7f|Ra%d;4|Lp($2rdhgQ%H(Bz)H+
zZ8p-rATqE?2%8i3rnccsn@C4134Mx#@Heap2Ag+d8U8-i+*E1^D{iArJ7;YsnIg&!
z`P#B`)|7|!cpM*5X~;#G1-=NoPAOB7GBRSVAv<Ed!4a|1AVq93jE<->IJJT25)8}q
z+TL@$48I$+_#Zm7HsrQMi4iCvqQqd7$kOybwCl{|o&FBrwoih=9*{kqgLq3M-Wn2-
z5SFav|Im5t(1-+@nN7&I{!{dq4N<4VZa`O!G}k>LJp%189@>HQ%W0(NA^mI03+Xi+
zV(LXFBKkWp|32;T4_SROEQrIk(8Q6H8?mUhVWeUgw~0C5M)zJDa5EB(?Mz!8KaOmP
z<#UE%Skqt1Z2HTXO@9cJYM@WkAEs>jgO>@^TYQ@Spe2vt`>6KK#ja6_p&m4KBundj
zsZ-QfukmcyezDIMZPcYs`fBa*OMUdQ+6FwY)oL#F$%+kfoCruCCbkGeZR(mR1_Pdb
z)?#q<X-cneq22TAh?E8}FMWc+;A0eWR>N3A@hu@77cdyEU1?~oWkxs+=3Drqux+%2
z%j>oBD;6a6(##F@*(C4({?H#-ZK~%^EKFzCHMRf0=`D2iXeb6t)!J6tfGb1vbMPl&
z+v-d49b*)9U%jS%c%^sSraz1Ozh&>z&R%KTp|$SZ**nwua~R08<^QyG?ZHu2SNz^3
zfg~i;O(5(pX32&}5(0*YCMhE6@(2!Tgw)XLROoJib?T7fA}GFh!A|ix1-J5H%am3B
zDV;*;!|o_DU20otD;S|pIu_e)o#{BERD-QTht~eiJ?Aj^>G>n~e!qL}`OZD}o^$T~
zHoISL@wxgj^`?k2WRKI;6(Ljc-_PO>n{e*obKC5$oc$ma8J36?7gjuGFadlJ7R=2<
z>+y>Ww@T~CrPe{T>RNEg4=qn()~RnixBG)oCWtdNQAB3v-)OZ6SJ_t>r{zr)!)z0t
ze2uTkMTlk!p7!DM1uqUWUlSMRR>5~Mo-wM{UcG^@!yg2X3641Ds0{0c6w1HK*J;7&
z-NS?zPcm>?@HYfc3Vwsbu{D}f#vP0_td<Tb!LuhApdd)}oZv;V(3K3Ev%tx&E?NS+
zL-2dy(1d42fcvT^+QwnM+6**}%MD!aM*}^!aUEo{qnVvvNlGI#!mlRXFZ}B4;%;UP
zrqo$T6vfj+M^^(U`4mhR5#quY%2lqzq)X96=l-AwGBU?EJ2A$L&((eyS}_TJO5%oT
zvvC>GKY$T#G@DA>EW!OTY;kTgr1hiK8u*B;X%$GX3v@>DNqf-o!?%3=PPfQ2uC>mb
z@q1+MZ|6c8jtsTN@69j6CjxlAGTHiaddW%qw8y>zoWh@9=QjoS>qe2snsA%ZNUAp(
zizHfWCY$6N{Fzv|hg(9qV;_Ygv!%88FMjesUpA-q-rVR%p}v%~#`5rBP&~rrHo;4S
zXKy6@;{A<OnB9u6oqZEsD}Dety#>41rF7E9oUXvR4)2r3H}r@~(ldFU-?6uB1K;U_
z;Q8Svml7YHgorA0KRF-DOh*2%!*U4T!YJ)ah!zT-Udz|IA6pANXd=k3ES+27UBF4J
z^e9^aUgsz)a&~RzYnR_qrBe;~Gp0x<H6nb2o{FU~9w{_eA`qJeJ4+FiUPxSsa9o%+
zth^W$qPe@AP6_|}1C0Ji8b201=-dUPP00OYxz{d)QgeVz#qDFyFn_;D{RMEh23G#o
zS-o^(x?^}<@VzgbbGVNC?}Bge*~3&rJ`&}GXai~_ajS5s`d0z3BaY0?R3leSvM%&}
zPNMq+&r2i{OPTE=arTvOy5OX`>{0%&aewvI9}0iG{y-nK=*s;i;~CsnloCm=N(a+D
z@@48kzqvr=KL`&*kiB&fgyLH(!k<hWa*JG--sfs~=%1&zqk~k@cHlJN;sQc(R6HQ^
z`l*3z(y>vxCd;^qKJg>U3SK(Rt32D4bNCb5v;3geqIA%0g1SLb*Tn;HpHYrX1&mH}
zGvu4SnBei>b0qjVbR@b)@Sxx-F@RWI7ohzK^XcD}!k-oSY8ZMY)>Jt9(m?Hs$5AI^
z^vm=<goH(OQ1HBDvT-epzbrDtqJtXstz7NJQ0hZzjnTiRfz)o57y*s+uIJeewAW<8
zi{0y;Tek8|OpD;Z?yxQ+D?gs!@(h))K`rLyYP0ah={<lT9p$%(mqxajg=!{!No7Ra
zu|$a@FUe~bGnx_QD1S$5ng5|i9-GZGlkzS^nxK(A<nzov!ApPsqKmK^Ki3MLyk`~1
z_ie0o8n|1O;yv>jHjgm>BvTSos5d-K9moKwqr`%R<`0&?6Om~#fO{YS?XQJHlge@5
z!W<BMmv1OZ;O<W4TeX(jDZH`Hn6s-6?|Z}nGacT?X3{|XGr{|vM;miUmf5=^=R3Z8
z_Fgjl1>wjFhc5c@m^7M@;C{Z-Ix*NCz-e?w(x|gOSRN64SX>vzakNkH$9x(baJb2R
zb2OMSe-Wm<FlD9ldx9s&&s;{3#)C4fEK(xoGjUk(xWrESu@~ys3Y_wtKfQFg6&iw9
z$+k-dX>Oth7rq}yjqK3>Gzr3o6I_@-!B9b{(0YVZhQKC*lbV}-N#N>QvlOrTr%N&P
z+o41Y1&@gwwSO;g%=B^-?`F|ek~cEap|s@1PuS$!+`$ZQVg8dcmgj)GT$Op9Y8cA<
z-)9cYyrcgBr=j>4_*iV!Xt8D6nC}Z%G(=N@(-4yqZ4e$EEdoyR59j$>pSv7oIe1bl
z0aSJ)<^(sGyzB;cb3gMgaA(7YcRpdOkA=U~#EiYdKNX+R5`VT)(t0~L^Z>^S63X=k
zs-j6@y-#%43Ex4iZo;2+op6M^miy@wh2Kceq%WHUa1^JTm;PGqd_nhm4T2Zf@B%5y
zsAmHwtIkD=Afin<(K6<5H?idhZzMoBnJEzzlazqja`Yf@7owy4g`@P=3D;9qI0D=a
zs^c_jpEdR8i37?E%gm@bDln(6XLK5BG`ylORV-4Djx|(+jFK!Xw{M1q8>MHy#9C?M
z*a@6d%O2%e$2$wv`^SQ3J6Rw4-w&c+Y0n$Zphox1ujZCRT$pP3xLXM_y?W0!!A+he
z>Nxua|N3a*r(^B?Wrd^TZI!k2z2nvP(XuX+_^OBB({J?dtg+qhGI#h?V_~Gm{-Dfz
zs?H93cTcbnd-W6Tb>7a2_Ljo9di!1Lotk8m-pY`D(Tj)e#63|PZJ0Md^^Nq<;QCZz
z-QfC-D|!d!C3<>#?p&5$wL0PThwT-G?P2@8W!|pD^@-b4gF{2Ntxw##X-n$%t(Q7@
zrE1$$JufkE75cm0h0e+LkPUZk+H~87)RrEoys~3pRo_>7uHKZoYimzoU4uPo3w=}U
zy|ysYXjhEEhdE`1*fblnfwu$RlIga+Rv+(Zx!2o1-Oj1yGaPp9vP8SRV}PS{#3ItN
z<gSdtQQ3^~YG&AJRrJJ?Xt>h5W`^yo)5la=maMm9hJC>Hd$!rmsZ2{KN_z{MZC71Z
zF17s96W)$y+g_y`us=TQz0hoz*A$!hF79v6j-BAeT5PaZkDOZW^A@+*Io@2f1+vxN
zjuwnqA0ufQ^^Sq3QcshIy$db2t5Of0MQ=eXF7;W^aqn(i*6PEhinFXn&^y)&tLecr
z{2s$^dv>PH)KnZ9<zPmrQ#L=-CTr#*rV-Kp?0T=J&CaSym-F%*ig-)fY-ixi6z`rk
G+x&k>j2guN

diff --git a/run_local.py b/run_local.py
index bd6842d..7bea024 100644
--- a/run_local.py
+++ b/run_local.py
@@ -26,7 +26,7 @@ def GetTestParams(tid):
 
 def ShouldRunTest(tid):
   #return tid >= 22
-  #return tid == 2
+  #return tid >= 1
   return True
 
 DEFAULT_SPEED_RATIO_MAP = {1.: 0.25,
@@ -127,7 +127,7 @@ for test_id in range(NUM_TESTS):
   avg_nda_dif = (total_percentage_num_done_agents - total_base_percentage_num_done_agents) / num_tests
 
   print("\n### test_id=%d nda=%d(dif=%d) pnda=%.6f(dif=%.6f) score=%.6f(dif=%.6f) avg_nda=%.6f(dif=%.6f) avg_sc=%.6f(dif=%.6f)\n" % (test_id, num_done_agents, num_done_agents - base_num_done_agents, percentage_num_done_agents, percentage_num_done_agents - base_percentage_num_done_agents, score, score - base_score, avg_nda, avg_nda_dif, total_score / num_tests, (total_score - total_base_score) / num_tests))
-  f.write("%d %d% .10f %.10f %.10f %.10f\n" % (test_id, num_done_agents, percentage_num_done_agents, score, avg_nda, avg_nda_dif))
+  f.write("%d %d% .10f %.10f %d %.10f %.10f\n" % (test_id, num_done_agents, percentage_num_done_agents, score, num_done_agents - base_num_done_agents, percentage_num_done_agents - base_percentage_num_done_agents, avg_nda_dif))
   f.flush()
 
 f.close()
diff --git a/scores.txt b/scores.txt
index d1735f3..93e5927 100644
--- a/scores.txt
+++ b/scores.txt
@@ -1,111 +1,71 @@
-0 106 78.5185185185 -52994.1666667134 78.5185185185 2.2222222222
-1 100 71.4285714286 -44207.9166666883 74.9735449735 0.0396825397
-2 49 40.4958677686 -49127.5833333638 63.4809859052 -2.1774017229
-3 80 100.0000000000 -12663.0000000030 72.6107394289 -1.6330512921
-4 99 63.8709677419 -98876.3333331863 70.8627850915 -1.4354732918
-5 124 94.6564885496 -45629.8333333515 74.8284023345 -1.4506806694
-6 133 76.8786127168 -71251.7500000302 75.1212895320 -0.8305586580
-7 90 66.1764705882 -47082.7500000240 74.0031871640 -0.4510035316
-8 88 73.3333333333 -39408.2500000073 73.9287589606 -0.1231142503
-9 63 41.1764705882 -78234.5833333309 70.6535301234 0.1506350832
-10 81 48.2142857143 -93231.6666665908 68.6135988135 -0.4041845564
-11 93 89.4230769231 -18525.5000000024 70.3477219893 0.0301385156
-12 66 60.0000000000 -47917.5833333604 69.5517433747 0.4474005878
-13 115 72.3270440252 -53697.9166667235 69.7499791355 0.4154434030
-14 84 68.2926829268 -61577.3333333941 69.6528260549 0.7671509702
-15 84 44.2105263158 -137849.0833331903 68.0626823212 0.6863092977
-16 47 41.9642857143 -73369.9166666747 66.5274825208 0.5934171541
-17 94 65.2777777778 -59859.8333333889 66.4580544795 0.4061285468
-18 80 43.4782608696 -69422.5000000359 65.2485916579 0.4133574791
-19 75 93.7500000000 -24955.4166666572 66.6736620750 0.8301896052
-20 117 89.3129770992 -42584.0833333417 67.7517246952 0.7179559308
-21 89 74.1666666667 -48544.2500000212 68.0433129667 0.9883518733
-22 58 52.2522522523 -64849.3333333850 52.2522522523 -2.7027027027
-23 133 81.5950920245 -61359.7500000714 66.9236721384 -1.3513513514
-24 77 96.2500000000 -23466.2499999932 76.6991147589 -1.3175675676
-25 77 40.7407407407 -106668.2499998568 67.7095212544 -1.1204508080
-26 96 96.0000000000 -30766.9999999834 73.3676170035 -1.4963606464
-27 107 74.8251748252 -49891.7500000391 73.6105433071 -1.7131676715
-28 159 85.4838709677 -79484.3333333132 75.3067329729 -1.1612097707
-29 116 77.8523489933 -41342.0833333376 75.6249349755 -0.9321659319
-30 63 45.0000000000 -78791.7499999835 72.2221644226 -0.7492268601
-31 72 45.0000000000 -101734.6666665632 69.4999479804 -0.9868041741
-32 96 81.3559322034 -29777.3333333180 70.5777647279 -0.2037202815
-33 111 80.4347826087 -50994.8333333660 71.3991828847 0.5982805632
-34 85 51.8292682927 -85673.4999999486 69.8938048391 0.3177374054
-35 60 31.5789473684 -110669.8333332141 67.1570293055 0.1822599216
-36 80 100.0000000000 -12376.6666666689 69.3465606851 0.1701092601
-37 117 70.9090909091 -58963.6666667266 69.4442188241 0.3488713708
-38 107 55.4404145078 -82089.9999999491 68.6204656290 0.2673925001
-39 56 46.2809917355 -71158.4166666919 67.3793837461 0.4361920904
-40 89 72.9508196721 -45861.3333333560 67.6726172159 0.3269533350
-41 97 59.1463414634 -69539.5000000394 67.2463034282 -0.2076870147
-42 137 90.7284768212 -66168.0833334116 68.3645021612 -0.2293329500
-43 83 69.1666666667 -56323.0833333781 68.4009641842 -0.0673935735
-44 108 90.0000000000 -53023.1666667064 69.3400526979 0.1891597703
-45 96 61.1464968153 -52345.4166667038 68.9986545362 -0.0575753900
-46 100 100.0000000000 -28655.9166666502 70.2387083547 -0.0552723744
-47 59 41.2587412587 -73483.5000000128 69.1240942356 -0.2683159598
-48 109 58.6021505376 -89732.5833332534 68.7343926172 -0.3977650302
-49 99 76.1538461538 -37966.7499999993 68.9993731007 -0.6308118835
-50 86 46.2365591398 -102455.3333332078 68.2144484813 -0.5905206320
-51 157 95.7317073171 -57933.9166667299 69.1316904425 -0.6114870175
-52 102 64.5569620253 -64526.8333334077 68.9841185581 -0.7346771055
-53 100 76.3358778626 -50002.1666667060 69.2138610363 -0.7355734078
-54 80 64.5161290323 -58572.0000000626 69.0715055211 -0.6399695215
-55 85 54.4871794872 -90309.4166665866 68.6425547554 -0.7719764511
-56 32 40.0000000000 -38966.8333333342 67.8241960481 -1.2142056954
-57 112 62.5698324022 -86876.2499999231 67.6782415024 -1.1649594478
-58 43 43.0000000000 -65179.5000000446 67.0112620023 -1.1605010844
-59 55 48.6725663717 -66837.1666667170 66.5286647489 -1.1765382007
-60 80 100.0000000000 -13154.3333333361 67.3869041143 -1.1463705545
-61 45 56.2500000000 -46214.0000000229 67.1084815114 -1.2739612906
-62 65 60.7476635514 -32065.0833333149 66.9533396099 -1.2200944436
-63 50 31.2500000000 -123192.4166665087 66.1032600954 -1.1166398140
-64 98 98.0000000000 -31738.7499999803 66.8450447444 -0.9743923764
-65 115 63.1868131868 -82612.8333332802 66.7619031181 -0.9897096326
-66 121 68.7500000000 -88025.5833332582 66.8060830488 -0.9424635600
-67 125 99.2063492063 -32734.8333333157 67.5104366609 -0.9392284998
-68 65 63.7254901961 -52030.4166667080 67.4299058850 -0.8983855071
-69 104 75.3623188406 -70565.6666667117 67.5951644883 -0.8494759057
-70 91 77.7777777778 -30848.3333333199 67.8029729228 -0.7449252898
-71 58 48.7394957983 -58469.4166667139 67.4217033803 -0.7468335067
-72 75 62.5000000000 -52436.5000000436 67.3251993924 -0.6178106275
-73 67 50.3759398496 -43178.5000000146 66.9992520935 -0.7505219037
-74 56 31.4606741573 -80463.5833333191 66.3287128872 -0.6409614947
-75 100 100.0000000000 -23030.3333333288 66.9522552411 -0.6290918374
-76 104 96.2962962963 -25798.3333333225 67.4857832603 -0.6344888208
-77 127 76.0479041916 -63685.7500000835 67.6386782769 -0.6445444631
-78 100 100.0000000000 -26668.6666666557 68.2064207633 -0.6332366655
-79 99 99.0000000000 -35319.3333333249 68.7373445433 -0.5016291368
-80 53 53.0000000000 -54447.8333333684 68.4706098900 -0.4422794904
-81 90 81.8181818182 -53478.2500000406 68.6930694221 -0.4349081656
-82 72 46.1538461538 -67439.8333333807 68.3235739587 -0.3542182040
-83 89 79.4642857143 -49547.8333333713 68.5032628580 -0.3485050072
-84 104 73.2394366197 -45276.8333333596 68.5784402193 -0.3765077223
-85 75 93.7500000000 -26804.4999999886 68.9717458409 -0.3315622891
-86 76 95.0000000000 -35835.1666666628 69.3721805202 -0.3841536385
-87 54 67.5000000000 -29709.9166666537 69.3438141487 -0.1889391894
-88 63 41.4473684211 -96082.2499999295 68.9274492871 -0.3530477169
-89 144 77.8378378378 -77835.3333333143 69.0584844128 -0.3558049643
-90 108 58.0645161290 -93165.1666665567 68.8991515392 -0.3818155827
-91 109 68.9873417722 -92862.9999998706 68.9004113996 -0.3582778917
-92 165 83.7563451777 -73850.5833333622 69.1096499036 -0.3818297081
-93 112 77.7777777778 -77321.6666666580 69.2300405685 -0.3668814559
-94 109 88.6178861789 -51253.0000000381 69.4956274946 -0.3729927802
-95 117 61.5789473684 -76918.4166666489 69.3886453308 -0.3252780841
-96 112 75.1677852349 -44968.4166666938 69.4657005295 -0.3567352264
-97 84 46.9273743017 -134604.5833331629 69.1691436054 -0.3814444586
-98 81 49.0909090909 -109069.8333332032 68.9083873130 -0.2899105478
-99 74 45.3987730061 -97883.7499999059 68.6069820014 -0.2861937460
-100 80 100.0000000000 -21479.2500000000 69.0043619761 -0.2667482555
-101 105 72.4137931034 -47613.3333333678 69.0469798652 -0.2375518333
-102 91 91.0000000000 -32946.4999999819 69.3180048051 -0.2222734156
-103 82 75.9259259259 -47043.2500000287 69.3985892090 -0.2986052213
-104 128 68.4491978610 -111117.9166664922 69.3871507591 -0.1725927752
-105 181 92.3469387755 -67885.1666667449 69.6604815688 -0.1766119574
-106 116 71.1656441718 -55325.6666667173 69.6781893641 -0.2250574465
-107 135 93.1034482759 -48175.2500000327 69.9505760956 -0.1823442685
-108 135 68.1818181818 -79761.2499999593 69.9302455449 -0.1860535356
-109 60 60.0000000000 -55615.5000000359 69.8174018455 -0.2407574727
-110 69 86.2500000000 -41840.6666666809 70.0020377798 -0.2240073887
+0 107 79.2592592593 -52253.3333333783 79.2592592593 0.7407407407
+1 98 70.0000000000 -43813.6666666879 74.6296296296 -0.3439153439
+2 57 47.1074380165 -46015.0833333573 65.4555657586 1.9745798534
+3 80 100.0000000000 -12641.1666666695 74.0916743189 1.4809348900
+4 97 62.5806451613 -94266.6666665390 71.7894684874 0.9266833959
+5 120 91.6030534351 -49427.9166666963 75.0917326454 0.2633303108
+6 134 77.4566473988 -69347.5833333812 75.4295776101 0.3082880781
+7 77 56.6176470588 -47386.2500000265 73.0780862912 -0.9251008728
+8 78 65.0000000000 -43703.3333333540 72.1805211478 -1.7482378129
+9 66 43.1372549020 -77183.6666666561 69.2761945232 -1.3773356002
+10 86 51.1904761905 -93239.4999999266 67.6320383111 -0.9815605023
+11 94 90.3846153846 -17857.5833333366 69.5280864006 -0.8196355887
+12 65 59.0909090909 -50743.5833333633 68.7252266075 -0.8265167672
+13 121 76.1006289308 -54317.4166667216 69.2520410592 -0.4979380763
+14 73 59.3495934959 -70854.1666666939 68.5918778883 -1.0609481666
+15 78 41.0526315789 -144834.5833332693 66.8706749940 -1.1920073272
+16 39 34.8214285714 -84546.9166666405 64.9854252044 -1.5420573164
+17 90 62.5000000000 -60058.3333333910 64.8473460264 -1.6107084531
+18 86 46.7391304348 -65792.9166667310 63.8942820479 -1.3543096100
+19 70 87.5000000000 -29605.7499999869 65.0745679455 -1.5990941295
+20 117 89.3129770992 -41680.7500000037 66.2287779052 -1.5229467900
+21 86 71.6666666667 -47557.5000000121 66.4759546671 -1.5673582996
+22 59 53.1531531532 -60402.3333333834 65.8967024273 -1.4600426822
+23 140 85.8895705521 -60829.0000000624 66.7297385992 -1.2202709651
+24 78 97.5000000000 -22534.4166666619 67.9605490552 -1.1214601265
+25 73 38.6243386243 -110503.9999998534 66.8322332694 -1.1597271261
+26 100 100.0000000000 -30430.6666666492 68.0606690743 -0.9686261214
+27 114 79.7202797203 -47854.1666666946 68.4770837402 -0.7592071566
+28 157 84.4086021505 -80125.0833333066 69.0264464440 -0.7701058345
+29 115 77.1812080537 -42055.4166666740 69.2982718310 -0.7668070047
+30 65 46.4285714286 -74360.7500000019 68.5605395599 -0.6959883455
+31 73 45.6250000000 -105455.8333332199 67.8438039487 -0.6547074597
+32 94 79.6610169492 -29424.5833333177 68.2019013123 -0.6862289081
+33 108 78.2608695652 -52800.6666667034 68.4977533198 -0.7299843238
+34 94 57.3170731707 -82580.5833332968 68.1783053155 -0.5523332038
+35 55 28.9473684211 -111816.4999998949 67.0885570685 -0.6100900300
+36 80 100.0000000000 -13770.9166666695 67.9780555261 -0.5936011102
+37 115 69.6969696970 -61363.2500000610 68.0232901095 -0.6098779550
+38 111 57.5129533679 -81642.9999999582 67.7537942956 -0.5410980367
+39 45 37.1900826446 -78943.8333333228 66.9897015043 -0.7548433130
+40 88 72.1311475410 -44856.1666666890 67.1151026272 -0.7564245037
+41 98 59.7560975610 -71466.9166666873 66.9398882209 -0.7238963942
+42 137 90.7284768212 -70315.1666667072 67.4931112116 -0.7070615943
+43 73 60.8333333333 -60773.0833333870 67.3417526234 -0.8803859520
+44 103 85.8333333333 -53733.9166667133 67.7526766392 -0.9534144123
+45 106 67.5159235669 -48753.3333333658 67.7475298333 -0.7942222131
+46 100 100.0000000000 -28320.2499999840 68.4337526028 -0.7773238682
+47 64 44.7552447552 -73679.7500000149 67.9404503560 -0.6882857981
+48 112 60.2150537634 -90551.3333332425 67.7827892010 -0.6413227568
+49 101 77.6923076923 -37641.6666666650 67.9809795708 -0.5977270709
+50 87 46.7741935484 -105831.9999998672 67.5651602371 -0.5754650811
+51 160 97.5609756098 -58274.7500000625 68.1420028404 -0.5292202085
+52 109 68.9873417722 -64424.4166667400 68.1579526315 -0.4356428508
+53 104 79.3893129771 -48585.2500000365 68.3659407861 -0.3710302959
+54 83 66.9354838710 -57931.6666667261 68.3399324785 -0.3202960208
+55 90 57.6923076923 -84169.8333332827 68.1497963216 -0.2573420167
+56 41 51.2500000000 -37359.4166666658 67.8533086669 -0.0554588234
+57 113 63.1284916201 -86557.7499999206 67.7718463040 -0.0448705814
+58 46 46.0000000000 -60018.7500000442 67.4028319599 0.0067373946
+59 49 43.3628318584 -69878.8333333615 67.0021652915 -0.0818704705
+60 80 100.0000000000 -13421.6666666696 67.5431134015 -0.0805283317
+61 50 62.5000000000 -44936.7500000187 67.4617728628 0.0215769640
+62 63 58.8785046729 -31723.6666666487 67.3255305105 -0.0084347160
+63 51 31.8750000000 -120561.6666665172 66.7716159713 0.0014627014
+64 95 95.0000000000 -36285.5833333243 67.2058988025 -0.0447136479
+65 115 63.1868131868 -82509.1666666177 67.1450035659 -0.0440361683
+66 115 65.3409090909 -93240.4999998991 67.1180767827 -0.0942608660
+67 126 100.0000000000 -31547.9166666512 67.6016344771 -0.0812033416
+68 66 64.7058823529 -55811.0833333807 67.5596670550 -0.0658178996
+69 107 77.5362318841 -70951.0833333741 67.7021894097 -0.0338217432
+70 88 75.2136752137 -31255.4999999870 67.8079849844 -0.0694595013
diff --git a/tmp-scores.txt b/tmp-scores.txt
index 8e791b1..8c327ce 100644
--- a/tmp-scores.txt
+++ b/tmp-scores.txt
@@ -1,6 +1,23 @@
-0 107 79.2592592593 -52253.3333333783 79.2592592593 0.7407407407
-1 98 70.0000000000 -43813.6666666879 74.6296296296 -0.3439153439
-2 57 47.1074380165 -46015.0833333573 65.4555657586 1.9745798534
-3 80 100.0000000000 -12641.1666666695 74.0916743189 1.4809348900
-4 97 62.5806451613 -94266.6666665390 71.7894684874 0.9266833959
-5 120 91.6030534351 -49427.9166666963 75.0917326454 0.2633303108
+0 102 75.5555555556 -51384.6666667085 75.5555555556 -3.7037037037
+1 101 72.1428571429 -44279.0833333557 73.8492063492 -0.7804232804
+2 62 51.2396694215 -45595.1666666892 66.3126940400 0.8571282814
+3 80 100.0000000000 -12318.5833333360 74.7345205300 0.6428462110
+4 97 62.5806451613 -94641.2499998699 72.3037454562 0.5142769688
+5 126 96.1832061069 -49405.1666666975 76.2836555647 1.1919229193
+6 139 80.3468208092 -68151.1666667239 76.8641077425 1.4345301323
+7 81 59.5588235294 -49230.0833333614 74.7009472158 1.6228609246
+8 82 68.3333333333 -42990.5833333507 73.9934345622 1.8129134145
+9 61 39.8692810458 -81413.9166666491 70.5810192106 1.3048246874
+10 88 52.3809523810 -89825.7499999358 68.9264676806 1.2944293695
+11 94 90.3846153846 -18878.1666666677 70.7146466559 1.1865602554
+12 66 60.0000000000 -50541.7500000279 69.8904430670 1.1652164595
+13 126 79.2452830189 -51728.7500000456 70.5586459207 1.3066048615
+14 82 66.6666666667 -62608.2500000501 70.2991806371 1.7073027488
+15 75 39.4736842105 -149457.8333333194 68.3725871105 1.5019121165
+16 52 46.4285714286 -74806.8333333342 67.0817626586 2.0963374542
+17 92 63.8888888889 -59564.4166667197 66.9043807825 2.0570347561
+18 83 45.1086956522 -69024.5000000381 65.7572394598 1.8629574120
+19 71 88.7500000000 -29238.3333333200 66.9068774869 1.8323095414
+20 119 90.8396946565 -42166.5833333397 68.0465354473 1.8177575421
+21 87 72.5000000000 -49046.5000000158 68.2489656543 1.7730109872
+22 58 52.2522522523 -62205.1666667190 67.5534563759 1.6567539486
-- 
GitLab