@mark1russell7/kind 0.12.0 → 0.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -360,6 +360,12 @@ interface Workload {
360
360
  * then closes the session, and the next stream opens a new one. Without them, a session has no check.
361
361
  */
362
362
  readonly sessionCheck?: SessionCheckKnobs | undefined;
363
+ /**
364
+ * This count is the sessions of all clients that the lab places on the target before each run
365
+ * (`placementOf`). The other sessions go to the other replicas. Each client opens each session again
366
+ * until its first answer comes from its backend. With no value, the rules pick the backend of each session.
367
+ */
368
+ readonly onTarget?: number | undefined;
363
369
  }
364
370
  /**
365
371
  * A band is a range of times after a reference event of the run. The format `/1` gives each end
@@ -771,6 +777,44 @@ declare const outcomesOf: (requests: readonly Request[]) => Record<string, numbe
771
777
  declare const byClients: <T extends {
772
778
  readonly pod: string;
773
779
  }>(replicas: readonly T[], answers: ReadonlyMap<string, string>) => T[];
780
+ /** These are the sessions of the clients at an instant: those on the target, of all, and those on the target by client. */
781
+ interface Sessions {
782
+ readonly onTarget: number;
783
+ readonly of: number;
784
+ readonly byClient: Readonly<Record<string, number>>;
785
+ }
786
+ /**
787
+ * This function gives the sessions of the clients at an instant (`at`), and how many of them are on
788
+ * the target pod. A client sends each request on its next session in turn. Thus its last `connections`
789
+ * requests that started before the instant name its sessions, each by its local port. The backend of
790
+ * a session is the body of the last answer on its port before the instant: the name of the pod. A
791
+ * session with no such answer is not on the target. A request with no port names no session.
792
+ */
793
+ declare const sessionsAt: (lines: readonly Line[], at: number, target: string, connections: number) => Sessions;
794
+ /**
795
+ * The period of the clients is the interval between the starts of two requests in sequence of one
796
+ * client. Each time is in milliseconds when `A` is a number. The median and the mean are of all the
797
+ * intervals of all the clients, and `low` and `high` are the smallest and the largest interval.
798
+ * `intervals` is their count, and `byClient` is the median of each client. A client with c kept
799
+ * connections sends on each one in turn, thus each of its sessions gets a request each c periods.
800
+ */
801
+ interface Period<A = number> {
802
+ readonly median: A;
803
+ readonly mean: A;
804
+ readonly low: A;
805
+ readonly high: A;
806
+ readonly intervals: number;
807
+ readonly byClient: Readonly<Record<string, A>>;
808
+ }
809
+ /**
810
+ * This function gives the measured period of the clients from their request lines that start from
811
+ * `from` to `to`. The timer of a client is late by a different amount at each tick. Thus the median
812
+ * stays near the setting of the client (`every`), but the lateness adds up in the mean.
813
+ *
814
+ * The mean is the span of the requests of each client over its intervals. A band can count the requests of a client in a window from the
815
+ * mean. A client with fewer than 2 requests gives no interval. A run with no interval gives null.
816
+ */
817
+ declare const periodOf: (lines: readonly Line[], from: number, to: number) => Period | null;
774
818
  /** This function gives the requests of each node, by the name of the node. */
775
819
  declare const byNode: (requests: readonly Request[]) => Map<string, Request[]>;
776
820
  /** This function gives the time that the watcher first received a deletion timestamp of one of the pods, after a time. */
@@ -906,6 +950,25 @@ interface RunFacts<A = Quantity> {
906
950
  readonly empty: A | null;
907
951
  readonly ready: A | null;
908
952
  }> | undefined;
953
+ /**
954
+ * These are the sessions of the clients at the fault (`sessionsAt`): those on the target, of all,
955
+ * and those on the target by client. A run of a workload with kept connections and a target has them.
956
+ */
957
+ readonly sessions?: Sessions | undefined;
958
+ /**
959
+ * This is the stall of the target (`app-stall`): its start after the fault, and how long its loop
960
+ * stayed blocked. The app writes a line at each end of the stall. A run with no such line gives null.
961
+ */
962
+ readonly stall?: {
963
+ readonly start: A | null;
964
+ readonly held: A | null;
965
+ } | undefined;
966
+ /**
967
+ * This is the measured period of the clients (`periodOf`): the interval between two requests in
968
+ * sequence of one client. It comes from the request lines of the counted span of the run. A run
969
+ * with fewer than 2 requests of each client does not have it. A record before SYS-41 does not have it.
970
+ */
971
+ readonly period?: Period<A> | undefined;
909
972
  }
