-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1870 lines (1759 loc) · 138 KB
/
Copy pathindex.html
File metadata and controls
1870 lines (1759 loc) · 138 KB
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<title>write</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>✎</text></svg>">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#FFFFFF">
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Libre+Baskerville:ital,wght@0,400;0,700;1,400&family=Inter:wght@400;500&display=swap" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/docx@8.5.0/build/index.umd.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script>
<style>
/* BULLETPROOF: Prevent ALL horizontal overflow */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
max-width: 100%;
}
/* Elements that need their natural width */
html, body, #root, textarea, input, button, select {
max-width: none;
}
html {
height: 100%;
width: 100%;
overflow: hidden;
overscroll-behavior: none;
background: #FFFFFF;
touch-action: pan-y;
}
body {
height: 100%;
width: 100%;
max-width: 100vw;
margin: 0;
padding: 0;
overflow: hidden;
overscroll-behavior: none;
background: #FFFFFF;
touch-action: pan-y;
}
#root {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
max-width: 100vw;
overflow: hidden;
background: transparent;
touch-action: pan-y;
/* Safe area insets */
padding-top: env(safe-area-inset-top, 0px);
padding-left: env(safe-area-inset-left, 0px);
padding-right: env(safe-area-inset-right, 0px);
padding-bottom: env(safe-area-inset-bottom, 0px);
}
#root > div {
width: 100%;
height: 100%;
max-width: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
}
:root {
--page-padding: 48px 24px;
--max-width-home: 280px;
--max-width-write: 680px;
--max-width-done: 440px;
--title-size: 22px;
--goal-value-size: 64px;
--stat-value-size: 28px;
--editor-font-size: 18px;
--editor-padding: 48px 40px;
--header-padding: 28px 40px 0;
--footer-padding: 0 40px 28px;
--gap-large: 56px;
--gap-medium: 40px;
--gap-small: 16px;
--button-padding: 14px 28px;
--stats-gap: 36px;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.draft-indicator { animation: pulse 2s ease-in-out infinite; }
@media (max-width: 768px) {
:root {
--page-padding: 32px 20px;
--max-width-home: 100%;
--max-width-write: 100%;
--max-width-done: 100%;
--title-size: 20px;
--goal-value-size: 52px;
--stat-value-size: 24px;
--editor-font-size: 16px;
--editor-padding: 32px 20px;
--header-padding: 20px 20px 0;
--footer-padding: 0 20px 20px;
--gap-large: 40px;
--gap-medium: 32px;
--gap-small: 12px;
--button-padding: 12px 24px;
--stats-gap: 24px;
}
}
@media (max-width: 480px) {
:root {
--page-padding: 24px 16px;
--title-size: 18px;
--goal-value-size: 44px;
--stat-value-size: 20px;
--editor-font-size: 15px;
--editor-padding: 16px 16px;
--header-padding: 12px 16px 0;
--footer-padding: 0 16px 12px;
--gap-large: 32px;
--gap-medium: 24px;
--gap-small: 10px;
--button-padding: 10px 20px;
--stats-gap: 16px;
}
}
@media (max-width: 380px) {
:root {
--page-padding: 12px 8px;
--title-size: 16px;
--goal-value-size: 36px;
--stat-value-size: 18px;
--editor-font-size: 14px;
--editor-padding: 8px 8px;
--header-padding: 6px 8px 0;
--footer-padding: 0 8px 6px;
--gap-large: 24px;
--gap-medium: 16px;
--gap-small: 8px;
--button-padding: 6px 12px;
--stats-gap: 12px;
}
}
@media (max-width: 320px) {
:root {
--page-padding: 8px 6px;
--editor-font-size: 13px;
--editor-padding: 6px 6px;
--header-padding: 4px 6px 0;
--footer-padding: 0 6px 4px;
--button-padding: 4px 8px;
}
}
/* Allow text selection in textarea */
textarea {
-webkit-user-select: text;
user-select: text;
touch-action: pan-y;
}
</style>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
const { useState, useEffect, useRef, useCallback, useMemo } = React;
const SOUNDS = {
key: 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjYwLjE2LjEwMAAAAAAAAAAAAAAA//OAwAAAAAAAAAAAAEluZm8AAAAPAAAADgAADD0AISEhISEhITMzMzMzMzNEREREREREVVVVVVVVVWZmZmZmZmZ3d3d3d3d3iIiIiIiIiJmZmZmZmZmZqqqqqqqqqru7u7u7u7vMzMzMzMzM3d3d3d3d3e7u7u7u7u7/////////AAAAAExhdmM2MC4zMQAAAAAAAAAAAAAAACQDaQAAAAAAAAw9rpdX3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/zgMQAAAADSAAAAABMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/84LEOwAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/zgsQ7AAADSAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVfAENgdfjsgB3UIGDD+Fp6X2AGAAYIUAwQ/D2QtbBvB+0G/h7wdIDbD63TUwbYMwBImIiAUP/t+BjDwG//OCxDsAAANIAUAAAJCAyoaaHLi5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',
space: 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjYwLjE2LjEwMAAAAAAAAAAAAAAA//OAwAAAAAAAAAAAAEluZm8AAAAPAAAADAAACpsAJycnJycnJyc6Ojo6Ojo6Ok5OTk5OTk5OYmJiYmJiYmJidnZ2dnZ2dnaJiYmJiYmJiZ2dnZ2dnZ2dnbGxsbGxsbGxxMTExMTExMTY2NjY2NjY2Njs7Ozs7Ozs7P//////////AAAAAExhdmM2MC4zMQAAAAAAAAAAAAAAACQDNwAAAAAAAAqbmd1hZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/zgMQAAAADSAAAAABMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/84LEOwAAA0gAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/zgsQ7AAADSAAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVeogoECGggAE0A4iDThhUWP8DOjwtLHM/DbA4sLT/7DvLIuMLJ/9ZuF7xZAj4DADAMkA/m6JuV2TcBQU//OCxDsAAANIAUAAAAZI4BngwARo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',
return: 'data:audio/mp3;base64,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soT1MOEa61Rk0FOQrQ1lrTxoB1q6TcioULpAs5gZYNw3fgmOw4sKzd9i7DT2QvTCmYKpLurRW3SvxfsqVutURDRDQEN3eCjttxg2CYTDFFEYBwl9dxqSBIZtZfMbnZtdsdon6f6WOs/tSxT500st5Y6r42JZalL934Ol9uxLolS0tfDWFq1amcOc/v/zX0ne5/RYUuW7dfdJnX3cpqHDfLNzW//74GR9gAgtZk7+a0ABDbB6D8zggiOd3T35rRIECrunPzGQQd4/Vxs7uf/+v/9YOAEis0RDMgALx/rxcaqOLjU5I4HEslmXrhxy4SIqxaVWW9AEGl5zR5iBqWREe8NKAkJ5uLAD7zEneGCnT+p/fr6sRFgUbaJVevcWpIzKG/UKdSdkTc5FlLYTKZfBjtvW6bkTLA5LFoeUtZCsC5N6XZP+376SmUSauvAKAEYVDLNXNaUoUeViut/clchhcRhdKwdynyr3r9WWRhl0PQbI5XSdcVg1PM0tqx3msafCc1fuz/KXXyCGqWpfjeNXtNUw3yxdyt6wpMdQ537fXlg6BIAmnHjdt2KducjjENQb+c7SzVNS/S1bsppdyr99/f/v/5//////////////rf//////////////95aB52XAAAHIUEJBJIEptesxLJYEPMaNaCPTQQcAiEHABKwcZgZdsdBSY1aUcDIIDJ8kTwseCggIILyCyISJFvjQjDBJEkmuIThCCNKDUPMKvImpoyJZozh9K1vFgRIFKmGvgLAINcQmUGBNJ7gsgm+zZQYQCGww4vRhgWKA4UqRia12cOYAhymLXWsP7GWfxBiogAGGAOwgwjgzNGZlSBF4CEM6UB2oLTldtv5XTgoQ4i70bHIldTF9sane75PU9W7n2/TXrGOOErp5uN54UVzKHr859+1zl6/ds0uWNyt2KWb8UpN46uW6+E/zeG8b/eWpnPurON7Pnd44f2pz/x+xnu3uXxunosf/P8P/P//n/r//////////97x5q/d//vcACAGgSIKjEwDtc5kqTQ0En+/YqpewwRRiCXkZQThkQkF/WfUiVhqYXiq1oEfNfsXb6CY84R1kQqbvYxJjbtPvGaaCpT3df2+aUm+/GaYRVBHUWmjoNAy2G1aWVyqvFolVXFHI/GJOyB+3nex25cvtTeAn9hlaTc0OLGIxKKifjDGCLStuXD8uT3Z3Gqryxy0/Dcp2zPPlAs/PT8Izj05F5HnKMOwprEUp9S2khqepKOaiValy5KpXMzNWjrPtPXsJmOTrbyukjdH/cd0neX98v4//w7cs161PSV62rNJ2/c59jl23dht24vAl7v5/z/////////////////w3jhcyFowmACLpnNV7KbarSYaTSJBhsxAqKjZw05AxgMEJBIoKBDLFTOh0QTQHCNiSiQwSSQTAKSchr0vJDsajhl2zqVp7rHQRISxEJloVEyEBnZAqswAhBNS2GkgV0ytrLNAcaUu04EAM5TzeZlrywuBo0up3oXHlOofa64Lyq/eBmUy4s71vHvjjdHKWGfqXyv5dTSh9LtejicVpJlml/PGeoL0BNxYNXqUjlw/B0edxZ8FSmNSmkp5Q8SUe5v/74GRcAAkBhEzuawADFrCJnczgAGbF1TG5zIAEsEFlszOAASSuzPRabfatdl0uo8YxAjX+X612biNLqauWLduxav3tZXJ29219iS2LVat+VathlXt2prne4dz5f1n37UuleWHd56x3rL8t/j+NNLf//////////1jzH9f//vn//////////93YM0kSGCKV/7PeBSF6BIJptIgk4MBGKQ7UkLhwVETeScGgDBCBVIwQiXMLMFRzGVBKRk6CUvkwtOCwyvilUMJFqjFgIrUkSkb11rGHLUk5x9W6LSrvfynqU8mra7/zVND2MZjUgeBrcKfZstPF3ciNuAIjnALXYThQYdpWlsrg90Lle1JnSU3lEYh+PzESbsMyVjsQ8/MFxeKvAIYJNwtqlR0ZVDU1BbXodbrHXl1eiDku7DvZbPS2pIIbrwbfqS6A4ZpcIAhyah6lrUdnCalTZuPNIokxB18rVStGsJqVPJKpLTy9Y0Utb+tvVqtyxztG0mzrLe9fv/y13/7ukz///////////8//Wv7/61///////////d1EUmAyqfa+R7zt2yy5yNxNAk2ZcTbKGMe1gzMNjO15MdIsygjDCqNM0kglMQ0IjWw4WkZPAQsqzEodAJiIAIASACkYSINYZ6Y8AUEFBSI0whQzxaQ4W1IBFXF2lZj3IxG6OqRfgQICYi6rAFLV2CQJpkjgwdMmO6xcFXgkgPCJEJfxBEhdCQDS05x4tPcMFZ81NnKy1gEBqXL5EpBUBWIJDsAUYYwnBXZLG4w2ymLBISnX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0mFmDHtAcY6scFthk8bcKVg+IKvhmhFa0qjY0BJrpPnucy6Xd1mOhB7QkKZDTgNjLAanUKi1OwspOmHGWB64lk9juCogp7Dng0XrSbJoqEyX7bIpjeP+OoldeNv4gxuwydhjPTubFphauqlNGcKpNnww5botK2jQXdZ210oTeOY1kKX3ji/hsyriaftUVnQlSuts0NWwt6y9zSLI5zQo+/dzrjdIixrholPfwWCmXmaVaIl2ZndkU7ZIs5CoxMzCCSqAC4FUJwDIstJAbaoSyIEMlFhEj01CAXDd1C1gsfXAzWPKdrpRlZFA7dEERc9CB15Q7j7rpijc2kuwy95UT0g5xnThqncuPP07K1pI3sXUwf/74GQxgAikiNj+awAA/zEbT8y8kCLyF2n5jAAEbcPtfzWQCSPcuRUkCvvXlNH2SsApqB/F/sgkIKQzm1JKtScm4cvzmeMtq9QHoZtXij5LDxepKquVSN27sR1vmG7Wed2nrRSR840hllL9ucwjNDPyeU5Rrm8Pvy6VYXe01JNy+WUliWY//1bncbVzeq+/+1v5ZBNHapL9LnUufXz/GfnJt31YInfp5tx46y+Lyt2//9f//////////////////////////////////b/DDCxz6lipezOdZ8hrqKZnFClmiraBRDhibuAR4TEaaw1R+EribkhIbWjQd5HX7ZCD9OUpDhP5CMot6dhym5K4HP7auzVu1x84iSuG2ZQOMUqAVkS1IllZBUxlgjBUJ06ZV0Mk1HF4nGhVqdbhk/niqISRRw0POZVj+OY/VAvOKjZy2OCEpOPGRCsV0y2zmKjlM0oTCVsZQJMsaVh0o2PMNTFiG3OR4Xy3ttmRDUVKwVjePZ52TN3kSJGVnPFaq8bGRlaZ2FjxmZWMiHJwhqbQl/mRSRlZmSI8eQzImiGWzs7i/vdjr9Z/z/v4x///////8f/P18738f//////+PEpSA81mRkhRLu0zFREU9mzGhydSSRJktog0iOINM4o0zYIIW1c0UKSJMIi+wcZcACEGGRDRzHlLOYiW6W9hG2AP45azGyv8XyZulkzZPinViqtbeBZkPMKkbgNiUtWO4EMM2XTKkhm5KlvuM5kOtcXemEvqaj7jOSo2mnAFilcmSQZBTWWuthhtnKf6gUfisGxutH4xMT0d9yYZdaDqLcqa1ljR0sruXMe4UkZytT1i1dr15Jczscsv78v7qg1ux+60ju52KS5TZWrD30cqfqxYpIhWicw/MAzUBXItTVJVM97jnI7EqjFnKihFe9XtSvvNVKbOt3WVbX5a7z91dZVsda//////////z/+09Pnvv83//////////+W9/qztEdy7d5Tt8fUkchNFyqBCUCwIogOBZ0ZvWgCvK0MyhKwYQ/MufZAxbGPRmD29MVDdgNCQ+3E0LLkxYtX6DK/zF9mJR1Y32dXbPw3KZRq/DUPxWZqO7K5TfylcQijSYXDTdnSXUOCU9mNTz6tdzrXJJUdJnzw2Jc3aQQe7E5N5R685TAnVb6Lv97qy+tKIkyB2X+lLvw7IIvKYLsTjwxFxpiU3dV+6h6KYXYarV703f3E4IghzIzSw7EX1sZSR3WctYkj7UW5iH3w19ugrT1WBaarL7NJG3zt0v1p6TQmcvXWVSp7IlFXjnco1F4lKaDKxf3X5jul1TTVXGp//////////jl/fx/Wtdx1//////////S7wld+D6fcvxng6rvbq6iGbVFIgoqdUv/74GQGAAUXYFn/YWAAoYzK/+wkAFLxmW3sMHbCcrNs/YMluNAITBAu4MBBEEJCNBe8vWZyontJQnstirrEESA0HwgDA4NryGaag5AhCJCyTwAgGS1puP4gh6Bgn2uu81TeUkEfP3r3ENfMONDRzjhYTDQmmLZq4q/qq6ls0cqLlu/u45bzTGNZETL52vu66qdnPMQoxe45e2Zu9DrqmP3xUVLWr2qf0Yh7GHOZVcvYTB8egACBDrfY+5U3n7TKyNUQAABAreOEXEgdDQVYPDYoglZ4phYsWas32UoQ2H7CmoDLj2QTGo2v89zqGQl6+sQh8/9//wz3q5GjeiqEP/v/9zpZEktNGXXotrEECCK6BhjNfKDBpTI7rVyX8klNlP1alSn1W0mRHNZAgZOLlzabpv2k4swKIFPUUxWfbaufZTqDnKquNt67MufzwhBhynW8Z5oYmTlm/++CARc7dXdQz3OSIliOCmoyhhgoQFYLzC0kN2fP2gqr1TVSK6X8Ym6kutNKmLF6WuRIZZKbb8WY/P0jPXrmpfbDNwmtyp//smOhNPTzdctZMdoqleI/2Fe0DYnLGVWKMQcO7OsEsQYCDCwNyK8OQv4WTNq5oX3MrkwjhsySLMzO2Ty/3PIz2iqXSCSMVwMlNbK7ddFzfNscxv8dc/XbMQraJIgArnRSo4HUQOrHaXULDL7KqllXdwigAIFoncCb+8bEiQY9/BeNOO1rzO9/Mynn+3x4fgWy3Um3JbWRR3/6vvuvqaqFhh0pQTZZtWaj2F2mE3EsJVtNvu4yYvqoz+rwlu5rKu4eQohhSoWzmYxJqXU7qWVZyMVShSifbTkorK9hk5NSfWZfztU9eMgYCIuJHM0NzkUYmrmpy6llbIJQApOAxDD3FxAqNH5dZgAX5FDiQmIsuUdFDvDKi1FDQurp8qlho7cWl4zFhaNKCK1dmGaMAsO08uLS7951hfb2pbZf2laTZCeOXoz96jXIWWVXioduPZD3rlUdWD9b3/7n1D7laUM1XJSy1X1/puuBRiLO5vnOYImKUYxDqrsSs7XNUII4nEyn5CRZaXei5DtFTNPZnAIyAAwODNSdDjABeK2RefpKNLeA4IcuxNVJweJCM/8/S7PXbLp2paSbYfQUaRIDaUkan8x3M3O2qlSih6E+gY5tZkR88iwhaUM+Unsu0tNUs35Wz3utmkrgJ7wecVRRLf+8bUN6k01FPJ3fkN/b+IKIAieUEhrpFKmhh72Pd3HXSeVkXeRCnG3YgELHGjEJEAxl0Ah4RAgolCUsOv5CagTSETzdpsk2BoQWbkse3EU1aeogQ8jsoqHodjLOnzZw7x0SfVJheRjqShzPVSh6aEK7gd10WHVkQTJXJKKLntLXNP172GBPW//7wGTBgASxZdn7DBxwhwwLLzwmiBLdhWX1lYACHq8svrCAAErmnzU/1/1+65r+HXV9Xx82365r911t7/j+/uptvNOfDY6lKoez2cdtSA4USgc1f+rNm8mZeFczqRCS8ATQ5Chr/4TypYXR01PYsRuQzVYdPd0Le8y3UcV139DWgPBBDw+EF3mv57J5mvOFkB4QYEgCwjFCNXe1fwcJTBZyQ9KcdYtZXFsvlWULXUXUdysR3sWpJ0f8sbnipS61u00VcN/HQ+YhRglJg6p2r9YJYkGiIo0oWDd+n/xlk4s57OZockYXxuDqKQQCAAHk0JtIIkFGfHG2WDWgyAoDLUBAUICM6YIIOlDwfDLTCCoHeESW5gZQJesoDhVKlW8rtEAk/3bedd04ztG9gMSch1UaWzw4iQnIoYMDSCfKCmuRZRWYZUwiPVGxw9HIpIIMpYIbLI7NqIyqNRiI12uWKeJ00shxo2ceZdK4/HKNd3Gd0cYlcvwsxSlnZBA1Wah50H/g2fldWdbJH3fjeeFJ8YjFJYyiFqPTsAzr6s6palivurSSzCHL0p5Xr4dyeNZRehTScjVNBkph+X4WN09/HeGUowty+ZguDc+9lT/XL9eo1+N9pM6eN3/pLFh/43hjf/X//77j//////////9ixzueH7y1Xq4f/////////xtrkOWF3rHgeURF17EjzGvFXKu8KhIjsbghMCQLAEtmVGhd4I1hhWhqnhzi54GAdJGRBlARKHEAYwRIxB4xp5D4DCVCV5suKobQa1QEsmXQdYdQmisPAKt1WG27sblTgSlC2YYq1ZymwI+qffiGlDGDKGxViShjoQw1umoIEcp9mWyJgrpxqNvy+t9pE3cg+T2LsSobNmB4jRtaoZ2VSHGMLsgS/L7Mqn5dNZxWWzttx3UieMGvZHIOdpr9PapIxqWUlyGuyCOxByr8ohpuMDTdDlEMJn5DSWH07f5u//vgRP8ACXWH1n5rAIMrEPqvzWAAKE4jY/mtggUdw20/NbKAnsLXZAuhYjXKW12kmftXLlBy1nd5TSmA5bH4Fkkmu5y3Dtm84jjy+1G7vc7edz9WK2f1Ocyy1+tf//////////+X/3WOHdd1rX/////////+FP3sofyWSN0HUsO8e1Y2w5zEMibapwJBAB7mETiQAwJAEEzGiyhIcwgZUaY4JAQGUBUsCk4MNhBFFk2yczIlei5jBRkQgipLI6ArbDhYwMSQrQEpzhgOsIkIxBpKJoXHEzFbmXNGZncpX4Z0wqAYyj+1ZkSglC+7cIrHWkQXQuzGGUwLZq2aal+QUEsp4bn51opEXSKAWGLuylJkAFJpbyxK3bMDAcqSkvb1PxLOM8sxHeFvLVNdwx5nny5Yy1hvWX2aZsJgRsDjnGJVccceXWKmeshzABS1f/v/7+gkzIi2H+oAoDdRmMmpmVVMpn412tES97A1LR4IQFBUAYbDzzs6iDpui7u5VBLI4Uj42NdbBH0fgvAqScliqmHb1BKZQ70SRlcbH///////////1vmWvoW7GDqFzP///////////w5nqX59qkIPjUscUptKp9cYQbMo18FQqFATPMUxLWAUEFBJkwI8VCSBgABhjSP5iAyDxkyYEOmmVmQTByVJVPBMZTNeRggY6sfgFEZrzKlVTCRlJ1BEvRszJUiQKMOAqgsYZCiEDd9sq3XCSebHNBwO2NlTEFdQLPRR32QNxiruvs7MxlK7lmW0zaOXF4fiMDyVlRiYbZkLlU0fXiYQdXYjGqXS7BQNlEXt3H2dJu8alUVlcVd3Olv24rOSuGJ2X179eV408rt8tWt0j7PQHEQkMzj/QLSXeyqAmFhaXNECBUAa7Y///lOQAMr1koqjcvZbU63KBnhpY5LaVwbUeFgN+4QsaWVY1SyyMRq5yUzcP25RO/HHEV3D8vryuR4w3auzUfgKH39ZSRDa1e71//////////M2KGKO9L6B4TVEVg/M7X//////////7//ww0uZCrq6rGZiJ90AAEwATKCEilWMgBACcwBDUkWSZupe7LVoZpxyRwTDhggjAtjnaGrS2t5d+z3rCK8ueR7Wvyt+ZK/FuzVtZ4zkxudf21crJ6Lrh2Zqv7LXZxq7y/urtLl/43b1qhYSl8/Vb8/33DDHne7q4axmfz3j+8cNb3+GHN597zGm7v94497/7zq47ww7ViKcqKJ1C6fSZy6WtP9hl+VbLuFnmtd5vm/5vHCI1I1jZrZatZ445d3S0uPccb/f3es473r+5ZZfrLn////63+NVrDrU3NAEFrq6m4dxSfVqJYDGmAAXqc1HALFKZAEdKou9OpLtJVA7MuC8wKBAbUAWkYhhWdOkVJM1//vgRIUABsB0Wf9nQAjK7otP7MwAFsHPZexNnQMPuisxiCPZLx8xNDYyEgK6RoQ4nzpMj5HKKZOmZbPHhzCsgXTVyaSEIg9UWFEipFWL0pHC9Wiak0RJZ1NjhfNC+GxJGzu7KWtT1Mp01oFZJBaKCkk30V1q2Wij799SmpInFIl0LgCeJVKYnnaukiynUktdpsbHzYco6fTIkVjM1LpcJo2MDA0YxLtIvENJ1A4bH1GCkS0yNSq0n/X4uy6jVZFOxkJvIgIjFphEZIoSM4JxiyhHxJNBOhwU0gt01L7T/NchmHKleV18KKaryipfuSzPFkUK7A8hjEvjEdjVbtDSXO393r3cb+FBPX954XtJ0LoU3uyK00WNAuxA6mo6oyprRWcWqtA8i6S96KK20WZ0lJqT+pda9TpJVJOUgOYHHCyTt1s1v70fHEadamfYsfNrVNE1qZtDpNRdBaM+OvbPXWCatmbfObaemc+Zy30AU4Jdx5fv+bIAIAAQMYLQU2Weq0GrL2BkEYkf05GSNLcNa9qTrUd1+JRE33ldJDlB8AUk98Yp+Nyc67dgSGpuvqjl3zNStnbs1L0ryl1FegansY2MreNSmr3becuorlexapimmSgtIEwgJ8pTIyLJRoKdnY1qQPn0kkp1E9qNVrU6SJ1jNTWRUk9SRtpl0nay6iXgG81Ix3Us1SZlpL2pnmiKatOUU0d2M5ahUpZkcu92yrox6nNIrQfKKobvESyoq5wMAnZSi4ye//zZt4ivt5cxQsVnGspoyIHI5jwSYyPMbVSMAAS1jQ2soqvi67hQTVeKGJWy2HJ5l2CNOwMokppsy+49D1M1tk8GkOHAeSxHKGy0nvOncsS0hrPCxAVz2bVvNTLbEZosKPBk1qxRCnzqFXOUaFZhpAf0jYfNsJqV6amaYcKuo3dQmtxckVMySLInnQSRUZoUKVFlfOg2UUv/999zBMxUp1rNH9Jadlu9BN1nHGHxf/13kSzqiGjhSUZgURTx484Q8BXUAiUw8IJQUGgSPKlgcRiIJSBf971Mm4tJYcyhu61X8hp5qjeSom5NU+tr8RWFvUTCezDVkdO2aNX5h1kvmsWd8/VlL2khuOID/MRsjMLEtuElmFmjsEZgDRb16O37xFmZtxdu2aHS7Ukdd3uzDaeR7CiPEiSlSwnGqChw88kJrW1I9THslzmxU+Dg6uxTay65h1PYrcIxBkXD6kfURY1dlotUPljiTaSZy0zBiibUqOqXJ/6iWe3uadz+4q3p2kWOWd2VURxIBIN3DeSy9AKwky4IHCILHS1K0FfKhU2rSlMeDM+HgtoKZ40U2quLz0duqD7EK5dCVlWnVarVq1Fb65tqaUkbLm9i511OqipqSZrOOXwXjfRV23Xq//vARO6ABYNlXvtvbPjRbns/beueEnHPY+0yDcJrsey9lLbYWjPJLSs6StJG6ldaSKS1qrRWz7otVonAbPOWv/+3QXMklsyrXSddbo0nQWktJS0WpPU//+l0XNHU4lodlM5UiHHVyGxiJAA8UarbmZlbIVo0C12gphP+3lA8CnMukkvh/CO1P5UnqCmhV/nFl2RQK6DIqRKamyzdu7XhSKtB6EVvF2XHYx34tkljplFTk4U3pe9q6KNFE6hW67pWQJJSSLaJkgihWgmjTs9SNbeoELYuvdVe6K9jZFkqzy1pLpLc+zHUTBy6mZGyTO6M1sB06Jf/D1WDaWhGVjljIbHFhHH4gIlGDlLtBwWDK2tIkSgrOlMUbmxqdvsziW2n2Wq06BYBw5llQyGSRGlYSsy25LtVZNTZTEPpNFOdyLw9ABB3/bbp/v9fN2qdKZCWhaIaq6n+iarQSWpCneiareeZXcxQU13o2RWpJStH50Dx0RxMpX//mhWWoyczPH3QSOk6zayqzHWZbHVImLUv///zJTaGY2Q0cTBbXT7HVhZTFzaJR0aCpspS3SlR5Z0pSjctlbLdoYnaz0PzPXpTJKSewm525Qyl/WgC4BQVEiIccIVbPV03BdOOD542uGb7pZWfOZUlmQm4F8n67X2OIO1aExoonmRRZa0DdSaB9bVJOk9zFKpbXVR5uABQfLz3R9rVP9apmg5ORZEusoexeVWk9EyTRvMk1HzrWdH///Mea3USQGQASOcgqOTTQMcDQ1gtK0iEVHJRVVRWVpTSaKXP47k/LaSHJ/Gmz7Zwr0l+xTLQbWNSeEPdB12drUjpgzruiy1Ilkr9nmtkkFLQSRazOcL4bIBwAo0Cu3/VWy6mU16SlrZXupbVqoIV3puvr2nR9Aa1oVgsCmmmxp/V9RBFnFh71JBRLComIoaRrR9YtYrDiKKOKk9N//////yGahtrSKIhICI5kDP/+7BE8YAE1HNZewaWKJ4Oax9hDbcUCc9XrNEZonO56vWJozStAARi66aUtDECFJcZ4WiKKrSYbSw8yx+LUZpH4kfZVX3zCX0mGppQx+bU9CX/ajNwiXKSRMqRm655bSAEndWbnk2SqVdFXUsyGNBdhIui/0HvMqdJBJJadloKUnddK7IpI3QVZP61t7ogHHYybpa7f7yw40QjQ9HGCowosFpEGmNBFSM1kRVKGxuraf/////+IFpqzZxyDuEJDpJBUCWSTxW1HGQpFN3GlOSUBgaRrIJGP1S9XJ+LNR34jK8/xuvDac0WISwlEolejVnWLvaW+85exZox0Db/xa8Vdq1OyupGXiiCYQDThRxIv3+i9S0UWZVkVVPW7vfdWqkkl+pVutQ+QMgpJENSLazV3//rUklTXqZSSSbpGRspBbbo1oorWySaNv//81cCoBBQAABwwIKkE04VKKw0+XIAwSnxoJsqIiuouhwcNUteMvEzuxIIlC61JKZZhlTfTxwQxDwbfr9hlfUFNjb2K2bluU4U3e1dnVouEQQ0kjlkS8V3NlFmeMkl00C0dKBAwaGAMsdHQmqtTqorTZamTSY6xgpaLucdmaty+XTRjKkmi6BskpSl7LRZFbqIeBtBBFxyz1kTVVaKP90GSFAb0FiZCtjTBMLimoAkQkoZYjdIoJai16SqHOi//////////FTm3JVImOgASOCilriZaEhOZcTGkyVDgUlgpcWOO0pu2jLoGnqWG4VMZau3qaA45zHWcwOgKFrwf56HGlSjzHVADzpabsedbDI4DIZT9t0uKOM4/pB6BmOQAk6B/3AcuThfQf/7wETdgASwc9XrD6N4w456OmaJ2xR9z0msLpiid7no9YXTFAoXuj2Wgk1lM7Mlv1pVmPqd/etFfSRUYiegNDqFiD8yQMC9NNv/LGtSToqSRZJSRoitJMwdZ6iymagmuhr///qF8k3I6USBiQARzEUFSKDl3iAwkNOwcCsAPFfkCDkDWlB5YsbGTymGexinw3jat9raot4LWIrNYbs+zH6VuynnIzz2m7m0+kPkAYQd3nzziVNQaTHstFaJeIqDeYEacVIqpo2RZbs/Zd11WpXZSs/L7JHDZ62XWtBT/73JgC08nCddJ1P0v+7GLIo0D6nas2IVajK9Vd0mektddSH//+PlqoRYikV1QaoBscGDS4VagKBS1aU2y5SiidLZgQTj0Keb+GXlhb7O7QQ5ddiWSyMTbjPJ//tCezZjsnuwI9dNDqw8gqQ3MNQXfBC82zw0aLl8myMOutCtqpxDTqLjKSMS8CAKAN4GibIps6C0mTu+qggp6la77LMUUm2//v9aRMgUPjyprXTf/60/zvl5otMkcEMYgPFEB2rDOEIP/+aQyZYEzEhUAChy/pdYWFFSEH2CJ7hhTgJ4sMAAFaDGrNuwGKxaLOzYhyzUqOQ/k22eQV7t2qF5V1KRf6BWmKUtbexTM0sdtCIE64TUE2WdQ7cJS2PMnWb361nacvaMHGEFlAE3gb2EPNFzBF00zRabnU9Fd0ueYxWmo+gXXPppqQU/9v/qKYDcSuOp1MX3QTSZNf9DdI0TSdToPNScQXPsD5MBvaGTxAt/4ZI3fKJkIBQAERx0xTcvSXkATyL6OA4Ij+gql0PLzllHprjlLrxc13aeAZDykl3ast7qvSQaCMU4GSvNDUrkFppSY1mrjS446oJ/JJ50ZUaZo62e9ExOsynrQOsdLgx4DkAHSdiUCbQRt+yKKKKKLJbVUX+YlVFqv/r1/ok0A5wKsSEtrdFlot/5gt/qrN8h//uwROsABOpn1HsUHtiqS/o/ZZPFFL3PRezRG2ITrql9g1MEyC09TWhxVLixWCh6qK1LXE//////+BqosZ9m6EApQEo4yxOcIaWoLfFUIchdwY89DeoDPs0qgTwKBQvOQwLnKcM6lreN7uGdibEDVCJTPTdM3K/HlTSbBuYwETST4jAYaDotd+jqSc6aotYvB7IFohIpMqr0kjE2WyOitF/Uks1qKxiSSS0f339Sn/OAKAkDrVf//13/qMbZz//6qodqi0hUQdMCQZHAD/N4ynpzAyQwqGsiMKAAMqLJiNcYDeaoqyzBLlxqGL0rj8ruxx3L+ef5tcKCqGKlUvkjvSdWVQfnO1JZTRykt2kGWoRkMI0amtcwNJgpBb6Fa0jEISAKnJ48tPqpvSL6Tay+kRQrE4ZpGjqWmnY6hdD1qQW+t1JvmHohIp4jNv//rP/32N/7Qe2IA6QQfWeDFE6h7ZCiDkjZ4maECsA2coolXdnae9uwWUFBI4AiH/3ueWH97qV0++9/mGsde3ekWmghp7LUySCqBpqD5S8Zm6ZgaFxBk3RQW6tbtc8LKAt6G+eN/9RMJFzrL5gThkyRcWkzqetRLXQX07Jug9NCprIcuAHAycFoddnQW6C2T76eXv+PsbnuEbMLRCxA0LMVuAiidY9sQoE/8MoZq0m5iQxQBZ4jQJjFdCNAHPQUQClsQ6BYVJIutLKiTw8Iia+E+8kXfyBpPWpqmEql9ml5MywGaJWgI5iNmLtea+rxMLV2kzs8uQ93Iuo0SBjCSMmSWiiZF4njfei2u5cFlgDah7MD6tqqKKK2bejRa19udPbd61O6KC3/+8Bk2IAFC2jTexM22JRNGl9ihr8UVaFF7NDbYte5qLz8o9yqRRRrbSAgSJcZs9Vb+r7T2/fc28eflo0ckAcZ2oBInLI5U4Ui7/qNSdLU0IxRwHr0k2JxTuTxwLs9kNEOKDqC9j3rWL7wLR66w5Rcb9xFSscpWGNNJvftn79rfULG2wmxNGM0X7K3MVoTE+bv/8Wt7aqyQsIhRSI1u65//+OOOruGPcM8aWtjzevy/vMNzTcGrWLdi3bwz3S1rudmxT3pTzHKpFu3M6jpn0BEwgt7aag3jq/M3tat48y3j2UIP5i2Nt0daE/TMND0JnUYHwKhxw8VhuiBUd//////5VVGl2dVM1HcIiHQKRjacVBCE4VKSAY+9qEtE+B5FeYG/8DM6jTuTdaxGM5deltqJWP/CUCPCo22kCw7AmSyqklij0sk8iZGqq0FrEhIX+dVRf6DJ1mQYNCrSqkszOmS6TOpoLAdROSKRjiLGJpFLoWZflzbbbI+JcPFHLLcvk8PVmj3/+IbxjuqFWsNLCzMLlv/0G/pQ2hV///znH/+d6drB5nQ3HadydJQXxzLwLmJIOdPNipLyRaNLIbJRJNKFOM8rTbZTkJ+1Rpqxv/bLtNIShygFByqIOMroqoS5FUgAj2MkL5ons3fOHE03DbOnVLn8lNbCUWZ6kxo5qk3d07hhxE07YX8ftj69KaNtI1SY3aOzTXsu71dyijHufrHv5Xb+dXf/u1euUle9nSCpJ/hOPMVe4y/l/esMTLj1XC5hUzvxlaeRomsiUwk4UqSIK0kjFkE/J4W9XtqiTqWcNbq2sR+qpthQ2CX/+oyXF9WW1d3p6apvV8f5sfbif5c15GFvkV6rOAyzwONDFf3/ibZIDenGN4sIW4K/clN7jO/6kRYVVNFMd4glZkZMkWKoMDzFAw6QhIsdTZEqHaRXzuTzg3qZmVHQzlSLU1aznKbHcd2EJZEZJFW5v/7wETsgAZnaNJ7E3440y0KDWMvjxH9mUfsSNmiai2pNYk/Lec1qPxX0ZkXm/WiodgkzfosiYI/V6YxgIxNKlu36XWySJwiyCS6/pJsamLJIv9fooo6S1tZMLfEhZySLf/1otOPlbjAxFRxcEjVadZGFzGkXx0StDX/13TeaPMd0hb9noYUewicJCX+w5VYveWqWdIWwLeaRLnJiunSt3aR5LMZrc7Szn47vCo04lmo9TNG/r+4QYa0kkNXooBxQo1Skl6lsc6KKNBJSzIMGgF4TqX60bpI0knpVfUklWioapVUbOtTqLx9lUVtXS39rYZhFDzMF7vwn2a2hK7VmKN8Ptn7vG4MXG4L19YKaG/5T+Ugt/FqZHl3SHVBvAP2B1cKpueQjl+hwUGBpzo+KoQIrE6z/tCaJYaRfsSiTX5Pl2jxv2Pyy1QksLXkcWvSm1jWx3sHsBHozT1FY2/9N/+o6EUI5MF/+cQdTuiu6rOx9SVa4+BMGenXrUrW7dG/qATWICev/u////9UJEzCsyoP6BtQYZYMDkRKKLHLAkpr6BAgiAf4tU05x0zpRiubun8nKaBr1WX1bVn63aklJa2WCwKupXKqS5U9hslWAfq1v6Iy4xf/M//QL4W4AG6jQN0H/zhbZktpq6rtr1JC9FEWr3ZHXZda11+6AtRoXHr1av+Q5pyYyMDtANgGAD4ERAKFDImiQ1EFATWXFQlhwchZAz7q2vK9CFUNv7EFzSp+6ufK1/C3yXvAKgII0wNiNQV0tVkz7VX6awx1I1GcZJet3OhCAzZF+hssZlvUs4Yl0nhkQCgcBu8bgoChols0Uj+XivbrZlMyEjU9TQ3AZSipb+zMzv1a/cDBZyBN2p+35f/p7/pX/6WaGZ0hVIf4Degt6OqBAwjTDqQNCiM2nE00aoS70bVtV7eZtXq4vtTQPS0WqC/ha52o+5hRlIKPz8u9Dc7HZTNOJV7o//ugROKAA6VNUPsojgh46rofZTTBEolZL63WeOIUque9llMEaVtWc6gy6FAbLW61+aN+kiiZENAqaA3p8XEXUv+Uyu2pSTqazfakKaDiiLNRepToHpkaIqdVbedAeBRK3Vsyv+MbBUipR1Ug9wCw586LUMM6RpiqoQ2NIPAeRE5NaakilTPYOkFrK7BeUnnsv/Hl65nhD5rFQLCl6n1lVL+eGNTKQRhQ3nN7ylFJY0DAq97c9bxqQ4y6BHW7JrNygUReAhigb+MIDkMM0EE/2N1IIN6CCGgqmgggIoMFBBqBgXDRBlOgmfsnU34BoFiNX9L/1Fx0DAuGiFNNBBbp+rMT/B8LAQRlDzUNTOQv4E+kiAQpCQDk0uBQEiALULKVcqK/AUFJpMjcVo0ilUviOcWmJRl+OOGv3WAGQk6ArHK3XkruDAtNEJTneNb9qNgkQJa9H/8N+Xv01ZfJgB4sDzjBP5OG6Cv5ZUhWmmmtfZqZfPmZfFzl8KGDTUXy+6BcLhQWxkmgYdNNabscACEFYq1maaE37Wumm4m6XPo/VsutDizGZl5dMP+hK9AoFGLIjho9LAIyM2RjBEQvZdUBrbW2w261OLwxSQVE7b9zGH4ay/9zArJHUKmmv1S02FqMqRBYC0mV0wqsuYU1MMPWmy2n4mlt0XFhAVKDEPtX/Ol5J62SopOtG6Jq//vARNIABQtgzXsao3iayrnvZfS1EflZQ+yimKJqqug9lFMUyKJMjOG6SknUrqUbO6VGlXo7hihzjra3/6yfOFgKGor2Aq6KSrgaHND5WXUyw+wD2qYowUKFlgkaFZyTCAoCTCQCfTFoUucvq12bcGXQxZsU/JPLLF795f+44K1KTSuh2RUM9MU8mEyKWEUJLd1YglgqOYiCRXaVGz/rG0ukOBALA2Q4XCbN/zFVlrVq1VomKJkasoWoQKXTWZF1FVloroqrZlrQNTIyNkQzZUSYuqOG5dU9FJlXVTE8gqCqsz/LDq6FIxh2ZVQh0gAAAaMiAAlK/DkP0gDZimUNAUtVKsEsZeLZn+uPQ38Ox2UvbMOtXpu1bNekd9CYDZYI20oU5H/TpeqJwmF02dLZdWaty3X/ul5jrePfx5Wz58h/eOt7wtzsMt2JAEhmBTHIABsMEU9u9l+/35ZPKeYoGyNlqdGktmUsjhR0qKldLap1rpLZV7sAeyo6mS/e62SeiLYEiSn/T//oZ3x8updh7QJWDCmBQSRtwFBUSQQkGYW6nAX9SeSGR5bxpTcnqbd/ZTTzski0ppt75vDOGAKgnsX5cpyaSm3y6PUkwKMSObiV+1WVqPMP1LVQIeBAcB1i4nAn0E3/nTRJaKnWyqToqdFV1oiWDRRRQdbJO2p1LRUbLNUk/WKVdv9X1UVDqRCiZqrlQ7wASGmB5zUOaIgzoQahYGiinDTtjZE67gPHFIDm5DErsXlshud3yk7qnfg69QP0X5a9GcscuddWG/V6CqVd1T35ef1LUs1JMWwDBIHA5GCgWDYthEy4gtXzp7///TEDv//b/6YaAb///xkn/////+gzN3eoljDnADAQtSLCEsoEmstAykqS96PqMNAnfMR+QN3ajLIfk0p1MxW7vL8Pwv2m4mW5ZnYYAiFOprt+rlhktWHi7ILNVbMlSZfkml6SJkXSKjnBdED/+6BE+gAFEFXLexuMeITKue9hFMMOyVcz7Gap4hKrJb2N1TzBZcA5WaQFA8KVIkeUil9Ra///rCYEHGkjX66SlLU+7W9QfEr//+Nf/7v///x6UidZqYgQ5wASDDrH7QaICSBKF3CZaIqHoXjwjcEunUgGNNkgOS0EadWmfiHIc/WeFepK3AFQOYmoJkgEA4CsGcmj3a52tTAoAfW6lGNbrmKfrIC3s5qViHC0hICAhVYGE24DUDihCHkwaG7P6iR///yOBgBf+up9dX/QDjzR/1//GIshCTaJmRA3ACAQBSifPM5JeHVh09c1zM5n2XGykKI+G1PMsdh9Vky0Bg1YEpRBTZG3Wm0LopM62Wg6mUykFM/m7+tRiXieIKJ2AwYJwOcDICwhFuJZNNL8st///SDPQ+y/6aKb3TWi/+cBseQ///WIxd/yv/9n/kANoeaiGIN8AEAgOB3HGQIMJpR9CAP9BQSJv4Naan4ic50AO85FyHOSm/jHu7zwrzEPtYLvmhGYm4g4Wabcqy7DXreoN7Pre11Im6kHWfZfUPh+pZw6ZE8PIeMBoigfsH4KFAO2NAny+YLV5QNf//6iHhmk0P1XSoJP/6xPr///qGaSJ0mZiKlQHwAwHbUGKHpMxONK3Oupi7o/rMufl9LGDpkVWUMfgsGnI2IdbLIQsRCxETZdvssc5/pVN0n/+6Bk3AAEGFZLezyq6HfKuV8+lZMQSVkr7G6p4cQq5b2GUSw1r8xb3Z0TEfQf8ClgDhdw2QdZMGabP8st///Mg0UUojqfWy3OUXUr0fWGrV///xTn/////+ljeYmalzCXACALVizwAcqgES37stMHCNwo43Aj3UC426M3xlU9Kr9yj1vuHLH52XeNJuOYFDATiw9S2sf/xYG+6mt0r+W1ekiXi6RUcoNlAwKZgOCmsBQLCySeZSKXyg3//9Qd8Uov/11Lb/1CFkv//4tKI9PUxEEDOAAAlKHjECyxAKXedO1FBCYrhQdu0uh+ehb6wNOY08BQqCrVNreG8N5UKyjHsYxoLQ2fmms2uZbrTWIUv2rZJrrSU/jloe7OidIwRmAikB7uIYAHLJgzTZfykf///zMVL2///8pt///Ln/rOYqKqqgw3wAQEJoOXALwMqBUyvxIFikUGkWTNCi0BwxB8vZNSQiGoBvw9HH6/mu5boImhwHeoysDL1NrGqXKz+62iCbfWzb6C/k63WpNBzhDw/QDAJFA2GfAFAGMwRcuGiaHyUb///FNDgG///39Y5Lf//x8f+soenqJp0HvABAsERYGUMuQwxHLLWpoR0eVRSV/N8ppfPw3D8Wzhuf7RRbuWFPUr1H3QmGT3QZXoPJ0s6eSbeSXVXWkgIRsg27dKkmq/jmL9JFJEuk//+6BE2AADlVXLexqqeHGquW9jdE8O4Vct7O6p4cwq5b2d1TwMyBgMPAS3YLAobJbNFLV9R////G6Kl////0P//83qNniYiZZQ5wAgBkpfoueVFC5k6IffpuaRtPORm12LQCyilpq772pVR85vCvYzpIbVIc0MD+xfl3pTax7v6p0NsTrvoIs60FV+ogT9a1ImReIqKCAwIPQOEBIEQVFuKp9avyUb///FpCgNbt+qtvrf5Sf//+Tf/oRomYmIgQbwGQEE4mtcgVkJ2L8IEloRsKNFspJGJlcFQiks3McFITte6DPWYE+LYBr6YAeYLqRmiKpUumo6Jcta011LZBS3tV1Ekl1XZIyLIpgFYYGnoCeyGGaCDt8zJJttlL66qrRdkS/+7f/yn/qWJmJmqhArwZDCRSJoKcDlssatlOlF6jwTtqcYBEX5clVz+M7hyE1buX5c1rWnhLESAlYvS16U01nLnoss4ILqXXT+y9vWR6HvdkSwLWBBcBrKImwh5gm7P8pP///WQwNpQ//t+31///5ozxTTNQ6Bbg+SIhLwAICyapC9y/aVAmXRGFt3AWElZCM0hLIpzj/52PKcwEvAirQEgIL6jNE6bGqWauswEFbvSaku6KC119Y+T31LSSNSJAGAcBqGh4SXPJr1NyVSZ72Uv27cfyp/9v/6amhbiqd6Ia8BkA3oHvH/+6BE44ETtFXK+xqqeG/HuV9h9C0NNVct7G6J4aWe5b2GVSxtgmYeNe49NPMYEJCuLUZ7AzZZyHHAfd3ZiCIdlL/uRv/wz+nhhI8CVoOkEkWFKWOxCdXo2pnTFJINepb0L3WpuocxH9SKJkQ0CpYAseLEXX+3RNm0H6/1L5wkf/VU3DvMxLA7gMgAYwBRCORAQbgR0CE6EVssLj4hLDCIUoV7RtAUOg7BbJXaagY8mBIsQVJF7606YlBFdlvajQuggl5DW/Vm5FAsGB7zQg8nDdBBP9Itp3Tf9Smr8XRv///qNP/6f/UrLMREPDBzgIAEJhEYKZj5hgrcWrQmluB6kHNEVgR+EjOdStOeC1KY7Veaftv5Vr1IfsU8YYOakbHAAoKFl0uVSyrK1ii2LlbanSVQOJO9+oaRt/0yYAiDA3ZIc80TQbT9H62a6rdSucPf//888VUTE1Sj/gNAF9EiEE7CgrMHFf1rUtaFo6HJyvWs2JK1UoRBCXHt36tqTUR4AjEPcDEoyR43RNEUy8pFAPjV9Xr/5S/0kjEhwJEQNwOFwpI/9Z/q+p/fxdDbf//+cNZnSYl4dkDnAQALgDxWnQYCSAEGkCXS6VqjxSsKvBTp35fEKCmd5pV6Xz0zNze+a7Ut4Q2nYCe4CA4KFk6Xels9Z/E+aoFts1jps6jz+oCW/vlusSTFoQ7/+5Bk+YADUT1L+xui6GYJGW9lNC8NmSEr7G6NYXukJf2GUSzk2t8RyUY27kP/FZaJmZimYH8BoA7cVsqAsPBwsOtMnXngI8GyIOvi3gVExhOOe5R9l1UC+PAUKm1BvLy1Jh+iLpppfetrq8x/60CbAgCA3xEdhugmv+dS31Kp3+3H0ML///Ubwpq0Rc0AE4FZA0FphCFZgaAYUA4AAQEAYgWDQBQfLXmBQ1GXB1Gag7GE5Wmb5vm77om/MZnF7RmmCGbFbprtJmYSmZhDpk5iHEpUb4Sj1oBGaMDZfLr19QQw+gB5RKPlk1JsMYyAQCqNhgsD0bAACDCgYMLAR5REAgUFAuCTDAICgZMViEBBcwGDxYNmEBcY4FwkJF2BcHmIxiYzFb/IJErFg0+2UortvMQw7kGrvjUDsAbxJcDGBNSPr4R8SUBwAbqwd9Iy78cJgAAgAIwmYbBKHRGhnb0QI5cpkTDH9YPBEVa/ASm8asYVLG7ll2IQ7cDwxIH3h+3unvyiWYf8ayjgyGA+cacViSkN4t7ugAnAcYJ5S2dqkuz/+7Bk6gADECxK+2fGKFkpCW9lNEshJSEr9d4AItwjJj6zoAW9gbB2DpqMcEIoJBMUcxQTtrO/k/aRpgCRpm2p1+548524Y83MUUsfunzqUlI0gGAE8IYhyxXrQxDk5BCwjqLTUHkkOrvjTL0PAUEg56FiPCy+1EGcKYAQFOPu79BDl/Cvb1SWMMOyiiKoIIbtvG6CcfSTOHA8MQ5z7t6G5+UTle33WXN6pObzzw3cjkuz/dfGN2oxVhuf1hnnlyukBiODs28Ef+Zm/OoZk8oKkLcGYEUqG5pSRaDwLEBpA+YuTGykCH5hCAZ+AjosRTp2D4BqEMHTDGYIYjEVALGRpCgDkVpRpkIYMMuoMQPATsSijgJQUWKDpAMGpWsiHTpi1ImWDhqtIFJgJ+JA3YWsowBgSpkVSQEJFoLYaGC18MkS7XIFwwOJ0ytgCTxtdMoXgzZhwQMUsZCn2IAACAIQiMG/rDxGGQ4tQAAQcYp1JcNnh2Di6DS3nRwglg7iqKvJYelnOKYECzT2Q/F2XwBAhliAsMa+Aii9IcDA4oADhEaAAF2XNa6v8uMqZPd1K9PRQ3F6en/9g4GFAwYMCAjXV7oAFkhwNCkx5dYzWltxt2bUjWFbAjayTPPuG+/jn/5/+wcvAQcuOkmLAIbi4CQNdSvNQMIQYYHVYCQqfVaK2n9hyC2otq+6qr8xyGZNvv97h//+uf//////////bZfR2I3T9t5/n3//////////5q5LuvGNNDFhUBchbgTgSh8WpWLJ4LuJ14tyrT+NgZI+EbhhbCmohwAINRWu9EshgAneyH5bG4Z7PRiGmBNsQMIlRP/74GTTAAtPhFf+b0yDGDB7D8xhkFYlpVXdl4AKPrHp+55gAWDoIjW7bQIfXnBG4y9vcKF++1X/WFBiImnKoZlTUrh0NFfj0EyRk6+JfQ1mWTUSusPEeH0YJMy6HGsQ7K4ck19NNmysNNJ2qskTHiFLTQ5uDp+kfSKcqUMvdt35ez5XNeGG6oTGkv00qYlm6kswlGOetu+zuffunztUsvpXfTBdpoTzWog9TCWQF9WHd3n/K9u3/8///K/Scw5k/ccijuRTOxK23XU8LD6Z23eLMIjFgJdIIDDC5XY///////9c//////////zp6fv59sc7z///////////qWb8G8WZV1cTABEAGzAmOyE3IhHehsNKgYsFAsEQkl4DFEfppSom9bqy1us2nKOE6css6liqpnWVVbZZ6exKqmCiWCV89bVaX0lq4OpzlalUxQmKNv2z61evXtd6hQ2W0V9DtmlnO2a1tCjWhRq5x5YsGsJ9v23mlt1q9395tfEbcWlvb6xv1rXW61r9fOPbf+7Qt0vWC+t/a1rW1i1oVs4n3Fg0nrCt/WfON5ritPCvqvtWFuFDg6oqAAAAAIYhcTXtnQgIGdDmNhdD1HQM5UolcfpakU2qaDDqCdZMkkimRbFEo2jtTNzujzl91f9vNOdR2ogIOw5zkXImlUSWrDUd7PhK1TIKibJF4301ejSKNVtybaNV98z5mZyt/9f9+742/9/nrf+81W+cqmZIGHErnXc0JbtVc1FUFZMwyfjOP8U/VpZSRmtVUhOEbTlCpjj0IC3eWDwS0xd8LkULAAwcp+01VQrtgxpkCLuf50HiXNlRyzKtMyyST+q7IWORGGnpfh5W4uQmNWPZgTd+0OzVwyYPnPpZbXZmXK9bfq1FG0vPC+A6uzXIHGrZZ5sfTkvTbuIsnPincvqshWmTOYd6es/z9u33XcvWxzLIgpEMRt4S7ftnlqrTmzyhtzh3sAjj/x7km0pEhwZGJhFopuTxUzHhq1GDWa5msltEw88Y6lI/YfZg0JVZItdcTs9fFlCWbZqqslevCPjIqIZstsKq/NrUy6YmpoPw9toQTW0QknNlsND1A6KNo+8W+1i5m4ck0Y4dS4OhRi1U5qVa5WP/TtaKYo5brEE2r6tYvmpuZXw6w6K4OOax0nXRvkYoU2rMku6oSjugE3DrzCY3nSnBTgkhWUOUIUp5MRSZbkiHFmsLDQU6Lu1HAtMB3qR22nUGNblNkiAxVFabfh/lMl3tHg6HotVgB4+yy1a5XiuUN3o7RVsvndeZLU60zI4kbTVEmQcHkuk7dlOg62c2TNUUzRKnMkj6nM1k+XSiidXUt39SSvtJf0hOcRmi1mZp4LainP1z/X4tWFitL6i2iKcrWKze+ZsNav/7sGTpgAULYNP7DDYyigv6Xz0oblYhi0nsQfzqLbBqPYShvZbFVXEKMKb/ESzo2XEQyCbtubM/kwyKG8fbDeQHtjaS4lWkfJfKUB5AEhmambrVbLfYfYRqnXZBVwZFmi6kQKiyrYpYJEJRtVlV968Zr3PTybvIgAt1i+WaDWFlR1o4w1C7i1uokoQaFhUgFoi0pZ9s8NXt/f8qbNzZwvHwpRB1tw18X893V8nNP09XIemLKa2hd8Jic2Z5hmQx3knNzENAMZRMyXqDSAYKsSXqmyIbScGesUkdI3B9YJvSSfZVTVd5f9bvc7hIqnQeZ1KV4zlC2J/i8yRkbIIqZnGFPEuWNqP/o3S1oHHpLDEBB1WorZ6KKOXIx7GbS11/HJViELCOeHQRFlC1lDyauIX//X7TgrmapmOQ8Vu7hfr/vjJOFrD0RIbl0YPjcUtaAmJoepZAUcwNS9MELoAwmlP6XCIErVRNQ2XOstyI8Xpm9NYpatmOZyrL5uV16+We86QhM87jWeNurc/TPn6NjWo3LEVI0Z0ydJdaL/XfpJGSTLJMHgAFJcOoLTW1c0HN1DFOqG1F3M1ND3uRgOjhUOBuzXY1R+qXz//xaMdMlOaMEccKj4vvj61i6RpoORKLhVIxq4coNNsxYp7BChqMWrIKDrEK2J5iTQdRpssEKC508g0XGB101IYfFQyX0zErdWmiV99bH43MqaprCvKACIoUiC4eCnb+Nag1bqj9kBziStoHx0mqPf8y9bUkmdAi4FxFdv19iOQ0uapvokUCYmBaB4CjilMIiAtd9lKi0StVTo6qxkT8So7miJ63R1u3lEUZ//uwRNyABLhg0fsNRjibrDo/YajHD/1ZPexMuOItLeh9hpsdYib4HKCiy1jgu0FwCFDYw6BhUWzlUCMJSmjbvLDY1K8GOkymk7HcsbUtw1uw2dPJQV/n9pItA0pnEnoGg7n7pJEi6q1sfR9KgtHMWRZKPwHM//taWPUa+OE+i9uf3RycRNmKLJov8trn1///mb+8VuSRZHQUJIfa3+c9//vOeWLNBrQr7kRTiGVlMWch2AIQ8o84oKssRFFFsoFktfLhrWZwX9UckjgtJrSqq+zt01igw5lazw79Ud+NSSRh6UyyHWUymQWjMUDo75ixYOjqtbbbzP9aOsyDqgDoTqS/+pdek9Vbd1PZIlTh0xLrM7VOgipXV0uv/rWj0/zGIeLqHhFHvSv4FqFoESgkLPxAUVSgkA1WiFr0imWJCv9EG4ymy9GpyaiV/VJrsq7zv3SU7rJ8w9EYClKctLSn0EnEuPFFJddIdxs96jb1L/dnSWgH8BzJq/81iGmj3lT4imBkESCYYBlFhU75+MDhMGlRKAW5QiM0pGYzGnAiARDARZqRCABwJdgoMrKmmk+kVOteaSyVmMTep/41HpfnPXalTLl/69I8ZVro+JgweznjJYRKbij1EhpwusutzU5ZlmCavmrfV0DMMgAagWOA3Q7/Es0rTkMUqPo9XEQxf093/6jNFaHdjIc4CMAZBBxQQEVRDBGXYFBFwIPQwptGLLTmfrFUNh+PV7TpZxvKU3sNY4Y9pImFtx4idVvZLGlSuhTRN2okyyPrRKuiySavof/SGNCqC0//1idvO0xCD3lhFSVIeuoQk5qKdjFfAYACpQP/+6BE5IADtlXN+wiWGHXH+g9hpccNqPcv7VC44Yob5n2ZjxwFBVsdQl0aOejPFCgZES8bmIqsCVgXUweUNtInimE2oetY0e7lr78occ3CRvUeObqzCC3lf6IR3OOwCnnGtjkyiSby8/+tIog1EB3GQZF/+p36qdza+v89///+sQgomphFCfARAd9lsashWjE47tmSmzs2UPW1QFPko7TynUfjMZ7axocKe7dx7quObmJ2tLa3MN2p3GN/yVTasmv+c/9zxEgLViFPO3+p/1oVdf89t/3//rA0WJmWVBLwCAAoJSYMKRh8OMpUkRF8BgCDg5dBdKh0BN/K3jYFBLYn6hT/xWJ3dXbVzXfxbsMfgc9Bw5arrODSP7TSIiyViYz5/kzZKI+bXWRrf9MuCOwNOIImaJt//1rW62/6j3/pF2dnmpZA/0AAITcNp23YA9TRJGtOVtzslhsOhOFJwYJyzAfqp3/r+gmF5CFLxigkt1smjMS+ce9bqTV8+3mb/9ZwD6ABIXWer/7v///oNIaHh2cR7QAAALQT8PYJjCSTA82llhNAanKHcTyWhblj6RJ9X0nGxsxcqFWtXMt3LGUNrwMP6Do4CFNdYUzKLP5QM6Lx5M1L2iuzq100/5MI/6SJkCQEBqQO02d/0u9n/qRmeYmHkg+CAACXJEIId5ivTqcTXPVukjF9QlX/+5Bk+QADPD3LeyOeGFgHuV9gdMMM8PUp7RqYYTgV5X2GNPQzN0WJiBZCmxj9V4GAOkynm1U1kc0SGR2f//1b//84wEhnH//9SNFVEMzoP+QCZJAPIWSBZBQAYUExT6EUFiJiFxFYLDprvZeyx3IhYpYfrY83jV1+s5YRKG9A5q7nVp5mXUMyOV3AUz1YmlVXv5ef/1jEANJz/q//+h3h3hlZiG4AiyXcUyb1ia5VhJRVdN22n5qECEDw6SWrkq2qyzgQURMgRLG6jAwc3Ppqj5NVf//zn/qREiAbMrI//+z/01aauXaaQb5AAA7FYECaJxGw4VOnw4YGEhQ7CdKmZsaZ1hwWky5/VFZ28slvYOlPP1lS6/UlHc1Lg4Vf0tltj8rjGKCJkZrZVH//jtb/4/Bmf/0///TSw7wkxDi8AAAAFI4nX1kCE5ukvsU0PXY7TV4HdxYJ+0CcbGxOY0rfFyPX7AaCRNSzyNtbb22UTEV//+n/9Q7wG8f////6VZ4dDRHIfZIAAHRiRYWCMAQzCC3ah6X6PQXFUzTDWO29Lk3/+3Bk/QETDCxJexqieEDleV89WJsKnK0r7BW4YRKWJP2DSVxxdiK6g7E3/VO7am7T9Z/hqxnt2wJGRIShTAvAqRxL+WARIiMWYRBtSDd/kT/6h3hIj/////TE1NMyRUCcVAAD0okuHDViaBIYANBBZ3y9k3WbTX+JR62ipO+JqUkXTTf+tX//+g3/qHaBUPK++dyWD/2gACNRnEhKXwxlBlH4HBKDN1LQq/cAukl4lcic6006TEoKXVfiTZKOatR6mxlNF1KgeVRShpra6U5WS3JSHRdQ5AIlsuNrc1tSaJTNlot90VA8gyGrz6B6u0wpKaQHwqAAn2Q/h0l2MJAhglxW8Ur3j9hcK6/x6wXBtdIt0yYZkhtDh8+m5ztp//6f/4hkAAbYGXlYmGiHQfhsAA7fEFTEMewV//uAZOmAAqkrS3sZa8hGJWlPZW17CxytKeyNuCDWFeX89jS8GPsHDVkbKZyLDBQ8KLUrlYM4VZ2H/lNyvM0MpmLtylt/+dAMUOSEBOq5z85Xr+CrqKR9bL//+O1v/sEZqiYiGiJUcBYAB0UbZW3AqjdV8psGUmiGEhNCaI48JolQvf5OlU2RU/b////X/9EcoFWLbWd2eIV1YcBsACGBGBfDDyAD+atuw4DhLHVakUkNl3urUvt75z4j3LOk/DOUAWhQukp5dW73Dfgd/9QUAiz////piXZ2l3dhwGwAA2EkoB+qWS80Of1gKVaHOSLoSwiX9AeNHSXm////+Z/9BeLlv1++tw+BQAABolSQArguRbvlwIGHUYJEOhk82pdT3rSss1AjIKcAoonYgpseshSQUf///6f/6Qi7vEvDw4Q4MqYQCCHyMpNWzW++q/5R60/qCodmZlVmAcAkAAzPQ6sBcMHSTA5BUdaa7U3/+3Bk+QAC7SxKayNuGDpliV89T6kJqK8n7GWroM6WJb2DSOx1Kuj/UUwh6SgXUkGIiXlmTK////0f/yyWJqHAJCQAcAMAAEngqgAdZKJ1v/Nud///1TMM4OAQ4+DoAC0AMZNxYKHrWu3b+SB/CmzVemDpEgfZtf7///9X/7CJaJgHCAAocLFynxXiEq////01+gsoEo4AIAANrCFBuEVdXNrpf9ffp9ICkBtIX2HNIsXUjV0PX/8YA8OwAAAAAOAIAAAw+///Kmf///ph2VQFAgXJFyWN2SdTf///WYBCifGaLpsja/g0vAAAG1z4Q//1GUxBzjQAAAoAQAAHUKsipkUdv///0AmwazV21/URYAAAAApB///VrQAOAAFES22n/5HejkJjRQ5///yvAAAc///4dfAJaLcP//tQZPcAMggrSXsAPhgtBXlPPGplBySvI6wyQ2BjFaX4oBcUgAAAFSKDNPOABIuQAAABL4gPHlPTiy5J2daHqNXv47xOBwfD///TgAAAABwAAAGf/+tYgbDoAhC/ZmZVr4YWOKAMcdiChQU/EG//+TVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7QGTtAGGSK0j7BpjYGKBZjyUhAQU0rynsBalAQ4kluIAdLFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//swZPMHcUErSGpALhgTIClvDAAAA2ytJciAuKApgKW4kAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQZP2FcNcrR+mgFiAJACmUJAAAgphRI6YB5cAcgGUQIAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/+xBk/4nxXxZH6eF48AvACV0AAAAC3E8ZoAUMSAwAYgAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EGTdj/AAAGkAAAAIAAANIAAAAQAAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//sQZN2P8AAAaQAAAAgAAA0gAAABAAABpAAAACAAADSAAAAEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='
};
const Write = () => {
const [view, setView] = useState('home');
const [text, setText] = useState('');
const [goal, setGoal] = useState(() => {
const saved = localStorage.getItem('write_goal');
return saved ? JSON.parse(saved) : { type: 'time', value: 25 };
});
const [timeLeft, setTimeLeft] = useState(0);
const [started, setStarted] = useState(null);
const [theme, setTheme] = useState(() => localStorage.getItem('write_theme') || 'light');
const [sound, setSound] = useState(true);
const [uiVisible, setUiVisible] = useState(true);
const [lastSaved, setLastSaved] = useState(null);
const [savedTexts, setSavedTexts] = useState([]);
const [selectedTexts, setSelectedTexts] = useState([]);
const [isMobile, setIsMobile] = useState(window.innerWidth <= 768);
const [swipeState, setSwipeState] = useState({});
const [editingEntryId, setEditingEntryId] = useState(null);
const [notification, setNotification] = useState(null);
const [searchQuery, setSearchQuery] = useState('');
const [focusedIndex, setFocusedIndex] = useState(-1);
const touchStart = useRef({});
const fileInputRef = useRef(null);
// Safe localStorage helper with quota handling
const safeStorage = {
set: (key, value) => {
try {
localStorage.setItem(key, typeof value === 'string' ? value : JSON.stringify(value));
return true;
} catch (e) {
if (e.name === 'QuotaExceededError') {
setNotification({ type: 'error', message: 'Storage full. Please delete some entries.' });
}
console.error('Storage error:', e);
return false;
}
}
};
const editorRef = useRef(null);
const fadeTimer = useRef(null);
const audioElements = useRef({});
useEffect(() => {
Object.entries(SOUNDS).forEach(([key, src]) => {
if (src) {
const audio = new Audio(src);
audio.volume = 0.6;
audioElements.current[key] = audio;
}
});
}, []);
useEffect(() => {
localStorage.setItem('write_theme', theme);
}, [theme]);
useEffect(() => {
localStorage.setItem('write_goal', JSON.stringify(goal));
}, [goal]);
// Auto-dismiss notifications
useEffect(() => {
if (notification) {
const timer = setTimeout(() => setNotification(null), 3000);
return () => clearTimeout(timer);
}
}, [notification]);
const playSound = useCallback((type) => {
if (!sound) return;
if (type === 'return' && !SOUNDS.return) return;
try {
const audio = audioElements.current[type];
if (audio) {
const clone = audio.cloneNode();
clone.volume = 0.5 + Math.random() * 0.2;
clone.playbackRate = 0.95 + Math.random() * 0.1;
clone.play().catch(() => {});
}
} catch (e) {}
}, [sound]);
// Save text to library (with duplicate detection)
const saveToLibrary = (textContent, stats) => {
// Check for duplicate content (exact match)
const normalizedContent = textContent.trim();
const existingDuplicate = savedTexts.find(t => t.content.trim() === normalizedContent);
if (existingDuplicate) {
setNotification({ type: 'info', message: 'Entry already exists in library' });
return false;
}
const newText = {
id: Date.now(),
content: textContent,
date: new Date().toISOString(),
wordCount: stats.wordCount,
charCount: stats.charCount,
duration: stats.duration,
wpm: stats.wpm
};
const updated = [...savedTexts, newText];
setSavedTexts(updated);
safeStorage.set('write_saved_texts', updated);
localStorage.removeItem('write_draft'); // Clear draft after saving
return true;
};
// Export functions
const exportAsTxt = (texts) => {
try {
const combined = texts.map((t, i) => {
const date = new Date(t.date).toLocaleDateString();
return `--- Entry ${i + 1} (${date}) ---\n${t.wordCount} words\n\n${t.content}\n`;
}).join('\n\n');
const blob = new Blob([combined], { type: 'text/plain' });
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone.replace(/\//g, '-');
a.download = `writings-${new Date().toISOString().slice(0,19).replace(/[T:]/g, '-')}-${tz}.txt`;
a.click();
setNotification({ type: 'success', message: 'Exported as TXT' });
} catch (e) {
setNotification({ type: 'error', message: 'TXT export failed' });
}
};
const exportAsPdf = async (texts) => {
const { jsPDF } = window.jspdf;
const doc = new jsPDF({
unit: 'pt',
format: 'letter'
});
const pageWidth = doc.internal.pageSize.getWidth();
const pageHeight = doc.internal.pageSize.getHeight();
const margin = 72; // 1 inch margins
const contentWidth = pageWidth - margin * 2;
const lineHeight = 14;
const paragraphSpacing = 28;
let y = margin + 36;
let pageNum = 1;
const totalPages = () => doc.internal.getNumberOfPages();
const addPageNumber = (num) => {
doc.setFont('times', 'normal');
doc.setFontSize(10);
doc.setTextColor(140);
doc.text(String(num), pageWidth / 2, pageHeight - 40, { align: 'center' });
doc.setTextColor(40);
};
texts.forEach((t, i) => {
if (i > 0) {
doc.addPage();
pageNum++;
y = margin + 36;
}
// Date header - small caps style
doc.setFont('times', 'normal');
doc.setFontSize(9);
doc.setTextColor(120);
const date = new Date(t.date).toLocaleDateString('en-US', {
year: 'numeric', month: 'long', day: 'numeric'
});
doc.text(date.toUpperCase(), margin, y);
y += 24;
// Word count
doc.setFontSize(9);
doc.text(`${t.wordCount} words`, margin, y);
doc.setTextColor(40);
y += 48;
// Body text
doc.setFont('times', 'normal');
doc.setFontSize(12);
const paragraphs = t.content.split('\n');
paragraphs.forEach((para, pIdx) => {
if (para.trim() === '') {
y += paragraphSpacing / 2;
return;
}
const lines = doc.splitTextToSize(para, contentWidth);
lines.forEach((line, lIdx) => {
if (y > pageHeight - margin - 50) {
addPageNumber(pageNum);
doc.addPage();
pageNum++;
y = margin + 36;
}
doc.text(line, margin, y);
y += lineHeight * 1.8;
});
y += paragraphSpacing / 2;
});
addPageNumber(pageNum);
});
try {
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone.replace(/\//g, '-');
doc.save(`writings-${new Date().toISOString().slice(0,19).replace(/[T:]/g, '-')}-${tz}.pdf`);
setNotification({ type: 'success', message: 'Exported as PDF' });
} catch (e) {
setNotification({ type: 'error', message: 'PDF export failed' });
}
};
const exportAsDocx = async (texts) => {
try {
const docxLib = window.docx;
if (!docxLib) {
throw new Error('DOCX library not loaded. Please refresh the page.');
}
const Document = docxLib.Document;
const Packer = docxLib.Packer;
const Paragraph = docxLib.Paragraph;
const TextRun = docxLib.TextRun;
const PageBreak = docxLib.PageBreak;
const Footer = docxLib.Footer;
const PageNumber = docxLib.PageNumber;
const AlignmentType = docxLib.AlignmentType;
const children = [];
texts.forEach((t, i) => {
const date = new Date(t.date).toLocaleDateString('en-US', {
year: 'numeric', month: 'long', day: 'numeric'
});
// Add page break between entries (except first)
if (i > 0) {
children.push(new Paragraph({
children: [new PageBreak()]
}));
}
// Date header
children.push(new Paragraph({
spacing: { after: 120 },
children: [new TextRun({
text: date.toUpperCase(),
size: 18,
color: '888888'
})]
}));
// Word count
children.push(new Paragraph({
spacing: { after: 400 },
children: [new TextRun({
text: t.wordCount + ' words',
size: 18,
color: '888888'
})]
}));
// Body paragraphs
const paragraphs = t.content.split('\n');
paragraphs.forEach(para => {
children.push(new Paragraph({
spacing: {
line: 360,
after: para.trim() === '' ? 200 : 160
},
children: [new TextRun({
text: para || ' ',
size: 24
})]
}));
});
});
const doc = new Document({
sections: [{
properties: {},
children: children,
footers: {
default: new Footer({
children: [new Paragraph({
alignment: AlignmentType.CENTER,
children: [
new TextRun({ children: [PageNumber.CURRENT], size: 18, color: '888888' }),
new TextRun({ text: ' / ', size: 18, color: '888888' }),
new TextRun({ children: [PageNumber.TOTAL_PAGES], size: 18, color: '888888' })
]
})]
})
}
}]
});
const blob = await Packer.toBlob(doc);
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone.replace(/\//g, '-');
saveAs(blob, 'writings-' + new Date().toISOString().slice(0,19).replace(/[T:]/g, '-') + '-' + tz + '.docx');
setNotification({ type: 'success', message: 'Exported as DOCX' });
} catch (err) {
console.error('DOCX export error:', err);
setNotification({ type: 'error', message: 'DOCX export failed: ' + err.message });
}
};
// JSON export/import for backup
const exportAsJson = () => {
try {
const data = {
version: 1,
exportDate: new Date().toISOString(),
theme,
goal,
texts: savedTexts
};
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' });
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
const tz = Intl.DateTimeFormat().resolvedOptions().timeZone.replace(/\//g, '-');
a.download = `write-backup-${new Date().toISOString().slice(0,19).replace(/[T:]/g, '-')}-${tz}.json`;
a.click();
setNotification({ type: 'success', message: 'Backup exported as JSON' });
} catch (e) {
setNotification({ type: 'error', message: 'JSON export failed' });
}
};
const importFromJson = (e) => {
const file = e.target.files?.[0];
if (!file) return;
const reader = new FileReader();
reader.onload = (evt) => {
try {
const data = JSON.parse(evt.target.result);
if (!data.texts || !Array.isArray(data.texts)) {
setNotification({ type: 'error', message: 'Invalid backup file format' });
return;
}
// Merge imported texts with existing, avoiding duplicates by ID
const existingIds = new Set(savedTexts.map(t => t.id));
const newTexts = data.texts.filter(t => !existingIds.has(t.id));
const merged = [...savedTexts, ...newTexts].sort((a, b) => new Date(b.date) - new Date(a.date));
setSavedTexts(merged);
safeStorage.set('write_saved_texts', merged);
setNotification({
type: 'success',
message: `Imported ${newTexts.length} new ${newTexts.length === 1 ? 'entry' : 'entries'}${newTexts.length < data.texts.length ? ` (${data.texts.length - newTexts.length} duplicates skipped)` : ''}`
});
} catch (err) {
setNotification({ type: 'error', message: 'Failed to parse backup file' });
}
};
reader.readAsText(file);
e.target.value = ''; // Reset input for repeated imports
};
// Delete functions
const deleteSelected = () => {
const updated = savedTexts.filter(t => !selectedTexts.includes(t.id));
setSavedTexts(updated);
safeStorage.set('write_saved_texts', updated);
setSelectedTexts([]);
};
const deleteEntry = (id) => {
const updated = savedTexts.filter(t => t.id !== id);
setSavedTexts(updated);
safeStorage.set('write_saved_texts', updated);
setSelectedTexts(prev => prev.filter(x => x !== id));
};
const togglePin = (id) => {
const updated = savedTexts.map(t =>
t.id === id ? { ...t, pinned: !t.pinned } : t
);
setSavedTexts(updated);
safeStorage.set('write_saved_texts', updated);
};
const startEdit = (t) => {
setEditingEntryId(t.id);
setText(t.content);
setView('write');
setStarted(Date.now());
// Only auto-focus on desktop - on mobile let user tap to focus
if (!isMobile) setTimeout(() => editorRef.current?.focus({ preventScroll: true }), 80);
};
const saveEditedEntry = () => {
if (!editingEntryId) return;
// Check if edited content duplicates another entry (not the one being edited)
const normalizedContent = text.trim();
const existingDuplicate = savedTexts.find(t =>
t.id !== editingEntryId && t.content.trim() === normalizedContent
);
if (existingDuplicate) {
setNotification({ type: 'error', message: 'Another entry with this content already exists' });
return;
}
const originalEntry = savedTexts.find(t => t.id === editingEntryId);
const hasChanged = originalEntry && originalEntry.content !== text;
const wordCount = text.trim() ? text.trim().split(/\s+/).length : 0;
const updated = savedTexts.map(t =>
t.id === editingEntryId ? {
...t,
content: text,
wordCount,
...(hasChanged ? { editedDate: new Date().toISOString() } : {})
} : t
);
setSavedTexts(updated);
safeStorage.set('write_saved_texts', updated);
setEditingEntryId(null);
setText('');
localStorage.removeItem('write_draft');
setView('library');
if (hasChanged) {
setNotification({ type: 'success', message: 'Entry updated' });
}
};
const cancelEdit = () => {
const originalEntry = savedTexts.find(t => t.id === editingEntryId);
const hasChanged = originalEntry && originalEntry.content !== text;
if (hasChanged && !confirm('Discard changes to this entry?')) {
return;
}
setEditingEntryId(null);
setText('');
localStorage.removeItem('write_draft');
setView('library');
};
const handleTouchStart = (id, e) => {
touchStart.current[id] = { x: e.touches[0].clientX, y: e.touches[0].clientY };
setSwipeState(prev => ({ ...prev, [id]: 0 }));
};
const handleTouchMove = (id, e) => {
if (!touchStart.current[id]) return;
const touch = e.touches[0];
const diffX = touch.clientX - touchStart.current[id].x;
const diffY = Math.abs(touch.clientY - touchStart.current[id].y);
// Only swipe right (positive) for pinning
if (diffY < 30 && diffX > 5) {
setSwipeState(prev => ({ ...prev, [id]: diffX }));
}
};
const handleTouchEnd = (id) => {
const diff = swipeState[id] || 0;
if (diff > 50) {
togglePin(id);
}
setSwipeState(prev => ({ ...prev, [id]: 0 }));
delete touchStart.current[id];
};
// Mouse swipe support for desktop (throttled)
const rafRef = useRef({});
const handleMouseDown = (id, e) => {
touchStart.current[id] = { x: e.clientX, y: e.clientY, isMouseDown: true, swiping: false };
setSwipeState(prev => ({ ...prev, [id]: 0 }));
};
const handleMouseMove = (id, e) => {
if (!touchStart.current[id]?.isMouseDown) return;
if (rafRef.current[id]) return; // Throttle with RAF
rafRef.current[id] = requestAnimationFrame(() => {
const diffX = e.clientX - touchStart.current[id].x;
const diffY = Math.abs(e.clientY - touchStart.current[id].y);
// Only swipe right (positive) for pinning
if (diffY < 30 && diffX > 5) {
touchStart.current[id].swiping = true;
setSwipeState(prev => ({ ...prev, [id]: diffX }));
} else if (!touchStart.current[id].swiping) {
setSwipeState(prev => ({ ...prev, [id]: 0 }));
}
rafRef.current[id] = null;
});
};
const handleMouseUp = (id) => {
if (!touchStart.current[id]?.isMouseDown) return;
const diff = swipeState[id] || 0;
if (diff > 50) {
togglePin(id);
}
setSwipeState(prev => ({ ...prev, [id]: 0 }));
delete touchStart.current[id];
};
const handleMouseLeave = (id) => {
if (touchStart.current[id]?.isMouseDown) {
setSwipeState(prev => ({ ...prev, [id]: 0 }));
delete touchStart.current[id];
}
};
const deleteAll = () => {
setSavedTexts([]);
safeStorage.set('write_saved_texts', []);
setSelectedTexts([]);
};
const toggleSelect = (id) => {
setSelectedTexts(prev =>
prev.includes(id) ? prev.filter(x => x !== id) : [...prev, id]
);
};
const selectAll = () => {
setSelectedTexts(savedTexts.map(t => t.id));
};
const themes = {
light: { bg: '#FFFFFF', text: '#111111', muted: '#767676', subtle: '#EBEBEB', accent: '#111111', name: 'Light' },
dark: { bg: '#111111', text: '#F5F5F5', muted: '#888888', subtle: '#282828', accent: '#F5F5F5', name: 'Dark' },
ft: { bg: '#FFF1E5', text: '#33302E', muted: '#807973', subtle: '#EBD9C8', accent: '#990F3D', name: 'FT' }
};
const th = themes[theme];
// Update html/body background and meta theme-color when theme changes
useEffect(() => {
document.documentElement.style.background = th.bg;
document.body.style.background = th.bg;
const metaTheme = document.querySelector('meta[name="theme-color"]');
if (metaTheme) metaTheme.setAttribute('content', th.bg);
}, [th.bg]);
const wordCount = text.trim() ? text.trim().split(/\s+/).length : 0;
// Memoized sorted and filtered library texts
const sortedTexts = useMemo(() => {
const filtered = searchQuery
? savedTexts.filter(t => t.content.toLowerCase().includes(searchQuery.toLowerCase()))
: savedTexts;
return [...filtered].sort((a, b) =>
(b.pinned ? 1 : 0) - (a.pinned ? 1 : 0) ||
new Date(b.editedDate || b.date) - new Date(a.editedDate || a.date)
);
}, [savedTexts, searchQuery]);
// Notification component
const Notification = () => notification && (
<div style={{
position: 'fixed',
top: '20px',
left: '50%',
transform: 'translateX(-50%)',
maxWidth: 'calc(100% - 32px)',
boxSizing: 'border-box',
textAlign: 'center',
overflowWrap: 'anywhere',
wordBreak: 'break-word',
background: notification.type === 'error' ? '#c00' : th.text,
color: th.bg,
padding: '10px 20px',
borderRadius: '6px',
fontSize: '14px',
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
zIndex: 9999,
boxShadow: '0 2px 10px rgba(0,0,0,0.2)',
maxWidth: 'calc(100vw - 32px)',
width: 'fit-content',
textAlign: 'center',
boxSizing: 'border-box',
overflowX: 'hidden'
}}>
{notification.message}
</div>
);
useEffect(() => {
if (view === 'write' && text) {
const timer = setTimeout(() => {
if (editingEntryId) {
// Auto-save edits to the entry
const originalEntry = savedTexts.find(t => t.id === editingEntryId);
if (originalEntry && originalEntry.content !== text) {
const wordCount = text.trim() ? text.trim().split(/\s+/).length : 0;
const updated = savedTexts.map(t =>
t.id === editingEntryId ? {
...t,
content: text,
wordCount,
editedDate: new Date().toISOString()
} : t
);
setSavedTexts(updated);
safeStorage.set('write_saved_texts', updated);
}
} else {
localStorage.setItem('write_draft', text);
}
setLastSaved(new Date());
}, 1500);
return () => clearTimeout(timer);
}
}, [text, view, editingEntryId, savedTexts]);
useEffect(() => {
try {
const draft = localStorage.getItem('write_draft');
if (draft) setText(draft);
const saved = localStorage.getItem('write_saved_texts');
if (saved) setSavedTexts(JSON.parse(saved));
} catch (e) {
console.error('Failed to load saved data:', e);
}
const handleResize = () => setIsMobile(window.innerWidth <= 768);
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
useEffect(() => {
// Don't run timer when editing an existing entry
if (view !== 'write' || goal.type !== 'time' || editingEntryId) return;
const interval = setInterval(() => {
setTimeLeft(prev => {
if (prev <= 1) { setView('done'); return 0; }
return prev - 1;
});
}, 1000);
return () => clearInterval(interval);
}, [view, goal.type, editingEntryId]);
useEffect(() => {
// Don't auto-complete when editing an existing entry
if (editingEntryId) return;
if (view === 'write' && goal.type === 'words' && wordCount >= goal.value) {
setView('done');
}
if (view === 'write' && goal.type === 'chars' && text.length >= goal.value) {
setView('done');
}
}, [wordCount, text.length, goal, view, editingEntryId]);
// Keyboard navigation in library
useEffect(() => {
if (view !== 'library') {
setFocusedIndex(-1);
return;
}
const handleKeyDown = (e) => {
const list = sortedTexts;
if (!list.length) return;
if (e.key === 'ArrowDown') {
e.preventDefault();
setFocusedIndex(prev => Math.min(prev + 1, list.length - 1));
} else if (e.key === 'ArrowUp') {
e.preventDefault();
setFocusedIndex(prev => Math.max(prev - 1, 0));
} else if (e.key === 'Enter' && focusedIndex >= 0) {
e.preventDefault();
startEdit(list[focusedIndex]);
} else if (e.key === ' ' && focusedIndex >= 0) {
e.preventDefault();
toggleSelect(list[focusedIndex].id);
} else if (e.key === 'Escape') {
setFocusedIndex(-1);
} else if (e.key === 'p' && focusedIndex >= 0) {
e.preventDefault();
togglePin(list[focusedIndex].id);
} else if (e.key === 'Delete' && focusedIndex >= 0) {
e.preventDefault();
if (confirm('Delete this entry?')) {
deleteEntry(list[focusedIndex].id);
setFocusedIndex(prev => Math.min(prev, list.length - 2));
}
}
};
window.addEventListener('keydown', handleKeyDown);
return () => window.removeEventListener('keydown', handleKeyDown);
}, [view, sortedTexts, focusedIndex]);
const showUI = useCallback(() => {
setUiVisible(true);
if (fadeTimer.current) clearTimeout(fadeTimer.current);
fadeTimer.current = setTimeout(() => setUiVisible(false), 2500);
}, []);
const onKeyDown = (e) => {
showUI();
if (e.key === 'Enter') {
playSound('return');
} else if (e.key === ' ' || e.key === 'Backspace') {
playSound('space');
} else if (e.key.length === 1) {
playSound('key');
}
};
// Fullscreen only on desktop - causes layout issues on mobile
const enterFullScreen = () => {
if (isMobile) return; // Skip on mobile
const el = document.documentElement;
if (el.requestFullscreen) {
el.requestFullscreen().catch(() => {});
} else if (el.webkitRequestFullscreen) {
el.webkitRequestFullscreen();
}
};
const exitFullScreen = () => {
if (isMobile) return; // Skip on mobile
if (document.fullscreenElement && document.exitFullscreen) {
document.exitFullscreen().catch(() => {});
} else if (document.webkitFullscreenElement && document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
};
const begin = () => {
setStarted(Date.now());
if (goal.type === 'time') setTimeLeft(goal.value * 60);
enterFullScreen();
setView('write');
// Only auto-focus on desktop - on mobile let user tap to focus
if (!isMobile) setTimeout(() => editorRef.current?.focus({ preventScroll: true }), 80);
};
const fmt = (s) => `${Math.floor(s / 60)}:${(s % 60).toString().padStart(2, '0')}`;
const progress = goal.type === 'time'
? ((goal.value * 60 - timeLeft) / (goal.value * 60)) * 100
: goal.type === 'chars'
? Math.min((text.length / goal.value) * 100, 100)
: Math.min((wordCount / goal.value) * 100, 100);
const buttonBase = {
fontFamily: '"Inter", sans-serif',
fontSize: '11px',
fontWeight: 500,
letterSpacing: '0.06em',
textTransform: 'uppercase',
cursor: 'pointer',
transition: 'all 0.2s ease',
borderRadius: '6px'
};
const primaryButton = { ...buttonBase, background: th.text, border: 'none', color: th.bg, padding: 'var(--button-padding)' };
const secondaryButton = { ...buttonBase, background: 'transparent', border: `1px solid ${th.text}`, color: th.text, padding: '12px 20px' };
const ghostButton = { ...buttonBase, background: 'transparent', border: `1px solid ${th.subtle}`, color: th.muted, padding: '10px 18px' };
const fullScreen = {
width: '100%',
maxWidth: '100%',
minWidth: 0,
height: '100%',
overflow: 'hidden',
display: 'flex',
flexDirection: 'column',
boxSizing: 'border-box'
};
// ═══════════════════ HOME ═══════════════════
if (view === 'home') {
return (
<div style={{
...fullScreen,
background: th.bg,
color: th.text,
justifyContent: 'center',
padding: 'var(--page-padding)',
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
transition: 'background 0.3s ease, color 0.3s ease',
overflowY: 'auto',
overflowX: 'hidden'
}}>
<Notification />
<style>{`
::selection { background: ${th.accent}18; }
input[type="range"] { -webkit-appearance: none; appearance: none; width: 100%; height: 1px; background: ${th.subtle}; cursor: pointer; }
input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; width: 14px; height: 14px; background: ${th.text}; border-radius: 50%; cursor: grab; }
input[type="range"]::-webkit-slider-thumb:active { cursor: grabbing; }
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
input[type="number"] { -moz-appearance: textfield; }
`}</style>
<div style={{ width: '100%', maxWidth: 'var(--max-width-home)', minWidth: 0, margin: '0 auto', boxSizing: 'border-box', overflow: 'hidden' }}>
<h1 style={{
fontFamily: '"Libre Baskerville", Georgia, serif',
fontSize: 'var(--title-size)',
fontWeight: 400,
textAlign: 'center',
marginBottom: 'var(--gap-large)',
letterSpacing: '0.01em'
}}>
write
</h1>
<div style={{ display: 'flex', justifyContent: 'center', gap: 'var(--gap-medium)', marginBottom: 'var(--gap-medium)' }}>
{['time', 'words', 'chars'].map(t => (
<button
key={t}
onClick={() => setGoal({ ...goal, type: t, value: t === 'time' ? 25 : t === 'words' ? 750 : 3750 })}
style={{
background: 'none',
border: 'none',
fontFamily: '"Inter", sans-serif',
fontSize: '11px',
fontWeight: 500,
letterSpacing: '0.08em',