davidquarel commited on
Commit
cc7dd65
·
verified ·
1 Parent(s): 6c677a0

Upload folder using huggingface_hub

Browse files
Files changed (4) hide show
  1. llc0.html +688 -0
  2. llc0_images.zip +3 -0
  3. llc1.html +688 -0
  4. llc1_images.zip +3 -0
llc0.html ADDED
@@ -0,0 +1,688 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <title>Enhanced Action Probability Viewer with LLC</title>
6
+ <style>
7
+ body {
8
+ font-family: Arial, sans-serif;
9
+ margin: 0;
10
+ padding: 20px;
11
+ background: #f0f0f0;
12
+ }
13
+
14
+ .container {
15
+ display: flex;
16
+ gap: 20px;
17
+ max-width: 1400px;
18
+ margin: 0 auto;
19
+ height: calc(100vh - 140px); /* Full height minus controls space */
20
+ }
21
+
22
+ .image-panel {
23
+ flex: 1;
24
+ background: white;
25
+ border-radius: 8px;
26
+ padding: 10px;
27
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ }
32
+
33
+ .plot-panel {
34
+ flex: 1;
35
+ background: white;
36
+ border-radius: 8px;
37
+ padding: 20px;
38
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
39
+ }
40
+
41
+
42
+
43
+ #imageContainer {
44
+ text-align: center;
45
+ width: 100%;
46
+ height: 100%;
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ }
51
+
52
+ #actionImage {
53
+ border: 2px solid #333;
54
+ image-rendering: pixelated;
55
+ width: 100%;
56
+ max-width: min(100%, 80vh); /* Scale with viewport height */
57
+ height: auto;
58
+ aspect-ratio: 1;
59
+ background: #fff;
60
+ }
61
+
62
+ #llcPlot {
63
+ width: 100%;
64
+ height: calc(100% - 200px); /* Adjust for stats and frame info */
65
+ border: 1px solid #ddd;
66
+ background: #fff;
67
+ }
68
+
69
+ .controls {
70
+ margin: 20px 0;
71
+ text-align: center;
72
+ }
73
+
74
+ #frameSlider {
75
+ width: 90%;
76
+ margin: 10px 0;
77
+ }
78
+
79
+ .buttons {
80
+ margin: 15px 0;
81
+ text-align: center;
82
+ }
83
+
84
+ .controls-row {
85
+ display: flex;
86
+ justify-content: center;
87
+ align-items: center;
88
+ gap: 15px;
89
+ flex-wrap: wrap;
90
+ margin: 20px 0;
91
+ }
92
+
93
+ /* Loading screen styles */
94
+ .loading-overlay {
95
+ position: fixed;
96
+ top: 0;
97
+ left: 0;
98
+ width: 100%;
99
+ height: 100%;
100
+ background: rgba(0, 0, 0, 0.8);
101
+ display: flex;
102
+ flex-direction: column;
103
+ justify-content: center;
104
+ align-items: center;
105
+ z-index: 1000;
106
+ color: white;
107
+ font-family: Arial, sans-serif;
108
+ }
109
+
110
+ .loading-content {
111
+ text-align: center;
112
+ max-width: 500px;
113
+ padding: 40px;
114
+ }
115
+
116
+ .loading-title {
117
+ font-size: 24px;
118
+ margin-bottom: 20px;
119
+ font-weight: bold;
120
+ }
121
+
122
+ .progress-container {
123
+ width: 400px;
124
+ height: 20px;
125
+ background: #333;
126
+ border-radius: 10px;
127
+ overflow: hidden;
128
+ margin: 20px 0;
129
+ position: relative;
130
+ }
131
+
132
+ .progress-bar {
133
+ height: 100%;
134
+ background: linear-gradient(45deg, #007bff, #0056b3);
135
+ width: 0%;
136
+ transition: width 0.3s ease;
137
+ border-radius: 10px;
138
+ }
139
+
140
+ .progress-text {
141
+ margin-top: 15px;
142
+ font-size: 16px;
143
+ opacity: 0.9;
144
+ }
145
+
146
+ .loading-spinner {
147
+ width: 40px;
148
+ height: 40px;
149
+ border: 4px solid #333;
150
+ border-top: 4px solid #007bff;
151
+ border-radius: 50%;
152
+ animation: spin 1s linear infinite;
153
+ margin: 20px auto;
154
+ }
155
+
156
+ @keyframes spin {
157
+ 0% { transform: rotate(0deg); }
158
+ 100% { transform: rotate(360deg); }
159
+ }
160
+
161
+ .main-content {
162
+ display: none;
163
+ }
164
+
165
+ .main-content.loaded {
166
+ display: block;
167
+ }
168
+
169
+ button {
170
+ margin: 0 8px;
171
+ padding: 10px 20px;
172
+ font-size: 16px;
173
+ border: none;
174
+ border-radius: 5px;
175
+ cursor: pointer;
176
+ background: #007bff;
177
+ color: white;
178
+ }
179
+
180
+ button:hover {
181
+ background: #0056b3;
182
+ }
183
+
184
+ #frameInfo {
185
+ font-size: 18px;
186
+ font-weight: bold;
187
+ margin: 15px 0;
188
+ text-align: center;
189
+ color: #333;
190
+ }
191
+
192
+ .stats {
193
+ display: flex;
194
+ justify-content: space-around;
195
+ margin: 20px 0;
196
+ padding: 15px;
197
+ background: #f8f9fa;
198
+ border-radius: 5px;
199
+ }
200
+
201
+ .stat {
202
+ text-align: center;
203
+ }
204
+
205
+ .stat-value {
206
+ font-size: 20px;
207
+ font-weight: bold;
208
+ color: #007bff;
209
+ }
210
+
211
+ .stat-label {
212
+ font-size: 12px;
213
+ color: #666;
214
+ margin-top: 5px;
215
+ }
216
+
217
+
218
+ </style>
219
+ <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
220
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
221
+ </head>
222
+ <body>
223
+ <!-- Loading Screen -->
224
+ <div id="loadingOverlay" class="loading-overlay">
225
+ <div class="loading-content">
226
+ <div class="loading-title">Loading Action Probability Images</div>
227
+ <div class="loading-spinner"></div>
228
+ <div class="progress-container">
229
+ <div id="progressBar" class="progress-bar"></div>
230
+ </div>
231
+ <div id="progressText" class="progress-text">Preparing to download images...</div>
232
+ </div>
233
+ </div>
234
+
235
+ <!-- Main Content -->
236
+ <div id="mainContent" class="main-content">
237
+ <div class="container">
238
+ <div class="image-panel">
239
+ <div id="imageContainer">
240
+ <img id="actionImage" src="" alt="Action Probabilities">
241
+ </div>
242
+ </div>
243
+
244
+ <div class="plot-panel">
245
+ <div id="frameInfo">Frame: 0 / 780</div>
246
+
247
+ <div id="llcPlot"></div>
248
+
249
+ <div class="stats">
250
+ <div class="stat">
251
+ <div class="stat-value" id="currentLLC">0.000000</div>
252
+ <div class="stat-label">Current LLC</div>
253
+ </div>
254
+ <div class="stat">
255
+ <div class="stat-value" id="minLLC">0.000000</div>
256
+ <div class="stat-label">Min LLC</div>
257
+ </div>
258
+ <div class="stat">
259
+ <div class="stat-value" id="maxLLC">0.000000</div>
260
+ <div class="stat-label">Max LLC</div>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </div>
265
+
266
+ <div class="controls">
267
+ <input type="range" id="frameSlider" min="0" max="780" value="0">
268
+ </div>
269
+
270
+ <div class="controls-row">
271
+ <button onclick="prevFrame()">◀ Previous</button>
272
+ <button id="playBtn" onclick="togglePlay()">▶ Play</button>
273
+ <button onclick="nextFrame()">Next ▶</button>
274
+ <button id="repeatBtn" onclick="toggleRepeat()">🔄 Repeat</button>
275
+ <input type="range" id="fpsSlider" min="0" max="100" value="25" style="width: 150px;">
276
+ <span id="speedInfo" style="font-weight: bold;">5 FPS</span>
277
+ </div>
278
+
279
+ </div> <!-- End main content -->
280
+
281
+ <script>
282
+ // Data
283
+ const zipFilePath = "llc0_images.zip";
284
+ const totalImages = 781;
285
+ const allCheckpoints = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780];
286
+ const allLlcValues = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, -1.78009272, -0.7316768200000001, 0.31673908, 0.844091175, 1.37144327, 1.66702271, 2.075095973333333, 2.483169236666667, 2.8912425, 2.95182069, 3.01239888, 3.07297707, 3.18232179, 3.29166651, 3.3520658833333337, 3.4124652566666667, 3.47286463, 3.4440557166666665, 3.4152468033333334, 3.38643789, 3.0263463633333334, 2.6662548366666665, 2.30616331, 2.95853615, 3.61090899, 3.40320667, 3.19550435, 2.98780203, 2.73603201, 2.48426199, 2.23249197, 2.70964702, 3.18680207, 3.66395712, 3.69358063, 3.72320414, 3.37104003, 3.0188759199999997, 2.66671181, 3.002802533333333, 3.3388932566666667, 3.67498398, 3.53052219, 3.3860604, 3.24159861, 3.0286312100000004, 2.81566381, 2.93085972, 3.04605563, 3.16125154, 3.54754925, 3.7051141249999997, 3.862679, 3.3855239533333332, 2.908368906666667, 2.43121386, 2.29018927, 2.14916468, 2.623120946666667, 3.0970772133333333, 3.57103348, 3.5793781300000003, 3.58772278, 3.59606743, 3.4354726466666667, 3.2748778633333333, 3.11428308, 3.318220375, 3.52215767, 3.641943136666667, 3.7617286033333333, 3.88151407, 3.843386966666667, 3.805259863333333, 3.76713276, 3.80976995, 3.85240714, 3.89504433, 3.802478315, 3.7099123, 3.61643235, 3.5229524, 3.42947245, 3.5499731733333335, 3.6704738966666666, 3.79097462, 3.8251082133333334, 3.8592418066666667, 3.8933754, 3.813922405, 3.73446941, 3.6503076533333334, 3.5661458966666664, 3.48198414, 3.65571181, 3.82943948, 4.00316715, 3.737429776666667, 3.4716924033333334, 3.20595503, 3.161728385, 3.11750174, 3.2781163866666665, 3.438731033333333, 3.59934568, 3.6650101333333334, 3.7306745866666664, 3.79633904, 3.8783947666666667, 3.960450493333333, 4.04250622, 4.030555489999999, 4.01860476, 4.033466183333333, 4.048327606666667, 4.06318903, 4.0525595333333335, 4.041930036666667, 4.03130054, 4.036506013333334, 4.041711486666666, 4.04691696, 4.04033065, 4.03374434, 4.067540173333334, 4.101336006666666, 4.13513184, 4.055341086666666, 3.975550333333333, 3.89575958, 3.8066903733333333, 3.7176211666666665, 3.62855196, 3.69501114, 3.76147032, 3.8190881433333335, 3.8767059666666666, 3.93432379, 3.89403105, 3.85373831, 3.81344557, 3.71605158, 3.61865759, 3.5212636, 3.62035632, 3.71944904, 3.7474632233333334, 3.775477406666667, 3.80349159, 3.66491079, 3.52632999, 3.69787216, 3.8291811933333335, 3.960490226666667, 4.09179926, 4.147708415, 4.20361757, 4.150946933333333, 4.098276296666667, 4.04560566, 3.98216645, 3.91872724, 3.85528803, 3.9661328, 4.07697757, 4.18782234, 4.18092807, 4.1740338, 4.16713953, 4.188338916666667, 4.209538303333333, 4.23073769, 4.198829336666667, 4.166920983333333, 4.13501263, 4.100183646666667, 4.065354663333333, 4.03052568, 3.95709276, 3.88365984, 4.000882306666667, 4.118104773333333, 4.23532724, 3.9949019733333335, 3.7544767066666664, 3.51405144, 3.5523772266666667, 3.590703013333333, 3.6290288, 3.9230585099999997, 4.21708822, 4.091183343333333, 3.9652784666666667, 3.83937359, 3.85640065, 3.87342771, 3.89045477, 3.7811001133333333, 3.6717454566666667, 3.5623908, 3.6290884, 3.695786, 3.7847558666666665, 3.8737257333333335, 3.9626956, 4.107435546666666, 4.2521754933333336, 4.39691544, 4.35092052, 4.3049256, 4.25893068, 4.2816698550000005, 4.30440903, 4.3352047633333335, 4.366000496666667, 4.39679623, 4.144529503333333, 3.8922627766666666, 3.63999605, 3.7527481700000003, 3.86550029, 3.97825241, 4.187852145, 4.39745188, 4.39055761, 4.38366334, 4.37676907, 4.142185053333334, 3.9076010366666667, 3.67301702, 3.5328269, 3.594070675, 3.65531445, 3.92392278, 4.19253111, 4.089732966666666, 3.9869348233333333, 3.88413668, 3.9469401066666667, 4.009743533333333, 4.07254696, 4.147171973333333, 4.221796986666667, 4.296422, 4.327028985, 4.35763597, 4.14206584, 3.9264957099999998, 3.71092558, 3.7146210666666666, 3.7183165533333336, 3.72201204, 3.90879313, 4.09557422, 4.28235531, 4.02178367, 3.76121203, 3.50064039, 3.75763575, 4.01463111, 4.27162647, 4.052519796666667, 3.8334131233333335, 3.61430645, 3.62632672, 3.63834699, 3.65036726, 3.70365381, 3.75694036, 3.9295951500000004, 4.10224994, 4.27490473, 4.239320756666666, 4.2037367833333334, 4.16815281, 4.251599313333333, 4.335045816666667, 4.41849232, 4.322469235, 4.22644615, 4.234611986666667, 4.242777823333333, 4.25094366, 4.25227483, 4.2536059999999996, 4.25493717, 4.25217549, 4.24941381, 4.24665213, 3.94368172, 3.64071131, 3.7095546733333333, 3.7783980366666667, 3.8472414, 4.095415273333334, 4.343589146666667, 4.59176302, 4.313866296666667, 4.035969573333333, 3.75807285, 3.77038121, 3.78268957, 3.9997100833333334, 4.216730596666666, 4.43375111, 4.476726056666667, 4.519701003333333, 4.56267595, 4.453241823333333, 4.3438076966666666, 4.23437357, 4.248559475, 4.26274538, 4.402577876666666, 4.542410373333333, 4.68224287, 4.643857479999999, 4.60547209, 4.5670867, 4.506568116666666, 4.446049533333333, 4.38553095, 4.42430377, 4.46307659, 4.57048416, 4.67789173, 4.7852993, 4.781544206666667, 4.777789113333333, 4.77403402, 4.82559204, 4.661917685000001, 4.49824333, 4.466861485, 4.43547964, 4.417260486666667, 4.399041333333333, 4.38082218, 4.543522993333333, 4.706223806666666, 4.86892462, 4.904806616666666, 4.940688613333333, 4.97657061, 4.9871405, 4.99771039, 5.00828028, 5.012790363333333, 5.017300446666667, 5.02181053, 4.880865413333333, 4.739920296666667, 4.59897518, 4.567344983333333, 4.5357147866666665, 4.50408459, 4.8203468350000005, 5.13660908, 5.178630353333333, 5.220651626666667, 5.2626729, 5.2545468, 5.2464207, 5.2382946, 5.270759263333333, 5.303223926666667, 5.33568859, 5.329817535, 5.32394648, 5.3661863033333335, 5.408426126666667, 5.45066595, 5.47470649, 5.4987470300000005, 5.52278757, 5.522946516666667, 5.523105463333334, 5.52326441, 5.4564178000000005, 5.38957119, 5.4299235333333336, 5.470275876666666, 5.51062822, 5.54680824, 5.5829882600000005, 5.61916828, 5.617916583333334, 5.616664886666666, 5.61541319, 5.767703055, 5.91999292, 5.993505316666667, 6.067017713333334, 6.14053011, 6.242394446666667, 6.344258783333333, 6.44612312, 6.4529577866666665, 6.459792453333334, 6.46662712, 6.54423237, 6.62183762, 6.655573846666667, 6.689310073333333, 6.7230463, 6.829162436666667, 6.935278573333333, 7.04139471, 7.100522516666667, 7.159650323333333, 7.21877813, 7.2915256, 7.36427307, 7.46611754, 7.5679620100000005, 7.66980648, 7.539312043333333, 7.408817606666667, 7.27832317, 7.811427115, 8.34453106, 8.46427727, 8.359670640000001, 8.25506401, 8.174180666666667, 8.093297323333333, 8.01241398, 7.321635883333333, 6.630857786666667, 5.94007969, 7.38656521, 8.83305073, 10.27953625, 8.037984375, 5.7964325, 7.390300436666666, 8.984168373333333, 10.57803631, 8.898893993333333, 7.219751676666666, 5.54060936, 7.58588314, 9.631156919999999, 11.6764307, 10.516017434999998, 9.35560417, 10.443587619999999, 11.53157107, 12.61955452, 12.369870823333333, 12.120187126666666, 11.87050343, 12.398322426666667, 12.926141423333332, 13.45396042, 13.182222845, 12.91048527, 13.434092206666667, 13.957699143333333, 14.48130608, 14.527837436666667, 14.574368793333333, 14.62090015, 15.1951313, 15.76936245, 16.3435936, 16.303062439999998, 16.26253128, 16.37782669, 16.4931221, 16.60841751, 17.11819585, 17.62797419, 18.13775253, 18.314838406666667, 18.491924283333333, 18.66901016, 19.010305405, 19.35160065, 19.456803006666668, 19.562005363333334, 19.66720772, 19.635080973333334, 19.602954226666665, 19.57082748, 19.807815549999997, 20.04480362, 20.28179169, 20.637363434999997, 20.99293518, 21.047056196666666, 21.101177213333333, 21.15529823, 21.04657936, 20.937860490000002, 20.82914162, 20.820458733333336, 20.811775846666666, 20.80309296, 20.85691643, 20.9107399, 20.617842356666667, 20.32494481333333, 20.03204727, 20.02334531, 20.01464335, 20.00594139, 20.315189996666668, 20.62443860333333, 20.93368721, 18.59653091, 16.67791557, 17.34560712, 18.01329867, 18.68099022, 19.33479309, 19.98859596, 20.64239883, 20.20043055, 19.758462270000003, 19.31649399, 19.56401253, 19.81153107, 20.05904961, 20.006676993333333, 19.954304376666666, 19.90193176, 19.7339859, 19.56604004, 19.39809418, 19.466301603333335, 19.534509026666665, 19.60271645, 19.466698649999998, 19.33068085, 19.155085246666665, 18.979489643333334, 18.80389404, 18.565515516666665, 18.327136993333333, 18.08875847, 18.244107566666667, 18.399456663333332, 18.55480576, 18.47287941, 18.39095306, 18.118122733333333, 17.84529240666667, 17.57246208, 17.24058342, 16.908704760000003, 16.5768261, 17.117281600000002, 17.6577371, 18.1981926, 18.235832215, 18.27347183, 17.093578336666667, 15.913684843333334, 14.73379135, 15.749792096666667, 16.765792843333333, 17.78179359, 17.61583455, 17.449875510000002, 17.28391647, 17.51554012, 17.74716377, 16.732394533333334, 15.717625296666666, 14.70285606, 15.708664573333333, 16.714473086666665, 17.7202816, 17.561296463333335, 17.402311326666666, 17.24332619, 17.398386955, 17.55344772, 17.23837788666667, 16.923308053333333, 16.60823822, 16.64992141666667, 16.691604613333332, 16.73328781, 16.746699013333334, 16.760110216666668, 16.77352142, 16.72258949, 16.67165756, 16.597171783333334, 16.522686006666667, 16.44820023, 16.519129436666667, 16.590058643333336, 16.66098785, 16.53744761, 16.41390737, 16.29036713, 15.827209, 15.36405087, 15.68583616, 16.00762145, 16.32940674, 16.285558066666667, 16.241709393333334, 16.19786072, 15.389681183333334, 14.581501646666668, 13.77332211, 13.879855476666666, 13.986388843333334, 14.09292221, 14.340579349999999, 14.58823649, 14.83589363, 13.8578612, 12.87982877, 11.90179634, 13.135075886666668, 14.368355433333333, 15.60163498, 15.179097655, 14.75656033, 14.149904253333332, 13.543248176666667, 12.9365921, 13.81697273, 14.697353360000001, 15.57773399, 15.58256149, 15.20898914, 14.83541679, 14.300614355, 13.76581192, 13.877173106666667, 13.988534293333334, 14.09989548, 14.366209033333334, 14.632522586666667, 14.89883614, 15.039423626666666, 15.180011113333334, 15.3205986, 15.261620045, 15.20264149, 15.216588976666666, 15.230536463333333, 15.24448395, 15.168209713333333, 15.091935476666666, 15.01566124, 14.955401103333333, 14.895140966666666, 14.83488083, 14.858365059999999, 14.88184929, 14.90533352, 14.92881775, 14.95230198, 14.940321606666666, 14.928341233333333, 14.91636086, 14.801561993333333, 14.686763126666666, 14.57196426, 13.859402844, 13.146841428, 12.434280012, 11.721718596, 11.00915718, 12.10216713, 13.19517708, 14.28818703, 14.34059938, 14.39301173, 14.44542408, 14.227062700000001, 14.00870132, 13.942520140000001, 13.87633896, 13.81015778, 13.91635323, 14.02254868, 14.12874413, 14.08153725, 14.03433037, 13.98712349, 13.822108270000001, 13.65709305, 13.592282933333333, 13.527472816666666, 13.4626627, 13.333221436666665, 13.203780173333334, 13.07433891, 12.890021323333333, 12.705703736666667, 12.52138615, 12.58879916, 12.65621217, 12.72362518, 12.427250860000001, 12.13087654, 11.83450222, 11.021614073333334, 10.208725926666666, 9.39583778, 10.590076443333334, 11.784315106666666, 12.97855377];
287
+ const validCheckpoints = [70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780];
288
+ const validLlcValues = [-1.78009272, -0.7316768200000001, 0.31673908, 0.844091175, 1.37144327, 1.66702271, 2.075095973333333, 2.483169236666667, 2.8912425, 2.95182069, 3.01239888, 3.07297707, 3.18232179, 3.29166651, 3.3520658833333337, 3.4124652566666667, 3.47286463, 3.4440557166666665, 3.4152468033333334, 3.38643789, 3.0263463633333334, 2.6662548366666665, 2.30616331, 2.95853615, 3.61090899, 3.40320667, 3.19550435, 2.98780203, 2.73603201, 2.48426199, 2.23249197, 2.70964702, 3.18680207, 3.66395712, 3.69358063, 3.72320414, 3.37104003, 3.0188759199999997, 2.66671181, 3.002802533333333, 3.3388932566666667, 3.67498398, 3.53052219, 3.3860604, 3.24159861, 3.0286312100000004, 2.81566381, 2.93085972, 3.04605563, 3.16125154, 3.54754925, 3.7051141249999997, 3.862679, 3.3855239533333332, 2.908368906666667, 2.43121386, 2.29018927, 2.14916468, 2.623120946666667, 3.0970772133333333, 3.57103348, 3.5793781300000003, 3.58772278, 3.59606743, 3.4354726466666667, 3.2748778633333333, 3.11428308, 3.318220375, 3.52215767, 3.641943136666667, 3.7617286033333333, 3.88151407, 3.843386966666667, 3.805259863333333, 3.76713276, 3.80976995, 3.85240714, 3.89504433, 3.802478315, 3.7099123, 3.61643235, 3.5229524, 3.42947245, 3.5499731733333335, 3.6704738966666666, 3.79097462, 3.8251082133333334, 3.8592418066666667, 3.8933754, 3.813922405, 3.73446941, 3.6503076533333334, 3.5661458966666664, 3.48198414, 3.65571181, 3.82943948, 4.00316715, 3.737429776666667, 3.4716924033333334, 3.20595503, 3.161728385, 3.11750174, 3.2781163866666665, 3.438731033333333, 3.59934568, 3.6650101333333334, 3.7306745866666664, 3.79633904, 3.8783947666666667, 3.960450493333333, 4.04250622, 4.030555489999999, 4.01860476, 4.033466183333333, 4.048327606666667, 4.06318903, 4.0525595333333335, 4.041930036666667, 4.03130054, 4.036506013333334, 4.041711486666666, 4.04691696, 4.04033065, 4.03374434, 4.067540173333334, 4.101336006666666, 4.13513184, 4.055341086666666, 3.975550333333333, 3.89575958, 3.8066903733333333, 3.7176211666666665, 3.62855196, 3.69501114, 3.76147032, 3.8190881433333335, 3.8767059666666666, 3.93432379, 3.89403105, 3.85373831, 3.81344557, 3.71605158, 3.61865759, 3.5212636, 3.62035632, 3.71944904, 3.7474632233333334, 3.775477406666667, 3.80349159, 3.66491079, 3.52632999, 3.69787216, 3.8291811933333335, 3.960490226666667, 4.09179926, 4.147708415, 4.20361757, 4.150946933333333, 4.098276296666667, 4.04560566, 3.98216645, 3.91872724, 3.85528803, 3.9661328, 4.07697757, 4.18782234, 4.18092807, 4.1740338, 4.16713953, 4.188338916666667, 4.209538303333333, 4.23073769, 4.198829336666667, 4.166920983333333, 4.13501263, 4.100183646666667, 4.065354663333333, 4.03052568, 3.95709276, 3.88365984, 4.000882306666667, 4.118104773333333, 4.23532724, 3.9949019733333335, 3.7544767066666664, 3.51405144, 3.5523772266666667, 3.590703013333333, 3.6290288, 3.9230585099999997, 4.21708822, 4.091183343333333, 3.9652784666666667, 3.83937359, 3.85640065, 3.87342771, 3.89045477, 3.7811001133333333, 3.6717454566666667, 3.5623908, 3.6290884, 3.695786, 3.7847558666666665, 3.8737257333333335, 3.9626956, 4.107435546666666, 4.2521754933333336, 4.39691544, 4.35092052, 4.3049256, 4.25893068, 4.2816698550000005, 4.30440903, 4.3352047633333335, 4.366000496666667, 4.39679623, 4.144529503333333, 3.8922627766666666, 3.63999605, 3.7527481700000003, 3.86550029, 3.97825241, 4.187852145, 4.39745188, 4.39055761, 4.38366334, 4.37676907, 4.142185053333334, 3.9076010366666667, 3.67301702, 3.5328269, 3.594070675, 3.65531445, 3.92392278, 4.19253111, 4.089732966666666, 3.9869348233333333, 3.88413668, 3.9469401066666667, 4.009743533333333, 4.07254696, 4.147171973333333, 4.221796986666667, 4.296422, 4.327028985, 4.35763597, 4.14206584, 3.9264957099999998, 3.71092558, 3.7146210666666666, 3.7183165533333336, 3.72201204, 3.90879313, 4.09557422, 4.28235531, 4.02178367, 3.76121203, 3.50064039, 3.75763575, 4.01463111, 4.27162647, 4.052519796666667, 3.8334131233333335, 3.61430645, 3.62632672, 3.63834699, 3.65036726, 3.70365381, 3.75694036, 3.9295951500000004, 4.10224994, 4.27490473, 4.239320756666666, 4.2037367833333334, 4.16815281, 4.251599313333333, 4.335045816666667, 4.41849232, 4.322469235, 4.22644615, 4.234611986666667, 4.242777823333333, 4.25094366, 4.25227483, 4.2536059999999996, 4.25493717, 4.25217549, 4.24941381, 4.24665213, 3.94368172, 3.64071131, 3.7095546733333333, 3.7783980366666667, 3.8472414, 4.095415273333334, 4.343589146666667, 4.59176302, 4.313866296666667, 4.035969573333333, 3.75807285, 3.77038121, 3.78268957, 3.9997100833333334, 4.216730596666666, 4.43375111, 4.476726056666667, 4.519701003333333, 4.56267595, 4.453241823333333, 4.3438076966666666, 4.23437357, 4.248559475, 4.26274538, 4.402577876666666, 4.542410373333333, 4.68224287, 4.643857479999999, 4.60547209, 4.5670867, 4.506568116666666, 4.446049533333333, 4.38553095, 4.42430377, 4.46307659, 4.57048416, 4.67789173, 4.7852993, 4.781544206666667, 4.777789113333333, 4.77403402, 4.82559204, 4.661917685000001, 4.49824333, 4.466861485, 4.43547964, 4.417260486666667, 4.399041333333333, 4.38082218, 4.543522993333333, 4.706223806666666, 4.86892462, 4.904806616666666, 4.940688613333333, 4.97657061, 4.9871405, 4.99771039, 5.00828028, 5.012790363333333, 5.017300446666667, 5.02181053, 4.880865413333333, 4.739920296666667, 4.59897518, 4.567344983333333, 4.5357147866666665, 4.50408459, 4.8203468350000005, 5.13660908, 5.178630353333333, 5.220651626666667, 5.2626729, 5.2545468, 5.2464207, 5.2382946, 5.270759263333333, 5.303223926666667, 5.33568859, 5.329817535, 5.32394648, 5.3661863033333335, 5.408426126666667, 5.45066595, 5.47470649, 5.4987470300000005, 5.52278757, 5.522946516666667, 5.523105463333334, 5.52326441, 5.4564178000000005, 5.38957119, 5.4299235333333336, 5.470275876666666, 5.51062822, 5.54680824, 5.5829882600000005, 5.61916828, 5.617916583333334, 5.616664886666666, 5.61541319, 5.767703055, 5.91999292, 5.993505316666667, 6.067017713333334, 6.14053011, 6.242394446666667, 6.344258783333333, 6.44612312, 6.4529577866666665, 6.459792453333334, 6.46662712, 6.54423237, 6.62183762, 6.655573846666667, 6.689310073333333, 6.7230463, 6.829162436666667, 6.935278573333333, 7.04139471, 7.100522516666667, 7.159650323333333, 7.21877813, 7.2915256, 7.36427307, 7.46611754, 7.5679620100000005, 7.66980648, 7.539312043333333, 7.408817606666667, 7.27832317, 7.811427115, 8.34453106, 8.46427727, 8.359670640000001, 8.25506401, 8.174180666666667, 8.093297323333333, 8.01241398, 7.321635883333333, 6.630857786666667, 5.94007969, 7.38656521, 8.83305073, 10.27953625, 8.037984375, 5.7964325, 7.390300436666666, 8.984168373333333, 10.57803631, 8.898893993333333, 7.219751676666666, 5.54060936, 7.58588314, 9.631156919999999, 11.6764307, 10.516017434999998, 9.35560417, 10.443587619999999, 11.53157107, 12.61955452, 12.369870823333333, 12.120187126666666, 11.87050343, 12.398322426666667, 12.926141423333332, 13.45396042, 13.182222845, 12.91048527, 13.434092206666667, 13.957699143333333, 14.48130608, 14.527837436666667, 14.574368793333333, 14.62090015, 15.1951313, 15.76936245, 16.3435936, 16.303062439999998, 16.26253128, 16.37782669, 16.4931221, 16.60841751, 17.11819585, 17.62797419, 18.13775253, 18.314838406666667, 18.491924283333333, 18.66901016, 19.010305405, 19.35160065, 19.456803006666668, 19.562005363333334, 19.66720772, 19.635080973333334, 19.602954226666665, 19.57082748, 19.807815549999997, 20.04480362, 20.28179169, 20.637363434999997, 20.99293518, 21.047056196666666, 21.101177213333333, 21.15529823, 21.04657936, 20.937860490000002, 20.82914162, 20.820458733333336, 20.811775846666666, 20.80309296, 20.85691643, 20.9107399, 20.617842356666667, 20.32494481333333, 20.03204727, 20.02334531, 20.01464335, 20.00594139, 20.315189996666668, 20.62443860333333, 20.93368721, 18.59653091, 16.67791557, 17.34560712, 18.01329867, 18.68099022, 19.33479309, 19.98859596, 20.64239883, 20.20043055, 19.758462270000003, 19.31649399, 19.56401253, 19.81153107, 20.05904961, 20.006676993333333, 19.954304376666666, 19.90193176, 19.7339859, 19.56604004, 19.39809418, 19.466301603333335, 19.534509026666665, 19.60271645, 19.466698649999998, 19.33068085, 19.155085246666665, 18.979489643333334, 18.80389404, 18.565515516666665, 18.327136993333333, 18.08875847, 18.244107566666667, 18.399456663333332, 18.55480576, 18.47287941, 18.39095306, 18.118122733333333, 17.84529240666667, 17.57246208, 17.24058342, 16.908704760000003, 16.5768261, 17.117281600000002, 17.6577371, 18.1981926, 18.235832215, 18.27347183, 17.093578336666667, 15.913684843333334, 14.73379135, 15.749792096666667, 16.765792843333333, 17.78179359, 17.61583455, 17.449875510000002, 17.28391647, 17.51554012, 17.74716377, 16.732394533333334, 15.717625296666666, 14.70285606, 15.708664573333333, 16.714473086666665, 17.7202816, 17.561296463333335, 17.402311326666666, 17.24332619, 17.398386955, 17.55344772, 17.23837788666667, 16.923308053333333, 16.60823822, 16.64992141666667, 16.691604613333332, 16.73328781, 16.746699013333334, 16.760110216666668, 16.77352142, 16.72258949, 16.67165756, 16.597171783333334, 16.522686006666667, 16.44820023, 16.519129436666667, 16.590058643333336, 16.66098785, 16.53744761, 16.41390737, 16.29036713, 15.827209, 15.36405087, 15.68583616, 16.00762145, 16.32940674, 16.285558066666667, 16.241709393333334, 16.19786072, 15.389681183333334, 14.581501646666668, 13.77332211, 13.879855476666666, 13.986388843333334, 14.09292221, 14.340579349999999, 14.58823649, 14.83589363, 13.8578612, 12.87982877, 11.90179634, 13.135075886666668, 14.368355433333333, 15.60163498, 15.179097655, 14.75656033, 14.149904253333332, 13.543248176666667, 12.9365921, 13.81697273, 14.697353360000001, 15.57773399, 15.58256149, 15.20898914, 14.83541679, 14.300614355, 13.76581192, 13.877173106666667, 13.988534293333334, 14.09989548, 14.366209033333334, 14.632522586666667, 14.89883614, 15.039423626666666, 15.180011113333334, 15.3205986, 15.261620045, 15.20264149, 15.216588976666666, 15.230536463333333, 15.24448395, 15.168209713333333, 15.091935476666666, 15.01566124, 14.955401103333333, 14.895140966666666, 14.83488083, 14.858365059999999, 14.88184929, 14.90533352, 14.92881775, 14.95230198, 14.940321606666666, 14.928341233333333, 14.91636086, 14.801561993333333, 14.686763126666666, 14.57196426, 13.859402844, 13.146841428, 12.434280012, 11.721718596, 11.00915718, 12.10216713, 13.19517708, 14.28818703, 14.34059938, 14.39301173, 14.44542408, 14.227062700000001, 14.00870132, 13.942520140000001, 13.87633896, 13.81015778, 13.91635323, 14.02254868, 14.12874413, 14.08153725, 14.03433037, 13.98712349, 13.822108270000001, 13.65709305, 13.592282933333333, 13.527472816666666, 13.4626627, 13.333221436666665, 13.203780173333334, 13.07433891, 12.890021323333333, 12.705703736666667, 12.52138615, 12.58879916, 12.65621217, 12.72362518, 12.427250860000001, 12.13087654, 11.83450222, 11.021614073333334, 10.208725926666666, 9.39583778, 10.590076443333334, 11.784315106666666, 12.97855377];
289
+ const origCheckpoints = [70, 72, 74, 75, 78, 81, 83, 86, 89, 92, 94, 97, 100, 103, 105, 108, 111, 114, 116, 119, 120, 122, 125, 127, 130, 133, 136, 138, 141, 144, 147, 149, 152, 155, 158, 160, 163, 166, 169, 171, 174, 177, 180, 182, 185, 188, 191, 193, 196, 199, 202, 204, 207, 210, 213, 215, 218, 220, 221, 224, 226, 229, 232, 235, 238, 241, 244, 247, 249, 252, 255, 258, 260, 263, 266, 269, 271, 274, 277, 280, 282, 285, 288, 291, 293, 296, 299, 300, 302, 304, 307, 310, 313, 315, 318, 321, 324, 327, 330, 333, 336, 338, 341, 344, 347, 349, 352, 355, 358, 360, 363, 366, 369, 371, 374, 377, 380, 382, 385, 388, 391, 393, 396, 399, 400, 402, 404, 407, 410, 413, 416, 419, 422, 425, 427, 430, 433, 436, 438, 441, 444, 447, 449, 452, 455, 458, 460, 463, 466, 469, 471, 474, 477, 480, 482, 485, 488, 490, 491, 493, 496, 499, 502, 504, 507, 510, 513, 515, 518, 521, 524, 526, 529, 532, 535, 537, 540, 543, 546, 548, 551, 554, 557, 559, 562, 565, 568, 570, 573, 576, 579, 580, 581, 584, 587, 590, 593, 596, 599, 602, 604, 607, 610, 613, 615, 618, 621, 624, 626, 629, 632, 635, 637, 640, 643, 646, 648, 651, 654, 657, 659, 662, 665, 668, 670, 673, 676, 679, 682, 685, 688, 691, 693, 696, 699, 700, 702, 704, 707, 710, 713, 715, 718, 721, 724, 729, 732, 735, 740, 743, 746, 748, 751, 754, 757, 759, 762, 765, 768, 771, 774, 777, 780];
290
+ const origLlcValues = [-1.78009272, 0.31673908, 1.37144327, 1.66702271, 2.8912425, 3.07297707, 3.29166651, 3.47286463, 3.38643789, 2.30616331, 3.61090899, 2.98780203, 2.23249197, 3.66395712, 3.72320414, 2.66671181, 3.67498398, 3.24159861, 2.81566381, 3.16125154, 3.54754925, 3.862679, 2.43121386, 2.14916468, 3.57103348, 3.59606743, 3.11428308, 3.52215767, 3.88151407, 3.76713276, 3.89504433, 3.7099123, 3.42947245, 3.79097462, 3.8933754, 3.73446941, 3.48198414, 4.00316715, 3.20595503, 3.11750174, 3.59934568, 3.79633904, 4.04250622, 4.01860476, 4.06318903, 4.03130054, 4.04691696, 4.03374434, 4.13513184, 3.89575958, 3.62855196, 3.76147032, 3.93432379, 3.81344557, 3.5212636, 3.71944904, 3.80349159, 3.52632999, 3.69787216, 4.09179926, 4.20361757, 4.04560566, 3.85528803, 4.18782234, 4.16713953, 4.23073769, 4.13501263, 4.03052568, 3.88365984, 4.23532724, 3.51405144, 3.6290288, 4.21708822, 3.83937359, 3.89045477, 3.5623908, 3.695786, 3.9626956, 4.39691544, 4.25893068, 4.30440903, 4.39679623, 3.63999605, 3.97825241, 4.39745188, 4.37676907, 3.67301702, 3.5328269, 3.65531445, 4.19253111, 3.88413668, 4.07254696, 4.296422, 4.35763597, 3.71092558, 3.72201204, 4.28235531, 3.50064039, 4.27162647, 3.61430645, 3.65036726, 3.75694036, 4.27490473, 4.16815281, 4.41849232, 4.22644615, 4.25094366, 4.25493717, 4.24665213, 3.64071131, 3.8472414, 4.59176302, 3.75807285, 3.78268957, 4.43375111, 4.56267595, 4.23437357, 4.26274538, 4.68224287, 4.5670867, 4.38553095, 4.46307659, 4.7852993, 4.77403402, 4.82559204, 4.49824333, 4.43547964, 4.38082218, 4.86892462, 4.97657061, 5.00828028, 5.02181053, 4.59897518, 4.50408459, 5.13660908, 5.2626729, 5.2382946, 5.33568859, 5.32394648, 5.45066595, 5.52278757, 5.52326441, 5.38957119, 5.51062822, 5.61916828, 5.61541319, 5.91999292, 6.14053011, 6.44612312, 6.46662712, 6.62183762, 6.7230463, 7.04139471, 7.21877813, 7.36427307, 7.66980648, 7.27832317, 8.34453106, 8.46427727, 8.25506401, 8.01241398, 5.94007969, 10.27953625, 5.7964325, 10.57803631, 5.54060936, 11.6764307, 9.35560417, 12.61955452, 11.87050343, 13.45396042, 12.91048527, 14.48130608, 14.62090015, 16.3435936, 16.26253128, 16.60841751, 18.13775253, 18.66901016, 19.35160065, 19.66720772, 19.57082748, 20.28179169, 20.99293518, 21.15529823, 20.82914162, 20.80309296, 20.9107399, 20.03204727, 20.00594139, 20.93368721, 18.59653091, 16.67791557, 18.68099022, 20.64239883, 19.31649399, 20.05904961, 19.90193176, 19.39809418, 19.60271645, 19.33068085, 18.80389404, 18.08875847, 18.55480576, 18.39095306, 17.57246208, 16.5768261, 18.1981926, 18.27347183, 14.73379135, 17.78179359, 17.28391647, 17.74716377, 14.70285606, 17.7202816, 17.24332619, 17.55344772, 16.60823822, 16.73328781, 16.77352142, 16.67165756, 16.44820023, 16.66098785, 16.29036713, 15.36405087, 16.32940674, 16.19786072, 13.77332211, 14.09292221, 14.83589363, 11.90179634, 15.60163498, 14.75656033, 12.9365921, 15.57773399, 15.58256149, 14.83541679, 13.76581192, 14.09989548, 14.89883614, 15.3205986, 15.20264149, 15.24448395, 15.01566124, 14.83488083, 14.95230198, 14.91636086, 14.57196426, 11.00915718, 14.28818703, 14.44542408, 14.00870132, 13.81015778, 14.12874413, 13.98712349, 13.65709305, 13.4626627, 13.07433891, 12.52138615, 12.72362518, 11.83450222, 9.39583778, 12.97855377];
291
+ const validRange = [70, 780];
292
+
293
+ // Image storage from ZIP extraction
294
+ let imageDataUrls = []; // Will store data URLs for each image
295
+ let imagesExtracted = false;
296
+
297
+ // State
298
+ let currentFrame = 0;
299
+ let isPlaying = false;
300
+ let playInterval = null;
301
+ let fps = 5; // frames per second
302
+ let playSpeed = 1000/fps; // milliseconds between frames
303
+ let repeatMode = true; // repeat by default
304
+
305
+ // DOM elements
306
+ const img = document.getElementById('actionImage');
307
+ const slider = document.getElementById('frameSlider');
308
+ const frameInfo = document.getElementById('frameInfo');
309
+ const playBtn = document.getElementById('playBtn');
310
+ const currentLLCEl = document.getElementById('currentLLC');
311
+ const minLLCEl = document.getElementById('minLLC');
312
+ const maxLLCEl = document.getElementById('maxLLC');
313
+ const speedInfo = document.getElementById('speedInfo');
314
+ const repeatBtn = document.getElementById('repeatBtn');
315
+ const fpsSlider = document.getElementById('fpsSlider');
316
+
317
+ // Loading elements
318
+ const loadingOverlay = document.getElementById('loadingOverlay');
319
+ const mainContent = document.getElementById('mainContent');
320
+ const progressBar = document.getElementById('progressBar');
321
+ const progressText = document.getElementById('progressText');
322
+
323
+ // Function to format number with SI prefixes
324
+ function formatWithSI(value) {
325
+ const prefixes = [
326
+ { value: 1e-12, symbol: 'p' },
327
+ { value: 1e-9, symbol: 'n' },
328
+ { value: 1e-6, symbol: 'µ' },
329
+ { value: 1e-3, symbol: 'm' },
330
+ { value: 1, symbol: '' },
331
+ { value: 1e3, symbol: 'k' },
332
+ { value: 1e6, symbol: 'M' },
333
+ { value: 1e9, symbol: 'G' }
334
+ ];
335
+
336
+ const absValue = Math.abs(value);
337
+ let selectedPrefix = prefixes[4]; // Default to no prefix
338
+
339
+ // Find appropriate prefix
340
+ for (let i = 0; i < prefixes.length - 1; i++) {
341
+ if (absValue >= prefixes[i].value && absValue < prefixes[i + 1].value) {
342
+ selectedPrefix = prefixes[i];
343
+ break;
344
+ }
345
+ }
346
+
347
+ // Handle largest values
348
+ if (absValue >= prefixes[prefixes.length - 1].value) {
349
+ selectedPrefix = prefixes[prefixes.length - 1];
350
+ }
351
+
352
+ const scaledValue = value / selectedPrefix.value;
353
+ const rounded = Math.round(scaledValue * 1000) / 1000; // 3 decimal places
354
+
355
+ return rounded.toFixed(3) + selectedPrefix.symbol;
356
+ }
357
+
358
+ // Calculate LLC stats (only for valid range)
359
+ const minLLC = Math.min(...validLlcValues);
360
+ const maxLLC = Math.max(...validLlcValues);
361
+ minLLCEl.textContent = formatWithSI(minLLC);
362
+ maxLLCEl.textContent = formatWithSI(maxLLC);
363
+
364
+ // Initialize plot
365
+ function initPlot() {
366
+ const trace1 = {
367
+ x: validCheckpoints,
368
+ y: validLlcValues,
369
+ type: 'scatter',
370
+ mode: 'lines',
371
+ name: 'Interpolated LLC',
372
+ line: { color: '#1f77b4', width: 2 },
373
+ hovertemplate: 'Checkpoint: %{x}<br>LLC: %{y:.3g}<extra></extra>'
374
+ };
375
+
376
+ const trace2 = {
377
+ x: origCheckpoints,
378
+ y: origLlcValues,
379
+ type: 'scatter',
380
+ mode: 'markers',
381
+ name: 'Actual Data Points',
382
+ marker: {
383
+ color: '#ff7f0e',
384
+ size: 6,
385
+ symbol: 'circle'
386
+ },
387
+ hovertemplate: 'Checkpoint: %{x}<br>LLC: %{y:.3g}<br>(Actual)<extra></extra>'
388
+ };
389
+
390
+ const trace3 = {
391
+ x: [validRange[0]],
392
+ y: [validLlcValues[0]],
393
+ type: 'scatter',
394
+ mode: 'markers',
395
+ name: 'Current Position',
396
+ marker: {
397
+ color: '#d62728',
398
+ size: 10,
399
+ symbol: 'circle'
400
+ },
401
+ hovertemplate: 'Current: %{x}<br>LLC: %{y:.3g}<extra></extra>',
402
+ visible: false // Initially hidden
403
+ };
404
+
405
+ const layout = {
406
+ title: `Local Learning Coefficient vs Checkpoint (Range: ${validRange[0]}-${validRange[1]})`,
407
+ xaxis: {
408
+ title: 'Checkpoint',
409
+ range: [validRange[0] - 10, validRange[1] + 10] // Slight padding
410
+ },
411
+ yaxis: { title: 'Local Learning Coefficient' },
412
+ hovermode: 'closest',
413
+ showlegend: false,
414
+ margin: { l: 60, r: 20, t: 60, b: 60 }
415
+ };
416
+
417
+ Plotly.newPlot('llcPlot', [trace1, trace2, trace3], layout, {responsive: true});
418
+ }
419
+
420
+ function updatePlot() {
421
+ const currentLLC = allLlcValues[currentFrame];
422
+
423
+ if (currentLLC !== null && currentFrame >= validRange[0] && currentFrame <= validRange[1]) {
424
+ // Show the current position marker
425
+ Plotly.restyle('llcPlot', {
426
+ 'x': [[currentFrame]],
427
+ 'y': [[currentLLC]],
428
+ 'visible': [true]
429
+ }, [2]);
430
+
431
+ // Update current LLC display
432
+ currentLLCEl.textContent = formatWithSI(currentLLC);
433
+ } else {
434
+ // Hide the current position marker and show "No data"
435
+ Plotly.restyle('llcPlot', {
436
+ 'visible': [false]
437
+ }, [2]);
438
+
439
+ currentLLCEl.textContent = "No Data";
440
+ }
441
+ }
442
+
443
+ function updateImage() {
444
+ if (imagesExtracted && currentFrame < imageDataUrls.length && imageDataUrls[currentFrame]) {
445
+ img.src = imageDataUrls[currentFrame];
446
+ }
447
+ slider.value = currentFrame;
448
+ const llcStatus = allLlcValues[currentFrame] !== null ? `Checkpoint ${currentFrame}` : `Checkpoint ${currentFrame} (No LLC data)`;
449
+ frameInfo.textContent = `Frame: ${currentFrame} / ${allCheckpoints.length-1} (${llcStatus})`;
450
+ updatePlot();
451
+ }
452
+
453
+ function setFrame(frame) {
454
+ currentFrame = Math.max(0, Math.min(allCheckpoints.length-1, frame));
455
+ updateImage();
456
+ }
457
+
458
+ function nextFrame() {
459
+ setFrame(currentFrame + 1);
460
+ }
461
+
462
+ function prevFrame() {
463
+ setFrame(currentFrame - 1);
464
+ }
465
+
466
+ function togglePlay() {
467
+ if (isPlaying) {
468
+ clearInterval(playInterval);
469
+ playBtn.textContent = '▶ Play';
470
+ isPlaying = false;
471
+ } else {
472
+ playInterval = setInterval(() => {
473
+ if (currentFrame >= allCheckpoints.length - 1) {
474
+ if (repeatMode) {
475
+ setFrame(0); // Loop back to start
476
+ } else {
477
+ // Stop at end
478
+ clearInterval(playInterval);
479
+ playBtn.textContent = '▶ Play';
480
+ isPlaying = false;
481
+ }
482
+ } else {
483
+ nextFrame();
484
+ }
485
+ }, playSpeed);
486
+ playBtn.textContent = '⏸ Pause';
487
+ isPlaying = true;
488
+ }
489
+ }
490
+
491
+ // Convert slider position (0-100) to FPS (1-60) on log scale
492
+ function sliderToFPS(sliderValue) {
493
+ // Map 0-100 to roughly logarithmic 1-60 FPS
494
+ // Using exponential mapping: fps = 1 + (60-1) * ((e^(x/25) - 1) / (e^4 - 1))
495
+ const normalizedValue = sliderValue / 100; // 0 to 1
496
+ const expValue = Math.exp(normalizedValue * 4); // 1 to e^4
497
+ const fps = 1 + (60 - 1) * ((expValue - 1) / (Math.exp(4) - 1));
498
+ return Math.round(fps);
499
+ }
500
+
501
+ // Convert FPS back to slider position for initialization
502
+ function fpsToSlider(targetFPS) {
503
+ // Inverse of the above function
504
+ const normalizedFPS = (targetFPS - 1) / (60 - 1);
505
+ const expPart = normalizedFPS * (Math.exp(4) - 1) + 1;
506
+ const logValue = Math.log(expPart) / 4;
507
+ return Math.round(logValue * 100);
508
+ }
509
+
510
+ function updateFPSFromSlider() {
511
+ fps = sliderToFPS(parseInt(fpsSlider.value));
512
+ playSpeed = 1000 / fps;
513
+ updateSpeedDisplay();
514
+ if (isPlaying) {
515
+ togglePlay();
516
+ togglePlay();
517
+ }
518
+ }
519
+
520
+ function updateSpeedDisplay() {
521
+ speedInfo.textContent = `${fps} FPS`;
522
+ }
523
+
524
+ function toggleRepeat() {
525
+ repeatMode = !repeatMode;
526
+ if (repeatMode) {
527
+ repeatBtn.textContent = '🔄 Repeat';
528
+ repeatBtn.style.backgroundColor = '#007bff';
529
+ } else {
530
+ repeatBtn.textContent = '⏹ Stop at End';
531
+ repeatBtn.style.backgroundColor = '#dc3545';
532
+ }
533
+ }
534
+
535
+ function updateRepeatDisplay() {
536
+ if (repeatMode) {
537
+ repeatBtn.textContent = '🔄 Repeat';
538
+ repeatBtn.style.backgroundColor = '#007bff';
539
+ } else {
540
+ repeatBtn.textContent = '⏹ Stop at End';
541
+ repeatBtn.style.backgroundColor = '#dc3545';
542
+ }
543
+ }
544
+
545
+ // Event listeners
546
+ slider.addEventListener('input', function() {
547
+ setFrame(parseInt(this.value));
548
+ });
549
+
550
+ fpsSlider.addEventListener('input', updateFPSFromSlider);
551
+
552
+ // Keyboard controls
553
+ document.addEventListener('keydown', function(e) {
554
+ switch(e.key) {
555
+ case 'ArrowRight':
556
+ nextFrame();
557
+ break;
558
+ case 'ArrowLeft':
559
+ prevFrame();
560
+ break;
561
+ case ' ':
562
+ e.preventDefault();
563
+ togglePlay();
564
+ break;
565
+ }
566
+ });
567
+
568
+ // ZIP download and extraction functions
569
+ async function downloadAndExtractImages() {
570
+ try {
571
+ console.log(`Downloading ZIP file: ${zipFilePath}`);
572
+ progressText.textContent = 'Downloading image archive...';
573
+ progressBar.style.width = '10%';
574
+
575
+ // Download ZIP file with progress tracking
576
+ const response = await fetch(zipFilePath);
577
+ if (!response.ok) {
578
+ throw new Error(`Failed to download ZIP: ${response.status} ${response.statusText}`);
579
+ }
580
+
581
+ const totalSize = parseInt(response.headers.get('content-length') || '0');
582
+ let downloadedSize = 0;
583
+
584
+ const reader = response.body.getReader();
585
+ const chunks = [];
586
+
587
+ while (true) {
588
+ const { done, value } = await reader.read();
589
+ if (done) break;
590
+
591
+ chunks.push(value);
592
+ downloadedSize += value.length;
593
+
594
+ if (totalSize > 0) {
595
+ const downloadProgress = Math.min(50, (downloadedSize / totalSize) * 50);
596
+ progressBar.style.width = `${downloadProgress}%`;
597
+ progressText.textContent = `Downloading: ${Math.round((downloadedSize / totalSize) * 100)}%`;
598
+ }
599
+ }
600
+
601
+ progressText.textContent = 'Download complete, extracting images...';
602
+ progressBar.style.width = '60%';
603
+
604
+ // Combine chunks into single array buffer
605
+ const zipArrayBuffer = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0));
606
+ let offset = 0;
607
+ for (const chunk of chunks) {
608
+ zipArrayBuffer.set(chunk, offset);
609
+ offset += chunk.length;
610
+ }
611
+
612
+ // Extract images from ZIP
613
+ const zip = await JSZip.loadAsync(zipArrayBuffer.buffer);
614
+ const imageFiles = Object.keys(zip.files).filter(name => name.endsWith('.png')).sort();
615
+
616
+ console.log(`Extracting ${imageFiles.length} images from ZIP...`);
617
+ imageDataUrls = new Array(totalImages);
618
+
619
+ for (let i = 0; i < imageFiles.length; i++) {
620
+ const file = zip.files[imageFiles[i]];
621
+ const blob = await file.async('blob');
622
+ const dataUrl = await new Promise(resolve => {
623
+ const reader = new FileReader();
624
+ reader.onload = () => resolve(reader.result);
625
+ reader.readAsDataURL(blob);
626
+ });
627
+
628
+ imageDataUrls[i] = dataUrl;
629
+
630
+ // Update progress
631
+ const extractProgress = 60 + (i / imageFiles.length) * 35;
632
+ progressBar.style.width = `${extractProgress}%`;
633
+ progressText.textContent = `Extracted ${i + 1} / ${imageFiles.length} images`;
634
+
635
+ // Yield control occasionally to keep UI responsive
636
+ if (i % 50 === 0) {
637
+ await new Promise(resolve => setTimeout(resolve, 10));
638
+ }
639
+ }
640
+
641
+ imagesExtracted = true;
642
+ console.log(`Successfully extracted ${imageFiles.length} images`);
643
+ onAllImagesLoaded();
644
+
645
+ } catch (error) {
646
+ console.error('Failed to download/extract images:', error);
647
+ let errorMsg = error.message;
648
+
649
+ // Provide helpful message for common local file access issues
650
+ if (error.message.includes('Failed to fetch') && window.location.protocol === 'file:') {
651
+ errorMsg = 'Cannot load images when opening HTML file directly. Please serve via HTTP (e.g., python -m http.server) or deploy to GitHub Pages.';
652
+ }
653
+
654
+ progressText.textContent = `Error: ${errorMsg}`;
655
+ progressBar.style.backgroundColor = '#dc3545';
656
+ throw error;
657
+ }
658
+ }
659
+
660
+ function onAllImagesLoaded() {
661
+ progressText.textContent = `All ${totalImages} images ready! Starting viewer...`;
662
+ progressBar.style.width = '100%';
663
+
664
+ // Small delay to show completion
665
+ setTimeout(() => {
666
+ loadingOverlay.style.display = 'none';
667
+ mainContent.classList.add('loaded');
668
+
669
+ // Initialize the app
670
+ initPlot();
671
+ updateImage();
672
+
673
+ // Set initial FPS slider position for 5 FPS
674
+ fpsSlider.value = fpsToSlider(5);
675
+ updateSpeedDisplay();
676
+ updateRepeatDisplay();
677
+
678
+ console.log('LLC Viewer ready!');
679
+ }, 500);
680
+ }
681
+
682
+ // Start ZIP download and extraction when page loads
683
+ window.onload = function() {
684
+ downloadAndExtractImages();
685
+ };
686
+ </script>
687
+ </body>
688
+ </html>
llc0_images.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:69d6668298828e3899fff4f5713bde38879aa37e8e01e6d665ffb6edd0d2e7c3
3
+ size 757059
llc1.html ADDED
@@ -0,0 +1,688 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <!DOCTYPE html>
3
+ <html>
4
+ <head>
5
+ <title>Enhanced Action Probability Viewer with LLC</title>
6
+ <style>
7
+ body {
8
+ font-family: Arial, sans-serif;
9
+ margin: 0;
10
+ padding: 20px;
11
+ background: #f0f0f0;
12
+ }
13
+
14
+ .container {
15
+ display: flex;
16
+ gap: 20px;
17
+ max-width: 1400px;
18
+ margin: 0 auto;
19
+ height: calc(100vh - 140px); /* Full height minus controls space */
20
+ }
21
+
22
+ .image-panel {
23
+ flex: 1;
24
+ background: white;
25
+ border-radius: 8px;
26
+ padding: 10px;
27
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: center;
31
+ }
32
+
33
+ .plot-panel {
34
+ flex: 1;
35
+ background: white;
36
+ border-radius: 8px;
37
+ padding: 20px;
38
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
39
+ }
40
+
41
+
42
+
43
+ #imageContainer {
44
+ text-align: center;
45
+ width: 100%;
46
+ height: 100%;
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ }
51
+
52
+ #actionImage {
53
+ border: 2px solid #333;
54
+ image-rendering: pixelated;
55
+ width: 100%;
56
+ max-width: min(100%, 80vh); /* Scale with viewport height */
57
+ height: auto;
58
+ aspect-ratio: 1;
59
+ background: #fff;
60
+ }
61
+
62
+ #llcPlot {
63
+ width: 100%;
64
+ height: calc(100% - 200px); /* Adjust for stats and frame info */
65
+ border: 1px solid #ddd;
66
+ background: #fff;
67
+ }
68
+
69
+ .controls {
70
+ margin: 20px 0;
71
+ text-align: center;
72
+ }
73
+
74
+ #frameSlider {
75
+ width: 90%;
76
+ margin: 10px 0;
77
+ }
78
+
79
+ .buttons {
80
+ margin: 15px 0;
81
+ text-align: center;
82
+ }
83
+
84
+ .controls-row {
85
+ display: flex;
86
+ justify-content: center;
87
+ align-items: center;
88
+ gap: 15px;
89
+ flex-wrap: wrap;
90
+ margin: 20px 0;
91
+ }
92
+
93
+ /* Loading screen styles */
94
+ .loading-overlay {
95
+ position: fixed;
96
+ top: 0;
97
+ left: 0;
98
+ width: 100%;
99
+ height: 100%;
100
+ background: rgba(0, 0, 0, 0.8);
101
+ display: flex;
102
+ flex-direction: column;
103
+ justify-content: center;
104
+ align-items: center;
105
+ z-index: 1000;
106
+ color: white;
107
+ font-family: Arial, sans-serif;
108
+ }
109
+
110
+ .loading-content {
111
+ text-align: center;
112
+ max-width: 500px;
113
+ padding: 40px;
114
+ }
115
+
116
+ .loading-title {
117
+ font-size: 24px;
118
+ margin-bottom: 20px;
119
+ font-weight: bold;
120
+ }
121
+
122
+ .progress-container {
123
+ width: 400px;
124
+ height: 20px;
125
+ background: #333;
126
+ border-radius: 10px;
127
+ overflow: hidden;
128
+ margin: 20px 0;
129
+ position: relative;
130
+ }
131
+
132
+ .progress-bar {
133
+ height: 100%;
134
+ background: linear-gradient(45deg, #007bff, #0056b3);
135
+ width: 0%;
136
+ transition: width 0.3s ease;
137
+ border-radius: 10px;
138
+ }
139
+
140
+ .progress-text {
141
+ margin-top: 15px;
142
+ font-size: 16px;
143
+ opacity: 0.9;
144
+ }
145
+
146
+ .loading-spinner {
147
+ width: 40px;
148
+ height: 40px;
149
+ border: 4px solid #333;
150
+ border-top: 4px solid #007bff;
151
+ border-radius: 50%;
152
+ animation: spin 1s linear infinite;
153
+ margin: 20px auto;
154
+ }
155
+
156
+ @keyframes spin {
157
+ 0% { transform: rotate(0deg); }
158
+ 100% { transform: rotate(360deg); }
159
+ }
160
+
161
+ .main-content {
162
+ display: none;
163
+ }
164
+
165
+ .main-content.loaded {
166
+ display: block;
167
+ }
168
+
169
+ button {
170
+ margin: 0 8px;
171
+ padding: 10px 20px;
172
+ font-size: 16px;
173
+ border: none;
174
+ border-radius: 5px;
175
+ cursor: pointer;
176
+ background: #007bff;
177
+ color: white;
178
+ }
179
+
180
+ button:hover {
181
+ background: #0056b3;
182
+ }
183
+
184
+ #frameInfo {
185
+ font-size: 18px;
186
+ font-weight: bold;
187
+ margin: 15px 0;
188
+ text-align: center;
189
+ color: #333;
190
+ }
191
+
192
+ .stats {
193
+ display: flex;
194
+ justify-content: space-around;
195
+ margin: 20px 0;
196
+ padding: 15px;
197
+ background: #f8f9fa;
198
+ border-radius: 5px;
199
+ }
200
+
201
+ .stat {
202
+ text-align: center;
203
+ }
204
+
205
+ .stat-value {
206
+ font-size: 20px;
207
+ font-weight: bold;
208
+ color: #007bff;
209
+ }
210
+
211
+ .stat-label {
212
+ font-size: 12px;
213
+ color: #666;
214
+ margin-top: 5px;
215
+ }
216
+
217
+
218
+ </style>
219
+ <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
220
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
221
+ </head>
222
+ <body>
223
+ <!-- Loading Screen -->
224
+ <div id="loadingOverlay" class="loading-overlay">
225
+ <div class="loading-content">
226
+ <div class="loading-title">Loading Action Probability Images</div>
227
+ <div class="loading-spinner"></div>
228
+ <div class="progress-container">
229
+ <div id="progressBar" class="progress-bar"></div>
230
+ </div>
231
+ <div id="progressText" class="progress-text">Preparing to download images...</div>
232
+ </div>
233
+ </div>
234
+
235
+ <!-- Main Content -->
236
+ <div id="mainContent" class="main-content">
237
+ <div class="container">
238
+ <div class="image-panel">
239
+ <div id="imageContainer">
240
+ <img id="actionImage" src="" alt="Action Probabilities">
241
+ </div>
242
+ </div>
243
+
244
+ <div class="plot-panel">
245
+ <div id="frameInfo">Frame: 0 / 1561</div>
246
+
247
+ <div id="llcPlot"></div>
248
+
249
+ <div class="stats">
250
+ <div class="stat">
251
+ <div class="stat-value" id="currentLLC">0.000000</div>
252
+ <div class="stat-label">Current LLC</div>
253
+ </div>
254
+ <div class="stat">
255
+ <div class="stat-value" id="minLLC">0.000000</div>
256
+ <div class="stat-label">Min LLC</div>
257
+ </div>
258
+ <div class="stat">
259
+ <div class="stat-value" id="maxLLC">0.000000</div>
260
+ <div class="stat-label">Max LLC</div>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </div>
265
+
266
+ <div class="controls">
267
+ <input type="range" id="frameSlider" min="0" max="1561" value="0">
268
+ </div>
269
+
270
+ <div class="controls-row">
271
+ <button onclick="prevFrame()">◀ Previous</button>
272
+ <button id="playBtn" onclick="togglePlay()">▶ Play</button>
273
+ <button onclick="nextFrame()">Next ▶</button>
274
+ <button id="repeatBtn" onclick="toggleRepeat()">🔄 Repeat</button>
275
+ <input type="range" id="fpsSlider" min="0" max="100" value="25" style="width: 150px;">
276
+ <span id="speedInfo" style="font-weight: bold;">5 FPS</span>
277
+ </div>
278
+
279
+ </div> <!-- End main content -->
280
+
281
+ <script>
282
+ // Data
283
+ const zipFilePath = "llc1_images.zip";
284
+ const totalImages = 1562;
285
+ const allCheckpoints = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561];
286
+ const allLlcValues = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 5.10613632, 5.230312155, 5.35448799, 5.478663825, 5.60283966, 5.727015495, 5.85119133, 5.975367165, 6.099543, 6.223718835, 6.34789467, 6.507309279333333, 6.666723888666667, 6.826138498, 6.985553107333333, 7.144967716666666, 7.304382326, 7.463796935333333, 7.623211544666666, 7.782626153999999, 7.942040763333333, 8.101455372666667, 8.260869982, 8.420284591333333, 8.579699200666667, 8.73911381, 8.938232042, 9.137350274, 9.336468506, 9.535586738, 9.73470497, 9.933823202, 10.132941434, 10.332059666, 10.531177898, 10.73029613, 11.111765857, 11.493235583999999, 11.874705311, 12.256175037999999, 12.637644765, 13.019114492, 13.400584218999999, 13.782053946, 14.163523672999998, 14.5449934, 15.325331401, 16.105669402, 16.886007403, 17.666345404, 18.446683405, 19.227021406, 20.007359407, 20.787697408, 21.568035409, 22.34837341, 22.87959289266667, 23.410812375333332, 23.942031858, 24.473251340666668, 25.004470823333335, 25.535690306, 26.066909788666667, 26.598129271333335, 27.129348754, 27.660568236666666, 28.191787719333334, 28.723007201999998, 29.254226684666666, 29.785446167333333, 30.31666565, 31.483609772, 32.650553894, 33.817498016, 34.984442138, 36.15138626, 37.318330382, 38.485274504, 39.652218626, 40.819162748, 41.98610687, 44.208753456000004, 46.431400042, 48.654046628, 50.876693214, 53.0993398, 55.321986386000006, 57.544632972, 59.767279558, 61.989926144, 64.21257273, 66.435219316, 68.657865902, 70.88051248800001, 73.103159074, 75.32580566, 76.446852108, 77.567898556, 78.688945004, 79.809991452, 80.9310379, 82.052084348, 83.173130796, 84.294177244, 85.415223692, 86.53627014, 89.27233021933333, 92.00839029866667, 94.744450378, 97.48051045733334, 100.21657053666667, 102.952630616, 105.68869069533334, 108.42475077466666, 111.160810854, 113.89687093333333, 116.63293101266666, 119.368991092, 122.10505117133334, 124.84111125066667, 127.57717133, 130.719622044, 133.862072758, 137.004523472, 140.146974186, 143.2894249, 146.431875614, 149.574326328, 152.716777042, 155.859227756, 159.00167847, 160.438012698, 161.87434692600002, 163.310681154, 164.747015382, 166.18334961, 167.61968383800001, 169.056018066, 170.492352294, 171.92868652200002, 173.36502075, 174.444577024, 175.524133298, 176.603689572, 177.683245846, 178.76280212, 179.982910154, 181.203018188, 182.423126222, 183.643234256, 184.86334229, 185.45079346133332, 186.03824463266665, 186.625695804, 187.21314697533333, 187.80059814666666, 188.388049318, 188.9755004893333, 189.56295166066667, 190.150402832, 190.73785400333333, 191.32530517466665, 191.91275634599998, 192.50020751733334, 193.08765868866666, 193.67510986, 194.232763669, 194.790417478, 195.34807128699998, 195.905725096, 196.463378905, 197.021032714, 197.578686523, 198.136340332, 198.69399414100002, 199.25164795, 201.21998698000002, 203.18832601, 205.15666504, 207.12500407000002, 209.0933431, 211.06168213, 213.03002116000002, 214.99836019, 216.96669922, 218.93503825000002, 220.90337728, 222.87171631, 224.84005534000002, 226.80839437, 228.7767334, 229.931552125, 231.08637085, 232.24118957500002, 233.3960083, 234.550827025, 235.70564575, 236.86046447500001, 238.0152832, 239.17010192499998, 240.32492065, 242.101780188, 243.878639726, 245.65549926399999, 247.43235880199998, 249.20921833999998, 250.98607787799997, 252.762937416, 254.539796954, 256.316656492, 258.09351603, 259.870375568, 261.647235106, 263.424094644, 265.200954182, 266.97781372, 270.87635498, 274.77489624, 278.6734375, 282.57197876, 286.47052002, 290.36906128, 294.26760254, 298.1661438, 302.06468506, 305.96322632, 310.6889445, 315.41466268, 320.14038086, 324.86609904, 329.59181722, 334.3175354, 339.04325358, 343.76897176, 348.49468994, 353.22040812, 357.9461263, 362.67184448, 367.39756266, 372.12328084, 376.84899902, 382.860800168, 388.872601316, 394.884402464, 400.896203612, 406.90800476000004, 412.919805908, 418.931607056, 424.94340820400004, 430.955209352, 436.9670105, 440.69659424, 444.42617798000003, 448.15576172, 451.88534546, 455.6149292, 459.34451294, 463.07409668, 466.80368042, 470.53326416, 474.2628479, 477.99243164, 481.72201538, 485.45159911999997, 489.18118286, 492.9107666, 494.8307312, 496.7506958, 498.6706604, 500.590625, 502.5105896, 504.4305542, 506.35051880000003, 508.2704834, 510.190448, 512.1104126, 509.76648356333334, 507.42255452666666, 505.07862549000004, 502.73469645333336, 500.3907674166667, 498.04683838, 495.7029093433333, 493.3589803066667, 491.01505127, 488.67112223333334, 486.32719319666666, 483.98326416, 481.63933512333335, 479.2954060866667, 476.95147705, 473.6397583, 470.32803954999997, 467.0163208, 463.70460205, 460.3928833, 457.08116455, 453.76944579999997, 450.45772705, 447.1460083, 443.83428955, 440.472666422, 437.111043294, 433.749420166, 430.387797038, 427.02617391, 423.664550782, 420.302927654, 416.941304526, 413.579681398, 410.21805827, 406.856435142, 403.494812014, 400.13318888599997, 396.771565758, 393.40994263, 391.158731082, 388.907519534, 386.656307986, 384.405096438, 382.15388489, 379.902673342, 377.651461794, 375.400250246, 373.149038698, 370.89782715, 368.366726686, 365.83562622200003, 363.304525758, 360.773425294, 358.24232483000003, 355.711224366, 353.180123902, 350.649023438, 348.117922974, 345.58682251, 345.01572876, 344.44463501, 343.87354125999997, 343.30244751, 342.73135376, 342.16026001, 341.58916626, 341.01807250999997, 340.44697876, 339.87588501, 338.43030395533333, 336.98472290066667, 335.539141846, 334.09356079133335, 332.6479797366667, 331.202398682, 329.75681762733336, 328.31123657266664, 326.865655518, 325.4200744633333, 323.97449340866666, 322.528912354, 321.08333129933334, 319.6377502446667, 318.19216919, 316.80788269100003, 315.423596192, 314.039309693, 312.655023194, 311.270736695, 309.886450196, 308.502163697, 307.11787719800003, 305.733590699, 304.3493042, 302.62775472066664, 300.90620524133334, 299.184655762, 297.4631062826667, 295.7415568033333, 294.020007324, 292.29845784466664, 290.57690836533334, 288.855358886, 287.13380940666667, 285.4122599273333, 283.690710448, 281.96916096866664, 280.2476114893333, 278.52606201, 278.81649780099997, 279.10693359199996, 279.397369383, 279.687805174, 279.978240965, 280.268676756, 280.559112547, 280.84954833800003, 281.139984129, 281.43041992, 280.1968790673333, 278.9633382146667, 277.729797362, 276.49625650933336, 275.26271565666667, 274.029174804, 272.79563395133334, 271.56209309866665, 270.328552246, 269.0950113933333, 267.86147054066663, 266.627929688, 265.3943888353333, 264.16084798266667, 262.92730713, 257.084057618, 251.24080810599997, 245.39755859399997, 239.554309082, 233.71105957, 239.04008789, 244.36911621000002, 249.69814453, 255.02717285000003, 260.35620117, 259.7168334946667, 259.0774658193333, 258.43809814400004, 257.7987304686667, 257.15936279333334, 256.519995118, 255.88062744266668, 255.24125976733333, 254.601892092, 253.96252441666667, 253.32315674133332, 252.683789066, 252.04442139066666, 251.40505371533334, 250.76568604, 248.85433807799998, 246.942990116, 245.031642154, 243.120294192, 241.20894622999998, 239.297598268, 237.386250306, 235.474902344, 233.563554382, 231.65220642, 231.563593546, 231.474980672, 231.386367798, 231.297754924, 231.20914205, 231.120529176, 231.03191630199998, 230.943303428, 230.854690554, 230.76607768, 230.677464806, 230.58885193199998, 230.500239058, 230.411626184, 230.32301331, 229.829756168, 229.33649902599998, 228.843241884, 228.349984742, 227.8567276, 227.363470458, 226.870213316, 226.37695617400001, 225.883699032, 225.39044189, 225.26844685466668, 225.14645181933335, 225.024456784, 224.90246174866667, 224.78046671333334, 224.658471678, 224.53647664266668, 224.41448160733333, 224.292486572, 224.17049153666667, 224.04849650133335, 223.92650146600002, 223.80450643066666, 223.68251139533334, 223.56051636, 223.082385256, 222.604254152, 222.126123048, 221.647991944, 221.16986084, 220.69172973599998, 220.213598632, 219.735467528, 219.257336424, 218.77920532, 216.021942137, 213.264678954, 210.50741577099998, 207.750152588, 204.992889405, 202.235626222, 199.47836303900002, 196.721099856, 193.963836673, 191.20657349, 194.825421146, 198.444268802, 202.063116458, 205.681964114, 209.30081177, 208.90997925, 208.51914673, 208.12831420999998, 207.73748168999998, 207.34664916999998, 206.95581665, 206.56498413, 206.17415161, 205.78331909, 205.39248657, 205.52557678, 205.65866699, 205.79175719999998, 205.92484740999998, 206.05793762, 206.19102783, 206.32411804, 206.45720824999998, 206.59029845999999, 206.72338867, 205.63631896799998, 204.549249266, 203.462179564, 202.375109862, 201.28804015999998, 200.200970458, 199.113900756, 198.02683105399998, 196.939761352, 195.85269165, 196.04156697533332, 196.23044230066665, 196.419317626, 196.60819295133334, 196.79706827666666, 196.985943602, 197.17481892733332, 197.36369425266668, 197.552569578, 197.74144490333333, 197.93032022866666, 198.119195554, 198.30807087933334, 198.49694620466667, 198.68582153, 198.264887998, 197.84395446599999, 197.423020934, 197.002087402, 196.58115386999998, 196.160220338, 195.739286806, 195.318353274, 194.89741974199998, 194.47648621, 194.41583252333334, 194.35517883666665, 194.29452515, 194.23387146333332, 194.17321777666666, 194.11256409, 194.05191040333332, 193.99125671666667, 193.93060303, 193.86994934333333, 193.80929565666668, 193.74864197, 193.68798828333334, 193.62733459666666, 193.56668091, 192.604626466, 191.642572022, 190.680517578, 189.718463134, 188.75640869, 187.794354246, 186.832299802, 185.870245358, 184.908190914, 183.94613647, 183.23181864, 182.51750081, 181.80318298, 181.08886515, 180.37454732, 179.66022949, 178.94591166, 178.23159382999998, 177.51727599999998, 176.80295816999998, 176.08864033999998, 175.37432250999998, 174.66000468, 173.94568685, 173.23136902, 174.033193971, 174.835018922, 175.63684387299998, 176.438668824, 177.240493775, 178.042318726, 178.84414367699998, 179.645968628, 180.447793579, 181.24961853, 179.89600372299998, 178.542388916, 177.188774109, 175.835159302, 174.48154449499998, 173.127929688, 171.774314881, 170.420700074, 169.06708526699998, 167.71347046, 169.993121338, 172.272772216, 174.552423094, 176.832073972, 179.11172485, 178.577082822, 178.04244079400002, 177.507798766, 176.973156738, 176.43851471, 175.903872682, 175.369230654, 174.834588626, 174.29994659800002, 173.76530457, 173.592161056, 173.419017542, 173.245874028, 173.072730514, 172.899587, 172.726443486, 172.553299972, 172.38015645800002, 172.207012944, 172.03386943, 171.860725916, 171.687582402, 171.514438888, 171.341295374, 171.16815186, 170.646527104, 170.124902348, 169.60327759199998, 169.081652836, 168.56002808, 168.038403324, 167.516778568, 166.99515381199998, 166.473529056, 165.9519043, 166.43770650533332, 166.92350871066665, 167.409310916, 167.89511312133334, 168.38091532666667, 168.866717532, 169.35251973733332, 169.83832194266668, 170.324124148, 170.80992635333334, 171.29572855866667, 171.781530764, 172.26733296933335, 172.75313517466668, 173.23893738, 173.23650512900002, 173.234072878, 173.231640627, 173.229208376, 173.22677612500001, 173.224343874, 173.22191162299998, 173.219479372, 173.217047121, 173.21461487, 173.064987184, 172.915359498, 172.76573181199998, 172.616104126, 172.46647644, 172.316848754, 172.167221068, 172.017593382, 171.867965696, 171.71833801, 171.568710324, 171.41908263800002, 171.26945495200002, 171.11982726600002, 170.97019958, 170.83917083300003, 170.708142086, 170.577113339, 170.446084592, 170.31505584500002, 170.184027098, 170.05299835099999, 169.921969604, 169.790940857, 169.65991211, 169.512570191, 169.365228272, 169.21788635299998, 169.070544434, 168.923202515, 168.775860596, 168.628518677, 168.481176758, 168.33383483900002, 168.18649292, 167.332792664, 166.479092408, 165.625392152, 164.771691896, 163.91799164, 163.064291384, 162.210591128, 161.35689087199998, 160.50319061599998, 159.64949036, 159.88134053866665, 160.1131907173333, 160.345040896, 160.57689107466666, 160.80874125333332, 161.04059143199999, 161.27244161066665, 161.50429178933334, 161.736141968, 161.96799214666666, 162.19984232533332, 162.43169250399998, 162.66354268266667, 162.89539286133333, 163.12724304, 163.204687498, 163.282131956, 163.359576414, 163.437020872, 163.51446533, 163.59190978799998, 163.66935424599998, 163.74679870399999, 163.824243162, 163.90168762, 163.86878153266665, 163.83587544533333, 163.80296935799998, 163.77006327066667, 163.73715718333332, 163.70425109599998, 163.67134500866666, 163.63843892133332, 163.605532834, 163.57262674666666, 163.5397206593333, 163.506814572, 163.47390848466665, 163.44100239733334, 163.40809631, 163.21255187699998, 163.017007444, 162.821463011, 162.625918578, 162.430374145, 162.234829712, 162.039285279, 161.843740846, 161.64819641300002, 161.45265198, 161.3359018986667, 161.21915181733334, 161.10240173600002, 160.98565165466667, 160.86890157333335, 160.75215149200002, 160.63540141066667, 160.51865132933335, 160.401901248, 160.28515116666668, 160.16840108533336, 160.051651004, 159.93490092266669, 159.81815084133333, 159.70140076, 159.590667727, 159.479934694, 159.369201661, 159.258468628, 159.147735595, 159.037002562, 158.926269529, 158.815536496, 158.704803463, 158.59407043, 158.52785338933333, 158.46163634866664, 158.395419308, 158.32920226733333, 158.26298522666667, 158.19676818599999, 158.13055114533333, 158.06433410466667, 157.998117064, 157.93190002333333, 157.86568298266667, 157.799465942, 157.73324890133335, 157.66703186066667, 157.60081482, 157.589686585, 157.57855835, 157.567430115, 157.55630188, 157.545173645, 157.53404541, 157.522917175, 157.51178894, 157.500660705, 157.48953247, 157.08849690666668, 156.68746134333333, 156.28642578, 155.88539021666668, 155.48435465333333, 155.08331909, 154.68228352666668, 154.28124796333333, 153.8802124, 153.47917683666668, 153.07814127333333, 152.67710571, 152.27607014666668, 151.87503458333333, 151.47399902, 151.3795519988, 151.2851049776, 151.1906579564, 151.09621093520002, 151.001763914, 150.9073168928, 150.81286987160001, 150.7184228504, 150.62397582920002, 150.529528808, 150.4350817868, 150.34063476560002, 150.2461877444, 150.15174072320002, 150.057293702, 149.9628466808, 149.86839965960002, 149.7739526384, 149.67950561720002, 149.585058596, 149.4906115748, 149.39616455360002, 149.3017175324, 149.20727051120002, 149.11282349, 149.31999664600002, 149.527169802, 149.734342958, 149.941516114, 150.14868927, 150.35586242600002, 150.563035582, 150.770208738, 150.977381894, 151.18455505, 150.68676147133334, 150.18896789266665, 149.691174314, 149.19338073533333, 148.69558715666668, 148.197793578, 147.69999999933333, 147.20220642066667, 146.704412842, 146.20661926333332, 145.70882568466666, 145.211032106, 144.71323852733335, 144.21544494866666, 143.71765137, 143.775144961, 143.832638552, 143.890132143, 143.94762573399998, 144.005119325, 144.062612916, 144.120106507, 144.177600098, 144.235093689, 144.29258728, 144.251496887, 144.21040649399998, 144.169316101, 144.128225708, 144.087135315, 144.046044922, 144.004954529, 143.963864136, 143.922773743, 143.88168335, 143.9518713384, 144.0220593268, 144.0922473152, 144.1624353036, 144.232623292, 144.3028112804, 144.3729992688, 144.4431872572, 144.5133752456, 144.583563234, 144.6537512224, 144.72393921079998, 144.7941271992, 144.8643151876, 144.934503176, 145.0046911644, 145.07487915279998, 145.1450671412, 145.2152551296, 145.285443118, 145.35563110639998, 145.42581909479998, 145.4960070832, 145.5661950716, 145.63638306, 145.5784588656, 145.52053467119998, 145.4626104768, 145.40468628239998, 145.346762088, 145.2888378936, 145.2309136992, 145.1729895048, 145.11506531039998, 145.057141116, 144.9992169216, 144.9412927272, 144.8833685328, 144.8254443384, 144.767520144, 144.70959594960001, 144.6516717552, 144.5937475608, 144.5358233664, 144.477899172, 144.41997497760002, 144.3620507832, 144.30412658880002, 144.2462023944, 144.1882782, 144.1335778824, 144.07887756480002, 144.02417724720002, 143.9694769296, 143.914776612, 143.86007629440002, 143.8053759768, 143.7506756592, 143.69597534160002, 143.641275024, 143.5865747064, 143.5318743888, 143.4771740712, 143.4224737536, 143.367773436, 143.31307311839998, 143.2583728008, 143.2036724832, 143.1489721656, 143.094271848, 143.0395715304, 142.9848712128, 142.93017089519998, 142.8754705776, 142.82077026, 142.68537719359998, 142.5499841272, 142.41459106079998, 142.2791979944, 142.14380492799998, 142.0084118616, 141.87301879519998, 141.7376257288, 141.60223266239998, 141.466839596, 141.3314465296, 141.1960534632, 141.0606603968, 140.9252673304, 140.789874264, 140.6544811976, 140.5190881312, 140.3836950648, 140.2483019984, 140.112908932, 139.9775158656, 139.8421227992, 139.7067297328, 139.57133666640001, 139.4359436, 139.4274371304, 139.4189306608, 139.4104241912, 139.4019177216, 139.393411252, 139.38490478239999, 139.3763983128, 139.3678918432, 139.3593853736, 139.35087890399998, 139.3423724344, 139.3338659648, 139.3253594952, 139.31685302559998, 139.308346556, 139.2998400864, 139.2913336168, 139.28282714719998, 139.2743206776, 139.265814208, 139.2573077384, 139.24880126879998, 139.2402947992, 139.2317883296, 139.22328186, 139.1206451412, 139.0180084224, 138.9153717036, 138.8127349848, 138.710098266, 138.6074615472, 138.5048248284, 138.4021881096, 138.2995513908, 138.196914672, 138.0942779532, 137.9916412344, 137.8890045156, 137.7863677968, 137.683731078, 137.5810943592, 137.4784576404, 137.3758209216, 137.2731842028, 137.170547484, 137.0679107652, 136.9652740464, 136.8626373276, 136.7600006088, 136.65736389, 136.6922705064, 136.7271771228, 136.7620837392, 136.7969903556, 136.831896972, 136.8668035884, 136.9017102048, 136.9366168212, 136.97152343759998, 137.006430054, 137.0413366704, 137.0762432868, 137.1111499032, 137.1460565196, 137.180963136, 137.2158697524, 137.2507763688, 137.2856829852, 137.3205896016, 137.35549621799998, 137.3904028344, 137.4253094508, 137.4602160672, 137.4951226836, 137.5300293, 137.42572098099998, 137.321412662, 137.217104343, 137.112796024, 137.008487705, 136.90417938599998, 136.799871067, 136.695562748, 136.591254429, 136.48694611, 136.38263779099998, 136.278329472, 136.17402115299998, 136.069712834, 135.965404515, 135.86109619599998, 135.756787877, 135.65247955799998, 135.548171239, 135.44386292, 135.4044097948, 135.3649566696, 135.3255035444, 135.2860504192, 135.246597294, 135.2071441688, 135.1676910436, 135.1282379184, 135.0887847932, 135.049331668, 135.0098785428, 134.9704254176, 134.93097229239999, 134.8915191672, 134.852066042, 134.8126129168, 134.7731597916, 134.7337066664, 134.6942535412, 134.654800416, 134.6153472908, 134.5758941656, 134.5364410404, 134.4969879152, 134.45753479, 134.42542663560002, 134.3933184812, 134.3612103268, 134.3291021724, 134.29699401800002, 134.2648858636, 134.2327777092, 134.20066955480002, 134.1685614004, 134.136453246, 134.1043450916, 134.07223693720002, 134.0401287828, 134.0080206284, 133.975912474, 133.94380431960002, 133.9116961652, 133.8795880108, 133.8474798564, 133.815371702, 133.7832635476, 133.7511553932, 133.71904723880002, 133.6869390844, 133.65483093, 133.6191540504, 133.5834771708, 133.5478002912, 133.5121234116, 133.476446532, 133.4407696524, 133.4050927728, 133.3694158932, 133.3337390136, 133.298062134, 133.2623852544, 133.22670837479998, 133.1910314952, 133.1553546156, 133.119677736, 133.0840008564, 133.0483239768, 133.0126470972, 132.97697021759998, 132.94129333799998, 132.9056164584, 132.8699395788, 132.8342626992, 132.7985858196, 132.76290894, 132.64889954039998, 132.5348901408, 132.4208807412, 132.3068713416, 132.19286194199998, 132.0788525424, 131.9648431428, 131.85083374319998, 131.7368243436, 131.622814944, 131.5088055444, 131.39479614479998, 131.2807867452, 131.1667773456, 131.052767946, 130.93875854639998, 130.8247491468, 130.7107397472, 130.5967303476, 130.482720948, 130.3687115484, 130.2547021488, 130.14069274919999, 130.0266833496, 129.91267395, 129.94762634239999, 129.9825787348, 130.0175311272, 130.0524835196, 130.087435912, 130.1223883044, 130.1573406968, 130.1922930892, 130.2272454816, 130.262197874, 130.2971502664, 130.3321026588, 130.3670550512, 130.4020074436, 130.436959836, 130.47191222840002, 130.5068646208, 130.54181701320002, 130.5767694056, 130.61172179800002, 130.6466741904, 130.68162658280002, 130.7165789752, 130.75153136760002, 130.78648376, 130.3426602128, 129.89883666560002, 129.45501311840002, 129.01118957120002, 128.56736602400002, 128.1235424768, 127.67971892960001, 127.2358953824, 126.7920718352, 126.34824828800001, 125.90442474080001, 125.46060119360001, 125.0167776464, 124.5729540992, 124.129130552, 123.68530700480001, 123.24148345760001, 122.7976599104, 122.3538363632, 121.910012816, 121.46618926880001, 121.02236572160001, 120.5785421744, 120.1347186272, 119.69089508, 120.02317199640001, 120.3554489128, 120.6877258292, 121.02000274560001, 121.352279662, 121.6845565784, 122.01683349480001, 122.3491104112, 122.6813873276, 123.013664244, 123.3459411604, 123.67821807680001, 124.0104949932, 124.3427719096, 124.67504882600001, 125.0073257424, 125.3396026588, 125.6718795752, 126.0041564916, 126.336433408, 126.6687103244, 127.0009872408, 127.3332641572, 127.6655410736, 127.99781799, 127.9976062745, 127.997394559, 127.9971828435, 127.996971128, 127.9967594125, 127.996547697, 127.9963359815, 127.996124266, 127.9959125505, 127.99570083500001, 127.99548911950001, 127.995277404, 127.9950656885, 127.994853973, 127.9946422575, 127.994430542, 127.9942188265, 127.994007111, 127.9937953955, 127.99358368, 127.910854798, 127.828125916, 127.745397034, 127.662668152, 127.57993927, 127.497210388, 127.414481506, 127.331752624, 127.249023742, 127.16629486, 127.083565978, 127.000837096, 126.918108214, 126.835379332, 126.75265045, 126.66992156799999, 126.587192686, 126.504463804, 126.421734922, 126.33900604, 126.256277158, 126.17354827599999, 126.090819394, 126.008090512, 125.92536163, 125.9261364716, 125.9269113132, 125.9276861548, 125.92846099639999, 125.929235838, 125.9300106796, 125.9307855212, 125.9315603628, 125.93233520439999, 125.933110046, 125.9338848876, 125.93465972919999, 125.9354345708, 125.93620941239999, 125.936984254, 125.9377590956, 125.93853393719999, 125.9393087788, 125.94008362039999, 125.940858462, 125.9416333036, 125.94240814519999, 125.9431829868, 125.94395782839999, 125.94473267, 125.8769024696, 125.80907226919999, 125.74124206879999, 125.6734118684, 125.605581668, 125.53775146759999, 125.4699212672, 125.4020910668, 125.33426086639999, 125.26643066599999, 125.1986004656, 125.1307702652, 125.06294006479999, 124.99510986439999, 124.927279664, 124.8594494636, 124.79161926319999, 124.7237890628, 124.6559588624, 124.58812866199999, 124.52029846159999, 124.4524682612, 124.3846380608, 124.31680786039999, 124.24897766, 124.1980563344, 124.14713500879999, 124.09621368319999, 124.04529235759999, 123.99437103199999, 123.94344970639999, 123.8925283808, 123.8416070552, 123.7906857296, 123.739764404, 123.6888430784, 123.6379217528, 123.5870004272, 123.5360791016, 123.485157776, 123.4342364504, 123.38331512479999, 123.33239379919999, 123.2814724736, 123.230551148, 123.1796298224, 123.1287084968, 123.0777871712, 123.0268658456, 122.97594452, 122.9086605844, 122.8413766488, 122.7740927132, 122.7068087776, 122.639524842, 122.5722409064, 122.5049569708, 122.4376730352, 122.3703890996, 122.303105164, 122.2358212284, 122.1685372928, 122.10125335720001, 122.0339694216, 121.966685486, 121.8994015504, 121.8321176148, 121.76483367920001, 121.6975497436, 121.630265808, 121.5629818724, 121.4956979368, 121.42841400120001, 121.36113006560001, 121.29384613, 121.2185079952, 121.14316986040001, 121.0678317256, 120.99249359080001, 120.917155456, 120.8418173212, 120.7664791864, 120.6911410516, 120.6158029168, 120.540464782, 120.4651266472, 120.3897885124, 120.3144503776, 120.2391122428, 120.163774108, 120.08843597319999, 120.0130978384, 119.9377597036, 119.8624215688, 119.787083434, 119.71174529919999, 119.6364071644, 119.56106902959999, 119.4857308948, 119.41039276, 119.3789144884, 119.34743621679999, 119.3159579452, 119.28447967359999, 119.253001402, 119.2215231304, 119.1900448588, 119.1585665872, 119.12708831559999, 119.095610044, 119.0641317724, 119.0326535008, 119.0011752292, 118.9696969576, 118.938218686, 118.9067404144, 118.8752621428, 118.8437838712, 118.8123055996, 118.780827328, 118.7493490564, 118.7178707848, 118.6863925132, 118.6549142416, 118.62343597, null];
287
+ const validCheckpoints = [75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560];
288
+ const validLlcValues = [5.10613632, 5.230312155, 5.35448799, 5.478663825, 5.60283966, 5.727015495, 5.85119133, 5.975367165, 6.099543, 6.223718835, 6.34789467, 6.507309279333333, 6.666723888666667, 6.826138498, 6.985553107333333, 7.144967716666666, 7.304382326, 7.463796935333333, 7.623211544666666, 7.782626153999999, 7.942040763333333, 8.101455372666667, 8.260869982, 8.420284591333333, 8.579699200666667, 8.73911381, 8.938232042, 9.137350274, 9.336468506, 9.535586738, 9.73470497, 9.933823202, 10.132941434, 10.332059666, 10.531177898, 10.73029613, 11.111765857, 11.493235583999999, 11.874705311, 12.256175037999999, 12.637644765, 13.019114492, 13.400584218999999, 13.782053946, 14.163523672999998, 14.5449934, 15.325331401, 16.105669402, 16.886007403, 17.666345404, 18.446683405, 19.227021406, 20.007359407, 20.787697408, 21.568035409, 22.34837341, 22.87959289266667, 23.410812375333332, 23.942031858, 24.473251340666668, 25.004470823333335, 25.535690306, 26.066909788666667, 26.598129271333335, 27.129348754, 27.660568236666666, 28.191787719333334, 28.723007201999998, 29.254226684666666, 29.785446167333333, 30.31666565, 31.483609772, 32.650553894, 33.817498016, 34.984442138, 36.15138626, 37.318330382, 38.485274504, 39.652218626, 40.819162748, 41.98610687, 44.208753456000004, 46.431400042, 48.654046628, 50.876693214, 53.0993398, 55.321986386000006, 57.544632972, 59.767279558, 61.989926144, 64.21257273, 66.435219316, 68.657865902, 70.88051248800001, 73.103159074, 75.32580566, 76.446852108, 77.567898556, 78.688945004, 79.809991452, 80.9310379, 82.052084348, 83.173130796, 84.294177244, 85.415223692, 86.53627014, 89.27233021933333, 92.00839029866667, 94.744450378, 97.48051045733334, 100.21657053666667, 102.952630616, 105.68869069533334, 108.42475077466666, 111.160810854, 113.89687093333333, 116.63293101266666, 119.368991092, 122.10505117133334, 124.84111125066667, 127.57717133, 130.719622044, 133.862072758, 137.004523472, 140.146974186, 143.2894249, 146.431875614, 149.574326328, 152.716777042, 155.859227756, 159.00167847, 160.438012698, 161.87434692600002, 163.310681154, 164.747015382, 166.18334961, 167.61968383800001, 169.056018066, 170.492352294, 171.92868652200002, 173.36502075, 174.444577024, 175.524133298, 176.603689572, 177.683245846, 178.76280212, 179.982910154, 181.203018188, 182.423126222, 183.643234256, 184.86334229, 185.45079346133332, 186.03824463266665, 186.625695804, 187.21314697533333, 187.80059814666666, 188.388049318, 188.9755004893333, 189.56295166066667, 190.150402832, 190.73785400333333, 191.32530517466665, 191.91275634599998, 192.50020751733334, 193.08765868866666, 193.67510986, 194.232763669, 194.790417478, 195.34807128699998, 195.905725096, 196.463378905, 197.021032714, 197.578686523, 198.136340332, 198.69399414100002, 199.25164795, 201.21998698000002, 203.18832601, 205.15666504, 207.12500407000002, 209.0933431, 211.06168213, 213.03002116000002, 214.99836019, 216.96669922, 218.93503825000002, 220.90337728, 222.87171631, 224.84005534000002, 226.80839437, 228.7767334, 229.931552125, 231.08637085, 232.24118957500002, 233.3960083, 234.550827025, 235.70564575, 236.86046447500001, 238.0152832, 239.17010192499998, 240.32492065, 242.101780188, 243.878639726, 245.65549926399999, 247.43235880199998, 249.20921833999998, 250.98607787799997, 252.762937416, 254.539796954, 256.316656492, 258.09351603, 259.870375568, 261.647235106, 263.424094644, 265.200954182, 266.97781372, 270.87635498, 274.77489624, 278.6734375, 282.57197876, 286.47052002, 290.36906128, 294.26760254, 298.1661438, 302.06468506, 305.96322632, 310.6889445, 315.41466268, 320.14038086, 324.86609904, 329.59181722, 334.3175354, 339.04325358, 343.76897176, 348.49468994, 353.22040812, 357.9461263, 362.67184448, 367.39756266, 372.12328084, 376.84899902, 382.860800168, 388.872601316, 394.884402464, 400.896203612, 406.90800476000004, 412.919805908, 418.931607056, 424.94340820400004, 430.955209352, 436.9670105, 440.69659424, 444.42617798000003, 448.15576172, 451.88534546, 455.6149292, 459.34451294, 463.07409668, 466.80368042, 470.53326416, 474.2628479, 477.99243164, 481.72201538, 485.45159911999997, 489.18118286, 492.9107666, 494.8307312, 496.7506958, 498.6706604, 500.590625, 502.5105896, 504.4305542, 506.35051880000003, 508.2704834, 510.190448, 512.1104126, 509.76648356333334, 507.42255452666666, 505.07862549000004, 502.73469645333336, 500.3907674166667, 498.04683838, 495.7029093433333, 493.3589803066667, 491.01505127, 488.67112223333334, 486.32719319666666, 483.98326416, 481.63933512333335, 479.2954060866667, 476.95147705, 473.6397583, 470.32803954999997, 467.0163208, 463.70460205, 460.3928833, 457.08116455, 453.76944579999997, 450.45772705, 447.1460083, 443.83428955, 440.472666422, 437.111043294, 433.749420166, 430.387797038, 427.02617391, 423.664550782, 420.302927654, 416.941304526, 413.579681398, 410.21805827, 406.856435142, 403.494812014, 400.13318888599997, 396.771565758, 393.40994263, 391.158731082, 388.907519534, 386.656307986, 384.405096438, 382.15388489, 379.902673342, 377.651461794, 375.400250246, 373.149038698, 370.89782715, 368.366726686, 365.83562622200003, 363.304525758, 360.773425294, 358.24232483000003, 355.711224366, 353.180123902, 350.649023438, 348.117922974, 345.58682251, 345.01572876, 344.44463501, 343.87354125999997, 343.30244751, 342.73135376, 342.16026001, 341.58916626, 341.01807250999997, 340.44697876, 339.87588501, 338.43030395533333, 336.98472290066667, 335.539141846, 334.09356079133335, 332.6479797366667, 331.202398682, 329.75681762733336, 328.31123657266664, 326.865655518, 325.4200744633333, 323.97449340866666, 322.528912354, 321.08333129933334, 319.6377502446667, 318.19216919, 316.80788269100003, 315.423596192, 314.039309693, 312.655023194, 311.270736695, 309.886450196, 308.502163697, 307.11787719800003, 305.733590699, 304.3493042, 302.62775472066664, 300.90620524133334, 299.184655762, 297.4631062826667, 295.7415568033333, 294.020007324, 292.29845784466664, 290.57690836533334, 288.855358886, 287.13380940666667, 285.4122599273333, 283.690710448, 281.96916096866664, 280.2476114893333, 278.52606201, 278.81649780099997, 279.10693359199996, 279.397369383, 279.687805174, 279.978240965, 280.268676756, 280.559112547, 280.84954833800003, 281.139984129, 281.43041992, 280.1968790673333, 278.9633382146667, 277.729797362, 276.49625650933336, 275.26271565666667, 274.029174804, 272.79563395133334, 271.56209309866665, 270.328552246, 269.0950113933333, 267.86147054066663, 266.627929688, 265.3943888353333, 264.16084798266667, 262.92730713, 257.084057618, 251.24080810599997, 245.39755859399997, 239.554309082, 233.71105957, 239.04008789, 244.36911621000002, 249.69814453, 255.02717285000003, 260.35620117, 259.7168334946667, 259.0774658193333, 258.43809814400004, 257.7987304686667, 257.15936279333334, 256.519995118, 255.88062744266668, 255.24125976733333, 254.601892092, 253.96252441666667, 253.32315674133332, 252.683789066, 252.04442139066666, 251.40505371533334, 250.76568604, 248.85433807799998, 246.942990116, 245.031642154, 243.120294192, 241.20894622999998, 239.297598268, 237.386250306, 235.474902344, 233.563554382, 231.65220642, 231.563593546, 231.474980672, 231.386367798, 231.297754924, 231.20914205, 231.120529176, 231.03191630199998, 230.943303428, 230.854690554, 230.76607768, 230.677464806, 230.58885193199998, 230.500239058, 230.411626184, 230.32301331, 229.829756168, 229.33649902599998, 228.843241884, 228.349984742, 227.8567276, 227.363470458, 226.870213316, 226.37695617400001, 225.883699032, 225.39044189, 225.26844685466668, 225.14645181933335, 225.024456784, 224.90246174866667, 224.78046671333334, 224.658471678, 224.53647664266668, 224.41448160733333, 224.292486572, 224.17049153666667, 224.04849650133335, 223.92650146600002, 223.80450643066666, 223.68251139533334, 223.56051636, 223.082385256, 222.604254152, 222.126123048, 221.647991944, 221.16986084, 220.69172973599998, 220.213598632, 219.735467528, 219.257336424, 218.77920532, 216.021942137, 213.264678954, 210.50741577099998, 207.750152588, 204.992889405, 202.235626222, 199.47836303900002, 196.721099856, 193.963836673, 191.20657349, 194.825421146, 198.444268802, 202.063116458, 205.681964114, 209.30081177, 208.90997925, 208.51914673, 208.12831420999998, 207.73748168999998, 207.34664916999998, 206.95581665, 206.56498413, 206.17415161, 205.78331909, 205.39248657, 205.52557678, 205.65866699, 205.79175719999998, 205.92484740999998, 206.05793762, 206.19102783, 206.32411804, 206.45720824999998, 206.59029845999999, 206.72338867, 205.63631896799998, 204.549249266, 203.462179564, 202.375109862, 201.28804015999998, 200.200970458, 199.113900756, 198.02683105399998, 196.939761352, 195.85269165, 196.04156697533332, 196.23044230066665, 196.419317626, 196.60819295133334, 196.79706827666666, 196.985943602, 197.17481892733332, 197.36369425266668, 197.552569578, 197.74144490333333, 197.93032022866666, 198.119195554, 198.30807087933334, 198.49694620466667, 198.68582153, 198.264887998, 197.84395446599999, 197.423020934, 197.002087402, 196.58115386999998, 196.160220338, 195.739286806, 195.318353274, 194.89741974199998, 194.47648621, 194.41583252333334, 194.35517883666665, 194.29452515, 194.23387146333332, 194.17321777666666, 194.11256409, 194.05191040333332, 193.99125671666667, 193.93060303, 193.86994934333333, 193.80929565666668, 193.74864197, 193.68798828333334, 193.62733459666666, 193.56668091, 192.604626466, 191.642572022, 190.680517578, 189.718463134, 188.75640869, 187.794354246, 186.832299802, 185.870245358, 184.908190914, 183.94613647, 183.23181864, 182.51750081, 181.80318298, 181.08886515, 180.37454732, 179.66022949, 178.94591166, 178.23159382999998, 177.51727599999998, 176.80295816999998, 176.08864033999998, 175.37432250999998, 174.66000468, 173.94568685, 173.23136902, 174.033193971, 174.835018922, 175.63684387299998, 176.438668824, 177.240493775, 178.042318726, 178.84414367699998, 179.645968628, 180.447793579, 181.24961853, 179.89600372299998, 178.542388916, 177.188774109, 175.835159302, 174.48154449499998, 173.127929688, 171.774314881, 170.420700074, 169.06708526699998, 167.71347046, 169.993121338, 172.272772216, 174.552423094, 176.832073972, 179.11172485, 178.577082822, 178.04244079400002, 177.507798766, 176.973156738, 176.43851471, 175.903872682, 175.369230654, 174.834588626, 174.29994659800002, 173.76530457, 173.592161056, 173.419017542, 173.245874028, 173.072730514, 172.899587, 172.726443486, 172.553299972, 172.38015645800002, 172.207012944, 172.03386943, 171.860725916, 171.687582402, 171.514438888, 171.341295374, 171.16815186, 170.646527104, 170.124902348, 169.60327759199998, 169.081652836, 168.56002808, 168.038403324, 167.516778568, 166.99515381199998, 166.473529056, 165.9519043, 166.43770650533332, 166.92350871066665, 167.409310916, 167.89511312133334, 168.38091532666667, 168.866717532, 169.35251973733332, 169.83832194266668, 170.324124148, 170.80992635333334, 171.29572855866667, 171.781530764, 172.26733296933335, 172.75313517466668, 173.23893738, 173.23650512900002, 173.234072878, 173.231640627, 173.229208376, 173.22677612500001, 173.224343874, 173.22191162299998, 173.219479372, 173.217047121, 173.21461487, 173.064987184, 172.915359498, 172.76573181199998, 172.616104126, 172.46647644, 172.316848754, 172.167221068, 172.017593382, 171.867965696, 171.71833801, 171.568710324, 171.41908263800002, 171.26945495200002, 171.11982726600002, 170.97019958, 170.83917083300003, 170.708142086, 170.577113339, 170.446084592, 170.31505584500002, 170.184027098, 170.05299835099999, 169.921969604, 169.790940857, 169.65991211, 169.512570191, 169.365228272, 169.21788635299998, 169.070544434, 168.923202515, 168.775860596, 168.628518677, 168.481176758, 168.33383483900002, 168.18649292, 167.332792664, 166.479092408, 165.625392152, 164.771691896, 163.91799164, 163.064291384, 162.210591128, 161.35689087199998, 160.50319061599998, 159.64949036, 159.88134053866665, 160.1131907173333, 160.345040896, 160.57689107466666, 160.80874125333332, 161.04059143199999, 161.27244161066665, 161.50429178933334, 161.736141968, 161.96799214666666, 162.19984232533332, 162.43169250399998, 162.66354268266667, 162.89539286133333, 163.12724304, 163.204687498, 163.282131956, 163.359576414, 163.437020872, 163.51446533, 163.59190978799998, 163.66935424599998, 163.74679870399999, 163.824243162, 163.90168762, 163.86878153266665, 163.83587544533333, 163.80296935799998, 163.77006327066667, 163.73715718333332, 163.70425109599998, 163.67134500866666, 163.63843892133332, 163.605532834, 163.57262674666666, 163.5397206593333, 163.506814572, 163.47390848466665, 163.44100239733334, 163.40809631, 163.21255187699998, 163.017007444, 162.821463011, 162.625918578, 162.430374145, 162.234829712, 162.039285279, 161.843740846, 161.64819641300002, 161.45265198, 161.3359018986667, 161.21915181733334, 161.10240173600002, 160.98565165466667, 160.86890157333335, 160.75215149200002, 160.63540141066667, 160.51865132933335, 160.401901248, 160.28515116666668, 160.16840108533336, 160.051651004, 159.93490092266669, 159.81815084133333, 159.70140076, 159.590667727, 159.479934694, 159.369201661, 159.258468628, 159.147735595, 159.037002562, 158.926269529, 158.815536496, 158.704803463, 158.59407043, 158.52785338933333, 158.46163634866664, 158.395419308, 158.32920226733333, 158.26298522666667, 158.19676818599999, 158.13055114533333, 158.06433410466667, 157.998117064, 157.93190002333333, 157.86568298266667, 157.799465942, 157.73324890133335, 157.66703186066667, 157.60081482, 157.589686585, 157.57855835, 157.567430115, 157.55630188, 157.545173645, 157.53404541, 157.522917175, 157.51178894, 157.500660705, 157.48953247, 157.08849690666668, 156.68746134333333, 156.28642578, 155.88539021666668, 155.48435465333333, 155.08331909, 154.68228352666668, 154.28124796333333, 153.8802124, 153.47917683666668, 153.07814127333333, 152.67710571, 152.27607014666668, 151.87503458333333, 151.47399902, 151.3795519988, 151.2851049776, 151.1906579564, 151.09621093520002, 151.001763914, 150.9073168928, 150.81286987160001, 150.7184228504, 150.62397582920002, 150.529528808, 150.4350817868, 150.34063476560002, 150.2461877444, 150.15174072320002, 150.057293702, 149.9628466808, 149.86839965960002, 149.7739526384, 149.67950561720002, 149.585058596, 149.4906115748, 149.39616455360002, 149.3017175324, 149.20727051120002, 149.11282349, 149.31999664600002, 149.527169802, 149.734342958, 149.941516114, 150.14868927, 150.35586242600002, 150.563035582, 150.770208738, 150.977381894, 151.18455505, 150.68676147133334, 150.18896789266665, 149.691174314, 149.19338073533333, 148.69558715666668, 148.197793578, 147.69999999933333, 147.20220642066667, 146.704412842, 146.20661926333332, 145.70882568466666, 145.211032106, 144.71323852733335, 144.21544494866666, 143.71765137, 143.775144961, 143.832638552, 143.890132143, 143.94762573399998, 144.005119325, 144.062612916, 144.120106507, 144.177600098, 144.235093689, 144.29258728, 144.251496887, 144.21040649399998, 144.169316101, 144.128225708, 144.087135315, 144.046044922, 144.004954529, 143.963864136, 143.922773743, 143.88168335, 143.9518713384, 144.0220593268, 144.0922473152, 144.1624353036, 144.232623292, 144.3028112804, 144.3729992688, 144.4431872572, 144.5133752456, 144.583563234, 144.6537512224, 144.72393921079998, 144.7941271992, 144.8643151876, 144.934503176, 145.0046911644, 145.07487915279998, 145.1450671412, 145.2152551296, 145.285443118, 145.35563110639998, 145.42581909479998, 145.4960070832, 145.5661950716, 145.63638306, 145.5784588656, 145.52053467119998, 145.4626104768, 145.40468628239998, 145.346762088, 145.2888378936, 145.2309136992, 145.1729895048, 145.11506531039998, 145.057141116, 144.9992169216, 144.9412927272, 144.8833685328, 144.8254443384, 144.767520144, 144.70959594960001, 144.6516717552, 144.5937475608, 144.5358233664, 144.477899172, 144.41997497760002, 144.3620507832, 144.30412658880002, 144.2462023944, 144.1882782, 144.1335778824, 144.07887756480002, 144.02417724720002, 143.9694769296, 143.914776612, 143.86007629440002, 143.8053759768, 143.7506756592, 143.69597534160002, 143.641275024, 143.5865747064, 143.5318743888, 143.4771740712, 143.4224737536, 143.367773436, 143.31307311839998, 143.2583728008, 143.2036724832, 143.1489721656, 143.094271848, 143.0395715304, 142.9848712128, 142.93017089519998, 142.8754705776, 142.82077026, 142.68537719359998, 142.5499841272, 142.41459106079998, 142.2791979944, 142.14380492799998, 142.0084118616, 141.87301879519998, 141.7376257288, 141.60223266239998, 141.466839596, 141.3314465296, 141.1960534632, 141.0606603968, 140.9252673304, 140.789874264, 140.6544811976, 140.5190881312, 140.3836950648, 140.2483019984, 140.112908932, 139.9775158656, 139.8421227992, 139.7067297328, 139.57133666640001, 139.4359436, 139.4274371304, 139.4189306608, 139.4104241912, 139.4019177216, 139.393411252, 139.38490478239999, 139.3763983128, 139.3678918432, 139.3593853736, 139.35087890399998, 139.3423724344, 139.3338659648, 139.3253594952, 139.31685302559998, 139.308346556, 139.2998400864, 139.2913336168, 139.28282714719998, 139.2743206776, 139.265814208, 139.2573077384, 139.24880126879998, 139.2402947992, 139.2317883296, 139.22328186, 139.1206451412, 139.0180084224, 138.9153717036, 138.8127349848, 138.710098266, 138.6074615472, 138.5048248284, 138.4021881096, 138.2995513908, 138.196914672, 138.0942779532, 137.9916412344, 137.8890045156, 137.7863677968, 137.683731078, 137.5810943592, 137.4784576404, 137.3758209216, 137.2731842028, 137.170547484, 137.0679107652, 136.9652740464, 136.8626373276, 136.7600006088, 136.65736389, 136.6922705064, 136.7271771228, 136.7620837392, 136.7969903556, 136.831896972, 136.8668035884, 136.9017102048, 136.9366168212, 136.97152343759998, 137.006430054, 137.0413366704, 137.0762432868, 137.1111499032, 137.1460565196, 137.180963136, 137.2158697524, 137.2507763688, 137.2856829852, 137.3205896016, 137.35549621799998, 137.3904028344, 137.4253094508, 137.4602160672, 137.4951226836, 137.5300293, 137.42572098099998, 137.321412662, 137.217104343, 137.112796024, 137.008487705, 136.90417938599998, 136.799871067, 136.695562748, 136.591254429, 136.48694611, 136.38263779099998, 136.278329472, 136.17402115299998, 136.069712834, 135.965404515, 135.86109619599998, 135.756787877, 135.65247955799998, 135.548171239, 135.44386292, 135.4044097948, 135.3649566696, 135.3255035444, 135.2860504192, 135.246597294, 135.2071441688, 135.1676910436, 135.1282379184, 135.0887847932, 135.049331668, 135.0098785428, 134.9704254176, 134.93097229239999, 134.8915191672, 134.852066042, 134.8126129168, 134.7731597916, 134.7337066664, 134.6942535412, 134.654800416, 134.6153472908, 134.5758941656, 134.5364410404, 134.4969879152, 134.45753479, 134.42542663560002, 134.3933184812, 134.3612103268, 134.3291021724, 134.29699401800002, 134.2648858636, 134.2327777092, 134.20066955480002, 134.1685614004, 134.136453246, 134.1043450916, 134.07223693720002, 134.0401287828, 134.0080206284, 133.975912474, 133.94380431960002, 133.9116961652, 133.8795880108, 133.8474798564, 133.815371702, 133.7832635476, 133.7511553932, 133.71904723880002, 133.6869390844, 133.65483093, 133.6191540504, 133.5834771708, 133.5478002912, 133.5121234116, 133.476446532, 133.4407696524, 133.4050927728, 133.3694158932, 133.3337390136, 133.298062134, 133.2623852544, 133.22670837479998, 133.1910314952, 133.1553546156, 133.119677736, 133.0840008564, 133.0483239768, 133.0126470972, 132.97697021759998, 132.94129333799998, 132.9056164584, 132.8699395788, 132.8342626992, 132.7985858196, 132.76290894, 132.64889954039998, 132.5348901408, 132.4208807412, 132.3068713416, 132.19286194199998, 132.0788525424, 131.9648431428, 131.85083374319998, 131.7368243436, 131.622814944, 131.5088055444, 131.39479614479998, 131.2807867452, 131.1667773456, 131.052767946, 130.93875854639998, 130.8247491468, 130.7107397472, 130.5967303476, 130.482720948, 130.3687115484, 130.2547021488, 130.14069274919999, 130.0266833496, 129.91267395, 129.94762634239999, 129.9825787348, 130.0175311272, 130.0524835196, 130.087435912, 130.1223883044, 130.1573406968, 130.1922930892, 130.2272454816, 130.262197874, 130.2971502664, 130.3321026588, 130.3670550512, 130.4020074436, 130.436959836, 130.47191222840002, 130.5068646208, 130.54181701320002, 130.5767694056, 130.61172179800002, 130.6466741904, 130.68162658280002, 130.7165789752, 130.75153136760002, 130.78648376, 130.3426602128, 129.89883666560002, 129.45501311840002, 129.01118957120002, 128.56736602400002, 128.1235424768, 127.67971892960001, 127.2358953824, 126.7920718352, 126.34824828800001, 125.90442474080001, 125.46060119360001, 125.0167776464, 124.5729540992, 124.129130552, 123.68530700480001, 123.24148345760001, 122.7976599104, 122.3538363632, 121.910012816, 121.46618926880001, 121.02236572160001, 120.5785421744, 120.1347186272, 119.69089508, 120.02317199640001, 120.3554489128, 120.6877258292, 121.02000274560001, 121.352279662, 121.6845565784, 122.01683349480001, 122.3491104112, 122.6813873276, 123.013664244, 123.3459411604, 123.67821807680001, 124.0104949932, 124.3427719096, 124.67504882600001, 125.0073257424, 125.3396026588, 125.6718795752, 126.0041564916, 126.336433408, 126.6687103244, 127.0009872408, 127.3332641572, 127.6655410736, 127.99781799, 127.9976062745, 127.997394559, 127.9971828435, 127.996971128, 127.9967594125, 127.996547697, 127.9963359815, 127.996124266, 127.9959125505, 127.99570083500001, 127.99548911950001, 127.995277404, 127.9950656885, 127.994853973, 127.9946422575, 127.994430542, 127.9942188265, 127.994007111, 127.9937953955, 127.99358368, 127.910854798, 127.828125916, 127.745397034, 127.662668152, 127.57993927, 127.497210388, 127.414481506, 127.331752624, 127.249023742, 127.16629486, 127.083565978, 127.000837096, 126.918108214, 126.835379332, 126.75265045, 126.66992156799999, 126.587192686, 126.504463804, 126.421734922, 126.33900604, 126.256277158, 126.17354827599999, 126.090819394, 126.008090512, 125.92536163, 125.9261364716, 125.9269113132, 125.9276861548, 125.92846099639999, 125.929235838, 125.9300106796, 125.9307855212, 125.9315603628, 125.93233520439999, 125.933110046, 125.9338848876, 125.93465972919999, 125.9354345708, 125.93620941239999, 125.936984254, 125.9377590956, 125.93853393719999, 125.9393087788, 125.94008362039999, 125.940858462, 125.9416333036, 125.94240814519999, 125.9431829868, 125.94395782839999, 125.94473267, 125.8769024696, 125.80907226919999, 125.74124206879999, 125.6734118684, 125.605581668, 125.53775146759999, 125.4699212672, 125.4020910668, 125.33426086639999, 125.26643066599999, 125.1986004656, 125.1307702652, 125.06294006479999, 124.99510986439999, 124.927279664, 124.8594494636, 124.79161926319999, 124.7237890628, 124.6559588624, 124.58812866199999, 124.52029846159999, 124.4524682612, 124.3846380608, 124.31680786039999, 124.24897766, 124.1980563344, 124.14713500879999, 124.09621368319999, 124.04529235759999, 123.99437103199999, 123.94344970639999, 123.8925283808, 123.8416070552, 123.7906857296, 123.739764404, 123.6888430784, 123.6379217528, 123.5870004272, 123.5360791016, 123.485157776, 123.4342364504, 123.38331512479999, 123.33239379919999, 123.2814724736, 123.230551148, 123.1796298224, 123.1287084968, 123.0777871712, 123.0268658456, 122.97594452, 122.9086605844, 122.8413766488, 122.7740927132, 122.7068087776, 122.639524842, 122.5722409064, 122.5049569708, 122.4376730352, 122.3703890996, 122.303105164, 122.2358212284, 122.1685372928, 122.10125335720001, 122.0339694216, 121.966685486, 121.8994015504, 121.8321176148, 121.76483367920001, 121.6975497436, 121.630265808, 121.5629818724, 121.4956979368, 121.42841400120001, 121.36113006560001, 121.29384613, 121.2185079952, 121.14316986040001, 121.0678317256, 120.99249359080001, 120.917155456, 120.8418173212, 120.7664791864, 120.6911410516, 120.6158029168, 120.540464782, 120.4651266472, 120.3897885124, 120.3144503776, 120.2391122428, 120.163774108, 120.08843597319999, 120.0130978384, 119.9377597036, 119.8624215688, 119.787083434, 119.71174529919999, 119.6364071644, 119.56106902959999, 119.4857308948, 119.41039276, 119.3789144884, 119.34743621679999, 119.3159579452, 119.28447967359999, 119.253001402, 119.2215231304, 119.1900448588, 119.1585665872, 119.12708831559999, 119.095610044, 119.0641317724, 119.0326535008, 119.0011752292, 118.9696969576, 118.938218686, 118.9067404144, 118.8752621428, 118.8437838712, 118.8123055996, 118.780827328, 118.7493490564, 118.7178707848, 118.6863925132, 118.6549142416, 118.62343597];
289
+ const origCheckpoints = [75, 85, 100, 110, 120, 130, 145, 155, 170, 180, 195, 205, 215, 220, 225, 240, 250, 265, 275, 290, 300, 315, 325, 340, 350, 365, 375, 390, 400, 410, 420, 435, 445, 460, 470, 485, 490, 495, 510, 520, 535, 545, 560, 570, 580, 585, 595, 605, 615, 630, 640, 655, 665, 680, 690, 700, 705, 715, 730, 740, 755, 765, 780, 790, 800, 810, 825, 835, 850, 860, 875, 885, 900, 910, 925, 950, 960, 975, 985, 995, 1020, 1045, 1070, 1095, 1120, 1145, 1170, 1190, 1215, 1240, 1265, 1290, 1315, 1340, 1365, 1385, 1410, 1435, 1460, 1485, 1510, 1535, 1560];
290
+ const origLlcValues = [5.10613632, 6.34789467, 8.73911381, 10.73029613, 14.5449934, 22.34837341, 30.31666565, 41.98610687, 75.32580566, 86.53627014, 127.57717133, 159.00167847, 173.36502075, 178.76280212, 184.86334229, 193.67510986, 199.25164795, 228.7767334, 240.32492065, 266.97781372, 305.96322632, 376.84899902, 436.9670105, 492.9107666, 512.1104126, 476.95147705, 443.83428955, 393.40994263, 370.89782715, 345.58682251, 339.87588501, 318.19216919, 304.3493042, 278.52606201, 281.43041992, 262.92730713, 233.71105957, 260.35620117, 250.76568604, 231.65220642, 230.32301331, 225.39044189, 223.56051636, 218.77920532, 191.20657349, 209.30081177, 205.39248657, 206.72338867, 195.85269165, 198.68582153, 194.47648621, 193.56668091, 183.94613647, 173.23136902, 181.24961853, 167.71347046, 179.11172485, 173.76530457, 171.16815186, 165.9519043, 173.23893738, 173.21461487, 170.97019958, 169.65991211, 168.18649292, 159.64949036, 163.12724304, 163.90168762, 163.40809631, 161.45265198, 159.70140076, 158.59407043, 157.60081482, 157.48953247, 151.47399902, 149.11282349, 151.18455505, 143.71765137, 144.29258728, 143.88168335, 145.63638306, 144.1882782, 142.82077026, 139.4359436, 139.22328186, 136.65736389, 137.5300293, 135.44386292, 134.45753479, 133.65483093, 132.76290894, 129.91267395, 130.78648376, 119.69089508, 127.99781799, 127.99358368, 125.92536163, 125.94473267, 124.24897766, 122.97594452, 121.29384613, 119.41039276, 118.62343597];
291
+ const validRange = [75, 1560];
292
+
293
+ // Image storage from ZIP extraction
294
+ let imageDataUrls = []; // Will store data URLs for each image
295
+ let imagesExtracted = false;
296
+
297
+ // State
298
+ let currentFrame = 0;
299
+ let isPlaying = false;
300
+ let playInterval = null;
301
+ let fps = 5; // frames per second
302
+ let playSpeed = 1000/fps; // milliseconds between frames
303
+ let repeatMode = true; // repeat by default
304
+
305
+ // DOM elements
306
+ const img = document.getElementById('actionImage');
307
+ const slider = document.getElementById('frameSlider');
308
+ const frameInfo = document.getElementById('frameInfo');
309
+ const playBtn = document.getElementById('playBtn');
310
+ const currentLLCEl = document.getElementById('currentLLC');
311
+ const minLLCEl = document.getElementById('minLLC');
312
+ const maxLLCEl = document.getElementById('maxLLC');
313
+ const speedInfo = document.getElementById('speedInfo');
314
+ const repeatBtn = document.getElementById('repeatBtn');
315
+ const fpsSlider = document.getElementById('fpsSlider');
316
+
317
+ // Loading elements
318
+ const loadingOverlay = document.getElementById('loadingOverlay');
319
+ const mainContent = document.getElementById('mainContent');
320
+ const progressBar = document.getElementById('progressBar');
321
+ const progressText = document.getElementById('progressText');
322
+
323
+ // Function to format number with SI prefixes
324
+ function formatWithSI(value) {
325
+ const prefixes = [
326
+ { value: 1e-12, symbol: 'p' },
327
+ { value: 1e-9, symbol: 'n' },
328
+ { value: 1e-6, symbol: 'µ' },
329
+ { value: 1e-3, symbol: 'm' },
330
+ { value: 1, symbol: '' },
331
+ { value: 1e3, symbol: 'k' },
332
+ { value: 1e6, symbol: 'M' },
333
+ { value: 1e9, symbol: 'G' }
334
+ ];
335
+
336
+ const absValue = Math.abs(value);
337
+ let selectedPrefix = prefixes[4]; // Default to no prefix
338
+
339
+ // Find appropriate prefix
340
+ for (let i = 0; i < prefixes.length - 1; i++) {
341
+ if (absValue >= prefixes[i].value && absValue < prefixes[i + 1].value) {
342
+ selectedPrefix = prefixes[i];
343
+ break;
344
+ }
345
+ }
346
+
347
+ // Handle largest values
348
+ if (absValue >= prefixes[prefixes.length - 1].value) {
349
+ selectedPrefix = prefixes[prefixes.length - 1];
350
+ }
351
+
352
+ const scaledValue = value / selectedPrefix.value;
353
+ const rounded = Math.round(scaledValue * 1000) / 1000; // 3 decimal places
354
+
355
+ return rounded.toFixed(3) + selectedPrefix.symbol;
356
+ }
357
+
358
+ // Calculate LLC stats (only for valid range)
359
+ const minLLC = Math.min(...validLlcValues);
360
+ const maxLLC = Math.max(...validLlcValues);
361
+ minLLCEl.textContent = formatWithSI(minLLC);
362
+ maxLLCEl.textContent = formatWithSI(maxLLC);
363
+
364
+ // Initialize plot
365
+ function initPlot() {
366
+ const trace1 = {
367
+ x: validCheckpoints,
368
+ y: validLlcValues,
369
+ type: 'scatter',
370
+ mode: 'lines',
371
+ name: 'Interpolated LLC',
372
+ line: { color: '#1f77b4', width: 2 },
373
+ hovertemplate: 'Checkpoint: %{x}<br>LLC: %{y:.3g}<extra></extra>'
374
+ };
375
+
376
+ const trace2 = {
377
+ x: origCheckpoints,
378
+ y: origLlcValues,
379
+ type: 'scatter',
380
+ mode: 'markers',
381
+ name: 'Actual Data Points',
382
+ marker: {
383
+ color: '#ff7f0e',
384
+ size: 6,
385
+ symbol: 'circle'
386
+ },
387
+ hovertemplate: 'Checkpoint: %{x}<br>LLC: %{y:.3g}<br>(Actual)<extra></extra>'
388
+ };
389
+
390
+ const trace3 = {
391
+ x: [validRange[0]],
392
+ y: [validLlcValues[0]],
393
+ type: 'scatter',
394
+ mode: 'markers',
395
+ name: 'Current Position',
396
+ marker: {
397
+ color: '#d62728',
398
+ size: 10,
399
+ symbol: 'circle'
400
+ },
401
+ hovertemplate: 'Current: %{x}<br>LLC: %{y:.3g}<extra></extra>',
402
+ visible: false // Initially hidden
403
+ };
404
+
405
+ const layout = {
406
+ title: `Local Learning Coefficient vs Checkpoint (Range: ${validRange[0]}-${validRange[1]})`,
407
+ xaxis: {
408
+ title: 'Checkpoint',
409
+ range: [validRange[0] - 10, validRange[1] + 10] // Slight padding
410
+ },
411
+ yaxis: { title: 'Local Learning Coefficient' },
412
+ hovermode: 'closest',
413
+ showlegend: false,
414
+ margin: { l: 60, r: 20, t: 60, b: 60 }
415
+ };
416
+
417
+ Plotly.newPlot('llcPlot', [trace1, trace2, trace3], layout, {responsive: true});
418
+ }
419
+
420
+ function updatePlot() {
421
+ const currentLLC = allLlcValues[currentFrame];
422
+
423
+ if (currentLLC !== null && currentFrame >= validRange[0] && currentFrame <= validRange[1]) {
424
+ // Show the current position marker
425
+ Plotly.restyle('llcPlot', {
426
+ 'x': [[currentFrame]],
427
+ 'y': [[currentLLC]],
428
+ 'visible': [true]
429
+ }, [2]);
430
+
431
+ // Update current LLC display
432
+ currentLLCEl.textContent = formatWithSI(currentLLC);
433
+ } else {
434
+ // Hide the current position marker and show "No data"
435
+ Plotly.restyle('llcPlot', {
436
+ 'visible': [false]
437
+ }, [2]);
438
+
439
+ currentLLCEl.textContent = "No Data";
440
+ }
441
+ }
442
+
443
+ function updateImage() {
444
+ if (imagesExtracted && currentFrame < imageDataUrls.length && imageDataUrls[currentFrame]) {
445
+ img.src = imageDataUrls[currentFrame];
446
+ }
447
+ slider.value = currentFrame;
448
+ const llcStatus = allLlcValues[currentFrame] !== null ? `Checkpoint ${currentFrame}` : `Checkpoint ${currentFrame} (No LLC data)`;
449
+ frameInfo.textContent = `Frame: ${currentFrame} / ${allCheckpoints.length-1} (${llcStatus})`;
450
+ updatePlot();
451
+ }
452
+
453
+ function setFrame(frame) {
454
+ currentFrame = Math.max(0, Math.min(allCheckpoints.length-1, frame));
455
+ updateImage();
456
+ }
457
+
458
+ function nextFrame() {
459
+ setFrame(currentFrame + 1);
460
+ }
461
+
462
+ function prevFrame() {
463
+ setFrame(currentFrame - 1);
464
+ }
465
+
466
+ function togglePlay() {
467
+ if (isPlaying) {
468
+ clearInterval(playInterval);
469
+ playBtn.textContent = '▶ Play';
470
+ isPlaying = false;
471
+ } else {
472
+ playInterval = setInterval(() => {
473
+ if (currentFrame >= allCheckpoints.length - 1) {
474
+ if (repeatMode) {
475
+ setFrame(0); // Loop back to start
476
+ } else {
477
+ // Stop at end
478
+ clearInterval(playInterval);
479
+ playBtn.textContent = '▶ Play';
480
+ isPlaying = false;
481
+ }
482
+ } else {
483
+ nextFrame();
484
+ }
485
+ }, playSpeed);
486
+ playBtn.textContent = '⏸ Pause';
487
+ isPlaying = true;
488
+ }
489
+ }
490
+
491
+ // Convert slider position (0-100) to FPS (1-60) on log scale
492
+ function sliderToFPS(sliderValue) {
493
+ // Map 0-100 to roughly logarithmic 1-60 FPS
494
+ // Using exponential mapping: fps = 1 + (60-1) * ((e^(x/25) - 1) / (e^4 - 1))
495
+ const normalizedValue = sliderValue / 100; // 0 to 1
496
+ const expValue = Math.exp(normalizedValue * 4); // 1 to e^4
497
+ const fps = 1 + (60 - 1) * ((expValue - 1) / (Math.exp(4) - 1));
498
+ return Math.round(fps);
499
+ }
500
+
501
+ // Convert FPS back to slider position for initialization
502
+ function fpsToSlider(targetFPS) {
503
+ // Inverse of the above function
504
+ const normalizedFPS = (targetFPS - 1) / (60 - 1);
505
+ const expPart = normalizedFPS * (Math.exp(4) - 1) + 1;
506
+ const logValue = Math.log(expPart) / 4;
507
+ return Math.round(logValue * 100);
508
+ }
509
+
510
+ function updateFPSFromSlider() {
511
+ fps = sliderToFPS(parseInt(fpsSlider.value));
512
+ playSpeed = 1000 / fps;
513
+ updateSpeedDisplay();
514
+ if (isPlaying) {
515
+ togglePlay();
516
+ togglePlay();
517
+ }
518
+ }
519
+
520
+ function updateSpeedDisplay() {
521
+ speedInfo.textContent = `${fps} FPS`;
522
+ }
523
+
524
+ function toggleRepeat() {
525
+ repeatMode = !repeatMode;
526
+ if (repeatMode) {
527
+ repeatBtn.textContent = '🔄 Repeat';
528
+ repeatBtn.style.backgroundColor = '#007bff';
529
+ } else {
530
+ repeatBtn.textContent = '⏹ Stop at End';
531
+ repeatBtn.style.backgroundColor = '#dc3545';
532
+ }
533
+ }
534
+
535
+ function updateRepeatDisplay() {
536
+ if (repeatMode) {
537
+ repeatBtn.textContent = '🔄 Repeat';
538
+ repeatBtn.style.backgroundColor = '#007bff';
539
+ } else {
540
+ repeatBtn.textContent = '⏹ Stop at End';
541
+ repeatBtn.style.backgroundColor = '#dc3545';
542
+ }
543
+ }
544
+
545
+ // Event listeners
546
+ slider.addEventListener('input', function() {
547
+ setFrame(parseInt(this.value));
548
+ });
549
+
550
+ fpsSlider.addEventListener('input', updateFPSFromSlider);
551
+
552
+ // Keyboard controls
553
+ document.addEventListener('keydown', function(e) {
554
+ switch(e.key) {
555
+ case 'ArrowRight':
556
+ nextFrame();
557
+ break;
558
+ case 'ArrowLeft':
559
+ prevFrame();
560
+ break;
561
+ case ' ':
562
+ e.preventDefault();
563
+ togglePlay();
564
+ break;
565
+ }
566
+ });
567
+
568
+ // ZIP download and extraction functions
569
+ async function downloadAndExtractImages() {
570
+ try {
571
+ console.log(`Downloading ZIP file: ${zipFilePath}`);
572
+ progressText.textContent = 'Downloading image archive...';
573
+ progressBar.style.width = '10%';
574
+
575
+ // Download ZIP file with progress tracking
576
+ const response = await fetch(zipFilePath);
577
+ if (!response.ok) {
578
+ throw new Error(`Failed to download ZIP: ${response.status} ${response.statusText}`);
579
+ }
580
+
581
+ const totalSize = parseInt(response.headers.get('content-length') || '0');
582
+ let downloadedSize = 0;
583
+
584
+ const reader = response.body.getReader();
585
+ const chunks = [];
586
+
587
+ while (true) {
588
+ const { done, value } = await reader.read();
589
+ if (done) break;
590
+
591
+ chunks.push(value);
592
+ downloadedSize += value.length;
593
+
594
+ if (totalSize > 0) {
595
+ const downloadProgress = Math.min(50, (downloadedSize / totalSize) * 50);
596
+ progressBar.style.width = `${downloadProgress}%`;
597
+ progressText.textContent = `Downloading: ${Math.round((downloadedSize / totalSize) * 100)}%`;
598
+ }
599
+ }
600
+
601
+ progressText.textContent = 'Download complete, extracting images...';
602
+ progressBar.style.width = '60%';
603
+
604
+ // Combine chunks into single array buffer
605
+ const zipArrayBuffer = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0));
606
+ let offset = 0;
607
+ for (const chunk of chunks) {
608
+ zipArrayBuffer.set(chunk, offset);
609
+ offset += chunk.length;
610
+ }
611
+
612
+ // Extract images from ZIP
613
+ const zip = await JSZip.loadAsync(zipArrayBuffer.buffer);
614
+ const imageFiles = Object.keys(zip.files).filter(name => name.endsWith('.png')).sort();
615
+
616
+ console.log(`Extracting ${imageFiles.length} images from ZIP...`);
617
+ imageDataUrls = new Array(totalImages);
618
+
619
+ for (let i = 0; i < imageFiles.length; i++) {
620
+ const file = zip.files[imageFiles[i]];
621
+ const blob = await file.async('blob');
622
+ const dataUrl = await new Promise(resolve => {
623
+ const reader = new FileReader();
624
+ reader.onload = () => resolve(reader.result);
625
+ reader.readAsDataURL(blob);
626
+ });
627
+
628
+ imageDataUrls[i] = dataUrl;
629
+
630
+ // Update progress
631
+ const extractProgress = 60 + (i / imageFiles.length) * 35;
632
+ progressBar.style.width = `${extractProgress}%`;
633
+ progressText.textContent = `Extracted ${i + 1} / ${imageFiles.length} images`;
634
+
635
+ // Yield control occasionally to keep UI responsive
636
+ if (i % 50 === 0) {
637
+ await new Promise(resolve => setTimeout(resolve, 10));
638
+ }
639
+ }
640
+
641
+ imagesExtracted = true;
642
+ console.log(`Successfully extracted ${imageFiles.length} images`);
643
+ onAllImagesLoaded();
644
+
645
+ } catch (error) {
646
+ console.error('Failed to download/extract images:', error);
647
+ let errorMsg = error.message;
648
+
649
+ // Provide helpful message for common local file access issues
650
+ if (error.message.includes('Failed to fetch') && window.location.protocol === 'file:') {
651
+ errorMsg = 'Cannot load images when opening HTML file directly. Please serve via HTTP (e.g., python -m http.server) or deploy to GitHub Pages.';
652
+ }
653
+
654
+ progressText.textContent = `Error: ${errorMsg}`;
655
+ progressBar.style.backgroundColor = '#dc3545';
656
+ throw error;
657
+ }
658
+ }
659
+
660
+ function onAllImagesLoaded() {
661
+ progressText.textContent = `All ${totalImages} images ready! Starting viewer...`;
662
+ progressBar.style.width = '100%';
663
+
664
+ // Small delay to show completion
665
+ setTimeout(() => {
666
+ loadingOverlay.style.display = 'none';
667
+ mainContent.classList.add('loaded');
668
+
669
+ // Initialize the app
670
+ initPlot();
671
+ updateImage();
672
+
673
+ // Set initial FPS slider position for 5 FPS
674
+ fpsSlider.value = fpsToSlider(5);
675
+ updateSpeedDisplay();
676
+ updateRepeatDisplay();
677
+
678
+ console.log('LLC Viewer ready!');
679
+ }, 500);
680
+ }
681
+
682
+ // Start ZIP download and extraction when page loads
683
+ window.onload = function() {
684
+ downloadAndExtractImages();
685
+ };
686
+ </script>
687
+ </body>
688
+ </html>
llc1_images.zip ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3e145e4a27d4acfc41a88d3b8dc13c0b285c9d9607f52abdbf34abfc9c13333d
3
+ size 2551426