910
973
  /** A deleted replica is a replica of a run that got a deletion. It gives its pod, and the stamps of its intake (or null) and of its deletion. */
911
974
  interface Deleted {
@@ -1180,5 +1243,5 @@ declare const quantileOf: (sorted: readonly number[], p: number) => number;
1180
1243
  */
1181
1244
  declare const medianInterval: (sorted: readonly number[]) => [number, number];
1182
1245
  //#endregion
1183
- export { unitOf as $, secondsOf as $t, TriggerV1 as A, KubeProxyMode as An, restartsAt as At, RunCheck as B, kindConfig as Bn, stoppingOf as Bt, KindCellResult as C, WindowPrediction as Cn, kernelCounts as Ct, PredictionV1 as D, KUBE_PROXY_MODES as Dn, recordsOf as Dt, LoadSample as E, Dataplane as En, podsOf as Et, KIND_NOISE as F, ZONE_LOST as Fn, sliceEmptyOf as Ft, factsOf as G, zoneOf as Gn, CLIENT as Gt, checkRun as H, nodeNames as Hn, tunnelsOf as Ht, KindDecision as I, cidrOverlap as In, sliceReadyAt as It, observationEnd as J, PORT as Jt, judgeKind as K, HEALTH_PORT as Kt, KindVerdict as L, cidrRange as Ln, sliceReadyOf as Lt, upgrade as M, NodeImage as Mn, signalOf as Mt, upgradeCell as N, ZONE_KEPT as Nn, signalsOf as Nt, RunCheckV1 as O, KindConfig as On, requestsOf as Ot, Deleted as P, ZONE_LABEL as Pn, sliceDropOf as Pt, reusesReset as Q, seconds as Qt, LAST_SLACK as R, goDuration as Rn, slicesOf as Rt, KindCellRecordV1 as S, TriggerKind as Sn, isTunnelState as St, KindVerdictV1 as T, DATAPLANES as Tn, podsAt as Tt, cyclesOf as U, scenario as Un, ztunnelPodsOf as Ut, RunFacts as V, kubeProxyPatch as Vn, transitionOf as Vt, deletionsOf as W, scenarioProblems as Wn, ztunnelReplaced as Wt, propagationSource as X, SERVER as Xt, propagationOf as Y, REDIS as Yt, referenceOf as Z, bandOf as Zt, ClusterManifest as _, Replica as _n, deletionOf as _t, STAGES as a, Flap as an, PropagationSource as at, FORMAT_V1 as b, Template as bn, failuresOf as bt, readRecord as c, KubeletProbe as cn, RulesLine as ct, calibrationOf as d, MeshMode as dn, TCP_STATE as dt, showBand as en, updatesOf as et, cellsTable as f, NonePrediction as fn, TunnelLine as ft, BandV1 as g, Reference as gn, byNode as gt, timeSpread as h, RedisDeclaration as hn, byClients as ht, quantileOf as i, EdgeProtocol as in, PodLine as it, judge as j, NODE_IMAGES as jn, rulesOf as jt, RunFactsV1 as k, KindScenario as kn, restartOf as kt, Judged as l, Mesh as ln, SliceLine as lt, predictionText as m, Prediction as mn, backendsAt as mt, medianInterval as n, Cycle as nn, HBONE_PORT as nt, kindCellRecordSchema as o, KindCell as on, RecordLine as ot, medianText as p, PodSettings as pn, ZtunnelPodLine as pt, observationAfter as q, LOG_LABEL as qt, middle as r, Declaration as rn, Line as rt, kindCellRecordV1Schema as s, KindRun as sn, Request as st, RELATIVE as t, Band as tn, Endpoint as tt, TimeSpread as u, MeshFlavor as un, SocketLine as ut, EnvironmentManifest as v, ResetReuse as vn, dropOf as vt, KindCellV1 as w, Workload as wn, outcomesOf as wt, KindCellRecord as x, Trigger as xn, intakeOf as xt, FORMAT as y, Stack as yn, emptyOf as yt, Propagated as z, isKubeProxyMode as zn, socketsOf as zt };
1184
- //# sourceMappingURL=judge-BH4WtL3f.d.ts.map
1246
+ export { unitOf as $, REDIS as $t, TriggerV1 as A, Dataplane as An, recordsOf as At, RunCheck as B, cidrOverlap as Bn, sliceReadyAt as Bt, KindCellResult as C, Stack as Cn, intakeOf as Ct, PredictionV1 as D, WindowPrediction as Dn, periodOf as Dt, LoadSample as E, TriggerKind as En, outcomesOf as Et, KIND_NOISE as F, NODE_IMAGES as Fn, sessionsAt as Ft, factsOf as G, kubeProxyPatch as Gn, transitionOf as Gt, checkRun as H, goDuration as Hn, slicesOf as Ht, KindDecision as I, NodeImage as In, signalOf as It, observationEnd as J, scenarioProblems as Jn, ztunnelReplaced as Jt, judgeKind as K, nodeNames as Kn, tunnelsOf as Kt, KindVerdict as L, ZONE_KEPT as Ln, signalsOf as Lt, upgrade as M, KindConfig as Mn, restartOf as Mt, upgradeCell as N, KindScenario as Nn, restartsAt as Nt, RunCheckV1 as O, Workload as On, podsAt as Ot, Deleted as P, KubeProxyMode as Pn, rulesOf as Pt, reusesReset as Q, PORT as Qt, LAST_SLACK as R, ZONE_LABEL as Rn, sliceDropOf as Rt, KindCellRecordV1 as S, ResetReuse as Sn, failuresOf as St, KindVerdictV1 as T, Trigger as Tn, kernelCounts as Tt, cyclesOf as U, isKubeProxyMode as Un, socketsOf as Ut, RunFacts as V, cidrRange as Vn, sliceReadyOf as Vt, deletionsOf as W, kindConfig as Wn, stoppingOf as Wt, propagationSource as X, HEALTH_PORT as Xt, propagationOf as Y, zoneOf as Yn, CLIENT as Yt, referenceOf as Z, LOG_LABEL as Zt, ClusterManifest as _, PodSettings as _n, byClients as _t, STAGES as a, Band as an, PodLine as at, FORMAT_V1 as b, Reference as bn, dropOf as bt, readRecord as c, EdgeProtocol as cn, Request as ct, calibrationOf as d, KindRun as dn, SliceLine as dt, SERVER as en, updatesOf as et, cellsTable as f, KubeletProbe as fn, SocketLine as ft, BandV1 as g, NonePrediction as gn, backendsAt as gt, timeSpread as h, MeshMode as hn, ZtunnelPodLine as ht, quantileOf as i, showBand as in, Period as it, judge as j, KUBE_PROXY_MODES as jn, requestsOf as jt, RunFactsV1 as k, DATAPLANES as kn, podsOf as kt, Judged as l, Flap as ln, RulesLine as lt, predictionText as m, MeshFlavor as mn, TunnelLine as mt, medianInterval as n, seconds as nn, HBONE_PORT as nt, kindCellRecordSchema as o, Cycle as on, PropagationSource as ot, medianText as p, Mesh as pn, TCP_STATE as pt, observationAfter as q, scenario as qn, ztunnelPodsOf as qt, middle as r, secondsOf as rn, Line as rt, kindCellRecordV1Schema as s, Declaration as sn, RecordLine as st, RELATIVE as t, bandOf as tn, Endpoint as tt, TimeSpread as u, KindCell as un, Sessions as ut, EnvironmentManifest as v, Prediction as vn, byNode as vt, KindCellV1 as w, Template as wn, isTunnelState as wt, KindCellRecord as x, Replica as xn, emptyOf as xt, FORMAT as y, RedisDeclaration as yn, deletionOf as yt, Propagated as z, ZONE_LOST as zn, sliceEmptyOf as zt };
1247
+ //# sourceMappingURL=judge-3auejM2S.d.ts.map
@@ -73,6 +73,72 @@ const byClients = (replicas, answers) => {
73
73
  const count = (pod) => [...answers.values()].filter((backend) => backend === pod).length;
74
74
  return [...replicas].sort((a, b) => count(b.pod) - count(a.pod) || a.pod.localeCompare(b.pod));
75
75
  };
76
+ /**
77
+ * This function gives the sessions of the clients at an instant (`at`), and how many of them are on
78
+ * the target pod. A client sends each request on its next session in turn. Thus its last `connections`
79
+ * requests that started before the instant name its sessions, each by its local port. The backend of
80
+ * a session is the body of the last answer on its port before the instant: the name of the pod. A
81
+ * session with no such answer is not on the target. A request with no port names no session.
82
+ */
83
+ const sessionsAt = (lines, at, target, connections) => {
84
+ const before = requestsOf(lines).filter((request) => request.t < at).sort((a, b) => a.t - b.t);
85
+ const byClient = {};
86
+ let of = 0;
87
+ for (const client of [...new Set(before.map((request) => request.p))].sort()) {
88
+ const mine = before.filter((request) => request.p === client);
89
+ const ports = new Set(mine.slice(-connections).flatMap((request) => typeof request.lp === "number" ? [request.lp] : []));
90
+ const backend = (port) => mine.filter((request) => request.lp === port && request.o === "ok" && request.b !== void 0).at(-1)?.b;
91
+ byClient[client] = [...ports].filter((port) => backend(port) === target).length;
92
+ of += ports.size;
93
+ }
94
+ return {
95
+ onTarget: Object.values(byClient).reduce((sum, count) => sum + count, 0),
96
+ of,
97
+ byClient
98
+ };
99
+ };
100
+ const medianOf = (sorted) => {
101
+ const middle = Math.floor(sorted.length / 2);
102
+ return sorted.length % 2 === 1 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
103
+ };
104
+ /**
105
+ * This function gives the measured period of the clients from their request lines that start from
106
+ * `from` to `to`. The timer of a client is late by a different amount at each tick. Thus the median
107
+ * stays near the setting of the client (`every`), but the lateness adds up in the mean.
108
+ *
109
+ * The mean is the span of the requests of each client over its intervals. A band can count the requests of a client in a window from the
110
+ * mean. A client with fewer than 2 requests gives no interval. A run with no interval gives null.
111
+ */
112
+ const periodOf = (lines, from, to) => {
113
+ const starts = /* @__PURE__ */ new Map();
114
+ for (const request of requestsOf(lines)) {
115
+ if (request.t < from || request.t > to) continue;
116
+ const mine = starts.get(request.p) ?? [];
117
+ mine.push(request.t);
118
+ starts.set(request.p, mine);
119
+ }
120
+ const all = [];
121
+ const byClient = {};
122
+ let span = 0;
123
+ for (const client of [...starts.keys()].sort()) {
124
+ const mine = starts.get(client).sort((a, b) => a - b);
125
+ if (mine.length < 2) continue;
126
+ const intervals = mine.slice(1).map((t, at) => t - mine[at]);
127
+ span += mine.at(-1) - mine[0];
128
+ all.push(...intervals);
129
+ byClient[client] = medianOf(intervals.sort((a, b) => a - b));
130
+ }
131
+ if (all.length === 0) return null;
132
+ all.sort((a, b) => a - b);
133
+ return {
134
+ median: medianOf(all),
135
+ mean: span / all.length,
136
+ low: all[0],
137
+ high: all.at(-1),
138
+ intervals: all.length,
139
+ byClient
140
+ };
141
+ };
76
142
  /** This function gives the requests of each node, by the name of the node. */
77
143
  const byNode = (requests) => {
78
144
  const out = /* @__PURE__ */ new Map();
@@ -400,6 +466,7 @@ const factsOf = (cell, run) => {
400
466
  const intake = referenceOf(run, "intake");
401
467
  const crash = cell.trigger.kind === "crash" ? run.acts.fault : null;
402
468
  const from = deletion ?? crash;
469
+ const period = periodOf(lines, run.start, run.end);
403
470
  return {
404
471
  failures: failures.length,
405
472
  outcomes: outcomesOf(failures),
@@ -417,7 +484,37 @@ const factsOf = (cell, run) => {
417
484
  ...listens(cell) ? {
418
485
  updates: updatesOf(run, run.acts.fault),
419
486
  healUpdates: updatesOf(run, run.acts.heal)
420
- } : {}
487
+ } : {},
488
+ ...cell.workload.connections !== void 0 && run.target !== null && run.acts.fault !== null ? { sessions: sessionsAt(lines, run.acts.fault, run.target.pod, cell.workload.connections) } : {},
489
+ ...cell.trigger.kind === "app-stall" ? { stall: stallFactOf(run) } : {},
490
+ ...period === null ? {} : { period: periodFact(period) }
491
+ };
492
+ };
493
+ /** This function gives a time in milliseconds in seconds, to the microsecond. A period of a client is approximately 10 ms, thus a whole millisecond is too coarse. */
494
+ const fine = (ms) => seconds(Math.round(ms * 1e3) / 1e6);
495
+ /** This function gives the period of the clients (`periodOf`) with each time in seconds. */
496
+ const periodFact = (period) => ({
497
+ median: fine(period.median),
498
+ mean: fine(period.mean),
499
+ low: fine(period.low),
500
+ high: fine(period.high),
501
+ intervals: period.intervals,
502
+ byClient: Object.fromEntries(Object.entries(period.byClient).map(([client, ms]) => [client, fine(ms)]))
503
+ });
504
+ /**
505
+ * This function gives the stall of the target in a run. It is the start of its line `stall` after the
506
+ * fault, and the time that the app gives in its end line (`held`). A time that the run does not have is null.
507
+ */
508
+ const stallFactOf = (run) => {
509
+ const fault = run.acts.fault;
510
+ const pod = run.target?.pod;
511
+ const mine = run.lines.filter((line) => line.ev === "stall" && (pod === void 0 || line["p"] === pod) && line.t >= run.start);
512
+ const start = mine.find((line) => line["phase"] === "start");
513
+ const end = mine.find((line) => line["phase"] === "end");
514
+ const held = end === void 0 ? void 0 : Number(end["held"]);
515
+ return {
516
+ start: start === void 0 || fault === null ? null : seconds(sec(start.t - fault)),
517
+ held: held === void 0 || !Number.isFinite(held) ? null : seconds(sec(held))
421
518
  };
422
519
  };
423
520
  /**
@@ -1123,7 +1220,7 @@ const upgradeFacts = (facts) => {
1123
1220
  by: seconds(old.by)
1124
1221
  };
1125
1222
  const byKey = (record) => Object.fromEntries(Object.entries(record).map(([key, old]) => [key, propagated(old)]));
1126
- const { sliceEmpty, rules, left, signals, updates, healUpdates, closes, cycles, ...rest } = facts;
1223
+ const { sliceEmpty, rules, left, signals, updates, healUpdates, closes, cycles, stall, period, ...rest } = facts;
1127
1224
  return {
1128
1225
  ...rest,
1129
1226
  intakeAfterDeletion: time$1(facts.intakeAfterDeletion),
@@ -1139,7 +1236,19 @@ const upgradeFacts = (facts) => {
1139
1236
  ...cycles === void 0 ? {} : { cycles: cycles.map((old) => ({
1140
1237
  empty: time$1(old.empty),
1141
1238
  ready: time$1(old.ready)
1142
- })) }
1239
+ })) },
1240
+ ...stall === void 0 ? {} : { stall: {
1241
+ start: time$1(stall.start),
1242
+ held: time$1(stall.held)
1243
+ } },
1244
+ ...period === void 0 ? {} : { period: {
1245
+ ...period,
1246
+ median: seconds(period.median),
1247
+ mean: seconds(period.mean),
1248
+ low: seconds(period.low),
1249
+ high: seconds(period.high),
1250
+ byClient: Object.fromEntries(Object.entries(period.byClient).map(([client, old]) => [client, seconds(old)]))
1251
+ } }
1143
1252
  };
1144
1253
  };
1145
1254
  /**
@@ -1614,7 +1723,8 @@ const recordOf = (a, main) => {
1614
1723
  sessionCheck: z.object({
1615
1724
  keepalive_time: extent,
1616
1725
  keepalive_timeout: time
1617
- }).optional()
1726
+ }).optional(),
1727
+ onTarget: count.optional()
1618
1728
  }),
1619
1729
  prediction,
1620
1730
  calibrates: z.boolean(),
@@ -1654,7 +1764,24 @@ const recordOf = (a, main) => {
1654
1764
  cycles: z.array(z.object({
1655
1765
  empty: a.nullable(),
1656
1766
  ready: a.nullable()
1657
- })).optional()
1767
+ })).optional(),
1768
+ sessions: z.object({
1769
+ onTarget: count,
1770
+ of: count,
1771
+ byClient: z.record(z.string(), count)
1772
+ }).optional(),
1773
+ stall: z.object({
1774
+ start: a.nullable(),
1775
+ held: a.nullable()
1776
+ }).optional(),
1777
+ period: z.object({
1778
+ median: a,
1779
+ mean: a,
1780
+ low: a,
1781
+ high: a,
1782
+ intervals: count,
1783
+ byClient: z.record(z.string(), a)
1784
+ }).optional()
1658
1785
  });
1659
1786
  return {
1660
1787
  cell,
@@ -1716,6 +1843,6 @@ const readRecord = (data) => {
1716
1843
  throw new Error(`a kind cell record has the format ${FORMAT} or ${FORMAT_V1}, not ${String(format)}`);
1717
1844
  };
1718
1845
  //#endregion
1719
- export { rulesOf as $, RELATIVE as A, dropOf as B, observationEnd as C, reusesReset as D, referenceOf as E, TCP_STATE as F, kernelCounts as G, failuresOf as H, backendsAt as I, podsOf as J, outcomesOf as K, byClients as L, middle as M, quantileOf as N, unitOf as O, HBONE_PORT as P, restartsAt as Q, byNode as R, observationAfter as S, showBand as St, propagationSource as T, intakeOf as U, emptyOf as V, isTunnelState as W, requestsOf as X, recordsOf as Y, restartOf as Z, checkRun as _, REDIS as _t, calibrationOf as a, sliceReadyOf as at, factsOf as b, seconds as bt, predictionText as c, stoppingOf as ct, FORMAT_V1 as d, ztunnelPodsOf as dt, signalOf as et, judge as f, ztunnelReplaced as ft, LAST_SLACK as g, PORT as gt, KIND_NOISE as h, LOG_LABEL as ht, readRecord as i, sliceReadyAt as it, medianInterval as j, updatesOf as k, timeSpread as l, transitionOf as lt, upgradeCell as m, HEALTH_PORT as mt, kindCellRecordSchema as n, sliceDropOf as nt, cellsTable as o, slicesOf as ot, upgrade as p, CLIENT as pt, podsAt as q, kindCellRecordV1Schema as r, sliceEmptyOf as rt, medianText as s, socketsOf as st, STAGES as t, signalsOf as tt, FORMAT as u, tunnelsOf as ut, cyclesOf as v, SERVER as vt, propagationOf as w, judgeKind as x, secondsOf as xt, deletionsOf as y, bandOf as yt, deletionOf as z };
1846
+ export { restartsAt as $, RELATIVE as A, dropOf as B, observationEnd as C, secondsOf as Ct, reusesReset as D, referenceOf as E, TCP_STATE as F, kernelCounts as G, failuresOf as H, backendsAt as I, podsAt as J, outcomesOf as K, byClients as L, middle as M, quantileOf as N, unitOf as O, HBONE_PORT as P, restartOf as Q, byNode as R, observationAfter as S, seconds as St, propagationSource as T, intakeOf as U, emptyOf as V, isTunnelState as W, recordsOf as X, podsOf as Y, requestsOf as Z, checkRun as _, LOG_LABEL as _t, calibrationOf as a, sliceEmptyOf as at, factsOf as b, SERVER as bt, predictionText as c, slicesOf as ct, FORMAT_V1 as d, transitionOf as dt, rulesOf as et, judge as f, tunnelsOf as ft, LAST_SLACK as g, HEALTH_PORT as gt, KIND_NOISE as h, CLIENT as ht, readRecord as i, sliceDropOf as it, medianInterval as j, updatesOf as k, timeSpread as l, socketsOf as lt, upgradeCell as m, ztunnelReplaced as mt, kindCellRecordSchema as n, signalOf as nt, cellsTable as o, sliceReadyAt as ot, upgrade as p, ztunnelPodsOf as pt, periodOf as q, kindCellRecordV1Schema as r, signalsOf as rt, medianText as s, sliceReadyOf as st, STAGES as t, sessionsAt as tt, FORMAT as u, stoppingOf as ut, cyclesOf as v, PORT as vt, propagationOf as w, showBand as wt, judgeKind as x, bandOf as xt, deletionsOf as y, REDIS as yt, deletionOf as z };
1720
1847
 
1721
- //# sourceMappingURL=judge-CMQeiw8k.js.map
1848
+ //# sourceMappingURL=judge-BRxKwiSp.js.map