backpack-backbone 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- backbone/__init__.py +30 -0
- backbone/app.py +26 -0
- backbone/datetime_parse.py +224 -0
- backbone/deps.py +98 -0
- backbone/files.py +61 -0
- backbone/keyboard.py +148 -0
- backbone/keys.py +271 -0
- backbone/log.py +61 -0
- backbone/nav.py +17 -0
- backbone/notify.py +36 -0
- backbone/numbering.py +182 -0
- backbone/output.py +216 -0
- backbone/procs.py +60 -0
- backbone/prompt/__init__.py +20 -0
- backbone/prompt/audio.py +496 -0
- backbone/prompt/chrome.py +238 -0
- backbone/prompt/core.py +1562 -0
- backbone/prompt/dates.py +555 -0
- backbone/prompt/keymap.py +143 -0
- backbone/prompt/list_edit.py +974 -0
- backbone/prompt/lists.py +1280 -0
- backbone/prompt/text.py +356 -0
- backbone/prompt/timezone.py +1543 -0
- backbone/prompt/values.py +581 -0
- backbone/terminal_input.py +60 -0
- backbone/timefmt.py +34 -0
- backbone/ui.py +1044 -0
- backpack_backbone-0.2.0.dist-info/METADATA +177 -0
- backpack_backbone-0.2.0.dist-info/RECORD +32 -0
- backpack_backbone-0.2.0.dist-info/WHEEL +5 -0
- backpack_backbone-0.2.0.dist-info/licenses/LICENSE +21 -0
- backpack_backbone-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,1543 @@
|
|
|
1
|
+
"""Timezone data, world map rendering, and the timezone_select widget."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
import re
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
# Runs on its own too: `python3 -m backbone.prompt.timezone`.
|
|
7
|
+
from backbone import prompt as _prompt # shared widget chrome (hints/transport)
|
|
8
|
+
from backbone.prompt.core import (
|
|
9
|
+
_Widget, _read_key, _wait_for_keypress,
|
|
10
|
+
_set_raw, _restore_term_attrs, _get_term_attrs,
|
|
11
|
+
_visible_rows, _cols, C,
|
|
12
|
+
)
|
|
13
|
+
from backbone import keys, ui
|
|
14
|
+
from backbone.nav import QuitToTerminal
|
|
15
|
+
|
|
16
|
+
_TIMEZONES = [
|
|
17
|
+
# UTC-12
|
|
18
|
+
(-12, 0, 0.2, -176.5, "Etc/GMT+12", "IDLW", "International Date Line West", False),
|
|
19
|
+
# UTC-11
|
|
20
|
+
(-11, 0, -14.3, -170.7, "Pacific/Pago_Pago", "SST", "Pago Pago", True),
|
|
21
|
+
(-11, 0, -13.3, -176.2, "Pacific/Niue", "NUT", "Alofi", True),
|
|
22
|
+
# UTC-10
|
|
23
|
+
(-10, 0, 21.3, -157.8, "Pacific/Honolulu", "HST", "Honolulu", False),
|
|
24
|
+
(-10, 0, 20.9, -156.5, "Pacific/Honolulu", "HST", "Maui", False),
|
|
25
|
+
(-10, 0, -17.5, -149.6, "Pacific/Tahiti", "TAHT", "Papeete", True),
|
|
26
|
+
(-10, 0, -21.2, -159.8, "Pacific/Rarotonga", "CKT", "Avarua", True),
|
|
27
|
+
# UTC-9:30
|
|
28
|
+
( -9, 30, -9.4, -139.0, "Pacific/Marquesas", "MART", "Nuku Hiva", False),
|
|
29
|
+
# UTC-9
|
|
30
|
+
( -9, 0, 61.2, -149.9, "America/Anchorage", "AKST/AKDT", "Anchorage", False),
|
|
31
|
+
( -9, 0, 64.8, -147.7, "America/Anchorage", "AKST/AKDT", "Fairbanks", False),
|
|
32
|
+
( -9, 0, 57.0, -135.3, "America/Sitka", "AKST/AKDT", "Sitka", False),
|
|
33
|
+
# UTC-8
|
|
34
|
+
( -8, 0, 34.0, -118.2, "America/Los_Angeles", "PST/PDT", "Los Angeles", False),
|
|
35
|
+
( -8, 0, 37.8, -122.4, "America/Los_Angeles", "PST/PDT", "San Francisco", False),
|
|
36
|
+
( -8, 0, 47.6, -122.3, "America/Los_Angeles", "PST/PDT", "Seattle", False),
|
|
37
|
+
( -8, 0, 45.5, -122.7, "America/Los_Angeles", "PST/PDT", "Portland", False),
|
|
38
|
+
( -8, 0, 49.2, -123.1, "America/Vancouver", "PST/PDT", "Vancouver", False),
|
|
39
|
+
( -8, 0, 32.7, -117.2, "America/Los_Angeles", "PST/PDT", "San Diego", False),
|
|
40
|
+
( -8, 0, 36.7, -119.8, "America/Los_Angeles", "PST/PDT", "Fresno", False),
|
|
41
|
+
( -8, 0, 38.6, -121.5, "America/Los_Angeles", "PST/PDT", "Sacramento", False),
|
|
42
|
+
# UTC-7
|
|
43
|
+
( -7, 0, 51.1, -114.1, "America/Edmonton", "MST/MDT", "Calgary", False),
|
|
44
|
+
( -7, 0, 39.7, -104.9, "America/Denver", "MST/MDT", "Denver", False),
|
|
45
|
+
( -7, 0, 40.8, -111.9, "America/Denver", "MST/MDT", "Salt Lake City", False),
|
|
46
|
+
( -7, 0, 35.1, -106.7, "America/Denver", "MST/MDT", "Albuquerque", False),
|
|
47
|
+
( -7, 0, 32.3, -110.9, "America/Phoenix", "MST", "Tucson", False),
|
|
48
|
+
( -7, 0, 33.4, -112.1, "America/Phoenix", "MST", "Phoenix", False),
|
|
49
|
+
( -7, 0, 51.0, -114.1, "America/Edmonton", "MST/MDT", "Edmonton", False),
|
|
50
|
+
( -7, 0, 19.0, -103.3, "America/Mazatlan", "MST/MDT", "Guadalajara", False),
|
|
51
|
+
( -7, 0, 23.2, -106.4, "America/Mazatlan", "MST/MDT", "Mazatlán", False),
|
|
52
|
+
( -7, 0, 29.1, -110.9, "America/Hermosillo", "MST", "Hermosillo", False),
|
|
53
|
+
# UTC-6
|
|
54
|
+
( -6, 0, 41.8, -87.6, "America/Chicago", "CST/CDT", "Chicago", False),
|
|
55
|
+
( -6, 0, 29.8, -95.4, "America/Chicago", "CST/CDT", "Houston", False),
|
|
56
|
+
( -6, 0, 32.8, -96.8, "America/Chicago", "CST/CDT", "Dallas", False),
|
|
57
|
+
( -6, 0, 44.9, -93.1, "America/Chicago", "CST/CDT", "Minneapolis", False),
|
|
58
|
+
( -6, 0, 38.6, -90.2, "America/Chicago", "CST/CDT", "St. Louis", False),
|
|
59
|
+
( -6, 0, 29.9, -90.1, "America/Chicago", "CST/CDT", "New Orleans", False),
|
|
60
|
+
( -6, 0, 49.9, -97.1, "America/Winnipeg", "CST/CDT", "Winnipeg", False),
|
|
61
|
+
( -6, 0, 19.4, -99.1, "America/Mexico_City", "CST/CDT", "Mexico City", True),
|
|
62
|
+
( -6, 0, 20.9, -89.6, "America/Merida", "CST/CDT", "Mérida", False),
|
|
63
|
+
( -6, 0, 25.7, -100.3, "America/Monterrey", "CST/CDT", "Monterrey", False),
|
|
64
|
+
( -6, 0, 22.2, -97.8, "America/Monterrey", "CST/CDT", "Tampico", False),
|
|
65
|
+
( -6, 0, 52.1, -106.7, "America/Regina", "CST", "Regina", False),
|
|
66
|
+
( -6, 0, 13.7, -89.2, "America/El_Salvador", "CST", "San Salvador", True),
|
|
67
|
+
( -6, 0, 14.6, -90.5, "America/Guatemala", "CST", "Guatemala City", True),
|
|
68
|
+
( -6, 0, 14.1, -87.2, "America/Tegucigalpa", "CST", "Tegucigalpa", True),
|
|
69
|
+
( -6, 0, 12.1, -86.3, "America/Managua", "CST", "Managua", True),
|
|
70
|
+
( -6, 0, 9.9, -84.1, "America/Costa_Rica", "CST", "San José", True),
|
|
71
|
+
( -6, 0, 17.3, -89.9, "America/Belize", "CST", "Belmopan", True),
|
|
72
|
+
( -6, 0, 36.2, -86.8, "America/Chicago", "CST/CDT", "Nashville", False),
|
|
73
|
+
# UTC-5
|
|
74
|
+
( -5, 0, 40.7, -74.0, "America/New_York", "EST/EDT", "New York", False),
|
|
75
|
+
( -5, 0, 42.4, -71.1, "America/New_York", "EST/EDT", "Boston", False),
|
|
76
|
+
( -5, 0, 25.8, -80.2, "America/New_York", "EST/EDT", "Miami", False),
|
|
77
|
+
( -5, 0, 39.9, -75.2, "America/New_York", "EST/EDT", "Philadelphia", False),
|
|
78
|
+
( -5, 0, 38.9, -77.0, "America/New_York", "EST/EDT", "Washington DC", True),
|
|
79
|
+
( -5, 0, 43.7, -79.4, "America/Toronto", "EST/EDT", "Toronto", False),
|
|
80
|
+
( -5, 0, 45.4, -75.7, "America/Toronto", "EST/EDT", "Ottawa", False),
|
|
81
|
+
( -5, 0, 45.5, -73.6, "America/Toronto", "EST/EDT", "Montreal", False),
|
|
82
|
+
( -5, 0, 30.3, -81.7, "America/New_York", "EST/EDT", "Jacksonville", False),
|
|
83
|
+
( -5, 0, 4.7, -74.1, "America/Bogota", "COT", "Bogotá", True),
|
|
84
|
+
( -5, 0, 6.3, -75.6, "America/Bogota", "COT", "Medellín", False),
|
|
85
|
+
( -5, 0, 3.4, -76.5, "America/Bogota", "COT", "Cali", False),
|
|
86
|
+
( -5, 0, -12.0, -77.0, "America/Lima", "PET", "Lima", True),
|
|
87
|
+
( -5, 0, -8.1, -79.0, "America/Lima", "PET", "Trujillo", False),
|
|
88
|
+
( -5, 0, 9.0, -79.5, "America/Panama", "EST", "Panama City", True),
|
|
89
|
+
( -5, 0, -0.2, -78.5, "America/Guayaquil", "ECT", "Quito", True),
|
|
90
|
+
( -5, 0, -2.2, -79.9, "America/Guayaquil", "ECT", "Guayaquil", False),
|
|
91
|
+
( -5, 0, 18.0, -76.8, "America/Jamaica", "EST", "Kingston", True),
|
|
92
|
+
( -5, 0, 18.5, -72.3, "America/Port-au-Prince", "EST/EDT", "Port-au-Prince", True),
|
|
93
|
+
# UTC-4:30
|
|
94
|
+
( -4, 0, 10.5, -66.9, "America/Caracas", "VET", "Caracas", True),
|
|
95
|
+
# UTC-4
|
|
96
|
+
( -4, 0, 44.6, -63.6, "America/Halifax", "AST/ADT", "Halifax", False),
|
|
97
|
+
( -4, 0, 17.1, -61.8, "America/Antigua", "AST", "St. John's (Antigua)", True),
|
|
98
|
+
( -4, 0, 13.1, -59.6, "America/Barbados", "AST", "Bridgetown", True),
|
|
99
|
+
( -4, 0, 10.7, -61.5, "America/Port_of_Spain", "AST", "Port of Spain", True),
|
|
100
|
+
( -4, 0, 18.5, -69.9, "America/Santo_Domingo", "AST", "Santo Domingo", True),
|
|
101
|
+
( -4, 0, 32.3, -64.8, "Atlantic/Bermuda", "AST/ADT", "Hamilton", True),
|
|
102
|
+
( -4, 0, -33.5, -70.7, "America/Santiago", "CLT/CLST", "Santiago", True),
|
|
103
|
+
( -4, 0, -16.5, -68.1, "America/La_Paz", "BOT", "La Paz", True),
|
|
104
|
+
( -4, 0, -3.1, -60.0, "America/Manaus", "AMT", "Manaus", False),
|
|
105
|
+
( -4, 0, -33.0, -71.6, "America/Santiago", "CLT/CLST", "Valparaíso", False),
|
|
106
|
+
( -4, 0, 6.8, -58.2, "America/Guyana", "GYT", "Georgetown", True),
|
|
107
|
+
# UTC-3:30
|
|
108
|
+
( -3, 30, 47.6, -52.7, "America/St_Johns", "NST/NDT", "St. John's (NL)", False),
|
|
109
|
+
# UTC-3
|
|
110
|
+
( -3, 0, -23.0, -43.2, "America/Sao_Paulo", "BRT/BRST", "Rio de Janeiro", False),
|
|
111
|
+
( -3, 0, -1.5, -48.5, "America/Belem", "BRT", "Belém", False),
|
|
112
|
+
( -3, 0, -2.5, -44.3, "America/Fortaleza", "BRT", "São Luís", False),
|
|
113
|
+
( -3, 0, -34.9, -56.2, "America/Montevideo", "UYT", "Montevideo", True),
|
|
114
|
+
( -3, 0, -34.6, -58.4, "America/Argentina/Buenos_Aires", "ART", "Buenos Aires", True),
|
|
115
|
+
( -3, 0, -31.4, -64.2, "America/Argentina/Cordoba", "ART", "Córdoba", False),
|
|
116
|
+
( -3, 0, -15.8, -47.9, "America/Sao_Paulo", "BRT/BRST", "Brasília", True),
|
|
117
|
+
( -3, 0, -23.5, -46.6, "America/Sao_Paulo", "BRT/BRST", "São Paulo", False),
|
|
118
|
+
( -3, 0, -3.7, -38.5, "America/Fortaleza", "BRT", "Fortaleza", False),
|
|
119
|
+
( -3, 0, -12.9, -38.4, "America/Bahia", "BRT", "Salvador", False),
|
|
120
|
+
( -3, 0, -8.0, -34.9, "America/Recife", "BRT", "Recife", False),
|
|
121
|
+
( -3, 0, 5.8, -55.2, "America/Paramaribo", "SRT", "Paramaribo", True),
|
|
122
|
+
( -3, 0, 4.9, -52.3, "America/Cayenne", "GFT", "Cayenne", False),
|
|
123
|
+
# UTC-2
|
|
124
|
+
( -2, 0, -54.3, -36.5, "Atlantic/South_Georgia", "GST", "South Georgia", False),
|
|
125
|
+
( -2, 0, -3.8, -32.4, "America/Noronha", "FNT", "Fernando de Noronha", False),
|
|
126
|
+
# UTC-1
|
|
127
|
+
( -1, 0, 37.7, -25.7, "Atlantic/Azores", "AZOT/AZOST","Ponta Delgada", False),
|
|
128
|
+
( -1, 0, 14.9, -23.5, "Atlantic/Cape_Verde", "CVT", "Praia", True),
|
|
129
|
+
# UTC+0
|
|
130
|
+
( 0, 0, 11.8, -15.6, "Africa/Bissau", "GMT", "Bissau", True),
|
|
131
|
+
( 0, 0, 51.5, -0.1, "Europe/London", "GMT/BST", "London", True),
|
|
132
|
+
( 0, 0, 53.3, -6.3, "Europe/Dublin", "GMT/IST", "Dublin", True),
|
|
133
|
+
( 0, 0, 51.5, -3.2, "Europe/London", "GMT/BST", "Cardiff", False),
|
|
134
|
+
( 0, 0, 55.9, -3.2, "Europe/London", "GMT/BST", "Edinburgh", False),
|
|
135
|
+
( 0, 0, 53.8, -1.5, "Europe/London", "GMT/BST", "Leeds", False),
|
|
136
|
+
( 0, 0, 53.5, -2.2, "Europe/London", "GMT/BST", "Manchester", False),
|
|
137
|
+
( 0, 0, 52.5, -1.9, "Europe/London", "GMT/BST", "Birmingham", False),
|
|
138
|
+
( 0, 0, 64.1, -21.9, "Atlantic/Reykjavik", "GMT", "Reykjavik", True),
|
|
139
|
+
( 0, 0, 5.6, -0.2, "Africa/Accra", "GMT", "Accra", True),
|
|
140
|
+
( 0, 0, 12.4, -1.5, "Africa/Ouagadougou", "GMT", "Ouagadougou", True),
|
|
141
|
+
( 0, 0, 12.7, -8.0, "Africa/Bamako", "GMT", "Bamako", True),
|
|
142
|
+
( 0, 0, 15.6, -32.4, "Africa/Dakar", "GMT", "Dakar", True),
|
|
143
|
+
( 0, 0, 11.9, -15.6, "Africa/Bissau", "GMT", "Conakry", True),
|
|
144
|
+
( 0, 0, 8.5, -13.2, "Africa/Freetown", "GMT", "Freetown", True),
|
|
145
|
+
( 0, 0, 6.3, -10.8, "Africa/Monrovia", "GMT", "Monrovia", True),
|
|
146
|
+
( 0, 0, 5.3, -4.0, "Africa/Abidjan", "GMT", "Yamoussoukro", True),
|
|
147
|
+
( 0, 0, 5.4, -3.9, "Africa/Abidjan", "GMT", "Abidjan", False),
|
|
148
|
+
( 0, 0, 38.7, -9.1, "Europe/Lisbon", "WET/WEST", "Lisbon", True),
|
|
149
|
+
( 0, 0, 41.2, -8.6, "Europe/Lisbon", "WET/WEST", "Porto", False),
|
|
150
|
+
( 0, 0, 0.3, 6.7, "Africa/Sao_Tome", "GMT", "São Tomé", True),
|
|
151
|
+
# UTC+1
|
|
152
|
+
( 1, 0, 33.6, -7.6, "Africa/Casablanca", "WET/WEST", "Casablanca", False),
|
|
153
|
+
( 1, 0, 34.0, -6.8, "Africa/Casablanca", "WET/WEST", "Rabat", True),
|
|
154
|
+
( 1, 0, 6.4, 2.3, "Africa/Porto-Novo", "WAT", "Porto-Novo", True),
|
|
155
|
+
( 1, 0, 6.4, 2.4, "Africa/Lagos", "WAT", "Cotonou", False),
|
|
156
|
+
( 1, 0, 13.5, 2.1, "Africa/Niamey", "WAT", "Niamey", True),
|
|
157
|
+
( 1, 0, 48.9, 2.3, "Europe/Paris", "CET/CEST", "Paris", True),
|
|
158
|
+
( 1, 0, 43.3, 5.4, "Europe/Paris", "CET/CEST", "Marseille", False),
|
|
159
|
+
( 1, 0, 45.7, 4.8, "Europe/Paris", "CET/CEST", "Lyon", False),
|
|
160
|
+
( 1, 0, 43.6, 1.4, "Europe/Paris", "CET/CEST", "Toulouse", False),
|
|
161
|
+
( 1, 0, 52.5, 13.4, "Europe/Berlin", "CET/CEST", "Berlin", True),
|
|
162
|
+
( 1, 0, 53.6, 10.0, "Europe/Berlin", "CET/CEST", "Hamburg", False),
|
|
163
|
+
( 1, 0, 48.1, 11.6, "Europe/Berlin", "CET/CEST", "Munich", False),
|
|
164
|
+
( 1, 0, 50.9, 6.9, "Europe/Berlin", "CET/CEST", "Cologne", False),
|
|
165
|
+
( 1, 0, 50.1, 8.7, "Europe/Berlin", "CET/CEST", "Frankfurt", False),
|
|
166
|
+
( 1, 0, 53.1, 8.8, "Europe/Berlin", "CET/CEST", "Bremen", False),
|
|
167
|
+
( 1, 0, 51.5, 7.5, "Europe/Berlin", "CET/CEST", "Dortmund", False),
|
|
168
|
+
( 1, 0, 41.9, 12.5, "Europe/Rome", "CET/CEST", "Rome", True),
|
|
169
|
+
( 1, 0, 45.5, 9.2, "Europe/Rome", "CET/CEST", "Milan", False),
|
|
170
|
+
( 1, 0, 40.8, 14.3, "Europe/Rome", "CET/CEST", "Naples", False),
|
|
171
|
+
( 1, 0, 45.4, 12.3, "Europe/Rome", "CET/CEST", "Venice", False),
|
|
172
|
+
( 1, 0, 43.8, 11.2, "Europe/Rome", "CET/CEST", "Florence", False),
|
|
173
|
+
( 1, 0, 40.4, -3.7, "Europe/Madrid", "CET/CEST", "Madrid", True),
|
|
174
|
+
( 1, 0, 41.4, 2.2, "Europe/Madrid", "CET/CEST", "Barcelona", False),
|
|
175
|
+
( 1, 0, 39.5, -0.4, "Europe/Madrid", "CET/CEST", "Valencia", False),
|
|
176
|
+
( 1, 0, 37.4, -5.9, "Europe/Madrid", "CET/CEST", "Seville", False),
|
|
177
|
+
( 1, 0, 36.7, -4.4, "Europe/Madrid", "CET/CEST", "Málaga", False),
|
|
178
|
+
( 1, 0, 47.4, 8.5, "Europe/Zurich", "CET/CEST", "Zurich", False),
|
|
179
|
+
( 1, 0, 46.9, 7.5, "Europe/Zurich", "CET/CEST", "Bern", True),
|
|
180
|
+
( 1, 0, 46.2, 6.1, "Europe/Zurich", "CET/CEST", "Geneva", False),
|
|
181
|
+
( 1, 0, 50.8, 4.4, "Europe/Brussels", "CET/CEST", "Brussels", True),
|
|
182
|
+
( 1, 0, 51.2, 4.4, "Europe/Brussels", "CET/CEST", "Antwerp", False),
|
|
183
|
+
( 1, 0, 52.4, 4.9, "Europe/Amsterdam", "CET/CEST", "Amsterdam", True),
|
|
184
|
+
( 1, 0, 51.9, 4.5, "Europe/Amsterdam", "CET/CEST", "Rotterdam", False),
|
|
185
|
+
( 1, 0, 52.1, 5.1, "Europe/Amsterdam", "CET/CEST", "Utrecht", False),
|
|
186
|
+
( 1, 0, 59.9, 10.7, "Europe/Oslo", "CET/CEST", "Oslo", True),
|
|
187
|
+
( 1, 0, 60.4, 5.3, "Europe/Oslo", "CET/CEST", "Bergen", False),
|
|
188
|
+
( 1, 0, 57.7, 12.0, "Europe/Stockholm", "CET/CEST", "Gothenburg", False),
|
|
189
|
+
( 1, 0, 59.3, 18.1, "Europe/Stockholm", "CET/CEST", "Stockholm", True),
|
|
190
|
+
( 1, 0, 55.7, 12.6, "Europe/Copenhagen", "CET/CEST", "Copenhagen", True),
|
|
191
|
+
( 1, 0, 56.2, 10.2, "Europe/Copenhagen", "CET/CEST", "Aarhus", False),
|
|
192
|
+
( 1, 0, 52.2, 21.0, "Europe/Warsaw", "CET/CEST", "Warsaw", True),
|
|
193
|
+
( 1, 0, 50.1, 19.9, "Europe/Warsaw", "CET/CEST", "Kraków", False),
|
|
194
|
+
( 1, 0, 50.0, 14.4, "Europe/Prague", "CET/CEST", "Prague", True),
|
|
195
|
+
( 1, 0, 47.5, 19.0, "Europe/Budapest", "CET/CEST", "Budapest", True),
|
|
196
|
+
( 1, 0, 48.1, 17.1, "Europe/Bratislava", "CET/CEST", "Bratislava", True),
|
|
197
|
+
( 1, 0, 46.1, 14.5, "Europe/Ljubljana", "CET/CEST", "Ljubljana", True),
|
|
198
|
+
( 1, 0, 45.8, 16.0, "Europe/Zagreb", "CET/CEST", "Zagreb", True),
|
|
199
|
+
( 1, 0, 43.8, 18.4, "Europe/Sarajevo", "CET/CEST", "Sarajevo", True),
|
|
200
|
+
( 1, 0, 42.4, 19.3, "Europe/Podgorica", "CET/CEST", "Podgorica", True),
|
|
201
|
+
( 1, 0, 42.0, 21.4, "Europe/Skopje", "CET/CEST", "Skopje", True),
|
|
202
|
+
( 1, 0, 41.3, 19.8, "Europe/Tirane", "CET/CEST", "Tirana", True),
|
|
203
|
+
( 1, 0, 6.5, 3.4, "Africa/Lagos", "WAT", "Lagos", False),
|
|
204
|
+
( 1, 0, 9.1, 7.5, "Africa/Lagos", "WAT", "Abuja", True),
|
|
205
|
+
( 1, 0, 3.9, 11.5, "Africa/Douala", "WAT", "Yaoundé", True),
|
|
206
|
+
( 1, 0, 4.4, 9.7, "Africa/Douala", "WAT", "Douala", False),
|
|
207
|
+
( 1, 0, 4.4, 18.6, "Africa/Bangui", "WAT", "Bangui", True),
|
|
208
|
+
( 1, 0, 12.1, 15.1, "Africa/Ndjamena", "WAT", "N'Djamena", True),
|
|
209
|
+
( 1, 0, 0.4, 9.5, "Africa/Libreville", "WAT", "Libreville", True),
|
|
210
|
+
( 1, 0, 3.8, 8.8, "Africa/Malabo", "WAT", "Malabo", True),
|
|
211
|
+
( 1, 0, 36.8, 10.2, "Africa/Tunis", "CET", "Tunis", True),
|
|
212
|
+
( 1, 0, 44.8, 20.5, "Europe/Belgrade", "CET/CEST", "Belgrade", True),
|
|
213
|
+
( 1, 0, 43.9, 17.7, "Europe/Sarajevo", "CET/CEST", "Mostar", False),
|
|
214
|
+
( 1, 0, 42.7, 21.2, "Europe/Belgrade", "CET/CEST", "Pristina", True),
|
|
215
|
+
( 1, 0, -4.3, 15.3, "Africa/Kinshasa", "WAT", "Kinshasa", True),
|
|
216
|
+
# UTC+2
|
|
217
|
+
( 2, 0, 32.9, 13.2, "Africa/Tripoli", "EET", "Tripoli", True),
|
|
218
|
+
( 2, 0, 37.9, 23.7, "Europe/Athens", "EET/EEST", "Athens", True),
|
|
219
|
+
( 2, 0, 40.6, 22.9, "Europe/Athens", "EET/EEST", "Thessaloniki", False),
|
|
220
|
+
( 2, 0, 30.0, 31.2, "Africa/Cairo", "EET", "Cairo", True),
|
|
221
|
+
( 2, 0, 31.2, 29.9, "Africa/Cairo", "EET", "Alexandria", False),
|
|
222
|
+
( 2, 0, -26.2, 28.0, "Africa/Johannesburg", "SAST", "Johannesburg", False),
|
|
223
|
+
( 2, 0, -33.9, 18.4, "Africa/Johannesburg", "SAST", "Cape Town", False),
|
|
224
|
+
( 2, 0, -29.9, 30.9, "Africa/Johannesburg", "SAST", "Durban", False),
|
|
225
|
+
( 2, 0, -25.7, 28.2, "Africa/Johannesburg", "SAST", "Pretoria", True),
|
|
226
|
+
( 2, 0, -25.9, 32.6, "Africa/Maputo", "CAT", "Maputo", True),
|
|
227
|
+
( 2, 0, -18.9, 32.7, "Africa/Harare", "CAT", "Harare", True),
|
|
228
|
+
( 2, 0, -15.4, 28.3, "Africa/Lusaka", "CAT", "Lusaka", True),
|
|
229
|
+
( 2, 0, -24.7, 25.9, "Africa/Gaborone", "CAT", "Gaborone", True),
|
|
230
|
+
( 2, 0, -22.6, 17.1, "Africa/Windhoek", "WAT/WAST", "Windhoek", True),
|
|
231
|
+
( 2, 0, -29.4, 27.5, "Africa/Maseru", "SAST", "Maseru", True),
|
|
232
|
+
( 2, 0, -26.3, 31.1, "Africa/Mbabane", "SAST", "Mbabane", True),
|
|
233
|
+
( 2, 0, 50.5, 30.5, "Europe/Kiev", "EET/EEST", "Kyiv", True),
|
|
234
|
+
( 2, 0, 49.8, 24.0, "Europe/Kiev", "EET/EEST", "Lviv", False),
|
|
235
|
+
( 2, 0, 46.5, 30.7, "Europe/Kiev", "EET/EEST", "Odessa", False),
|
|
236
|
+
( 2, 0, 56.9, 24.1, "Europe/Riga", "EET/EEST", "Riga", True),
|
|
237
|
+
( 2, 0, 54.7, 25.3, "Europe/Vilnius", "EET/EEST", "Vilnius", True),
|
|
238
|
+
( 2, 0, 59.4, 24.7, "Europe/Tallinn", "EET/EEST", "Tallinn", True),
|
|
239
|
+
( 2, 0, 60.2, 25.0, "Europe/Helsinki", "EET/EEST", "Helsinki", True),
|
|
240
|
+
( 2, 0, 60.4, 25.7, "Europe/Helsinki", "EET/EEST", "Tampere", False),
|
|
241
|
+
( 2, 0, 44.4, 26.1, "Europe/Bucharest", "EET/EEST", "Bucharest", True),
|
|
242
|
+
( 2, 0, 44.2, 28.6, "Europe/Bucharest", "EET/EEST", "Constanța", False),
|
|
243
|
+
( 2, 0, 42.7, 23.3, "Europe/Sofia", "EET/EEST", "Sofia", True),
|
|
244
|
+
( 2, 0, 42.1, 24.7, "Europe/Sofia", "EET/EEST", "Plovdiv", False),
|
|
245
|
+
( 2, 0, 31.8, 35.2, "Asia/Jerusalem", "IST/IDT", "Jerusalem", True),
|
|
246
|
+
( 2, 0, 32.1, 34.8, "Asia/Jerusalem", "IST/IDT", "Tel Aviv", False),
|
|
247
|
+
( 2, 0, 33.9, 35.5, "Asia/Beirut", "EET/EEST", "Beirut", True),
|
|
248
|
+
( 2, 0, 15.6, 32.5, "Africa/Khartoum", "EAT", "Khartoum", True),
|
|
249
|
+
( 2, 0, 4.9, 31.6, "Africa/Juba", "EAT", "Juba", True),
|
|
250
|
+
( 2, 0, -13.0, 27.8, "Africa/Lusaka", "CAT", "Lilongwe", True),
|
|
251
|
+
( 2, 0, -1.7, 29.2, "Africa/Kigali", "CAT", "Kigali", True),
|
|
252
|
+
( 2, 0, -3.4, 29.4, "Africa/Bujumbura", "CAT", "Bujumbura", True),
|
|
253
|
+
# UTC+3
|
|
254
|
+
( 3, 0, 33.5, 36.3, "Asia/Damascus", "EET/EEST", "Damascus", True),
|
|
255
|
+
( 3, 0, 32.0, 36.0, "Asia/Amman", "EET/EEST", "Amman", True),
|
|
256
|
+
( 3, 0, 2.0, 45.3, "Africa/Mogadishu", "EAT", "Mogadishu", True),
|
|
257
|
+
( 3, 0, 55.7, 37.6, "Europe/Moscow", "MSK", "Moscow", True),
|
|
258
|
+
( 3, 0, 59.9, 30.3, "Europe/Moscow", "MSK", "St. Petersburg", False),
|
|
259
|
+
( 3, 0, 53.9, 27.6, "Europe/Minsk", "FET", "Minsk", True),
|
|
260
|
+
( 3, 0, 24.7, 46.7, "Asia/Riyadh", "AST", "Riyadh", True),
|
|
261
|
+
( 3, 0, 21.5, 39.2, "Asia/Riyadh", "AST", "Jeddah", False),
|
|
262
|
+
( 3, 0, 25.3, 51.5, "Asia/Qatar", "AST", "Doha", True),
|
|
263
|
+
( 3, 0, 26.2, 50.6, "Asia/Bahrain", "AST", "Manama", True),
|
|
264
|
+
( 3, 0, 15.3, 38.9, "Africa/Asmara", "EAT", "Asmara", True),
|
|
265
|
+
( 3, 0, 11.6, 43.1, "Africa/Djibouti", "EAT", "Djibouti", True),
|
|
266
|
+
( 3, 0, -1.3, 36.8, "Africa/Nairobi", "EAT", "Nairobi", True),
|
|
267
|
+
( 3, 0, -4.0, 39.7, "Africa/Nairobi", "EAT", "Mombasa", False),
|
|
268
|
+
( 3, 0, 41.0, 28.9, "Europe/Istanbul", "TRT", "Istanbul", False),
|
|
269
|
+
( 3, 0, 39.9, 32.9, "Europe/Istanbul", "TRT", "Ankara", True),
|
|
270
|
+
( 3, 0, 38.4, 27.1, "Europe/Istanbul", "TRT", "Izmir", False),
|
|
271
|
+
( 3, 0, 9.0, 38.7, "Africa/Addis_Ababa", "EAT", "Addis Ababa", True),
|
|
272
|
+
( 3, 0, -6.2, 35.7, "Africa/Dar_es_Salaam", "EAT", "Dodoma", True),
|
|
273
|
+
( 3, 0, -6.8, 39.3, "Africa/Dar_es_Salaam", "EAT", "Dar es Salaam", False),
|
|
274
|
+
( 3, 0, 0.3, 32.6, "Africa/Kampala", "EAT", "Kampala", True),
|
|
275
|
+
# UTC+3:30
|
|
276
|
+
( 3, 30, 35.7, 51.4, "Asia/Tehran", "IRST/IRDT", "Tehran", True),
|
|
277
|
+
( 3, 30, 32.7, 51.7, "Asia/Tehran", "IRST/IRDT", "Isfahan", False),
|
|
278
|
+
( 3, 30, 36.3, 59.6, "Asia/Tehran", "IRST/IRDT", "Mashhad", False),
|
|
279
|
+
# UTC+4
|
|
280
|
+
( 4, 0, 24.5, 54.4, "Asia/Dubai", "GST", "Abu Dhabi", True),
|
|
281
|
+
( 4, 0, 23.6, 58.6, "Asia/Muscat", "GST", "Muscat", True),
|
|
282
|
+
( 4, 0, 25.2, 55.3, "Asia/Dubai", "GST", "Dubai", False),
|
|
283
|
+
( 4, 0, 25.3, 55.5, "Asia/Dubai", "GST", "Sharjah", False),
|
|
284
|
+
( 4, 0, 40.4, 49.8, "Asia/Baku", "AZT", "Baku", True),
|
|
285
|
+
( 4, 0, 41.7, 44.8, "Asia/Tbilisi", "GET", "Tbilisi", True),
|
|
286
|
+
( 4, 0, 40.2, 44.5, "Asia/Yerevan", "AMT", "Yerevan", True),
|
|
287
|
+
( 4, 0, 53.2, 50.2, "Europe/Samara", "SAMT", "Samara", False),
|
|
288
|
+
( 4, 0, -20.2, 57.5, "Indian/Mauritius", "MUT", "Port Louis", True),
|
|
289
|
+
( 4, 0, -4.6, 55.5, "Indian/Mahe", "SCT", "Victoria", True),
|
|
290
|
+
# UTC+4:30
|
|
291
|
+
( 4, 30, 34.5, 69.2, "Asia/Kabul", "AFT", "Kabul", True),
|
|
292
|
+
( 4, 30, 31.6, 65.7, "Asia/Kabul", "AFT", "Kandahar", False),
|
|
293
|
+
# UTC+5
|
|
294
|
+
( 5, 0, 56.8, 60.6, "Asia/Yekaterinburg", "YEKT", "Yekaterinburg", False),
|
|
295
|
+
( 5, 0, 37.9, 58.4, "Asia/Ashgabat", "TMT", "Ashgabat", True),
|
|
296
|
+
( 5, 0, 24.9, 67.0, "Asia/Karachi", "PKT", "Karachi", False),
|
|
297
|
+
( 5, 0, 33.7, 73.1, "Asia/Karachi", "PKT", "Islamabad", True),
|
|
298
|
+
( 5, 0, 31.5, 74.3, "Asia/Karachi", "PKT", "Lahore", False),
|
|
299
|
+
( 5, 0, 34.0, 71.6, "Asia/Karachi", "PKT", "Peshawar", False),
|
|
300
|
+
( 5, 0, 41.3, 69.3, "Asia/Tashkent", "UZT", "Tashkent", True),
|
|
301
|
+
( 5, 0, 39.7, 66.9, "Asia/Samarkand", "UZT", "Samarkand", False),
|
|
302
|
+
( 5, 0, 37.6, 61.8, "Asia/Ashgabat", "TMT", "Mary", False),
|
|
303
|
+
( 5, 0, 43.3, 76.9, "Asia/Almaty", "ALMT", "Almaty", False),
|
|
304
|
+
( 5, 0, 51.2, 71.4, "Asia/Almaty", "ALMT", "Astana", True),
|
|
305
|
+
( 5, 0, 54.7, 56.0, "Asia/Yekaterinburg", "YEKT", "Ufa", False),
|
|
306
|
+
( 5, 0, 54.8, 56.0, "Asia/Yekaterinburg", "YEKT", "Chelyabinsk", False),
|
|
307
|
+
# UTC+5:30
|
|
308
|
+
( 5, 30, 19.1, 72.9, "Asia/Kolkata", "IST", "Mumbai", False),
|
|
309
|
+
( 5, 30, 28.6, 77.2, "Asia/Kolkata", "IST", "Delhi", True),
|
|
310
|
+
( 5, 30, 22.6, 88.4, "Asia/Kolkata", "IST", "Kolkata", False),
|
|
311
|
+
( 5, 30, 12.9, 77.6, "Asia/Kolkata", "IST", "Bangalore", False),
|
|
312
|
+
( 5, 30, 13.1, 80.3, "Asia/Kolkata", "IST", "Chennai", False),
|
|
313
|
+
( 5, 30, 17.4, 78.5, "Asia/Kolkata", "IST", "Hyderabad", False),
|
|
314
|
+
( 5, 30, 23.0, 72.6, "Asia/Kolkata", "IST", "Ahmedabad", False),
|
|
315
|
+
( 5, 30, 18.5, 73.9, "Asia/Kolkata", "IST", "Pune", False),
|
|
316
|
+
( 5, 30, 6.9, 79.9, "Asia/Colombo", "IST", "Colombo", False),
|
|
317
|
+
( 5, 30, 7.0, 80.0, "Asia/Colombo", "IST", "Sri Jayawardenepura Kotte", True),
|
|
318
|
+
# UTC+5:45
|
|
319
|
+
( 5, 45, 27.7, 85.3, "Asia/Kathmandu", "NPT", "Kathmandu", True),
|
|
320
|
+
# UTC+6
|
|
321
|
+
( 6, 0, 42.9, 74.6, "Asia/Bishkek", "KGT", "Bishkek", True),
|
|
322
|
+
( 6, 0, 55.0, 73.4, "Asia/Omsk", "OMST", "Omsk", False),
|
|
323
|
+
( 6, 0, 23.7, 90.4, "Asia/Dhaka", "BST", "Dhaka", True),
|
|
324
|
+
( 6, 0, 22.3, 91.8, "Asia/Dhaka", "BST", "Chittagong", False),
|
|
325
|
+
( 6, 0, 27.5, 90.4, "Asia/Thimphu", "BTT", "Thimphu", True),
|
|
326
|
+
( 6, 0, 43.8, 87.6, "Asia/Urumqi", "CST", "Urumqi", False),
|
|
327
|
+
# UTC+6:30
|
|
328
|
+
( 6, 30, 16.8, 96.2, "Asia/Rangoon", "MMT", "Yangon", False),
|
|
329
|
+
( 6, 30, 21.9, 96.1, "Asia/Rangoon", "MMT", "Naypyidaw", True),
|
|
330
|
+
# UTC+7
|
|
331
|
+
( 7, 0, 55.0, 82.9, "Asia/Novosibirsk", "NOVT", "Novosibirsk", False),
|
|
332
|
+
( 7, 0, 13.7, 100.5, "Asia/Bangkok", "ICT", "Bangkok", True),
|
|
333
|
+
( 7, 0, 18.8, 102.6, "Asia/Vientiane", "ICT", "Vientiane", True),
|
|
334
|
+
( 7, 0, 11.6, 104.9, "Asia/Phnom_Penh", "ICT", "Phnom Penh", True),
|
|
335
|
+
( 7, 0, 21.0, 105.8, "Asia/Ho_Chi_Minh", "ICT", "Hanoi", True),
|
|
336
|
+
( 7, 0, 10.8, 106.7, "Asia/Ho_Chi_Minh", "ICT", "Ho Chi Minh City", False),
|
|
337
|
+
( 7, 0, 16.1, 108.2, "Asia/Ho_Chi_Minh", "ICT", "Da Nang", False),
|
|
338
|
+
( 7, 0, -6.2, 106.8, "Asia/Jakarta", "WIB", "Jakarta", True),
|
|
339
|
+
( 7, 0, -7.2, 112.7, "Asia/Jakarta", "WIB", "Surabaya", False),
|
|
340
|
+
( 7, 0, -6.9, 107.6, "Asia/Jakarta", "WIB", "Bandung", False),
|
|
341
|
+
( 7, 0, 56.0, 92.8, "Asia/Krasnoyarsk", "KRAT", "Krasnoyarsk", False),
|
|
342
|
+
# UTC+8
|
|
343
|
+
( 8, 0, 39.9, 116.4, "Asia/Shanghai", "CST", "Beijing", True),
|
|
344
|
+
( 8, 0, 31.2, 121.5, "Asia/Shanghai", "CST", "Shanghai", False),
|
|
345
|
+
( 8, 0, 23.1, 113.3, "Asia/Shanghai", "CST", "Guangzhou", False),
|
|
346
|
+
( 8, 0, 22.3, 114.2, "Asia/Hong_Kong", "HKT", "Hong Kong", False),
|
|
347
|
+
( 8, 0, 22.2, 113.5, "Asia/Macau", "CST", "Macau", False),
|
|
348
|
+
( 8, 0, 22.6, 120.3, "Asia/Taipei", "CST", "Kaohsiung", False),
|
|
349
|
+
( 8, 0, 25.0, 121.5, "Asia/Taipei", "CST", "Taipei", True),
|
|
350
|
+
( 8, 0, 30.6, 104.1, "Asia/Shanghai", "CST", "Chengdu", False),
|
|
351
|
+
( 8, 0, 36.1, 103.8, "Asia/Shanghai", "CST", "Lanzhou", False),
|
|
352
|
+
( 8, 0, 34.3, 108.9, "Asia/Shanghai", "CST", "Xi'an", False),
|
|
353
|
+
( 8, 0, 29.6, 106.6, "Asia/Shanghai", "CST", "Chongqing", False),
|
|
354
|
+
( 8, 0, 3.1, 101.7, "Asia/Kuala_Lumpur", "MYT", "Kuala Lumpur", True),
|
|
355
|
+
( 8, 0, 5.4, 100.3, "Asia/Kuala_Lumpur", "MYT", "Penang", False),
|
|
356
|
+
( 8, 0, 1.3, 103.8, "Asia/Singapore", "SGT", "Singapore", True),
|
|
357
|
+
( 8, 0, 14.6, 121.0, "Asia/Manila", "PHT", "Manila", True),
|
|
358
|
+
( 8, 0, 10.3, 123.9, "Asia/Manila", "PHT", "Cebu", False),
|
|
359
|
+
( 8, 0, -8.6, 115.2, "Asia/Makassar", "WITA", "Denpasar", False),
|
|
360
|
+
( 8, 0, -5.1, 119.4, "Asia/Makassar", "WITA", "Makassar", False),
|
|
361
|
+
( 8, 0, -31.9, 115.9, "Australia/Perth", "AWST", "Perth", False),
|
|
362
|
+
( 8, 0, 47.9, 106.9, "Asia/Ulaanbaatar", "ULAT", "Ulaanbaatar", True),
|
|
363
|
+
( 8, 0, 52.3, 104.3, "Asia/Irkutsk", "IRKT", "Irkutsk", False),
|
|
364
|
+
( 8, 0, 1.5, 110.3, "Asia/Kuching", "MYT", "Kuching", False),
|
|
365
|
+
( 8, 0, 5.8, 116.1, "Asia/Kuching", "MYT", "Kota Kinabalu", False),
|
|
366
|
+
( 8, 0, 4.9, 115.0, "Asia/Brunei", "BNT", "Bandar Seri Begawan", True),
|
|
367
|
+
# UTC+9
|
|
368
|
+
( 9, 0, -8.5, 125.6, "Asia/Dili", "TLT", "Dili", True),
|
|
369
|
+
( 9, 0, 35.7, 139.7, "Asia/Tokyo", "JST", "Tokyo", True),
|
|
370
|
+
( 9, 0, 34.7, 135.5, "Asia/Tokyo", "JST", "Osaka", False),
|
|
371
|
+
( 9, 0, 35.2, 136.9, "Asia/Tokyo", "JST", "Nagoya", False),
|
|
372
|
+
( 9, 0, 43.1, 141.3, "Asia/Tokyo", "JST", "Sapporo", False),
|
|
373
|
+
( 9, 0, 33.6, 130.4, "Asia/Tokyo", "JST", "Fukuoka", False),
|
|
374
|
+
( 9, 0, 37.6, 127.0, "Asia/Seoul", "KST", "Seoul", True),
|
|
375
|
+
( 9, 0, 35.1, 129.0, "Asia/Seoul", "KST", "Busan", False),
|
|
376
|
+
( 9, 0, 39.0, 125.8, "Asia/Pyongyang", "KST", "Pyongyang", True),
|
|
377
|
+
( 9, 0, 62.0, 129.7, "Asia/Yakutsk", "YAKT", "Yakutsk", False),
|
|
378
|
+
( 9, 0, -8.6, 125.6, "Asia/Dili", "TLT", "Kupang", False),
|
|
379
|
+
( 9, 0, -0.9, 134.1, "Asia/Jayapura", "WIT", "Jayapura", False),
|
|
380
|
+
( 9, 0, 7.4, 134.5, "Pacific/Palau", "PWT", "Ngerulmud", True),
|
|
381
|
+
# UTC+9:30
|
|
382
|
+
( 9, 30, -34.9, 138.6, "Australia/Adelaide", "ACST/ACDT", "Adelaide", False),
|
|
383
|
+
( 9, 30, -12.4, 130.8, "Australia/Darwin", "ACST", "Darwin", False),
|
|
384
|
+
# UTC+10
|
|
385
|
+
( 10, 0, -33.9, 151.2, "Australia/Sydney", "AEST/AEDT", "Sydney", False),
|
|
386
|
+
( 10, 0, -37.8, 145.0, "Australia/Melbourne", "AEST/AEDT", "Melbourne", False),
|
|
387
|
+
( 10, 0, -27.5, 153.0, "Australia/Brisbane", "AEST", "Brisbane", False),
|
|
388
|
+
( 10, 0, -35.3, 149.1, "Australia/Sydney", "AEST/AEDT", "Canberra", True),
|
|
389
|
+
( 10, 0, 43.1, 131.9, "Asia/Vladivostok", "VLAT", "Vladivostok", False),
|
|
390
|
+
( 10, 0, 13.5, 144.8, "Pacific/Guam", "ChST", "Hagåtña", True),
|
|
391
|
+
# UTC+10:30
|
|
392
|
+
( 10, 30, -31.5, 159.1, "Australia/Lord_Howe", "LHST/LHDT", "Lord Howe Island", False),
|
|
393
|
+
# UTC+11
|
|
394
|
+
( 11, 0, 6.9, 158.2, "Pacific/Pohnpei", "PONT", "Palikir", True),
|
|
395
|
+
( 11, 0, -9.4, 160.0, "Pacific/Guadalcanal", "SBT", "Honiara", True),
|
|
396
|
+
( 11, 0, -17.7, 168.3, "Pacific/Efate", "VUT", "Port Vila", True),
|
|
397
|
+
( 11, 0, -22.3, 166.5, "Pacific/Noumea", "NCT", "Nouméa", False),
|
|
398
|
+
( 11, 0, 59.6, 150.8, "Asia/Magadan", "MAGT", "Magadan", False),
|
|
399
|
+
( 11, 0, 47.0, 142.7, "Asia/Sakhalin", "SAKT", "Yuzhno-Sakhalinsk", False),
|
|
400
|
+
# UTC+12
|
|
401
|
+
( 12, 0, -36.9, 174.8, "Pacific/Auckland", "NZST/NZDT", "Auckland", False),
|
|
402
|
+
( 12, 0, -41.3, 174.8, "Pacific/Auckland", "NZST/NZDT", "Wellington", True),
|
|
403
|
+
( 12, 0, -43.5, 172.6, "Pacific/Auckland", "NZST/NZDT", "Christchurch", False),
|
|
404
|
+
( 12, 0, -18.1, 178.4, "Pacific/Fiji", "FJT", "Suva", True),
|
|
405
|
+
( 12, 0, 53.0, 158.7, "Asia/Kamchatka", "PETT", "Petropavlovsk-Kamchatsky", False),
|
|
406
|
+
( 12, 0, 64.7, 177.5, "Asia/Anadyr", "ANAT", "Anadyr", False),
|
|
407
|
+
( 12, 0, -8.5, 179.2, "Pacific/Funafuti", "TVT", "Funafuti", True),
|
|
408
|
+
( 12, 0, 7.1, 171.4, "Pacific/Majuro", "MHT", "Majuro", True),
|
|
409
|
+
( 12, 0, 7.3, 168.7, "Pacific/Kwajalein", "MHT", "Kwajalein", False),
|
|
410
|
+
# UTC+12:45
|
|
411
|
+
( 12, 45, -43.9, -176.6, "Pacific/Chatham", "CHAST/CHADT","Waitangi", False),
|
|
412
|
+
# UTC+13
|
|
413
|
+
( 13, 0, -21.1, -175.2, "Pacific/Tongatapu", "TOT", "Nuku'alofa", True),
|
|
414
|
+
( 13, 0, -13.8, -172.0, "Pacific/Apia", "WST", "Apia", True),
|
|
415
|
+
( 13, 0, -9.4, -171.2, "Pacific/Fakaofo", "TKT", "Fakaofo", False),
|
|
416
|
+
# UTC+14
|
|
417
|
+
( 14, 0, 1.9, 157.5, "Pacific/Kiritimati", "LINT", "Kiritimati", False),
|
|
418
|
+
]
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
# Pre-computed 2880×1440 land/sea bitmap (0.125°/pixel, zlib+base64), built from
|
|
422
|
+
# Natural Earth 110m coastlines. Each bit = 1 land, 0 sea. Row-major, top = 90°N,
|
|
423
|
+
# left = 180°W: column c → lon = −180 + (c+0.5)×(360/2880), row r → lat =
|
|
424
|
+
# 90 − (r+0.5)×(180/1440). Decoded lazily by `_get_world_bitmap`.
|
|
425
|
+
_WORLD_MAP_DATA = (
|
|
426
|
+
"eNrtvc3KLjcW71dqNa0TaKyGDLIDZqsvoTM6HjgtX4ohN2DI4HjgY5VpSA99Cb6NDA6xnB54csDT"
|
|
427
|
+
"jGJtfKAnAcsYjsu4XJWnvlXfJZWkUj2PBO22937f+vjV0lr/tfSVJLHFFltsscUWW2yxxRZbbLHF"
|
|
428
|
+
"FltsscUWW2yxxRZbbLHFFltsscUWW2yxxRZbbLHFFltsscUWW2yxxRZbbLHFFltsscUWW2yxxRZb"
|
|
429
|
+
"bLHFFltsscUWW2yxxRbbLRss28YjC4cNlErLIg9XDZcR9PlGynzzb8uMlRG0NTNd/hlULrQIWqex"
|
|
430
|
+
"Kb58xzMPTUZ6hta8YtO0jKBPtiWExYFvseVlYpv5jLnbWNDHbA2ziAiPtEd0e7fILx1+5j9scC4i"
|
|
431
|
+
"QrMQuMCv8sEsQraV3s3dBqrdL6n+i216ldh2fEa5oSKa8CjqikY6+VkJGvEHIvAzmPOhYFQ0lpzT"
|
|
432
|
+
"RbcRZd2RLHtDQ8w+wm9LP0ibjAZEV62ZnvRSY/0jzEMhiQLPxG9k23nJ9IdhTAx3mpbfWPtRGEtK"
|
|
433
|
+
"po6jSI5z/iaK6Z2aRrGqnsVGml1uK25fT89vZMvpCs3iuHe+qG7HNscjQvPNYkVUiI00cVN3+BSk"
|
|
434
|
+
"NzFoUicjcCVHofqc07MPdPxDgZWRiGDLR3ylwo/0MZ8Szw9wP2k4HmLlw/qsH9XloYmXlht6bytP"
|
|
435
|
+
"32/547Mu/w0sf9HwBDeqe6OxRhjLBjfm/LiqZCs0oY594hvJdTwSY3jsNogLrUG2hrmwThglNxov"
|
|
436
|
+
"6wOdePwPTDwAcyGc0ZaLgVpyhd2nBN5bl2RzD0BcpChg08dQA6eX3clvzMrKaWIg63ZuVgl1SW0p"
|
|
437
|
+
"wE6N3iHP74VzQZbSDWozR0EP961k+eeFL7D1wbzpukdDSwFNM+3Odnp5XrlUAazl5+UNHbRYAkYs"
|
|
438
|
+
"qjrcGz2zZYU3CoSD48AL8YxaDINI6SvUjhij5X0ywv79v5jTQjbDILQ/Qay9ZApDHcLBCszWKCSc"
|
|
439
|
+
"ZRvIaqkOOJjD2zx7ykJNvrFitZ2Roam9QcvFDXs1vcm3S4LVdlhxD52NsQlnbcx7dspcDAVUl4MB"
|
|
440
|
+
"VpPo8HhpU+ttpQKbhDNovYhEtYp6hzVH3vTE0PRy0bveKjvLOjNDE14GmPc4I1cjLji88ihunSOp"
|
|
441
|
+
"uzmpzKB+ypyM+78J5r1XdZa+0fA4k/Z5Grsi/Rig6jbMxgUPvCrr3T+y+lIs5GSlGkDBNZvKoFM8"
|
|
442
|
+
"KiFBJ5xx5zaIVZsGQScrsNL3Chu8NEfULmfYXh7Ytb4Q5QYZxBcpufrCQJV1yAnnZBhAsJnAofAq"
|
|
443
|
+
"0EDtYOAhOHo0g34WBoWNg5xxG2WJVYN+P8xaxuTNs7bvCaLKAeCEc/35mnH0555UiqbqFQ1c/zlS"
|
|
444
|
+
"t8gJZ1xfHzrQ0H8LB3JRq4xZDOFj+83nabK90W7WJOfYugrDoeiN1pIh3yvyiKWChKVJMsCVw4DB"
|
|
445
|
+
"zP+iO0/C5qz0DfpI1ccJZxYKZ1ge5CwWypj2phUQN0oXBpOnkBXOnZKlM7dhIjjkAcchPL6d/7bm"
|
|
446
|
+
"PtvIT2YTa00ywkPuyyAC8gNuI4zKKFopw4PWguecDbyzONTDtfs33e8mwQzHEsV7soHHmy4TJnPR"
|
|
447
|
+
"oD3pK3dmItm+N6rf7/qqHVOHo7L+DYq2eqRC5aOij71RqxMer9jtJHX77vI5YLAtR6qZdv0GbZcT"
|
|
448
|
+
"zaP+OqLFHLhns56Y7VgzDGW3lXbYtS3FNR2c/Ngab/t/iNds02ReKL1uoRU7wI6Gs3tQk6SgtoRf"
|
|
449
|
+
"DP63jYHpYpng8pVWh+aDwoC2w2rqkK3KbD95zxmtReo3oyhzwQJNtmehj0fn9Gg4ph40Nu07WLUm"
|
|
450
|
+
"858d9Zoz2Ls/uYgz3pVri7tUbF3Ny4BA263axY0953qu7AF56psz2L0o0FnASHx5FdA6O7zAOetw"
|
|
451
|
+
"rmc5rtcOrsQ3sV+SOcaZ+prD2wYMDhW+PEGiG5Zn66/FLuCMdkQ50JSXzNfk/9n8ZlbdtJljvxNF"
|
|
452
|
+
"yAWc2U6OSTQ5939NHZOe1TBYs3vXWICe4SytW0Wib87FNudqNUHmzZ77fJBMlVFqztmqatrrIES3"
|
|
453
|
+
"U7HuIZ2PCWDZeb2i5/xgLMguZ+zdnNGOOetn//0qZeSjWK1ORQNFo+nwrjYD3u0ZbQdBqB8jhlVe"
|
|
454
|
+
"zH0VBE8tFrUCZMccqO+8G25LA2TwrWlHF7ovgsw/ZbXyCe4WN48p6NQuZxOxsSGPkcfKx0qs3V0K"
|
|
455
|
+
"BX3ng8goRbl8ot2n/fOtJ19yPwf2FwjJdoXTQ48yc8ryvMPxOqKy88jM69CZVqHgXIylXinvuY01"
|
|
456
|
+
"/3zt5EiyKQfYIZ1A/MoNuuMDUBkgaLQlLeExQthvGNwbgFqNyxxe56Lhivd6rzdUefhb+XEcWynb"
|
|
457
|
+
"IyT/sPEQbOtrE7dV0RXRRjOcN463un3VT//+8CLcWNjZ67Rg/avtPgjvlkg+3mb2+ZwGSjDLSWkF"
|
|
458
|
+
"FQx7YbQ5Ei4TdiLzFlb9szB0YO/6WMFKUU6vyj34Z3WOYltSKkD7VNV+OlUOztYMyev8DbDu7Xc5"
|
|
459
|
+
"/6Jwnnwtx4lM92j5Hwb1IJo/zkDrWKt/dLt+pUbCrrBsGScCcvvbbPpUjjn3C3xo60E/R5W11ONX"
|
|
460
|
+
"zWLYeo/E2imSNT9LPBbrqpvldjj7nHDXVbhR+3Vx+Wvnn1PQPMvj6bNa4a1GeuzPa2wa3tFZUt02"
|
|
461
|
+
"hx4rHl0grjalfpMk/MH785Y/B91C4OoztJv35EbCznKxTozhanP2n4qDYZ+p7PHAsNqg579W6pm0"
|
|
462
|
+
"TjmtvW+zDxVnqWElSdgNKHzSI3kzAVCbs+qgqVPOcNg37cdqlKrSGFn3wGmz83rVxb5qNbDUK5E5"
|
|
463
|
+
"KG/MinXNeJM4yRm4te6Wc7cLIqt8Q949sGwq0opVIqMhld9tvsI0DIK6/zd1eu31oxPX7q4Cgroo"
|
|
464
|
+
"2GdM/ezRstrtU4z3ViVGAloSu5yzOWeYHU1MV+KG410FW8MdhJloSnSs/WOuPrwAKyEN7Hlnu5zl"
|
|
465
|
+
"vNYFqzt8CMztmbmdIt0AVmZpVHvH9N2oDuUK5zVXu2dHyR+tZt1y2iNrztXMHnP/TN0ObzWXV3c1"
|
|
466
|
+
"ozXnJkXBxQJEA12X2XV0M86POJihcmGf6uPPRdyKvXaimnJrNuzuLBadgtDPDwq7HTCb3lsmJKvf"
|
|
467
|
+
"hBpzxm4XV9QPliko825FSm3P+QLn3KC+wa0GlGx6b5FUR37ot+pVPp5xdjEYUDuFDC1QKetJX2LO"
|
|
468
|
+
"uVhN3n1Un2ec6wdGpTTaTChpNsQYuz7uKhBmeMEz0H725D5ncsRw3HBu5iYRQ84PpFV5gSclPBpN"
|
|
469
|
+
"DINNMzpB5pxx1RvLYoEznHkwwOlhAWWhAxbT0JBM9tjTWA0NquRssl/7zv0X7f3DAwadTnp+08s/"
|
|
470
|
+
"r9+JLyUhXDsS2hUcfBIaUqqcoKAXCKFmNWZl8wqw22Vxg5UteFO8sJB+5UG2MoRf7cbwcaLSPA8u"
|
|
471
|
+
"zVq+KEmL7e6fLruznfCJZns/9B6om6vEDujhDXPKmUEMX7ePUYGjMUeJDDmXHOvJI7QS0/en89Zz"
|
|
472
|
+
"GtBi1GpjDjjywTcsKse6nMnWy46mD7cLgoAp55yshO2VB4DlavXipwNpAlr8nrhUinebOg3lG29a"
|
|
473
|
+
"QF2txLZ672jaV7fwqnTRFowDZBtltOKQ6pj7hSaWL7owPv2gOd1wgpqcwU44wlPOudkWkbZGJ/Dx"
|
|
474
|
+
"DOfxrGAmD3Dzu2BfQJDtJIUKbUlxMFuHLjlnWmaxLqwm+9WBqV/AreXS3QyPWh0cJMcTM9CvR3PQ"
|
|
475
|
+
"DpZldjMymK+mzwNnsWyu+WHO+kUkdtycAuC8W8/8aDQKRebmOozlkB3HQS0Od+v9VgukvI7zTCbk"
|
|
476
|
+
"aPSLVFYzYt4sk3r8JErx0Hmbvy7oSiTcc49S32kcjJ1NYRe45vx2t/etvS+utKPsFqegubmSRpWm"
|
|
477
|
+
"ylfL8UowpqUtg4aaH6e+cw6dcM7V24hD7nluI63Af4RqvpQ319sh0f6bkmrLiFy9qJy8bWGnXKdY"
|
|
478
|
+
"R755MhVR7Rm55sxWzQVsV9zbNcYob7fqmXNu0tlcrTap5jYttgsr02RGT705TE77MrkzzsXUaAuN"
|
|
479
|
+
"MWje+Oa2p39VuTY57/myPnkR9NfuiwrLNkrq2qSFah067G/az+eSc3N8Wlp1nXVFDTdeGqpzWBqU"
|
|
480
|
+
"M7lBO7nUC46xJy7GH1UCK8Ow9HD8ZM0TufQbyuemqz0TbcR+Ov8jNCVDmrquwlmM5cDobu9vVUa5"
|
|
481
|
+
"gajbdezdgCxbGHizn4CT1a5JN7zOwoVgysY/A7uqoUSJsrkvWuvTwEYUhMeVCmr/tuYM3XLOBpEs"
|
|
482
|
+
"jhfeOVwUXlAZYminJAlYz0riCme85gyghSi4VBrMtj5J2zcz4JZzMbxdnh6fuvLlstfuq5G4QQrq"
|
|
483
|
+
"nXtKyaTCma0ZGrKRd1ONINpeuyneOgatnDwldSYILV6L9r60rbK+bWb/dN66UC0uO1zo18gFwZHu"
|
|
484
|
+
"UO18k+DWwnjz/4ljxyFWvrvJeFk1yFYHRD6+zs/NkqvJ6ejicDxIjVXdcn9o5Bzvt1ZrJ3B4a0Jn"
|
|
485
|
+
"QsVSuELtPKQubn3Sf6/GXeRbkh1aEHUrj11/9zfDp0/r0+tJ9xXPDRCeyhLNyt7JSCjX6z6Iynl8"
|
|
486
|
+
"DD0/aM4GBdGlL4X7jamLJli0P9vo9gz746x2UBN7LvpXTdtrdPNnWiUoRk40PyZvDMarFl8MtjfE"
|
|
487
|
+
"k70Li2bmGvHIWR6bTrHdwfuEpM6l23JoMlTuiFw86B3YqPHjjRcDw/6943t9692ei3OBkPd+NqPt"
|
|
488
|
+
"JchIPvJ2XgVacLzQxogV3XqxBveK3fr0zyOXCc2+EuRJb0ED5xataF63v7bcUwq6sxc3QzxbnkrS"
|
|
489
|
+
"/gAsr3EchgeqMZH0bhX307aLYQTr8aLDy/Kd/qM5GxduPlr92dbcsADlRY7DMDB0lYJm2nb3sdrp"
|
|
490
|
+
"6Em7RcQCR3KyfrTt6/L6AxcbO8V45ay+mKHDKpbnm7HODcBO5E08ND2rNbZNoz3ZZV08evXPqoFZ"
|
|
491
|
+
"dVjvyoFzMbxuse2mdCcU0C3JCrvUb7kjk/Iqx2Hzuj/3nMGofL3NWTcMMmPOuZv5G4dSFft3bjhz"
|
|
492
|
+
"5dJ886tqhkGw+V5gi7O8kDNx55UWSir0XN15z9Ol9boQsK77/GIuvxo6q31FyWeGl21qBU25gbY5"
|
|
493
|
+
"040iM/fN+cvRvl2OnD9aYInOyw28zZlUq6rW5Abwzzk7U4M+5DbwgqNCbuRGRvtPRrYsgPjn3JoR"
|
|
494
|
+
"EbYlZbrk+dP1jyotyA2R9BF4o3tmvs253p+tGXmynIp+q6g0tuAb8JEiEt5kv1xDbIdbN2eS+60i"
|
|
495
|
+
"jeyIWo7B6WwOVDOgsa5u8pGUSJsPJHVlXbvsB22uwxT4Cs554y65VU2ZzoDUAIp1zmLkemWCqpqa"
|
|
496
|
+
"1JUb9WqCarwhL0NpXyt92bpsnxve+DQCsqk2WL2ChGxKarzaOYskKcNpwx4fqX3tXMzzifGGfXhT"
|
|
497
|
+
"1JXdTlfiUBVJTr0PDIgzZ8OjURe+aNLBx2tA4VYuCMp2eGmLM1VuRiYfGAfEuQ8U0oFqz7KpPRfj"
|
|
498
|
+
"s2OXFyDOPoI8Ije48guFo1rNCb9Bh9Bh/yOWM/+cVoa9on6LNYb5EbmhXq0wHVV21jI8nkVr1ymV"
|
|
499
|
+
"M+sU/VD/PJvjqznIgSpSMZtlHZJ7rgDDjrN13f5F+eE0Wj1cA8tW5MI6xXRfbmQzzkHZs2ieRzp5"
|
|
500
|
+
"MNCyAyPfgMWy/C3WOYt9uSHns9lD4pwqnG0HjmrSj5h+wDQBK+OR+bq1in25IUbPX28dG1IcbL+7"
|
|
501
|
+
"dFETrTjnU08pV6v0ct1Y0yNyQ71YveMFDYwz7t7RciDMYYto3TvANfE8epzigNwQ4037cHuqeChy"
|
|
502
|
+
"IxkmR3U7Ddi7OGzvsH665iZnsKvr4Oi3Ffut1WNAfoO3hiN7d2dxcUxTy24N87tF97DJuf8+8kAV"
|
|
503
|
+
"SYziXnXhX8IRdZ93b9u/CZD2stW0m19X0fxmMenb5pysCeuF6oYYeaewRF3fH8/NZVz1/agzRnWa"
|
|
504
|
+
"TK7NuTgymMJH7lgEJTZKvfmX2l8RqZ0eLQU1sMkZ7ai68Z5BI7JBiedlvWSvs4w4J2u1z3XOZMec"
|
|
505
|
+
"kXo3MCmtBJYNak2k0uwrD07ZAJoucWYb5Y2WszhUfJ5uphcUZ+mOczvYLGjvkNFSJ2KbnQtvmvO6"
|
|
506
|
+
"ew6tDbH/gzeW/UYzybuapVJsqQe6HSzQ5vykUe+ht+A8nA6NrLmkapH9A4ZUotZvU86k3E76YH5o"
|
|
507
|
+
"al0eVtVoVdhVBxjanY9UX45m7U6kHZZq/Z5YDmX6m2pjtfeAkDkXqmFxq7WkhjOfqjA84XxocGrf"
|
|
508
|
+
"baQJugnnZoE20D3jYpvz21kR85uJ3wAbcuP4TNEirEHXTQH9ud2K3Xh5dd/PBZ0AZZs508EZjFkS"
|
|
509
|
+
"tNyYGxF18QVV283g5G+oqXuepJI0aM7STY6izghNx/vVJTTVq8kdmYkU2CSCfc7WHT9ROcO6krbs"
|
|
510
|
+
"ZbXdMxvfrbwTZ2viqPcCrJg4Cb4ignU5w/LGnKH16zapEHs40I+S5fMAyp2i3IGJonlwfoOPwnI6"
|
|
511
|
+
"fTtr4kgo2+WAauJ8ihrg841imBlnMklrA+NMx4/30eE1vIZqg1WpMxhc9lxXMLM4OHmRwPRGSjel"
|
|
512
|
+
"l7WHHfXwdouRZmVGsXLPzDwZXNrp9OI22sDXWel5XBNC7YKbxmL/sOIAMnP1vLWVyVV5drlVV7c4"
|
|
513
|
+
"ZKUGV5lsZSLkvD2LkDnnDocGx9BkspVZYzP/POUcTH2jOhImB5tldWvyeTn94VsC7QxnHhDnelmB"
|
|
514
|
+
"st2ydMlZLEKRW5zFSc4kFMzVF1f2vOUOh2BnF9/iDJ6Kc1ZzVhK+I3vgfG+rWMe2Qh0zyrsDjYOi"
|
|
515
|
+
"6qDZkK3mB1Y9FsY+b62fyPWPy0/q50A419ODlY3M5QHOman2L7Q447V69eH18wHlg+1yabZRhp9x"
|
|
516
|
+
"rvaRyk7L513Obb30BOc8GM6VhQFlblRxZLX0l6Z7VORr+bxcdwJnOBfB+I2syRfQciKxwhlvbrJ3"
|
|
517
|
+
"OE05wJnqH8/GZr01mDozHzoXP7CpU0FqS2EWOJMdzuQkZ97+QXZ1eZSPdCxb6aXDau+695Ny7fxR"
|
|
518
|
+
"zXRwzPkvS/0oP8W5FRz55e4jVc01XTkBCpeCTOVGYrq36/pg66dLuco5zu0imPRq91Gor/tQ0dlK"
|
|
519
|
+
"ZjbaykbSzvN9eTLtHnNeQvr5mdkbzfuhxl1dnXV33ffXhw8BK36SSTCs16mdSG6Uj29yhvonku5y"
|
|
520
|
+
"rvcwza5fbCwHXKJ6zU9WSpRp8jFUxwQKs/HZTc7IAecssTzb9VT9DFRpR/rXgwlttcspNxs4XF1x"
|
|
521
|
+
"2fhR+5yl/RHOE5zhoSrv8OyqLDnHmSqcif6J0buc2xsSfp2uqw9/65e7anDmow0c6CnObMSZ2+BM"
|
|
522
|
+
"5je81Jbr5CTvWO1XecEgBVlqOLNDrH27puAjrHH+Uk0PrguB35Ttwo1+vyANzjz5m+lMJbG1UJsZ"
|
|
523
|
+
"zChf4VyMlhZdVUkq2qSglcH12/LjnKX5EK1YS+fz+kKZDc71wXZQrXdfxFkqrlV0b5se4PzvxSIF"
|
|
524
|
+
"Nbn1VGwVzdE8tjh3w53Fle45HQiJ/smODFTA7+tlUfmJqXfZWszqj920wpmPBtLJdV6jbh8Ob3vE"
|
|
525
|
+
"knLw5b//UZ6bSlqslVuLo1/70HzR5nS7/lD26yrO055/zDPC+vxDcWYOzeo3qv2PsYAGv6vLHAvl"
|
|
526
|
+
"0NTLZnDIJWF8LNKDtlOemEu6+o2+MBlzVT5YoVyzO4KmuDLl5ktCQmiIplOTaNK1IPpdWZbmAlqt"
|
|
527
|
+
"U5P+TJb2z8D3Fw28Ljm0w5yLU9OV0s2+IM2D3+D56hXJRB2OJJeGQTVAa3DOTs0L41vjjuYCmkw/"
|
|
528
|
+
"0YgzDSUMHuZMq7OA0xPzSfmmWDEW0HRxoceVnJdLwBqcR1Ukbc5isyMYC2g2/YBYtSkaQBiEpU6g"
|
|
529
|
+
"p9WhF2fm+29zLs05fzFyHG/QwPmDSzgvzxgoDnPmeOmHD3PeWf9pKqCnv5sNnEF+Bed8ZWbGMYMG"
|
|
530
|
+
"9QEE2U5xXYcz2xGdGpzVl2o2NawfFBVX1PizU5xRPStd7M7bPX5/uhM9zDjjZoVRcyL6JftcipUZ"
|
|
531
|
+
"Xcc44/rskfQE55xkDgQ0mHAmDed2M3Z+Aed0ZcSZH3TPMiHF7vw7jUcgVgQ0KCdb4DQrjLqjjNj1"
|
|
532
|
+
"YbDruPxgWBePPrk3/07HdTji3GxvKQ2mmDgKg91jHOJcn04M+dYgra5B2+EMx69WZS207E9iDyEb"
|
|
533
|
+
"BDqCCq9z0LEa6cQ/Z+NuRzvjuYSzOMWZHtoIWKtTEWt6Qyajyii5lHO65ljTQ1ZzaOdUraewxHk8"
|
|
534
|
+
"Yl+2x7+ll3FOznCGG5y1Rq+4df1MRxfthsEu45yf4rw16VuLs1z165k551Tl3GwxnVzFWa729/Rc"
|
|
535
|
+
"GNTjnK3qlMKc88hb8+Q/dXcJIgx2nI+Z84YcAGbuC+yOqh0efxjFwRT/0v1BEGFQh/Pmj+lxzla7"
|
|
536
|
+
"gTTmPJrDmpS/Xcl5eVbJsbov3BzuAGYfHO1HkEPt7cgIykIZW2YhhEENztunOCdmDoyUdhz0+0x1"
|
|
537
|
+
"OdV2Ir93/81CCIO7JwqooSbdUbAGX5wecG1H2puRgGZ5Uv7aXSmEoqgO5x3NhY082KFnPND+MvpN"
|
|
538
|
+
"midMmhmAozDYcs6PuA2+XwLW/ejwyHi8fuJNi4RK7aEea61ITtgzK/ffVNt14NKKQVM5LiSRcjgz"
|
|
539
|
+
"EgURBg/HQbBraNTgaY72ur1PnCej18PlUL0NIwx2nNOzbkN/clW+ZmvaBg2abQ5HnJP6jd5estxY"
|
|
540
|
+
"nLBnuvsjBpzZsRr5gUQ1Hc1S71ci2jzMz4bf2H+1/YRYl3O25mq0UxVSNhsP8eGl0vb/80vm5OZr"
|
|
541
|
+
"deN9l/hJ4oAzORyu94uiWLGWB9/6pAVl4dXVggOdSHZPc0Z2ONflJ6S8RrVRHLtySXeTo844Cxuc"
|
|
542
|
+
"kT5naIVzs1xMLb+g6oRwceEOVCl6oP7MAWf4HYf6TgwcrXbtfuD6WoVCng1rCC9ovIoQf5/V5y1w"
|
|
543
|
+
"7peS+edMuvMOipHxFBdu4CqqtepvZ5y5Fc7UFudUOwy250oY1loctGoN9XuOOBNtzsnusNZxewZK"
|
|
544
|
+
"cYqW17csIQ44A/2D0TbONjHlnJpVtBxpaDYrs4XGWc9x1Atpybvu98LYF7BSPOmUc3pe1ZlxXiny"
|
|
545
|
+
"cH3OtP89EgjnfzrhTFNtQ7LFGfWcr5u3uNC+nXO2kQ3qd9h0lbM4wTmY4zP/PTYXK+653nnNgDO1"
|
|
546
|
+
"wbku1dGu8IuD5WxlFxfEtTlze5y7JVU8ZM5WdiWCQtszCkucUTcNN4T9WlXOYjzuZ4VztWMm0eZM"
|
|
547
|
+
"bHCud4XDL8I5ybQDobRkz/WJ1Gh77OB5OH+oPeZpi3M9nAI7zqwMpvExZyvV57o6pV2AtqLraCVM"
|
|
548
|
+
"SXCcfxxztrQLosEUjtxSnlIdxQn6LhKMNX8XCufSUh2p+i6w7wjhcuZXcV4bGtAcrqwqJd3G94EU"
|
|
549
|
+
"65r6Bh9HkfQqzgKsBkit9re+FsqDqdaVJRo7ClIkV3Fem8TyjUGG2uWDwZQ3CjjhnNvjrBnr1yax"
|
|
550
|
+
"IBOlSRr/HEyaUoAxZyztcdbNEZZ/XlJp2pdkOLIuB2P/h8R1nFfq/8zgkZquIYJxGw+tOeFsLwza"
|
|
551
|
+
"6bQ8MVFAza1TFhLnUZj5QxIY5xSYKKC6KxXhmHN1olaWOGrIittApWkIzvFLcMY2um2eYAOlCcru"
|
|
552
|
+
"ROGAOOeuONuYbSyNOMOyoElQZ88/OBfO3AY/rziEkaLHTbL+Kpy1D3BbCIMJMfBr5JcsPM6lI86P"
|
|
553
|
+
"NPqHMw/WDjqYpCmU2xPwwXN+BKOfzjjmTjr8oq+fiVHi75pz6gg0LTN2wjGjoW5v3KGCadIhZ9Ac"
|
|
554
|
+
"HWvqmNsdCM1nOpDAOHNHnJMzGVkzibr2PmYlF5GUgXEWrjiz0ng8o56mK89w/hSFxbl0x/nE3rT1"
|
|
555
|
+
"yXhFO42Lmtz8cxoSZ2FrpteygpamPpLXiNMTK8BY+TKczR10UU+hrmQwMhkiDJLzP50V7KrzCEzd"
|
|
556
|
+
"mXp6nBHnoNxGyUGZfuCQs6GDrsa+5YDrOTg7w1ztcG3Gmffrs5mZf2YiOM7uMD8imeHrprRdz9oI"
|
|
557
|
+
"w3cGKcrXL8Q5odKMc9JKuzZ3/v7OqWA7/Fa45Iy40RsX/WHioMsOI+et9r7ZG9d1Ea5Makrvzjlx"
|
|
558
|
+
"y5kKozeu63zpE3EuqvOeHDZith2D7H0FfA7OuWvOpRHndz1nrfOJ1AHCsFpWr9hx17DZEOE/znJO"
|
|
559
|
+
"AuMsw+SMx5x/109UAjPox/M79RuoObhYN2qQkU8uM4OEMCzO3LHeQOW3JlGDjjjjdyaJd1jyOXGb"
|
|
560
|
+
"D8LyR1NZp3D+xmBoLSzF0Wz94pKzsdwY2JIvDDgfdtC5B8uvNxLiwXH+15jz5ybPCA8j8MA5qzgL"
|
|
561
|
+
"h5zNxmG/amg/Otpfqovk0KDPHb2z8DHLo+Ysg+PctH/z6hDopBsodCQ4vIwHyCM7k1/J+dNWPDgb"
|
|
562
|
+
"H/SzI3TQnH8Rp5KoPTutZ2fnfiaHPd4E/Boq559LCE48GznCWfhZmVxxlp8GylmWBTzBGR/xGKmf"
|
|
563
|
+
"hKaSS/IDh5zPpL85yeGJogDa9Zloa9M8y+lgkog3gXIuYYZOJKtwPzbVpzn4SQeTxGWacu4txIHj"
|
|
564
|
+
"Q8w5i/oAGy/+2WkJ6TznHJUO7Zk3m2D40Bt52JzPWQJcyjHHPrPU327WVD4HzjmzxXm+PX/9E9zL"
|
|
565
|
+
"gIAInrOwxVmieU95IP4p81E/rYIMSEPmfOLhxmBnW0RkjcL+yQPm+i1AoHqjPu/kTACZcv5+oYRW"
|
|
566
|
+
"JZ2eZB2UYXI+vUXylPM3c8//8BlfeMBcB3OYBcoZntRDY84SfjHXAJU891PlfzxOHibnFJ+M0xN7"
|
|
567
|
+
"BmBuY1We4qH8XHsM5DRZObGujZ5MoyackyXOfjYuFs3jBMlZnl6fNOWczDlT4WVxMm8eJw2RM4dn"
|
|
568
|
+
"DwqYcWazVLjedMu9g06bMq0IkXO1JUxiiXNezneXzj3OEGtvkyUfB8c5e3DObXGu1shkS/Z8YuqD"
|
|
569
|
+
"dhXp8TmBCI5ztQPrSWE/2Gm7eIuslNC8yLrqcX6QoXEuut0KrHBOK1OeOIhMd2D8bLWOOK3bGXZK"
|
|
570
|
+
"YThnY3kctkY5qYBmxwds7VTrguRc/aZxGARyPK+gCYFi/CxZ4i0Q8mA514jfPxEAc9Ud8JpzNvZh"
|
|
571
|
+
"MvEWCFMPnNGJCH3GYUgm1fecCw5uZ+7DYVlXP1UWGOdzzzOKa7zeno/MtsFME1+CIx+8WGicpTWJ"
|
|
572
|
+
"065zIv1ZpmMjS8ae3EH7qn0ZVpalwxnQ+ESEtvFp077TTs7rPG8MxyINbh+BuR2OxScitD3Of8MN"
|
|
573
|
+
"Wbo8ju7QQeddOfTkINxxEeuNM5xzls0Z9cpXL9Y9ut0cpZ2Jaeuc0oA4gxlnKGFzUbCiaNxlKlx5"
|
|
574
|
+
"KJeF/gv8RjLjjCRonT7zzXnoZL86nZV0NefGY2dJOTkttrDwlHqcJXM5EItC8Bs46+YoQM+cC4Uz"
|
|
575
|
+
"kcFxFtY5t8IOLOo6d5zFwFkgl+MpZrWDH6xzboVdsszZmYBOh4cSTidAm3H+ObXKGcnmOdRAmDZ6"
|
|
576
|
+
"TrrlrDyUS8qmnH+1xjlpOYOWLVE593vkIdfuOVDOpS3OLcZ2sDtVPHHapoepS/+cKw+VBsj5nNKc"
|
|
577
|
+
"Ff6qQ9tpY9xEjVB9pHLP2XWDFzzevPAnGpRc4dydL567LNgFzvlkF2NLQhw21NVBQ9x78NI9ZyCD"
|
|
578
|
+
"43zWk7FZHPqoiXWFyvmz1oqlw4ErhTMNjnP+d2uc2y9Wz09pVr/2HqLofyphxANnJp/Xb3Tm/L+1"
|
|
579
|
+
"5yk0awRa91x6aCpnt9PMTZRplljm3Lxj/d600Ril20M/fpi/SRke58QW586caN6PXdHmj6vtmB22"
|
|
580
|
+
"L2ZhGDjWHvqcz1fD2bRj1OeD1I9Sbd9d3aF0OpkgT2YOMDzO50d3ZsPmDed6TIU2r/+5U3POuk+d"
|
|
581
|
+
"eOOMvUdBhXNXiCTtDvQFro5z+f3RnT9lLjl3zr9QORfPa898wjmHElezzkXyN6cyIwWzMOiaM7yS"
|
|
582
|
+
"czrinNAMVAPfOeOOp9R11pWOiltOOQP/nMEaZ5IlH4NGhTjdpCBvvWWR+OOc+Ncb87Gp9iRfLJO/"
|
|
583
|
+
"guYG2G0YJPUBA5lPziwcztWK1JYzcclZVvunoEm+FRzn3FroLaac24GrxPEi2OYobBo459P5KV7j"
|
|
584
|
+
"XK94Ye73UuP1iauhc5bWOOcrnLlje04TXA/gyJD9cyYc2PN/HcboaJ2+YKeYE8K9c9a1nJxb49y/"
|
|
585
|
+
"Ge76bjPgzd3quseNPqsNrBjlEUVgnE/fkcw4/0HhjGuDc5inVDx5H3AHzo7HCjUV1C+lxTtOKiX1"
|
|
586
|
+
"VGTk2p6zwWGmqghyW3/W9YQWOOM1zvXOOdC1f1Y4C5Wz4z3skIF7s+2fO87t8JV0yjkfEmGpPpQI"
|
|
587
|
+
"ivNvpb075kuck/mSeidzvcCUM3fLWTPi/HY+LIO1jAeJhnPhgzMsJ2vIU7ecNQt2v1uQP2wl42G8"
|
|
588
|
+
"j0/Ura5rOecq58Rx08wGc0ec8U/lLwNnx3lKy7lQn8k1Zz3TyT9wxbks//ugt1zmKXlvX4W/8oau"
|
|
589
|
+
"K8w/scdZTB5DtN/9e8ebPieous+nquCBr8j5m9Tt0vkEVw7qr2qigoLjLOxxTid+g7ecReKYM81a"
|
|
590
|
+
"h5kqEFxz1gs558tIPedsqnt4+8oycVuAflxcJF3Fqg9SYXH+3R5nJQy+X78qVwZlXQq7d/2aUKGI"
|
|
591
|
+
"LteckUmwtsFZ8UAV4i7zxc45/9ZwRv0jIPCcnH8ezZJhEjWhr+VcGpQRTQaFBs74nx4460koG9Xw"
|
|
592
|
+
"nwVRwiCsTpv9th3k6EZjXXNuK4Ot68LfeeCsmXin1mJCS7X+94dkTpDK2fFeau0t5CC5imflXIxG"
|
|
593
|
+
"J5P+IIJmJV/LOXM1s6C5txxSYvdHAukOyluJCZOtAtW3ZGmDO4PNLtOuShxjzvlzcubjrqS+Zeun"
|
|
594
|
+
"WcVYAGduQ+HMvHBm/jnDciLdFwbniHw8GXdS6Cg6K1Y4Z845U/+cQTG588Jb4noCqRPO+YRz6cWe"
|
|
595
|
+
"iX/OST7pSZmlKK0zFEs6zsAPZ3wB5ynDzFL00JAbr8OZHEl/mCu5MehnWHrRdcjAFk5rnOl91b/8"
|
|
596
|
+
"o2N7LpIR579DP/YM/XMGoy1NppzR8K+fAGdhsONMyl9KL3oDXKA3qs9F1zjj/h7QybLYTB3BQSuD"
|
|
597
|
+
"71cnKqmlLlQkq7Oc8DCXJXXBeahq8CFIeOCsFWqsuaof1suAXa+BbpYfC5UztRp3rCUqhZvQWyyl"
|
|
598
|
+
"5dXx3W45rw1WXs/ZTljGO5zTxCVn3l1dDk7Tx05JwXHuBXbm1p7TQQSIwDjbSVPIigSYfg6RuNQb"
|
|
599
|
+
"hSJqPbgNnQJH4eiO0md9o+h7S92zitL1nFz9hDBz1IOEnSRKS5uS5kmKxI81a1U4LKlMdtgdOeHM"
|
|
600
|
+
"VQn5r9RDbUP3Zbhvzk4mjgrlzQuU+duW0W82uHA/bqeYqM0ZlRnOPdQ2dN/GVf8RXjlLhfO/ytxH"
|
|
601
|
+
"zq33NtLV7YSdwR7t18ApKgvGk8ActKUHosc7imPOROAyJ2kSmINOnd3NRg5loE6ZJA8P7Q3z0ddx"
|
|
602
|
+
"13vSSzjDMqO/Sn+YD3bPwl00SD0ODyobf5QFFcIjZ+yTM9UYDnPNuaTcI+aD6YAlPc80Lu1k2leh"
|
|
603
|
+
"mFeInKWzMLgqZZxwLhXOHsXGYWFn59Mvl+B+6z7i+67LdQrnh3iGAXJOnd6rlwDuOadDeSNJguNc"
|
|
604
|
+
"uPVRovtb95x5f3nPnIGW7HTDOe8kQOq4LKo4QJYHyFm65dzPsufOOfcqknjmnGg9nSOtLtoHyZxz"
|
|
605
|
+
"7i2GZAFy5p44F47L/MqX9M6ZeZMb65y7U1QUg3bEufcWNETOrmspsncUbsv8So+h0jNnWn7vSdat"
|
|
606
|
+
"c856zqljzuWFnL/1xZlucZ6cUOCaM/PNmTRHxHioIq1zzhWB+bBol/vY9ZyFf87YE2e2FWhB76vr"
|
|
607
|
+
"nJi69hupZ854f0lk5pxzpiRMVY3nE2fbyvTmlbwi59pbdGL64TIKZ6cvdc/yR9+cURCc5cA5Lx22"
|
|
608
|
+
"IrmqQX+c6db7uz0IyParmHDe3RrAA+eSIy+cxWWcQRicJY6cfXDOyZNz3jiRtUg+h744l8wLZxki"
|
|
609
|
+
"5257RFt5irnJFuz+nJlcE1wysbuDkDnn/K0l0Pl1nGm21qGzuh5OA+D8xlp+GCpn/EjPCh/+eWeg"
|
|
610
|
+
"wVa9I72MM8mXDC1tOaMUW+N83CZ/fEbOxUKxN0ve4FZnIGucz0wHILfnjJYKo6L68+7QOktOTaM2"
|
|
611
|
+
"9MuMM749Z7CU86bDlB3ocpb5Qc72zqG4Lg4mTKDFxyn/3JlhaqnjHG6/lb9P7BndnzOVcLN8aIsz"
|
|
612
|
+
"1uFcPh9nMuecj2UC9y3rfp+QFtbKphdyxhnYTE+ZrS3VAuBcXMgZFclmWYva2lJNIz2ecQb35wyL"
|
|
613
|
+
"WQYx6e9Wqi86FlmUP68Na92aM92qtljirBXJ2C9PyLlMyVb10BJncoJzZmudW34tZ7w16sDscNaq"
|
|
614
|
+
"UHz97ylnOwUOeWUcnCWE3AFnvYTu+39PzdBOgSO9kPN8psy0zGZj4Eqv33/HmRPOybWcx29RuOCs"
|
|
615
|
+
"x+MHTidPhO7OGVT+2DlnTf37bv5Ed5cbSRUdyEZQtjJwBXXjFZ76VXxzuVHbK3bNGZ3jLOw4jks5"
|
|
616
|
+
"Vxy3OFsZINSklE1+QdhZ6ZZdyZn44Ix1gcCZ7r25fK4XVqMNzvgCzvkkcGaNMvz2zpyrQj7Y6F31"
|
|
617
|
+
"AvdPTneaU5yLxr+drdqJ5NpAyJMdziw7HQR0BdhM+JLzh7jxSzn/x8d3Zuucq4HY8v/1zplNCYGJ"
|
|
618
|
+
"OdyOM5wI6HyB85de08HKfumMEDkdC9PkWgctR4Ewn6VyCUde08Flzsnp6ujFnFm2xTmp3vokZ6RP"
|
|
619
|
+
"hCxw/ttJztdirjZJcMwZ2+H8yTnOxcWc8TjxLmZ6JEn+5FXWzWd68Y+ry0h6a84od82ZnuX8Rb1H"
|
|
620
|
+
"x0nO+cWc4TZnct4OtPmIiUv/pt47QtyeM9rgjM9z1varclLg+Fc9GVucKyZlV3MeL0edfnZ0Ceex"
|
|
621
|
+
"FPyhWVxwrmonr+ZcjjKAfO6+vXPOJjnJL/ViGXFu3Ftcznm0MCGbuxXvnPMJ59+qh6KiyywFuStn"
|
|
622
|
+
"vM4ZZAm8gDObca43gWn2ITUaxeLjvWIv4DyaYLwQLiD3zHlWSKoeanT+iVHa/fnlnOFmuEAnOZc2"
|
|
623
|
+
"OEPlyYziYXPc8pWcRxNflzgLz5zLKWdZ2bA0L0zV3w5cyxm45gxM+jidcsaqRzPiDC/OvKsAsxmW"
|
|
624
|
+
"sXfOfM6ZqIrToKKU28gEzpV5hPrgC0zhOYmPTDQYmXKmJznLyzlX5kq2OINznLEJFDKfAl2cqJhU"
|
|
625
|
+
"74UvrnBUCSHelPPnOBMj41sYmT3FOfW/u/bMf6bKa9nnbABlmngXk4EnYiJhruacPF4AOuRsFLSW"
|
|
626
|
+
"fkuc4JxfsOvzzOC4Yj5LnM/NkzGrYdKtERFodMWrOY8Eh7DvloxqmGSzFGRQaj0/3ee04JCK+QTB"
|
|
627
|
+
"OVtWKfmZobDk8go0yhTzCZlzYa4VkwA4Q5Uzt351M85ocwqGbu5TJBfsrr3EGa9w/uNVnOHmlCKo"
|
|
628
|
+
"f8EAOEvFQPhU/J6NHsgiZ24qYkQInIFQXotPc+biAs75ilvnpoKj+kV/B0kfiVZ8lstx/5zLFc7C"
|
|
629
|
+
"VHAkoXBOljlbGJA3HGRKtucGLGaEGdmawuj99IPjnGG1ZWB2AWe+zDnfFnYZ3poiQ4LgzJY4o/LR"
|
|
630
|
+
"ffNzHtpocHplz41i++tly9/096YbkBAw9w5vxBk3i2/8c872OBMNzlnj1m0fQP+hRc5ZbeenAojR"
|
|
631
|
+
"pJZ8z28sxkEJt2Z8vWeZ82f2OFehg57MxY3mahV7nBd1nQRbM5H+ZJnzm1NmN2JaNv3+lOIwmw23"
|
|
632
|
+
"/HvZ5td7u3LYQBJSW+T8pklx8/A4k+Oi21k5FKQnwpVc6PhFKJzlVnRNF272S+lw3aDRPC20+vX/"
|
|
633
|
+
"RM/0PMPVwmmynQ+i5b+bXYY5dBvQCmfWV8foGZNwxBkue+FZOEUOlw1CcYJzPvw3732huIAz26qL"
|
|
634
|
+
"LriVpT/N3U72Qul5zkzlXHrnzBc5j/LXb/c5SxvLESx/mzFnoAQQfEZBG3PeHPCunBlasHU29TNu"
|
|
635
|
+
"ORukhHjMGSmc0SkFbeo3yDZnkh3gnDrmTM05F8N/pkPMOeGgmaGuI1vpYBWEljjT6VWQ08kExCrn"
|
|
636
|
+
"6unNozY15Iy3Oc8kx8LNctecz5TVhv9Ufbe5QRNDv4H2Mju44FNm00xhaJzpjHOhxrLs/Ac8z/kv"
|
|
637
|
+
"u5zxNH2EMlTOaffAufpGhXfOcK8gBBd8CppyBtwpNWHevXn3n5nqN8w5I0PO8wBabHHOFv5MOLfO"
|
|
638
|
+
"3JyzmHMmZ0p2xpypFmexoNYrk3G7WKIw796yQzt4NvrzCb1hzJlsy40J53RBradWtlvYTMLMOWdz"
|
|
639
|
+
"zjWunAq/nLEO52JJRSbNtkMuOafGOFY4Y1PfYcaZL/ziFuds4W6FxfO51jhrh1k4fmI65QxKw0c2"
|
|
640
|
+
"5gx1OPMFdVNYPG9urajA9T/N6G3oTDIzw5EJY85Ah3O6zBk53n7K4CuO34Ytcf6//XEWmpyX1Ho+"
|
|
641
|
+
"nFcZjq7rI0jRUZczzoVXzomGriuW7lZzdpt3G2SbRDUNcDPO+Spnt3n3X0/wSNv/kPPvYOKgzTaP"
|
|
642
|
+
"kgsVVb4+gpCtwEdlaPWN8QxoOs9aseEUXXuc03XOcukPiyA596/VTaYXc3vPruRcJOucxeLwTfXQ"
|
|
643
|
+
"IjjOdDI2N3pCXG+ylXvjnM1HCLINznyRc1Vc5eFyFrU4+r1/wmpsvtFLGTyRAGkvRNvhnCy6FDYp"
|
|
644
|
+
"riodUn4cBOdecMiJjVSdr+L8VSKhfj803ERxPhKzxXnBWpo3+Eyt0IThQ+BaVb0SofDnX8o3zaZV"
|
|
645
|
+
"fjjzWSFpg/PKFihiEsgD8dVsJeyAyi/zevs3b36jYoLXJjHOOOfLnGWYnMFaeG/+/e92uslxwYHK"
|
|
646
|
+
"7dGRRVMnG5xDiYlshXMzTeFDr5yz5YGp5ccVy5yzSfwJhTPdqNokpttzmnMGO4N9bClTJKuvEA5n"
|
|
647
|
+
"spUW2Aqvx1cCjfvXFuf0GOdQchYUGGd6kHOxYitFoJyBC86GRzQW+5zpkt3i1QkfNJxaB9vyzxdz"
|
|
648
|
+
"5uuc5RrnNFDOJBzOZTIfvF4tFKzFmAnnYObaIQeccWkl8U43C18rnHmg9pyExRlvR4t9ziJUzsQ+"
|
|
649
|
+
"Z2LIOR11L7l1ZT6iWdDl3wqJcxIo5yI5zjmnywkhDanmT60v1z3BGW4/DFkKkY9oR5ZtJSjOeLOn"
|
|
650
|
+
"+vTPPNnZXbbnPKVJFkUKCIoz3NCroXKW4xQgxYsqBXx99Ymak1SlXTAWFGe+deV0/PzqHcUo2Q0I"
|
|
651
|
+
"cz1IxZqnB+/4hf5ZHOU8qRaNjvmTKuewlsZ2h2r8P4WdyWmmnOUuZ7TkU2C2IgdD4/yB0tVt1JKo"
|
|
652
|
+
"IefRXq5bnPlGVpupnENb4qY8aHod53z3OeA+5zxozlZFBzPkXCjPUWyVcbc4F0FzBjZFdFkaFzjg"
|
|
653
|
+
"9mOAFVu/DefEYvINjDnz1U2px4+5xbkMmzOzFwjNOQ+nHhebj3mQcxIgZ2qPs/nZuVn/u0KPM7wN"
|
|
654
|
+
"Z2LPb2BjznnfF7bN4ShnFh5nbI8zKc0DIdipHJJ9zspf0jw4zigEey5TsCN69Dj/z+FxBiH455KD"
|
|
655
|
+
"HRFPlv8aLHP+H8LjnISgNx7hbycpxVqcUfFecJxZAPr54S+2w+ARznzkDNPQOBN7g4TlCWG306e0"
|
|
656
|
+
"OYtQA2F2Jee87lbF3lPyrVuOOYen7JA1zsyYc1H/bm6RcxkcZxAA57L+XXmKs+opJAuPc4vHQr2O"
|
|
657
|
+
"nhDQrNz0qWh3YvR0RlJ4nKEtzifsme+s3Ud7E3ZHf0mTtwFyTsrvL+cs2Lbggaucv1hauSLeKwLk"
|
|
658
|
+
"TL68nPPDoWYmnMkiZyz/yALknPxPl3POdqYernHGy5yzQI4SW/By13LOd04G0LNnJBPCQ3Qcl+u6"
|
|
659
|
+
"kmxnynBF15HyHwucoTQ7icN1w3Y4n9B15VfygMjX4AxD9Bvoes78SDKVLnBOF4a8quNZQ+QMr+e8"
|
|
660
|
+
"V/dZ55wsXOHx74Z7dzpW0OPHzAPlnCxypvMe8fHjb2SAnNm42xmKfOKQM1vj3I+XTTwPDpEzHYeR"
|
|
661
|
+
"wuh8sjMDhIc4F8uclyc5oixAzmQsPwujc7OM12kqlHC64ZO0OMPwOeMceefcPQjf8EkLnHGxOJn0"
|
|
662
|
+
"0R+D5Dw+b4nmRueTnRnw7jfPTu1wFgkIkfP4HKDSkDM4bc/rZ9vhZc4oX5xMCsoUBDi3oHpUrj4k"
|
|
663
|
+
"NBsvpmf9M129L1rmDAfOYxmY/q8hck5UzqjkhptInhAcsv1Ompzrw8OmY+VvKs40SM5s4PzwIdxw"
|
|
664
|
+
"gfSJQJgl2xvWwxXOWcc5m3D+6r+EyFkpSz6e+Z1hGg7Pcab6nHHW5TCKYXzw+GLgq/8jTL8hxsEs"
|
|
665
|
+
"N7yM+QyO5s7pRoxd40wncuPBufgfv0rD9BtybJPFTt6wkR2bcsYmnGXHWfnFzxLw+8//SMP0G1KJ"
|
|
666
|
+
"ZT+274TKr1PNy5gLaFwacK6rRVNt/eD86y//4GFyzhTO/348NyirIxyoL87l3kzGFc6i/QbZqNwI"
|
|
667
|
+
"3pVhch6Gm0nDuTKth7rzx7k05zwpGyT1RpowUM75jDPH2pzJWczFlutf0JpYtH1QoQpkyJwLBVVz"
|
|
668
|
+
"XrZ8OG0WEueF3AnzVrcrz1kRfnBOwvTPpYKqH9vMNOUddsqZr3Eeb7hRnR2PgswG1Yy3crHAdHEQ"
|
|
669
|
+
"PMs53+KcrnFORt8Hd7o6wIa+7qxlxFk3LQTuOFeW8NEqZ/X3qj2sSaCcYb91U8X5C+NV3045L5yF"
|
|
670
|
+
"S1q/oWJ92+jqNyFyBqSK5rTl/I8DOst2QniEs1zlLEdpSp0nvg3ToCuTYLzh/K/SdPuTswI625Iy"
|
|
671
|
+
"C/MdOs4T+Zwg0W6BH14lKa/DSe1h/3V4npBtYbfJOZ2rEcobI0nH8rnmHKSATlhRy1B4jjN2yfmL"
|
|
672
|
+
"cqH/NJzVnikaDR0oZ1pUr8Kx3ry3mW45yVlufMEcrHEeTeypx+pB2qbkwbVHIGQ/jXaSPDR/xSNn"
|
|
673
|
+
"sXC2c8s5m8jnxOg8I0+cq1Uikp7jDJ1xRiVfOKKINejlRNYlYZ6T1ykFQTJ2LWexceUNzuqvNbr5"
|
|
674
|
+
"Lyhge+ZEo1DpmXM920HMOc/Q/63+5wc4UM5VAEwX5ELqlfNG2D3K+eP6nzkJlDOskjGoP5HTG2e2"
|
|
675
|
+
"dAQsW3k+UJSlDJJz8q8yW5ILmVfOG73n70uc/9MKZ1QGyzmh2VKaoTfnHLjj/P7SUej/+wpnGjLn"
|
|
676
|
+
"fDGdC4Xz4pHz/8sNOZNiMc3QC4SuhmEbzrNC0l9XaLKAOeNlznqZN3PIGS6UTdkK55/D5ZyUi2FM"
|
|
677
|
+
"T3CcK4wWO5wXCnbLNMufAuZcLHLWe1zimfPK8rVCsDILlXO26F71HvdcYTTX5rw84AryJGDOy+5V"
|
|
678
|
+
"73GRU87zv8eLvwLks3M+J+wyfc6LrgaIpPxVBsyZnuV8TnDoc0bLEoWDsDmTswnhuUAoDThPdGe7"
|
|
679
|
+
"9BGUMmTO+HSigtxxXjp/ZsYetzq0lOJmnPUSlVOVJKHNGUz7WzcT6X6c9Z73VCDc+aRL/nuaQ5K8"
|
|
680
|
+
"+9mPb8ZZ08855LyUZLOJX+vWDbLso5txPiM4uF5c3AkFjC/dbvyHrOccMObFKKYpOOj4E2GLnD9c"
|
|
681
|
+
"vJ1c5Ezyu3EuUyYMu0SqqT+MFH+2GBfR7ey5LLRMenKGGrRWRlrjnE/kTtMpQNCcseG2OsuCQ2rq"
|
|
682
|
+
"DzPOxeQrt37kk5A5E6MCz5rgSDX1h4lLZWNvg+0cWXmVPeskhXSMzR1n2nJOJ4aS3pgzN+gTUrew"
|
|
683
|
+
"lOm6jDlnVto7v/kKztLgGlyXs9TlnNW9h0+c1p05a5gaqj0A6eyMOuScz7beK+/hN5AF1wmbV+0S"
|
|
684
|
+
"YGqrjLTgoIrZ1nsBzyc4xFkniDdfBYltCXO6Mlh1vvofctwfb81ZT3DII67obKW7etgpZ1KWQY8L"
|
|
685
|
+
"7nPmOnaWji9J3HCuc78xZ3YTztgGZ5iPP93/id2UN0B7UvJTcRaml4TF0RqHdiLXnpQsx7JO3Jrz"
|
|
686
|
+
"/3fiqtBR2l0hHnEGhkW/gDifKecCJ+lgs9vQiDMs71He2IiDhXvO2oKsSlRGnNFdOEMnnA/m3tqc"
|
|
687
|
+
"q7X1o61+UWnlYNArOZ9ye8RFOtjsiwTU38M3kRtbo0xu3P6JdLDZcjZR+8Fd0pQtIO4569d/Kltm"
|
|
688
|
+
"Cmd6k7R7q4OnbrrJqS9ZCQ6VM7uJfL6Us0GkrQSHWk25S5qyVcQ8wxk6SVOaQViFMyzv4jeYxSjl"
|
|
689
|
+
"gXMl7BTOZtnOE3FGTtLBZtMk0nNGpxNXb628kLOBY8X1Hgv5yOndgTO2i0GPMze6LkfDITfnE9fr"
|
|
690
|
+
"5YZ7zqnRdQXsBSE9L/SvlxvuOZsVqGQy5Zzem7N05I9OFV7LOlFJR0E8crYtN+oHzsmE86AmI2db"
|
|
691
|
+
"138ElKId9n1vxhndMg4Wjjlz0wu3262RdOrn8R3l8ym/R9zIjSbAftNynl0ocrbWXSrOouFMxx0D"
|
|
692
|
+
"8DCP4r2as1kaVxVOZLM5MRsLUMiD3aTfHWfqKAw2J7w3OxBProR5uEuu4IWczdIgMPQEpWdUa+lJ"
|
|
693
|
+
"Gi5nfKHfSK1xLmqHQQNeQkht58UanM09XTH1eUm1t2gRMGcHguAo5+LEI08ePq3tJQ+XM3AgCI5y"
|
|
694
|
+
"zs5yBsoXY3fmnDlzSGeyeta5dvWsqG5p+S05S6ecxQnOYsIZtI8bOdsbFes3EgVDv6uOoq/WcOL/"
|
|
695
|
+
"ckfOwinn9MSV8wnn7ohHnIbJGTqzZ+ZK1iln8A7PGTpn5CwOMleyrk6t1jijW3I+I6CZmypSos54"
|
|
696
|
+
"Hjh3fEOt82NH2uvAngXZGV+3yjmNnG1deji7e/hkHV9Y/f+HL8QZOJPPNd5s5JuyPv6Byk8HuHvB"
|
|
697
|
+
"XnYsswA5s+k+H1lVegbVBat/gADnNe5x/qk84UTdpCk13myk0bNqi1Fafzgx29bnBmXRsvzZ1HNA"
|
|
698
|
+
"Z2lK/dDF6OlFQmR/uBUOcd6Mq8HSA5zPGUeq9kaekIzmHw+y74acDZ/ZJWfSBWjcX4rk3aaMNWd+"
|
|
699
|
+
"Q85mjgM4SweVnU1wfyla9MEPhsiZuXIcXjjDPrOkgz2Am3I2dBzO0m51R6Q+s1S3psI35cydXDk7"
|
|
700
|
+
"xzmbcU6VrnRLzsLJlc3TlGamzJgzU/pHs/w7rM2gmbNASJ2lKbNCUpaMj6ipOIOwkpUjnDMnnE88"
|
|
701
|
+
"NNjhXJ1sCsNyHqUzzsSZ3Kg5F4qZTPxGzRmHtUrWHWfsTG4oM5J6zuMPh0S9uiIgzn8/4p/fmooC"
|
|
702
|
+
"V5xZd4GOMxg7IiiGSR5htPcPOOifjDwdciY3djnDeuWbauLwcuSHtjEyMT7oTG40MbYYnl52+8j2"
|
|
703
|
+
"oUGC8U2QuIODNqICHHImnWAZOP/aXVHWe9yBcWSB2T04m3BxyBl35YCB87vWE1X8H+IDTkTNZxdj"
|
|
704
|
+
"Pnw0hLDskU5xRn3Zpd3mBCica62BJnchF3M+fNRJZuREHXGGCuevm+zvXSWXQflFPYhVlt9NUlnM"
|
|
705
|
+
"b8K5MHOiTrYEanphfQWQYYVzUn5TT7Yryx8nTw0vDoTHj0hKjZyoky3bFM4JbzZnbP3Go5uAXDWe"
|
|
706
|
+
"zozBxckhKZ05aOSOc6J++HoAFjecq9PdPlM59+7uYsFBD3OWVl3SyR1gmPKlcGW0WNQPWIW7twn8"
|
|
707
|
+
"dd4NL56jxA5zzo06tyPOVOGMsppzfyDknxIo5+bx9lrOhzEbkHFW3mjc3RDiKs6SDp4BSDq70bXC"
|
|
708
|
+
"TudkNat9xSbn2nlIZaUV4HhmHtdOQNc5KTA16dyOOOPpd8dydEo9mj42/vY2nLlNzifDP5r6MSRx"
|
|
709
|
+
"udxPm8fG/76Us84Jo8Kkc7tY+dJw3OScTB8b/5vfhbM06dxOys/JdPyk9s+/pIug2y0jfrjUnnVO"
|
|
710
|
+
"Js5sfsSz1kVnnPF3fNFpNY+NfkjuYs9FSJzxjPOfxqUiPH5sLG7DWVtwQFdlpPrBp5wTwhcVaztT"
|
|
711
|
+
"+lrOOnpD20EDh5zBhDORCeXL6r0W1Iwnf74LZ13QLjknu5zJiHN5LWegxVk3Ejor11XmuscZqZy/"
|
|
712
|
+
"eXzY927DOQ+IM51xJiuvVnXbf1WnFt6jjmSgOJyV6yqwkzxFjOz1jXJ3ntDvK5d36VJZp5yZQ854"
|
|
713
|
+
"8xIfJupi2WayP+J38RshcUa7nJmyF1iVfyJxF86lNc42phhuPc1n6t0FqvXNlUOx0Cln6tCeHyYi"
|
|
714
|
+
"tzkPmXcjtqGMnI0efaNT5KqAzpN6rAVcORR7kd+wwnkj2flM5Vy0rvnK+dC0dFjhcGrPaCs//XTM"
|
|
715
|
+
"ed+hu27EJWfiME+pCnLZqlb7ZIkzu1BAI5ecsbu6aI3xwXnF536s3r3TGfTCCgd0yRk5G7dqzVXg"
|
|
716
|
+
"lUcace5+hFxY4dAT0Dwgzq33z/Z7U/8prsy8XXKGHjjnGpzhhZk3uy1nsqNc0OypwYUZoZawE9Y4"
|
|
717
|
+
"iys41zLkDpw17Rk45Qx3FCJZuNen9xDQQXFuTWQ/8ig+6u+vxtlGRALZViBsb/7rSJJcN5sRO+Sc"
|
|
718
|
+
"uOXcuuBskzMfzahBInI2VaXFlvsuqm+h/OFltVGnM2WccybrTwWHrQzSccE0/MQ7OM6gian1Mnk0"
|
|
719
|
+
"NaAvmxg4utllgRC45Mxcc263pELfJm9rhMq+BKisbi+qh1Bu9l7kbEz6wbkEJS+qlxET4Seqfyp/"
|
|
720
|
+
"iC6bxeFwPMUL52ptZlmtN65OtxpbAmk5q8HvslrSNZwt6qu3VZ/8og15Uy0l6t04QuDMHHIufXCu"
|
|
721
|
+
"YnnWbKM20dLN0BYZ/ellNTuHnIHTep3Cruh4i6mWqo5iGqWMl3HWKCQV9jg7GeOfjq40G2CiEefL"
|
|
722
|
+
"aqManPPAObPZA7LGqlW2V3EmT8MZzL3+n5Nuu9HOZV9Wg9bgnNnjbDv/rQpxYEXfjzjLq0rQGoUk"
|
|
723
|
+
"7eDljTOoHDEs1yL98OAo+zB8zsIe58LyW1S7QqxN1aXqkHf+JvyCnbYkYt44k40zS9W1hqBIwuec"
|
|
724
|
+
"2uNse64bejDG2eobJtc36C4d3NKMtrVGsc45jK2gobM0ZZOz7TLDZw/fIVYfI4A95IEz+bzJ2UG6"
|
|
725
|
+
"sF5bVhcbvgmes75REK+cN/qsYiKXbZTkTj5vaUavA6JA4XzZDpju5LPjCaMH2oKTuGyHCOZMPl/P"
|
|
726
|
+
"+YOFZ5Khc07vx/nqbZ8PioKzkjdyNuBc3IbzUJL7PCDO5Nk4KzWM4oac89vY87CALSTO+Ok4Dwn4"
|
|
727
|
+
"HTlnt+GM5dyDXN/Q83HO+5rCDTnL+3B+SP03Dec0HM7QHecj9Y2PnHhClDevxu/HWbjhbL/c8NEj"
|
|
728
|
+
"w/2+CI4zcFbe2JKMnbd3cODGkL2i252paTYCQg9wzhz1z9tytlui6k+Pt84ZD9kr9DucYKdg54hz"
|
|
729
|
+
"7pRzSGfEUlfljeSAGofWUwkyZK+wzG7H2cDuwCWclf0iUFCciStZBy/hzIbrh8UZu+KMjnAu3XCW"
|
|
730
|
+
"zZvdjzN3wxmVbvxGGh5n5IozPsAZWy9BsEEdvQhncoAzsc0ZlPe259QJZ0Btc4bBcsZXci5fhzO6"
|
|
731
|
+
"oLzhiDMS3du0FpRHzi44M9n1zgA5w2s52yypsVwtb1QrJv7DC3Bm+2m83bn2iBVqeaM6nenDcDiD"
|
|
732
|
+
"5+HcHHrQX/5hz0Xk3JKxyPnhM1KiuCVsf2HXmXYF56InY5Hz44btEbyyV6yLz/3HSziz6+yZ2N1a"
|
|
733
|
+
"pt4SeuCM1vJYdAln6ojzgXI2s7pSZTqcjtbqjNfsKoMv4Jz1P2JvaAlML7/OmV/BGV3GGVjlDKfu"
|
|
734
|
+
"PzDO0A1nsM8ZWuWMpqPGOCzOyQWcBwcqnfg/HiJn5oQz3OeMrXIm02G20DgT/5xFd+PcHmc69Utk"
|
|
735
|
+
"dVzz42Ardi44Vz+RCyecy23O4VaSLHPu/Wf+kRvOvOUs9+3ZnxPxvUqzvRy1u7MMnXYYusr5k2s4"
|
|
736
|
+
"00s4Q7s7+EA6FY7rnNVdvzxu0Uh8cy76u9rjjGaJ/TpntSzt8XCEA4HQ7kVz+5zBl7MvSVeXL71V"
|
|
737
|
+
"naa/QAh8c856b+WKc9UB2SrnN2q4DipTsctZ2ucMv5spGnZkOR72OVZLPHPm9jmjb2dd5tB8YuRT"
|
|
738
|
+
"YSPPnAeVY82a8A+zUHvowb3W/HcdtN3dCvLBWVmbMUR+mCok4GKnPMcO2i5nMWRH1sobsxyAh8iZ"
|
|
739
|
+
"eOWceuScBsUZ++RcKL7KHWeJjnDGn9ydM9wpPrvmXOAjnEn+vJyFF87HJshTv5z3hF1ukzN/Xc7A"
|
|
740
|
+
"J+c08REHD3L2PBWdWd9NBu7lPH44p2FxptZ3OQF7vt50XaKeoezFQc9LwLE/zrkTzhYn+FwYCKXF"
|
|
741
|
+
"N89ccAYWF+TdjDPbuZZVDPA5OJuY3Z4CYDYxIJtPfi/OZKfEapUzfl3OeCe1ZDbDFL5ip7ygOecj"
|
|
742
|
+
"v2KLM7Go/F02aJ8z2nlxP5yLV+UsR2jc51npi3IWTjiz8h4OGlrffmPtktwJZ6ulmafgPHKphfvH"
|
|
743
|
+
"L+7E2cTJgZ3XtsmZ2N3h8DLOiSPOlqrswHZfjJy1MYeVEULbw4NrsSkfSTEfnKeBMAuXc+6CM7Mm"
|
|
744
|
+
"BrDWwxfhcjbDwXxx1hurZ+Fyli44WxO3UI8zvTIwAgec6eZbA1vJGvxRjzMRwXIW9jiX1jnvTt6e"
|
|
745
|
+
"enMZLGduEYB1zkyTM8pegnOq3lG4fvKFZBYVT8YZb14LWuK8v5qXT1/1yTijzWsRS5z313xMb3Jl"
|
|
746
|
+
"SfoizhYkFtbmzESonFOLPVpY5ry/aHoabOmFggN650ztcD6wxnSKlWTPxRnscz7vKb/V54zy5+Kc"
|
|
747
|
+
"bL61Jc7f7XOemu+V52xC+2XRlQzCLmdgwPlKwQHtl+tWQlSm/uV59/z9Pudfp1GABspZhMv50OZ7"
|
|
748
|
+
"0+fHgfoNfnPO/y0JpqFn5lzchLOpOyN7nIvIOXJ+Es4kcrY1QW2Xcx4525jYSrbyFBw525pvGQrn"
|
|
749
|
+
"gKbYYRfT0zY5Iyuc0dNwTh1yzjxxTsPnfMa3bcZBO5ydnbrqm3P2DJxF+JxTl5zPDyCRQ5xl8Jxz"
|
|
750
|
+
"6xDkBZyz4DnLp+AcznmPxEUEwXvzZIQnzmXwnFPrnNMrOKeBcy6sO6NCzeS4M38XqrAjLhwb3gpJ"
|
|
751
|
+
"wMrrH8tTwhF2xIUgwluW5ZWzDJyzsA5h+FsrbvMg52CEHXXh19CmI2I25Naxel04wo66iNNoswMT"
|
|
752
|
+
"P7Ofw6pAUxe6E21+OGhDbYHIedHY1L+20ZkPci7D5lzY5jy64N9sPPhTcM5tc7Ye99+weyWE1IUc"
|
|
753
|
+
"Au45v/cUnGXwnPHNODM/nK3r2IP1jWAKHE44J+711X+MnBfFgKd6QeQcOTsoJ7r3G9Ge/XCOcXDx"
|
|
754
|
+
"qtY5o8jZC2cYOS9dNb+Kc9h5ytn0jTrnDCJnL5yTm3F2M3xJ3I/T3cw/Pztn8dScceT8YpwDmcAB"
|
|
755
|
+
"3Dwdcs+ZPQPns70Nun/dg5wDmSgD3XAG7jnTyHnBe9rnTG7FGTlSncw5Zxw5L/Rq8eKcsaNslThP"
|
|
756
|
+
"y9AzcLbuPdPI2cnsP+x8+tUzcLa+XNXBtE14qzwFO3o45NyqnoGzsE3BwduCyHnO2UXV7Fb1Ouyo"
|
|
757
|
+
"OA7cV9ufgHNqm3MaOTsaVHM/q/5W41bY1WKDyPmA2rdwYeZ81dP97bl4Is5pwJxtTLagzlelRs6z"
|
|
758
|
+
"QlL28pyJq9qLe87s9pyl7Y4iX54zdcUZOU8W6O05C9uceeTsSnNC5y9Lbs/ZxrOByHn3YRPLnN1s"
|
|
759
|
+
"gnFswDsJl7MdLM43z7k9ZztYmOux0ElpJiV345zZ5iw9cObLJbEiYM7CNmfhnnO+MmAYMmdum7MT"
|
|
760
|
+
"+TxWjmIlQQxlXzXsTAox19oKzsz2XpwtdTXmOhbBWaWA3opzbptz4ZzzsgIJad9LH5wz15zzpRw0"
|
|
761
|
+
"eM6WHs35lCA0vwELdTrSkt6wwxk4n0KB5nqGBbscljibkeb8XdHc/4e7vNsH58QxZ5Gs2nMw27gS"
|
|
762
|
+
"ZzOlmGtpheb9hYQq65Ykp23OmT/Oj6j+2204c8ucuWvOqfpHPwcp65Y4p5Y5O5ekqSqpfwiTM3NW"
|
|
763
|
+
"4WKuX5XOP+RDTH4TpHxe4JxbvrKzR18yjLL8x104Z3avXDjnnI/+DAa5y4lDzrQ2p7d/cMtZwlH/"
|
|
764
|
+
"YzkKk7O7BUrUdTa21FuYxEGm3WPOv9o0AexavS4FEyZIkGn3uJKY2eSMXPdauuDkbsL5P1t8NOg6"
|
|
765
|
+
"GVs6l5NxEuKsgslyyvwRFu3pAyqdP/vsYSknX+9yRunFnMuEWEwriOsgtKCNcErpPmf/0XE6pwd9"
|
|
766
|
+
"ac+n/tl9zWDWY+CY83LnhOJqzo8HCCVyHOkwS7Ltc7LLGcirOcvkVg0sGEV+gLP/aikOtCxujn4k"
|
|
767
|
+
"OFbex7/cw4EO85yU1Ts1BP/pOHk2ex5XbFY4Mxk5W+Usr1H2L8EZ7ZfriHfO9Pk4H5h4jbPI2eo7"
|
|
768
|
+
"rSR+KLvw2z+L3lB94QpneDXn8hk4413O/hMVFuh0NEuBcO11vHMO9XQGx5w/v5ozfwLOcJ8z/Zvf"
|
|
769
|
+
"RwKvyvmDyNkL5/8rcrb5UqvSr7js0z+P3jjAGXvmTMon1M9HOJeRsw/O6GLOT5F3J+Fzfoo60pDk"
|
|
770
|
+
"FqFyzp6CM919HVQKKCNnS28lNlLzDF3JWT4FZ7wrUlFZfn8lZ/EUnGEzxXgj2CDPNkWeMB1sAuG7"
|
|
771
|
+
"TZC+OeMnlM8Nxm82Oyfy3HfxM4bBup9+sVlDuJgzfxbOsJphnITKuUiepn2eoGLnvX0aFXpG79xW"
|
|
772
|
+
"OfIwOefJk7VPdjLGNHJ23nyX2uFTOudDr+015qPX5ZxGzl44e70hfk3OwDdn8pqcK70ROfvxl6nn"
|
|
773
|
+
"7/qSug54tufIOXJ2m6gUkbOPxvy+LnvROBg5+2h/erx4Fjm7z84e/llexTl7LpZIJn9cjUoPvSGu"
|
|
774
|
+
"4fzlk0zdGDgXCVtjyb7wzbm3ZvAUM59HGd+3qyzLf/7D81Docw5ZtZn1OufvvvVsVs/LGW5xfth6"
|
|
775
|
+
"EjnbyqzXOD/+iueRsxfOn0TO9l5NrLpu/pH3j/6snNn67hveJ16Bp1rPdpQz8f66CuePn40zDYlz"
|
|
776
|
+
"f9jIO/GEnPnq3/gWmVnH+Tf5hJzTNY9SeOdMn2tlyiHvwLyPaUDJnrRcV3NeVXzZdZz5y3AG/jvv"
|
|
777
|
+
"wPn5qvx4jTP0v6wMSfasbmOdM7qAs3jaMPjA+Uso8lnh/HTu+eEe3oUin5NEPG/eDdZs55Jg9Lx1"
|
|
778
|
+
"pLWROHgFZ/DEkwroahiMnP3o6jJydt/YFdHo9TiDS8QVfLnJovgKo0Kvx5ldkfviH16O8yW5L365"
|
|
779
|
+
"Sebgks2JXo8zupZz9iqcceTsLUvhl9z1Scuia8n4pZxfBnNyTW2SPNX2gEfz3+s4py/F+Rpv9ZzV"
|
|
780
|
+
"5606w2WcXycbRNfUzF6Sc34Z55dRz3XCcAHn8hU5+39b8JKc/YtY+HJpCrokHUQvx7kyrWt60Wv5"
|
|
781
|
+
"jUdIuiAMkhfc4oTK6+y5TGJz2tir1TeuTPdfqV53ocx5tUB4lWx/0unPYQXfMjoOn3EwcnYs2qPf"
|
|
782
|
+
"8Ck3IufI+ZlkXUxUIuenks+xwOGHcx5ZuGyvN73uYs7RPXvhHEqdH6SRsxc9L56bcyhhEGaRs5/8"
|
|
783
|
+
"NHtqzqG8HXpyzjJyfjHO8qk5i2A4i8g5cj7NmceUzQvnmHZ74RyrdY4bjtU6n5yje/bDObpn5zoq"
|
|
784
|
+
"cvbRYBwcjJyfqIHI2U+LnH3a8xAHP4hMPHAG/PPIxGEc7Dij36PE88GZxNTQKecOLoucfXAGMTV0"
|
|
785
|
+
"Gwdl91+0iEwccu4GmXMS3YbLPKWr83/650jETavXtcn3IgjHjcS1g15aXYDGkYOPQJjTOD7ow0G/"
|
|
786
|
+
"i7sVOG/vPxz0t5Gz84a/rTjH+RvOE++fyvLLMmaBzuNgXnGOAyruE0JafhU5e9Ab31Wc0wjCdUL4"
|
|
787
|
+
"a/l1rDp7EBwlidV9L4m3jBNGPSXecQK0n8Q7zpTxEQjjtmqeHHTc99Kfg46Kw5ODjh7aj4OOpSQ/"
|
|
788
|
+
"DjoqO+etwkxjIPQRCQsSObtvNHoNLw3HNMWT5IgIYosttthiiy222GKLLbbYYosttthiiy222GKL"
|
|
789
|
+
"LbbYYosttthiiy222GKLLbbYYosttthiiy222GKLLbbYYosttthiiy222GKLLbbYYosttthiiy22"
|
|
790
|
+
"2GKLLbbYYosttthiiy222GKLLbbYYguqAREZ+Ghx/3g/Le5s7qXBeDCQl4bjCXleGovnL3mJgtE9"
|
|
791
|
+
"exF18Xw8P95ZojRS8OA2ImUvLTpnP945Omc/2jky8OKdo9vw0mLK7aXBmHJ7aehJOIeuTZ/lEMLQ"
|
|
792
|
+
"34I8CefQozm7h9/A8t6cYXkPzmTnoHEQ+EHkuLxE19Gy1O12vPvXt3fkTC85Kv3xdfU+Lxi63XKd"
|
|
793
|
+
"AIad1YLqsPQLciPd28LeHFY6YOCcYXmF38A1Z75tAXz6G30HLJaygDJoAV09v/8HZAc4QzFxb+3P"
|
|
794
|
+
"l/MnRgcud7179v98tbPauzGS09+QPdP2E7QVMNhcLug04BLvfAgMzqYWm3eGXf5atA9fVHbS9I6g"
|
|
795
|
+
"y2HwErUBj4DB+cyhd5hbz9FepmsN+zAnsKFLzAC3ZLY9WjFxz1UHYB1UqVymaz+XwRo2vsStdWD4"
|
|
796
|
+
"tg8X898YWpoM0Mslww4rm71AbQzdPdv5mS/KDNVAf1iCCcq1Fp7CoxeEQTIAWX+qoWW01G08QM7+"
|
|
797
|
+
"wyAbWx7g6wZv2EK05+w6t9FIO5RvGPzzcPZdFGXfqUTyimq2YfBGLTy/QXxzRjPTY7N4eBZzgAV1"
|
|
798
|
+
"74NW06Am0SwiotOcwxN2vufxr4Y4m24jQIPGnuMg2Q9d5835kprNHuc8CHNWQhezwTm01Jv49WXr"
|
|
799
|
+
"YISSb9toPDTOHsRmX7FnBzwqKu2B/mtIeTf34Jz2EUprSYoCOpwpHcxH/Zm2fYYecajUFucyhYEk"
|
|
800
|
+
"hm8XB9tcfEy+63lzq2EwKH33+NzAy8O0t6D+OQfhOFDJkY+HqT4m4DtCIrcrN0KqKD1ybuxD1MOm"
|
|
801
|
+
"08BDnKFdziHoaFpK7OOj44YjPAQE2eUcgod+cCY+NH3jl1N8hLNltxFETYmWGfEwwaS1UHmog5f2"
|
|
802
|
+
"m7iec+6BM9IIWNQB5us9By0LYvFJ/qTEvVy3aJ85iIGhhMKH9WCLnAn/tMJagFEfwRqdGznhfLm2"
|
|
803
|
+
"e3D+0uIXZ1XIwd23y/TSjlTjm9zNoB+cv7WXNcFaiD+u+bUa5pmOKCBuOJfXc/6XPenTTFBm45ej"
|
|
804
|
+
"WuKLOuJ8seJ4MPnB2gfHjaNXXo5omxwrn9JxPF7rJ1uDD41UyIwjGU7diOcQDJr1yYOw4jXOigJQ"
|
|
805
|
+
"Om2Xca4MkJ3h/FFibxDEndy4esgQDHMxpeEFuL2xJodh8NpKR209bYEjM/TJj34AMiuGWDgMg5dm"
|
|
806
|
+
"4I0zzI0547zeuOMR+CS0IwlA6bylF5lzmWNTzqwudP5r6BOnTQ2653yBwKOqEMtMugNv3UVuSXkh"
|
|
807
|
+
"95zLi9xGmUFDztXv/WhXC2APnLkjmHxL1JW9b9XnjOwbGrktZ7Th+k9yxvYBsBvb83oS0rpFaFiw"
|
|
808
|
+
"s2180mHW7V5wbKhGWr5rpkaZKXjrxufFbbiKg2zdKaDKlNPWzxaGYfRurXCpKvJV7z2Iqavds6fm"
|
|
809
|
+
"Qz//YcvPXu42/DQ3ifeHY/NNN4AZVZvv19zUockowBK+4WfTlzBnR7KOjCyVyg15pvcA6KaYHck6"
|
|
810
|
+
"PHJJrNwIZ/wFxIYzWYcHKfNho6VrnH9aGGwS2v3kFWXdZ1vdO61tmQ8z9ztHDUwDxF2989l5KvW4"
|
|
811
|
+
"BhYrnLlit82GWRLyZDK6zF/CbZyVz6yoJ+cjvqS+5Mj+sn6JFTblDG/L+ax8hg9OZO7mF4FkoOEK"
|
|
812
|
+
"jAXPbdWGBbmR95Nh1d0iF2/2Y/NlifET4LtitlUzqgmT7EjAypl5IL6r37BVRPp7Jd+AGlQPCzC9"
|
|
813
|
+
"QHxTXWeviERLyUafDToJEDd1HMbFDaTmHANVAwkmXsCezc25cTqox9S+P//TTiQ8G4jpa4mNtdeV"
|
|
814
|
+
"jOshKQy+7+uoDXSki2AHPeqe+jk/4zV266yHAqFMXsBtZJa9xhjdIc56xeebljfM1Abc90a0ujay"
|
|
815
|
+
"HyFumnabhMHDJiWPSDDNMHjPqqh+MkiFZQ8pX8GcM32PkVnOE15B1Om7Z+v29BI5t/5It+0XzV9B"
|
|
816
|
+
"bBiEQXwl5ptqZ5NsEF15/9uW+Av7ytmh27rvyGB+LeeXkHRmWbfVSJS+gmu+nnPx/LrZlDO+5u7g"
|
|
817
|
+
"3pj1Z27ELNALZ+zfYdxbaGhxRtbtKnkR3azJWdh+3xeZv6/LuZrWJW1Go+JVhLNWngLbH2W+b/ws"
|
|
818
|
+
"5nzQrpowZDfo81cy54OOEl7Wk57EnC/kXL6O2DjcfcFld34Sr3Fw3MozZ6z2MvgUmA8KO68RmI6c"
|
|
819
|
+
"ynNgPljKsV6T5EhsflT+VM75gLBDpYu3lXtOKnP2hQO1aFz3YdsOOt2Ne8+k6Y4IWdqESuKPMx5F"
|
|
820
|
+
"yefhXOzZc24/HKW7seD5OJe7KUpq/X3TXW0jno6z2JXO9h1HuqvV5XPJuv30lzWREvm6KXxOzrv1"
|
|
821
|
+
"DdIpEuCHMxqroKfwG/mx8oL9o/nk7uLATImK/O4qOjtWlSzsFxt2U8+Bc3b/bEUcK0s6WIrK90op"
|
|
822
|
+
"+fPMRTLa5svRF/5g2mPyZ1g5f1RruKsGTzkXU6L5M5X6zbbZcBAZwCz/y5+o1m+08QZ18YlRp0Do"
|
|
823
|
+
"siIBr8fZkquUk4uKMebimYZijTjbcpViCHzVgkQxNlvxFFtu6Mhnd0MrIwXDR5zlU81jNNpOzXo2"
|
|
824
|
+
"qtRB4Vqe+gJpisNR/ky5YqrwzJ9sZgG/TNaNiliKE8FLmJ++JOp8blA+6LaBqUyeKeU2kBuV/Xv3"
|
|
825
|
+
"XM9QFxWadpzbN670BTBrGXT9wt95fgRQPkfTCITOFGz+tGt/zISdu6dIn3D9q3miQj13qycyZ61F"
|
|
826
|
+
"Ii6ThXR6n+x5JjBqK2iHL17MQ9/dh1BOZIQONVb2bArjTCXJpZYVT41Zz3FQ9w/yrJhDURzdCTZP"
|
|
827
|
+
"y7kMxG/U0gc9L2Ydg3b9wUH5zO3wzgGOMfBnSgC3JNXFe41IVD53C2RdakafnHMZBuffnx3z0TI0"
|
|
828
|
+
"LmPzUU6KnP1oDhI5eQmFkbOtKs6T74kYZlLIxJOOPgel7ZZlSHQd1lwH5AmWjVYWT7qFztXarj6u"
|
|
829
|
+
"GJXV6cV0RVdHx3Hec9Ba39Wu4d2q246x0JKQpgcychpBnbbqQ4Ivcjpd6ziSkkfnYb9lkfNloKO8"
|
|
830
|
+
"c+JKWhPOY7biPDq2NVEeNbSfxqPW8NO+iAhiiy222GKLLbbYYosttthiiy222GKLLbbYYosttthi"
|
|
831
|
+
"iy222GKLLbbYYosttthiiy222GKLLbbYYosttthi22r/P4wOyqU="
|
|
832
|
+
)
|
|
833
|
+
_WORLD_BITMAP: list[list[int]] | None = None
|
|
834
|
+
|
|
835
|
+
|
|
836
|
+
keys.define("timezone", "Time zone picker", [
|
|
837
|
+
("earlier", ("LEFT",), "previous UTC offset"),
|
|
838
|
+
("later", ("RIGHT",), "next UTC offset"),
|
|
839
|
+
("up", ("UP",), "previous zone"),
|
|
840
|
+
("down", ("DOWN",), "next zone"),
|
|
841
|
+
("choose", ("ENTER",), "choose"),
|
|
842
|
+
("back", ("ESC",), "clear the search, or cancel"),
|
|
843
|
+
], within=("search", "global"))
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
def _get_world_bitmap() -> list[list[int]]:
|
|
847
|
+
"""Decode and cache the 2880x1440 world coastline bitmap (built lazily, once)."""
|
|
848
|
+
global _WORLD_BITMAP
|
|
849
|
+
if _WORLD_BITMAP is None:
|
|
850
|
+
import zlib, base64 as _b64
|
|
851
|
+
raw = zlib.decompress(_b64.b64decode(_WORLD_MAP_DATA))
|
|
852
|
+
bm = []
|
|
853
|
+
bit = 0
|
|
854
|
+
for _ in range(1440):
|
|
855
|
+
row = []
|
|
856
|
+
for _ in range(2880):
|
|
857
|
+
row.append((raw[bit >> 3] >> (7 - (bit & 7))) & 1)
|
|
858
|
+
bit += 1
|
|
859
|
+
bm.append(row)
|
|
860
|
+
_WORLD_BITMAP = bm
|
|
861
|
+
return _WORLD_BITMAP
|
|
862
|
+
|
|
863
|
+
|
|
864
|
+
_WORLD_TZ_DATA = (
|
|
865
|
+
"eNrt3T1ro0mzxnEHE4iDgwkcOBCDWBQ4cKBAgQIxmEF4hXEgWDGYgzkomGC+/yc4frdkSbfufqnu"
|
|
866
|
+
"qur/xbO7nvGs9ST7o6iurj4768q3hAzic56S7wm5iM9lQoYJGSVknJKrhFzHZ5KSaUpm8Zmn5CY+"
|
|
867
|
+
"i5Qs43OfklV81il5iM9jQjadOcNnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
868
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
869
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfG7S5w0+4zM+4zM+4zM+4zM+4zM+"
|
|
870
|
+
"4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+4zM+Cwef"
|
|
871
|
+
"8Rmf8Rmfdfq8bzU+4zM+43MDPqc4Pa4TfMZnfDbs86Apn4cS0ezzR5rxeXZTJ/iMz/gc6/NQPMp9"
|
|
872
|
+
"jjEan/EZn/HZhc+fRI9VhvoZn/EZnxv1eWwo+IzP+IzPbfg8dhN8zpJl0eAzPuOze5sPKY3P+IzP"
|
|
873
|
+
"+GzU57HT4LMan1d6g8/4rNdn7zTjs6TPKwfBZ3xW6fO4CZvr+hwD+o2W4DM+43MFn8ft0IzP+IzP"
|
|
874
|
+
"+Fzq+iA4Rwzb4TP9Z3zGZ9GFG3l8HjWHMz7jMz7jswmfNV8MlLulgs/4fCwPtYLP+Ny5W8MYw5NJ"
|
|
875
|
+
"9B1CfMZnVTbjMz6fWHtkrkw+rOc1PuOzPZzxWZ/PlzmSbyWdC577EY3P+KzKZnzG55PrQn347K9+"
|
|
876
|
+
"5v6gf5zxuYjPF2WbG8E+61/lnOrzNT7jszmb8bmAzyVfs4ryWf1bKKk+698vis+KfH5QFXyW87n4"
|
|
877
|
+
"a4MxPo/wGZ/xWaPN+Czpc4XXYGP7z36ATjgexOdmfH6wE3zO7vNFUqqcD7oBmvNBuz63XCbjs7jP"
|
|
878
|
+
"F3lS3ueRoxbHJKHBgc81fW67jYHPsj5fZIu2+TpbQCeMb+BzPZ+bbzPjs6DPFzlT636KD6Dx2aDP"
|
|
879
|
+
"HAPis5jPF5lT7/5gt9HMb+CziM+MaQjx3LzPFxKp6XOn0PiMz9l9ZoxOTOfmfb5w6HMX0ZwP4nNe"
|
|
880
|
+
"nxlzluSZ/oZLn093o405Tf2s0meuocjqjM8iSuvw2c1ajuv+weeCPnNNUFpnfBYR2orPpq4VKvd5"
|
|
881
|
+
"lhCTPnONW15nfG7cZ29C43MZn1mBVETnUz5vmH/27rMdoamftfAMzaV4PuVzp9DMb7jw2YTQ6vvP"
|
|
882
|
+
"dn22pPNDI8eC/X3uENqyzxeSwedaB4T4LMwzOJfUuZfPR4U2XT/jsxWfr6/xWQnPNDbK6tzT543H"
|
|
883
|
+
"/gY+WxD6Oiz4LMMzr6JU0bmvz4eFNt5/xmcDROOzjuIZnqvw3NvnQ0JTP3vyeeSAZ3yW6m1gcw2d"
|
|
884
|
+
"Q3zeF5rzQUmoi/s8Mq8zPjvlWSHREhgn+rzx4/NF0VA/F8EZn8VOBn3y/Kg/m0280PgsqXTr/Wd8"
|
|
885
|
+
"ZqxOGGh/Pu8Ibdfni4qhv3Gc5FSe8VnoUorP8Y1ccGryeePA54v6wedjJXOCzvgstxDJ44RdTivV"
|
|
886
|
+
"+PwptFWfLy4sAN2qz0nBZ9l9/A37fAJFRT5vmH8uAHSD54P4zDp+pT73UFGPz29Cp/j8AWbV/Uia"
|
|
887
|
+
"hS5fP4/wOYvPU90+W8U5P9D5ndTi84vQGXT+QDoEavX767IAXcHnykpfX9cFOtHn+MrazFuwzoSW"
|
|
888
|
+
"cPLoH37/RiGfN+E+9/ETnyv7bLp81vu+lQ+fve2vk1cytdJO+Yj8OvfDOpLmVxM1+dwpdBWfjbc3"
|
|
889
|
+
"dL8/iM/aLg9W07m30BtxoM+zJMXnFwnffd4VWvEcx7AG0NaPCHW/D0t/Q9nV7go6l+o/9xX6vGoO"
|
|
890
|
+
"kqhmxq4T6OFw2OARodn7KX1yc2PZZ6ebNwoXz6c/KutnKtT5pVg+QvM70Bft+GxyB4f5+vl9lGMb"
|
|
891
|
+
"5/eY9NnrZqQqBfQhr4W6KJtaPH82KU6UywaCz5l6HEp83sZ33+cbo/0Npxvr6nWgy6S6zx9CXxiO"
|
|
892
|
+
"nM+2bhFeXV358/mYlcb6zx6XiT5WPSOsCbRwG+P715x/x2fjh4RXLzHm84HJ5x2eT3hZ1udlnngR"
|
|
893
|
+
"2r3N+0KXajN/3w8+57mhUofoq/eY8/mr0Fqe5pbzuSmgN46ALncMiM+CRNfD2WJ/Y/tW99cpupsb"
|
|
894
|
+
"l0T7aXE0BHTRMQ18dtLhuPoam/1nfW9z43MOnzdOUnqWzpnPF6I+hyFdC2bTPpsR2gbPK4rnzMFn"
|
|
895
|
+
"5T73FrqazC59VlhDLw1c8uZ0EJ9b87mf0JVYNu+zGaAtlM+r+jhvfKW+z9/xOQfSlXk2PP/cCM8O"
|
|
896
|
+
"+hvN6YzPdnzuJro2z+7qZ44HtRXPjw3yrMFnEw+jlHy/O0roujq7q5+ZgLbosz+hNfn8HZ91Ad3X"
|
|
897
|
+
"5lcp85mrob/hjuY2fPZGNPWzk/p5VFnnHaEnEzs+6z4eXGaOf5+pn6mf9emc3edwnetk6hno5dKS"
|
|
898
|
+
"zzqAxmcxn6sarb61UW6CI6DtPLHvs2Kgl7aAZvbZv8/VhFbP87DQCPSVJZ7lfHZoszjRta+nvPwJ"
|
|
899
|
+
"dBb12Wb9XJnmfEBfXbXms8rqeSkZy0AfMnlb54e3GtpBHV3hGSu3/Q0VPo+K2qyDaJ/3B03yXGU1"
|
|
900
|
+
"Uve3N4/oTP0syfMobJNdaZ+t188zdTwvC8TF01b92x/onLP//N2ez9UL52o+G5/fmHXFLc8iRpd+"
|
|
901
|
+
"3CqkQ43OOX2uQ7TO5oZ6n2szLcczPqvucQQeIcJzTp9NAa2i9VzVZ5v18+xkPAPt4qHYkBkPdM7o"
|
|
902
|
+
"c3mhjR8N4jM819d5/fS/5yj0GZ3z+lxaaIMrN/T0N14ud0+uDfk8g2cBnhXgfMRndG7TZwX3UjT0"
|
|
903
|
+
"n8sv3kjgedY7dDcifK6MtN3q+fwcn/FZ0uey+0XlSudqQJv2ea3AZ7uXvs/P8Tm7z7p0bsvnAjwX"
|
|
904
|
+
"F9qNz2t8Dsrg3JzPZYXWWj0P8TnruaBqnl30n+v2N0z6PBiY9Pk7PuNz6aE6/w1oscE6DQW0xQsq"
|
|
905
|
+
"A6s+f2/dZyv3U4pWz9NSPnO7O55nTT7r19mqz+WIdtF+bqJ+nhby2e18XQmdtR0QqlV6MDDu8/e2"
|
|
906
|
+
"+xv4XMlnbncn+bzWxrNKoAcD+z6XIZr62Uz/uYTPHlGWA3p9INp01ujzAJ/pPzvzeVqgfkbndJ+L"
|
|
907
|
+
"E23u5avBwIvPz0C//PWd+pn+hrTPsh7XEfkl989Zyrc24DlUZ+s+y1fS9J9b8Ll+7VwO4i/Z+s0y"
|
|
908
|
+
"PtPc6K+zG5/FhKZ+bqH/rKG1UYfnnZQA+hChonCb5lmHzzmcpv+Mz/Y38rvi+ZDQR3WWEvrRToNj"
|
|
909
|
+
"cCjnboSOA/tSINp4xuckoVvxWUDqHj4L9z4eH40IPTiSWhQf/ux3XdO1xmd8tlZCL5X4nEnoHu0N"
|
|
910
|
+
"2d70Y79o5nlQR+bjn/3Jc5GGh0Wf6W9UGLGzzfN9aKTL55evpSY8HoOiunwuDHSPj/7QOQ1ozz5z"
|
|
911
|
+
"PpidZx0VtBqeE4h+ArYT6I8v15l5foyMap1LAh3xyfiMzwoKaOMN6JI8v6LcNQB9MmV5ftStczGg"
|
|
912
|
+
"Yz8Yn5l/bsVnLzy/CL3G5yw8lwA65XPxGZ9r3yG0BPTzrZNUne/z3hnsT3Ms0I+PRn0eDOr7nPi5"
|
|
913
|
+
"+Nxcf6P4y91+fP7k+T4lNXQu3nqu7vOgX2rgHPCx+NxU/Vz+7W49l1TqNDNSkX5tOK+r+fxg1OfB"
|
|
914
|
+
"oDLQmT4Vn1t6v3uSGrPlc44CuqzPH7Tis5zOUkDn+9BAmvHZev+5tM9aVotq4rlER6Ph/sagrs9Z"
|
|
915
|
+
"P7QXyzGLOKz6PMJnlz7fVBvYUMBz8dGNij4PAlNe56DPlFqQhM/4rOP2YM4Ju8Z8Nlg/DwYVgZb4"
|
|
916
|
+
"SCGgG+hutDNfF+2zmrdT9Ojc83Cwbl/Dqs+DmJTWOfwTLfg8xGePPs/aOyBcFSyg6+lcwedBZMri"
|
|
917
|
+
"HPWB2n0eDvHZns+KHh9cahrgKNjfqMfzoxWeB4V1jvrA3EAb9XmIz/l87qHz/DVN6XwSaA2TG+Z8"
|
|
918
|
+
"HiSkKM7Zff7eks9DfC5VP8+/pJn555Kng6n9DSv7NwaDKkAX+7jcZ4RmfR569rnw/ZQgnkWBbrS7"
|
|
919
|
+
"UWHrcxWfB6kpZ7OIz+FCW/L5SVruDwr5/EbvAZ5nxXxeLjWNb9xbGa5L7XIY4nlQEOfc54NxQtvx"
|
|
920
|
+
"+Qnn0YvQL0o77j9Pyt/v3jH4RPUsWT/js+P73YMcKWZzuM8iL3kbqp9H0cHnEwniWRBoVRW0GZ9t"
|
|
921
|
+
"nA8OBgWBLvlZLw8SiixHsuTzaNSAz5M8iV8y+uzz9KTPIkAvLTU4nLQ2ygE9yJYyNEfs5z+XENqK"
|
|
922
|
+
"z6MWfJ5U93nnwHB+PKqfTnnZAL1LbRzapYCuqnMRoMugOcicIJ/PLfgsh3SIx//807LP0wyZn4qN"
|
|
923
|
+
"p60+dI6rqsu0N2re7S4EtDyaA4mE+ByxZbSWz7WB/uc5Lfo8zZb5vLDQcjrH9z1KDNg95IhyoIXR"
|
|
924
|
+
"HIgl5GAweA20vxVJATrvAt2Ez9OcmZcGelkk+hZwdMO7/Uk9gE7Q2gzPgzI0h79vFfGQSiWg63ag"
|
|
925
|
+
"DfucIvR0WhDoGxP1c7LQJZ4d7GVzH6MTq2kjOn+gOSiQ83Cg8wvtq3r+BNrmfJ0Rn29s6hwIdIl3"
|
|
926
|
+
"YUN47iW0rhbH42N+NAelEjb7HPfUlav73SFANzZfV9TnOT7X4flUl0MZ0K8/eGA15/WBxmcf/efC"
|
|
927
|
+
"3WezPAcALV899+499xRa2yHhx0/27/MLy8GvxXrpPe8DPQxpcBjxWU/13GO+Lude6KVGoFcrSaB7"
|
|
928
|
+
"9JFDgdY2xbHzo/37fP7p87nW+rnY3rrOgro5n6fT/D4fvUGYfXH/snTy6hxDdILOx3x+1DYH/fVn"
|
|
929
|
+
"u/c5YhfHaaCNvp7S2fGw6vO1Gp6neztGn52eHfI5mefFU5bPf6kCehWRnDPPqxCf+/K7XhcD+tCP"
|
|
930
|
+
"xudwoY0uf/bp84fQIVRPp/I+C757tdiJIqDjjF51qBxwG6XzI2J9fv5/UQjoIz+5GZ+zAX3pD2jT"
|
|
931
|
+
"83WBpfRUKrOQ5NL5gNC7v5EL8J4rOfIW0SE3AkN8fnwM8LkI0B0/uA2fv2ebgrb7fsoxn//5x3D9"
|
|
932
|
+
"HObzVDAlgF4cyYvEB8TOV2K/Xvv+vACeD2h5nr8CnZXnHEB3/1x8DgHar8/+6+epaZ8XAVmKt0C6"
|
|
933
|
+
"gQ7hOoPPJz9DrnxOB/r0j6X/3LDPezh79VmPzu9E93Z6sQj0Wb5H3eFzcE39BvIu1zl5XkW3n9fi"
|
|
934
|
+
"Uxy9fir9575AO/XZa/08LZNZbPqXztqAPkz0KkvT4zjPhw/8BIEWHrPr/UO9+5zrhNC8z8MjPL8C"
|
|
935
|
+
"/Y8nn6dT7Tz3QvoV2XieF9VvFkYQ3aNQ7mtzrM+96+fjQOecrcbnJs4Hh8d43lLahc9WdD5J9CIt"
|
|
936
|
+
"GlZzrLIAfejPRP247D4fFjr3M7T4XLh+HtYesPvnUOz7PC2a2UxWaLU+y10v/CrqKlfEfH48xHP2"
|
|
937
|
+
"Z8LxueD887BSnPs8LR7dBbT87ZWVzPVCkQTyvI72NPkSeaH10Cbr55AXvaPZru7zP0d4xufy5fNM"
|
|
938
|
+
"qnwWF/rAyIZin5/yKFE+fwX1Qchn1ULjc06f/zkafNbT3cjg80Lc55UFl8N8Xgf7/PhVZxmfFQvt"
|
|
939
|
+
"y+eSRI+2ttid5Jn62VH7WZTobfas8PwF6FWnz3FAP8j6vMHnQj5flm1o7Pz6H6f1s02gb2Qr6AI+"
|
|
940
|
+
"r6z4vEXz8Xp6HePz467OYj4/CX3WmW/xMeJzKaAvi1xC2QX6pM//2J7f4HywFNBf6bNUP3f1Oz5v"
|
|
941
|
+
"mYej+lDC503zPpuuoDt9Hnn3eWIL5+zbN7ZMFu5AH8DPgM8n+9HRPL8+aIjPCn2OhLrwq4OHNyTt"
|
|
942
|
+
"Ye3gfooVnkX2I22pLHo+eMrne5M8J/j8gM+lfC4jdOGXYQ9+51nVt8k6D/3nokBr9llO5Q6fV/e2"
|
|
943
|
+
"hO7SORTorI9o4bMU0Ip9PpSxT5+LEF2O51CglyWLZsNA5+M58yOH+CwmtC2fX4He6kqP8Nk6z+ID"
|
|
944
|
+
"z32Bbqd8fsBnIz4Hd6AFmB6NwoR2uv/ZxdlguNDwnKV8TtQZnzX6rGOOY5QSR/v5DY89xxO91OLz"
|
|
945
|
+
"ynb5nMozPgvtFy3ZgZYBGp9NAG3P55Vvn6O6G0dfdsFn2fr5wqzPQ3wW73Bo5XlB+ZyF555Id7y8"
|
|
946
|
+
"hc+l9z/b6XHgs/ICWu6JWC39DWs8H36oNp5nfPblsxag8bmE0IIveNdpbOwJrVrmfZ/XET53v1yL"
|
|
947
|
+
"z6Xft2rijJD+RpEKWs7n7ESvXKVzY10Q0A/4rOv9FEvbRvFZ+R0VSZ8ROtDndUfidMbn/D5fXGTw"
|
|
948
|
+
"+cL4iB0+q2xyVL3g7d3ndXfe/kiQzvgs4fOFi+Yz54Nm7njbqKB9+7zumSCd8Rmf8fk5r1C+cmzu"
|
|
949
|
+
"jvdMeIMdPmfzOUxnfMZnfP7g+UBMrEjqLXTsWv5XpVO19uxzWPn80Dv4jM+t30+Z1k4xoOs+ouK4"
|
|
950
|
+
"gF73T4jO+IzPzfs8nboAupDQ+LzPc4DO64ew4LNCny/wuSmfZ5mivIR2IfMTsV98FtQZn/GZ/oYX"
|
|
951
|
+
"nnsJXc3nlRee16u3Sbl1EM4PUcFnjfdT8Lno+aAfn2d6OxxedH6ROTwP+IzP+EwBLQ70nrz9zHbk"
|
|
952
|
+
"8xqf3ezn/47PBnx+G6ObAHSw0K3ovE7KAz678fkyIficdnXQus9Fhjh2dV54x/n1SHBVHmd89uYz"
|
|
953
|
+
"9XPizW77HegeTGfz+fM3OpRuvHLGZ3zWtp7flM/Vdc7PszTQb0j3OjdsXmd89tZ/xueCPleunmdC"
|
|
954
|
+
"Efd5sTx5ctj4kSA+Uz9rXP5syudJVZ9nM7s+dzamVz54Xq/xGZ/xuZbPxVeJluK5gs+7dfMSnPEZ"
|
|
955
|
+
"nxvy+Tp//PJcoAH9eTS429nwsmNjjc/4rPVwsAmfK6ziL8XzCaNzFs3PnWiPS5DwGZ/xuaLPNXGe"
|
|
956
|
+
"FcjPn58g/9z+RV6fnS6pW+MzPtPfqOdz3eq5BM+fJv/8uQu0SPf5ZaKD+hmf8Rmf8/PsDehPk39+"
|
|
957
|
+
"5VlugsORz/mIxmd8xuf052CnrvrPP3ez0+v4+ROfy1XQ+OzJZ/rPBXxWwPN0Vhbo7VpaEGg/RNPf"
|
|
958
|
+
"wGfFJ4SefZ74L5/3ff6SfCD/8ik0PuOz3vVInn2eHElTPu8BHWv2r1+/PPrM+SA+K14v6thnDTpX"
|
|
959
|
+
"6G90CJ1SVf/6tQc0PuMz88+N7X+WLp7d+dwf6KTWh1ef6W/gc3afMxrt1OeJGp/FjJ739vnnIZ07"
|
|
960
|
+
"gf51AOdPnn+9/cUMBz7js6zQPn2euPd5/panL35Gp6NU/hD5+W87Pr9+zQQ0Pvv0+TJb8Dmc5ypC"
|
|
961
|
+
"y/H8nJ8/swr963i+HhMCND7jM/VzVp49LICez3MBvW/0r1/dQnucgsZnfKZ+LrT/eTJRB3Reoudf"
|
|
962
|
+
"U8pnt7dU8BmfqZ/L+DxR6fNUkOecPgfpjM/4bMHn8meD1M8JPFu/SJgZ6J6tjSNAMwaNz/gsNmDn"
|
|
963
|
+
"zefJRCnQoj7nAfpXhM9Oamh8xmd8lvd5EpRpQahFeU4C+p3eX78igV7c3t7S38BnfPZ/PyXN50lk"
|
|
964
|
+
"mve5X47qjM9Kff4mFXwuc8Xblc+TiV6g9bY3cvB82zjO+Kx6fgOfFfg8meBzIZ5fTX7/p22g1/jM"
|
|
965
|
+
"fB39DXGfJ434rKF8vj0U6md8pn7G56v8PBcAWrL5PC/RfPbqM/Uz/Wd8lvZ50oTP8/m8yungkaaz"
|
|
966
|
+
"k/rZ8XwdPuOzBp8nLfg8Px7pAtqzzx9F9Aqf8RmfBXyeNODzvDOFgXbm8xqf8Zn7KVI+T2r5POv/"
|
|
967
|
+
"B7X6nK+/YVnoF57xmfNBfM7v86SWz1t61joZTAY6cu751luHI/moEJ+1+nxB/Wze5yihdwGtcm8w"
|
|
968
|
+
"WejYeyn4jM/4zH5ROz4fEno2K+dzpNApWze2bbbPMz7jM/WzPp+n0yif9wWt7fNcpoDu5bN9nfG5"
|
|
969
|
+
"bZ8v8waf615NmfXwuSjOkUAnrd3AZ3z2Mr+Bz/p8zjwuJ+PzvH8y+7w4nluHQOMzPuOzY5/3kNbP"
|
|
970
|
+
"cyfRQT7Tf8Zny/N1+KywvyFz3aTMrW7RIbvFiTC/gc++9tddagS6bZ/l7gMaanAc9DmG57bX9OMz"
|
|
971
|
+
"PuNzTp9lr2vnPB8U9jm8fL699Qg0Pnv1+Tv9DWs+a3nttX79/CvY59uO4DM+6/O5PND4XM3n2Uyt"
|
|
972
|
+
"z/MSPHf6/AT0v//isw6f30lMRzVj8BmfRdfVqcX5BehAo4MnN7p1vv33NfiMz5p8Lg70s66X+Bzs"
|
|
973
|
+
"83SiYFmoHM/hZfSTuFnOBnd4Nik0Pjv2uUILOkMV3ZrP2h57FeI5qIRehKUnzzFAV+5e47Nnn6sM"
|
|
974
|
+
"cVzi83WFLfyKZZb2+ba3zwFE6zhdxOfmfdZWQjfl89SQz/PUCAF9G+Tzv6E+VxUan137XKfDgc8V"
|
|
975
|
+
"3rAy4LMM0LcnEwy0nvE8fHbl8xu5QUDjMz7r87m30Ld9Eij03r9/d4fP+JzN5y2hzfGMz359DhyF"
|
|
976
|
+
"zsbzfpNjj+jl8rjOzz5XEhqfffpc4fEUfPbt83w+0+Tzk5r9eT5I9CvSrx2M5VsO+3yHz/jsx2f6"
|
|
977
|
+
"Gy7r5+IldI7C+YTQ//774vM7z8uD/97dW/A5o8+qgs/4bH18IxfQ8yw+38Zn3+flVvAZn737fInP"
|
|
978
|
+
"ToGeFwX6pwTPu0DffvH5mM34jM9VfL7A5/w+H4i00B4L6J8iPO8K/QH07SGf7/AZn2v4/ISoWPWM"
|
|
979
|
+
"z9cBBbUtn3MAfbOL8E3Z9sYXo7v+yN2XmNIZnw37fCkbfA7pd7Sxf2PL56e827z1ddh03W2BVOV5"
|
|
980
|
+
"nRx8xmd8Tvc5g9Azaz4/q3xzc3PU51yDz6dzbGqjhs/rrMFnqz5f4nNJnwucE1r0uQvooj4fIfoO"
|
|
981
|
+
"n/G5hs+X+KzM53Shzfm8FdGrg/2A1tHewGd8LsAzPsdM2zVTQN8cSEWfj7U4KnSf8Rmf8Vmpz5NW"
|
|
982
|
+
"WtA3XTns89M3xIDeuZ2yPOazNZy1+nzWHXymv6HV5zShnfj8ivSLyLsp4vMSn/GZ88GmfC70TKwV"
|
|
983
|
+
"n2+iI+Pz8ojP5nnGZ3zG55M+e3zHu4bOX4G+vZUA+haf8VnD/W58LuPzJDiugc7gc/ZrKD14fvL5"
|
|
984
|
+
"bnWHz/hc6n0rfC7i82TiEug6BbTQvcFTvY0yNTQ+4zM+W/A5SWjXDY4beZ+Xx32+43wQn4u9D4vP"
|
|
985
|
+
"BXyeTIoDvUu0ENjzah1oSZ+XVX1uY38dPvdtSGvEGZ8z3Sd811mopJ7Pq3U4hAvoLp+PCH3/FHzG"
|
|
986
|
+
"58w+K3x70JvPk0lFoCWbHuIT0EU70F8nOO7CfRYyGp/xWRfP+CzxOuFUl8/RTosPcLwA3cvn+73g"
|
|
987
|
+
"Mz5n9Tm70EN8zsdzXqCnGn2eK6yfl33aG/eHgs/4rNrnIT7n5Lm+0HNpn+cq6uddoO/wGZ+V+Hyh"
|
|
988
|
+
"jmd8lgN6KoytE5870+GzgND4jM9ZgWZ+I6/PJYS25nN+oQN8fr5JeHcU6NxE43PjPl8wXyfl82Si"
|
|
989
|
+
"EeipKp9jN3Dkg/mrz3c9cn+c5/vn7+WbvcNn6mfup+j2WVxogz7L7K7r6fP9qazuc83d4XPDPnN/"
|
|
990
|
+
"sE2fvwpt0ecPoJOoXkYBjc/4zP4N+s+CQE91+JyyYfRN59w+p+v8bvK9E583WYPP+Ozkfooo0FPr"
|
|
991
|
+
"PudodcTUz719XuEzPpv3eZQzbn0WraFt+5yZ526g7+/78/wBND7js9n9dfhctQ9taLYuu8/LZSjQ"
|
|
992
|
+
"QTrjMz5r3F8X2N/A55pdDks45/V5uQzy+b5/VviMz/jsf/9GAaAt4Zyx/7zsTpLPK3zGZz/zddTP"
|
|
993
|
+
"jdXP2V6Ijfd5WcRnzgfxWdf+OnyWrqAn5n2+qe/zMtzniPYG83X4bP/+4Aif8bmsz8tlkfoZn/FZ"
|
|
994
|
+
"4/4N5z5fhwSf9fU3lr0SXT5/Ga7DZ3xO8fmC/gY+t+TzMsbnMKDvd/fb4TM+x/ssQTT1Mz4X83kh"
|
|
995
|
+
"wXOaz9lWjuIzPsssgsZnfM4PdLLPy2V5oPEZn5N9vsBnfHbv8zLa5zt8xueaPucUGp/xWQToRRLQ"
|
|
996
|
+
"ywSeE4DGZ3zO4XM+ofFZimd8jvd5mebznUqfH0SCzyp9zkU0PuNzsfvd+IzP7fichWh8xmd19fMy"
|
|
997
|
+
"1udlItD4jM85fU4XGp+N8OzifLCXz4tFJM9bv8JnfFbhc6rQ+IzPBX1e9NA50OflNs9L+hv4rMvn"
|
|
998
|
+
"NKHx2cT0xtxY9zna50W4z28oL/EZn935fInPBtY/z934vDiJc4TPe8U0PuMzPrvxWfXeZ3wOBVrp"
|
|
999
|
+
"/RRfPn+LDz7T3wjxWbfN9p626vR5gc/4jM/Uz358nuNzWIMDn/EZn+lvFALal8+LXD4fnpOm/4zP"
|
|
1000
|
+
"+Mz5YBMFtHKfb3MfEOIzPtN/9jpf5658lvF5kc/nA0InXVDBZ3zGZ7/zz/hc2ue9C+H4jM/47Ox9"
|
|
1001
|
+
"WN3zdXMdkff5Fp/xGZ/xWcpnxzpn9HmBz/iMz/hcvn6e4HOCz0H9jVt8xmd8FhJal8+6bxDic7jP"
|
|
1002
|
+
"d/iMz635PMTnGkK78HmHYXzGZ3zO7/Pwx0teif2x/Qt8xudUnxc5fb7DZ3xuzecfP7ZQ/rEXuz5n"
|
|
1003
|
+
"Fdop0Bl9Xkj5nPjGlQWfH48Hnxv2+UfP2PR5whFhSZ8XXTyn1M937vsb+FzF5wS2dfncT2ivPk/9"
|
|
1004
|
+
"TkBL+5y3v4HP+NySzz9+ZAXaaX9jis/9fF4I+3yPz/jckM8/GvD5mg12Xny+x2d8bsjn3Dzr8zlL"
|
|
1005
|
+
"Ee1tg13G/RtFfb7HZ3zGZ3c+X2v1eerO5wX1Mz7jcwWfR4Z9vqaA9uAz9TM+43OK0Vp9ThXaF9CS"
|
|
1006
|
+
"Pi/k7g/e4zM+t+Tzj/CY9fkan2v5fJvH53t8xmcfPovxjM/4HO7zbbrP9ynBZ3w26HOM0HZ9vmYC"
|
|
1007
|
+
"uprPt/iMz/gsez3Fus/XjECX8Hlx8EIhPuMzPsv7fEJofLYgtKzPi4MXvtN8vsdnfPazH2lYC2h8"
|
|
1008
|
+
"xmcJn6mf8Rmf8bmCzxWIFvZ5cWhfEj7jMz7L+2y4/3yt1eepM5+ff3vv+/gc63NerPHZ0v7nls4H"
|
|
1009
|
+
"9fo8NevzqWz7jc/4jM+yBTQ+4zM+4zM+6/TZdH8jgejp1JHQ+IzP+Gzofdj+To+M+xwr9NQT0PiM"
|
|
1010
|
+
"z/hsy+eh8/1IiUBPPQFdxWfOB/EZn+N9Hrbic5zQ+Bzl8yLB5+UBn1/QxGd8bs/nJ6BPQX1A43eS"
|
|
1011
|
+
"Lfl8Heezm6veNXxe5PF5C+hVieAzPmvxeRjI81eN7fis9K6KR58X0fuRXlHe72+8+bzCZ3zG51P1"
|
|
1012
|
+
"c8aU9LlpoIv6vIh8P+UD5QM+lws+47Mun/s3oMeWfW55m50Fn4+eCq7wGZ/xuQfQtn3WdVtlNps9"
|
|
1013
|
+
"/x2fd3rP99WBxufO/D0UfNbg83hs3OcUoTPT/Bl83j4a7OmzIOP4HO7zX3xW0N9w4PN1ZZ+faubZ"
|
|
1014
|
+
"1+Dz9uRGP3nxGZ/x+Yfo4WAVnyvf954dypOfs7ms03Z8XuKzQZ//4nOp+Y1RodmNWj4nXfhOdHrW"
|
|
1015
|
+
"mYZ9XnZfHMRnfMbnD5WPXBxs3Oc8dXQdoDX7vJce9Fb1ORPd+IzPUR2OF6HxWajPUQVoUz4v8dmc"
|
|
1016
|
+
"z3/xuaTPArs28Plkg0MOaFs+HxC6mM9rfMZn3fcHpbYh4XO1FrQhn1+vD57AF5/xudn5DXyW85n6"
|
|
1017
|
+
"uU/pXM/nNT7H+fwXn6v3N/AZn4v4fBJoKZ/X+IzP+nzuX0Lj89TiAaGl/nOvnc46y+eWff6Lz2I+"
|
|
1018
|
+
"j3p3OPBZtP8sJbT1+Y09gHWWz/iMz7l9Ho2Go1EVnZnfKFZAG5vfOFlCy7Q31viMz3p83pa3j8/M"
|
|
1019
|
+
"P09E7w/S3zj9+KBo+xmfywGNz7E+F9OZ+pn7KaE+33e8RrhTXD//ozjPLfj8DZ8r+jwqqDM+s38j"
|
|
1020
|
+
"HOiTr8LGVtRrfC44Ao3PgUQXvjrIfB0+5/Y5qeGxxueSQONzUP18Kvgs7vMcn/P6fL8KQRqfi26B"
|
|
1021
|
+
"xuecPOMzPhf1OZPQhXluxud0oPEZn03NP8/xWcDne7U8G38fFp/xuan9ovgs4vO9Wp/7cq30/W58"
|
|
1022
|
+
"pv9M/YzPRXyuz7MLn//ic875DXxWtH8Dn+v5rIBnfMZndR0O7T5PBUL9jM+afD7DZ7Xzz/hc3mfq"
|
|
1023
|
+
"57I+9xBaA88+fP6Lz7V8bnH/xnRaTugnRbnfjc/4jM+RPo/wWbjHwX6kKv0NDTw78fkvPlfqP7f4"
|
|
1024
|
+
"fkphnfHZrs8P+IzP1X0e4bPkelF8rnI/BZ/x2YnPeYVurX6esV9U4/1uDTz3vk4YT/ifrElckoTP"
|
|
1025
|
+
"Mj5TPwuVzqIjHPiMz/iMz/iMz5p8XuEzPrdwvxuf5Xmm/1xpAzQ+Z/T5Lz5X9JnzQUmfqZ/xGZ/x"
|
|
1026
|
+
"GZ9V+kx/I6/PK0s+p0ityue/+FzNZ+af8Rmf8RmfpX0e4XPB/XWVecZnaaDxGZ8z+jwa1T8cbMjn"
|
|
1027
|
+
"2jy36fMKn6v4/BefU3wexUfRhiRLPtfWGZ/xGZ+N+KyK52eh45DGZ3x25rOT+Q18TvB5NNLmc2Qd"
|
|
1028
|
+
"jc/4nItnHT4/uvH5Lz7X8HmMz/hscP9ziQ3QzD/jMz479pn3U5r2+fFRhc8vm+kGYcHnfD5r5Tkc"
|
|
1029
|
+
"aCF98RmfNT2eUtbnb5l87gH0+f8cDD7jc2Gfa9/txmf1Pj9a9nmAz/iMz/js1udHdz7/xecYn/Xy"
|
|
1030
|
+
"HAy0of4GPqv3eVXT50ctPn/D56o+j/BZr8/c727U50frPkc1OP4Hn7PyLA604/NB9iPhs6DOuXz+"
|
|
1031
|
+
"ltHnv/iMz3Z87oc0Pjfn8yM+43Men0f4jM8u3x+s5/NjSZ83/XjGZ3zGZ95P0fP+YAagq/Lc1+eN"
|
|
1032
|
+
"TPkcBTQ+GwMan1N8vhFLA+9b4XNS+YzP+NyGzzN8bsrnwv2NTqBz+/wXn4vOPytbwOHT52ih8bnu"
|
|
1033
|
+
"C1dGfN7gs9v7g7oWjHr1eYbPxX2u+P5gaZ83J3mO8XmAz86BvsLnJKHxOdrnJ13bmH8u7PNffC7d"
|
|
1034
|
+
"4JAD2vn7sEE+xxCNz/H1cxafq1bQm2Sgv+Gzivo5A9ESVF/hc5rR+Fz7Be+aQxybZKCV+HyOz69A"
|
|
1035
|
+
"52M6B9dXTfgcCvQMnwsMblR/46q0zxsBnwf4nO8B77xldAafr/A5FWh8TvXZ8h1vfMZnOZ+vWvF5"
|
|
1036
|
+
"WtDnbGS347NdoDfJQOOzc5/H+FzM50Pf+Kpztpq6IZ8Thdb+fkoH0N/wGZ8z6my5vzFN9fnwN95V"
|
|
1037
|
+
"zt3zaMrnI0L//q17B/QmFehknwf4nNfn3EgX5tlm/RxaRR/RecZ+JDGft4H+/SLz7+d88dq6zxt8"
|
|
1038
|
+
"xmdJni37HAv07BVn9z7fvaa6z793svP7yt642uQsoPFZjc9DfFZdP+9oXOn6Cj5vC/17faierv1G"
|
|
1039
|
+
"7CZnAT0oEny24PMVPscEn2v4/AqzDM/Ffd7kbnDgs4DPQ3zGZ3w+fkD4+0js+7zBZ3wW47mR/jM+"
|
|
1040
|
+
"V/X59+/+Pj881AMan/EZn/XUzzN8LjK/8btY+YzP+KyvAY3P+Kx3vu53oz4XOyM8EHymfjayvw6f"
|
|
1041
|
+
"8Rmf8Rmf8Rmf930O4xmfCwLNfJ328Q18xud6Pvs+H8Rnf/UzPuOzL59/4zM+4zM+47Mqn1f4XNPn"
|
|
1042
|
+
"AT7jMz7j8wmgu2x25/O3b/jsuv88xueiPs/wWc7nV6KDDgdN+/ztmyafB/is5q1YfMZnlT6vAoc3"
|
|
1043
|
+
"zPjc/XQKPrv0ufRufnymv1HP59/4XBtofMZnfMZnf+eD+Nyez2N8Luwz76fU9vl3bp7xOQBofFb8"
|
|
1044
|
+
"Miw+z/EZn/GZ+Q1hnvEZn636/FVofMZnjfPPY3wuDfQcnzX4/PvNZXwuDjT1Mz6r9XmOzzp8/v1k"
|
|
1045
|
+
"88Obzw9mff6Gz377z+MxPuve/IzPkj4/ZCufqZ8DgG7E5xE+F97PX4lnfJbz+SEPz/iMz/hc//2U"
|
|
1046
|
+
"CjjjMz4b83mAz/hc7X3YOKfnc3zW6HOm4DM+qxqua9rnsjzjMz7b8nmAz/hc43wwuseBz/iMz+34"
|
|
1047
|
+
"XPvuYFs+fzob24LGZ3zG52Z8rr0aqVmfyx8O4jM+m/N5gM/1icZnfMZnfMZnQZ/ZL4rP+IzPBYGm"
|
|
1048
|
+
"/8z7KfiMz/iMzy585n1YfMZnfC4END5TP+MzPuMzPuMzPuMzPuNzf6DxucwBIT7jMz4X9PkPPjfo"
|
|
1049
|
+
"M/Mb+IzP+IzP+IzP+IzPkT7/seXzAJ95vxuf8Rmf8Rmf8Rmf8bmiz3+s+TzAZ+534zM+4zM+K/d5"
|
|
1050
|
+
"PC6/IQmf8RmfS/n8p7/PWrz+nj92fX7J+xf4nM3nes924zM+47MHnz/N/PiS/aL4jM9+fP6Dz2b3"
|
|
1051
|
+
"1x3Uk/38+IzP+IzPRn0ej/EZn/HZhM9/8NmQz72kxWd8xmd8xmedPo+FecZnfMbnMj7/wWd/PncK"
|
|
1052
|
+
"PcZnfMZnfMZn6f5zl6H4jM/4bN3nP/hs1+dTjErxjM/4jM/4jM9dPPeBFJ/xGZ/t+vwHn4363FNS"
|
|
1053
|
+
"fMZnfMZnfE7xWXR9Bj7jMz6b9PlPqs+11Jby+bJ8YnfSjSOFxmd8xmd8xmcl9fMu0GN8xmd8NuHz"
|
|
1054
|
+
"H3zGZ3zGZ3zGZ3xW0d/AZ3zGZ2vvwx6KZp+l9vO79HmEz/iMz0JW4zM+KzsexGd8xmd8xmed7Q18"
|
|
1055
|
+
"xmd8xmd8zgF0fp7xGZ/xuXWfz8PTjs/1ZjfwGZ/xGZ/xOd8O57w64zM+4zM+47PkjlB8xmd8xmd8"
|
|
1056
|
+
"xmd8xmd8xudWfB7jMz7jsyGf/+8z+Ozd5zE+S/k8w2d8xmd8xmeFPj9xmptnfMZnfG7K5zE+y/n8"
|
|
1057
|
+
"QfQMn/EZnzOonNFnE/v58VmsvzHLH3zGZ3xuyOcxPgv2n/EZn/EZn6mf8Rmf8Rmf8Rmf8Rmf8Rmf"
|
|
1058
|
+
"8dn6/DM+4zP3U/CZ/jM+4zM+47Mzn8f4LHp/EJ/xGZ/xGZ/xGZ/xGZ9d+TzGZ+H9G/iMz4E+/+9z"
|
|
1059
|
+
"8Bmf8Rmf8flo/vvvP3zGZ3x2vb8On236/N9/ET4nC43P+Ez/ueh+UXw26POLzv+tP4PP+IzP+IzP"
|
|
1060
|
+
"anxe7+b3mvNBfGb+GZ/xub7P64PR7PMGn/EZn+k/t+Dz+ljwGZ/xmfkNfNbp81qrzxt8xmd8pn7G"
|
|
1061
|
+
"Z40+b/CZ/Uj4TP+5dZ/X+IzP+IzP+IzPxXjGZ88+j/AZn1vxea3Q5w0+4/NxnvEZn9vxeS3HMz7j"
|
|
1062
|
+
"s0D5jM/9hU4TG5/xWYJnfHbrc/JPce/zm8g5Kmp8VuDzWpnPG3zmfvexdvMIn3sJnafjgc8afD4m"
|
|
1063
|
+
"ND7js4b9G8//3uu/nKMKb8LnKT578nmtyOcNPuPzfk8jW5cEn/HZnM9rfMZnfMZnfNbp81qLzxt8"
|
|
1064
|
+
"xuduntX6PJEKPuPzW7a+ruHzBp/x+ZTQ+IzPrfn8qvIO1viMz0ret8JnfG7d571quoLPG3x263Pq"
|
|
1065
|
+
"1DM+4zM+V/V5g8/4jM/4jM89mtH4jM86fKb/jM/4XL1+3uAzPuMzPuOzRp83+GzQ5+4InA7iMz63"
|
|
1066
|
+
"7vMan/FZi8/MP+MzPu8DXdjnDT7jcx+e8Rmfm/d5jc/4nOyzxO1BfMZnfH5OUZ83+Oy7fh5l0hmf"
|
|
1067
|
+
"8Rmfsyhdi2d81uLzMAVVkS3/+IzP+IzP+Jzgs+ArLPiMz/gc6vMGn/G5B834jM/4XNznDT479zkj"
|
|
1068
|
+
"z/iMz/iMz/ic8XwQn/EZn436vMFn5z7n5Bmf8RmfC/q8wWf388/4jM/4jM/4rNLnMf0NfMZnkz5v"
|
|
1069
|
+
"8BmfqZ/xGZ/xGZ8L+tyT1FEYz/iMz/hczOcNPjdeP48Cg8/4jM+FfN7gc/P9DXzGZ3zGZ3xW2d/w"
|
|
1070
|
+
"4rOY3fiMz5V83uBzAz5nOxrEZ3zG53I+b/AZn/EZn/EZn/EZn/EZn/G5r88bfHbs8wif8Rmf7fq8"
|
|
1071
|
+
"wec2fB7lwxmf8Rmf8RmfU33uTyrzG/iMz+p83uCzY5/7mzrCZ3zGZ20+b/AZn/EZn/EZn/G5sM8B"
|
|
1072
|
+
"pOIzPuMzPuMzPuMzPuMzPuNzb1VH+IzP+IzP+FzL56zlMz7jMz5b9vkbPtf2WbB8xmedPn+BEp/x"
|
|
1073
|
+
"+XDO8NmIz6Oo4DM+47NVn8/O8Fmdzxl1xmd8xmezPp/hswKf+5g6wmd8xue2fD7DZ40+5+QZn/EZ"
|
|
1074
|
+
"n236fIbPVnymfsZnfG7K57MzfLbT36D/jM/43JDPZ/hsqX6ONhqfy/g8x2d8FuAZn+34PMZnLz5z"
|
|
1075
|
+
"PwWfe/GMz9p8znp9EJ+5P4jPxnw+O8NntT6P8Rmf8blhn8/wWa/PmXnGZ3zGZ1M+n+Gz1foZn/EZ"
|
|
1076
|
+
"n337fIbPRn1mvg6f8dm3z2dn+Gy0v8H8Mz7js2+fz/DZqM/cT8FnfHbu8xk+6/Y5t874jM/4bMXn"
|
|
1077
|
+
"M3zW7fMYn/EZn9v0+ewMn3X7PMZnfMbnNn0+w2d8xmd8xmeNPp/hs/r3UwR4xmd8xmf9Pp/hs9X+"
|
|
1078
|
+
"8ygp+IzP+Kzc57MzfDY6vzEa4TM+47Nnn8/w2c77sPiMz/jcks9n+Kzb5yE+4zM+4zM+m6ufx/iM"
|
|
1079
|
+
"z/iMz/iMz/iMz/iMz/gcsMEOn/EZn/EZn5X4/NVWSZ+vpILP+IzP+OzC52EnsPiMz/iMz/hczeeh"
|
|
1080
|
+
"FM/4jM/4jM/4LFQ/pzY48Bmf8Rmf8Tmpfh7iMz7jMz7jMz7jMz7jMz7jc3+fjwktvF8Un/EZn/EZ"
|
|
1081
|
+
"n4dxQKfO2Ln2eZo7+IzP+IzP/YFOvaaCz/iMz/iMz+k+HyI69SIhPuMzPuMzPmfxeU/o1JX9+IzP"
|
|
1082
|
+
"+Czuc4re+GzJ5yE+4zM+4zM+6/S5qxHNfiR8xmd8xueqPndv5MBn5uvwGZ/xuaLPuYzGZ3zGZ3zG"
|
|
1083
|
+
"5/w+50Aan/EZn/EZn4V8TjQan/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZ"
|
|
1084
|
+
"n/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZ"
|
|
1085
|
+
"n/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZ"
|
|
1086
|
+
"n/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/EZn/E5l8/jMT7jMz7jMz7jMz7jMz7j"
|
|
1087
|
+
"Mz7jMz7jMz7jM/1nfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMbn6j6/oIrP+IzP+IzP+IzP+IzP+IzP"
|
|
1088
|
+
"vX2mv4HP+IzP+Ez9jM/4jM/4jM/4jM/4jM/4zPwGPuMzPuMzPuMzPuMzPuMzPuMzPuMzPuMzPuMz"
|
|
1089
|
+
"PuMzPuMzPuMzPuMzPuMzPuNzos+r9OAzPuMzPuNzdp9XK3zGZ3zGZ3xW6PMKn/HZm89bWuIzPlM/"
|
|
1090
|
+
"R5q8fsBnfM7t846W+IzP+FyyZsZnfO7NMz7jMz7jMz5r8XmMz/i8JfEHxszX4TM+4zM+q/I5e/AZ"
|
|
1091
|
+
"n/GZ/gY+4zP3U/DZ53wdPuNzFp+fYMRnfMbnzPPP+IzPGXy+x2d8xmd8xmeNPt/jMz7jM/cH8Vmh"
|
|
1092
|
+
"z28w4jM+4zM+4zM+4zM+4zM+4zPzG/iMz/iMz9wfxGd8xmd8TvL55Z/vvw5AG5/xGZ/xGZ/FfE4q"
|
|
1093
|
+
"qvEZn/EZn/EZn/EZn/EZn635/PTfPj7jMz7jMz5r8vnpP/qXv+EzPuMzPuOzOp/fgs/4jM/4jM/4"
|
|
1094
|
+
"jM/4jM/4jM/4jM/4jM/43LLPO97iMz7jMz7jM/cH8Rmf8Rmf8Rmf8Rmf8Rmf8Rmf8Rmf8Rmf8Rmf"
|
|
1095
|
+
"8Rmf8Rmf8Rmf8Rmf8Rmf8dmnz/vQ4jM+4zM+4zM+4zM+4zM+V/P5q4/4jM/4jM/4jM9xPtN/xmd8"
|
|
1096
|
+
"xmd8xmd8xmd8xmd8pr+Bz/iMz/hs2Gfm6/AZn/EZn9X5zPwzPuMzPuMzPuMzPif5PJngMz631d/A"
|
|
1097
|
+
"Z3xW7/MHj/iMz/iMz/isxucdHvEZn5u6P0h/A5/xGZ/xmfoZn/EZn/EZn134/A2f8Rmf8Rmfuxse"
|
|
1098
|
+
"1M/4LO3zca/xGZ+b3l936Jf4jM/lfA6ft8NnfG5nv+hhg/EZn0v4HDMPjc8t+3zqD/vzeRMffMbn"
|
|
1099
|
+
"eJ8j76vgMz6343NS8BmfY32Ovk+Iz/iMz/iMz4I+J9z3xmd8xmd8xmd8xmd8xmd8xmd8xmd8xmd8"
|
|
1100
|
+
"xmd8xmd8xmd8xmd8xmd8xmd8xmfup+AzPuMz76fgMz7L+RwQfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
1101
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
1102
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
1103
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
1104
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
1105
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZn"
|
|
1106
|
+
"fMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfMZnfJb2+f8BrZeVTg=="
|
|
1107
|
+
)
|
|
1108
|
+
# 1440×720 timezone raster. Byte = round((utc_offset+12)*4); 255=ocean.
|
|
1109
|
+
# Derived from Natural Earth ne_10m_time_zones.
|
|
1110
|
+
|
|
1111
|
+
_WORLD_TZMAP: bytearray | None = None
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
def _get_tzmap() -> bytearray:
|
|
1115
|
+
"""Decode and cache the 1440x720 timezone raster (built lazily, once)."""
|
|
1116
|
+
global _WORLD_TZMAP
|
|
1117
|
+
if _WORLD_TZMAP is None:
|
|
1118
|
+
import zlib, base64 as _b64
|
|
1119
|
+
_WORLD_TZMAP = bytearray(zlib.decompress(_b64.b64decode(_WORLD_TZ_DATA)))
|
|
1120
|
+
return _WORLD_TZMAP
|
|
1121
|
+
|
|
1122
|
+
# Braille dot bit indices per sub-pixel position within a 2-col × 4-row cell.
|
|
1123
|
+
# dc=0 (left column), dc=1 (right column); dr=0..3 (top-to-bottom rows).
|
|
1124
|
+
_BRAILLE_BIT = [
|
|
1125
|
+
[0, 1, 2, 6], # left column: rows 0-3 → braille bits 0,1,2,6
|
|
1126
|
+
[3, 4, 5, 7], # right column: rows 0-3 → braille bits 3,4,5,7
|
|
1127
|
+
]
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
def _render_world_map(selected_offset_h: int, selected_offset_m: int,
|
|
1131
|
+
highlighted_tz_indices: list[int],
|
|
1132
|
+
map_cols: int, map_rows: int,
|
|
1133
|
+
current_tz_idx: int = -1) -> list[str]:
|
|
1134
|
+
"""Render a sub-pixel braille world map.
|
|
1135
|
+
|
|
1136
|
+
Each terminal character cell samples 2×4 = 8 geographic points (braille
|
|
1137
|
+
dots), giving smooth continental coastlines instead of blocky filled tiles.
|
|
1138
|
+
"""
|
|
1139
|
+
bitmap = _get_world_bitmap()
|
|
1140
|
+
src_h = len(bitmap)
|
|
1141
|
+
src_w = len(bitmap[0])
|
|
1142
|
+
|
|
1143
|
+
# Equirectangular projection, aspect-ratio corrected for terminal cells.
|
|
1144
|
+
# CHAR_ASPECT ≈ 2: each terminal cell is ~2× taller than wide, so we
|
|
1145
|
+
# need to show twice as many latitude degrees per row as longitude per col.
|
|
1146
|
+
CHAR_ASPECT = 2.0
|
|
1147
|
+
lat_range = min(180.0, 360.0 * map_rows * CHAR_ASPECT / map_cols)
|
|
1148
|
+
lat_range = max(lat_range, 160.0) # always reach at least ±80° so Antarctica shows
|
|
1149
|
+
lat_top = lat_range / 2.0
|
|
1150
|
+
|
|
1151
|
+
# Pixel grid: each char = 2 px wide × 4 px tall
|
|
1152
|
+
px_w = map_cols * 2
|
|
1153
|
+
px_h = map_rows * 4
|
|
1154
|
+
|
|
1155
|
+
def _px_to_lonlat(px_col: int, px_row: int):
|
|
1156
|
+
"""Map a sub-pixel (2x4 per char cell) coordinate to (lon, lat)."""
|
|
1157
|
+
lon = -180.0 + (px_col + 0.5) * 360.0 / px_w
|
|
1158
|
+
lat = lat_top - (px_row + 0.5) * lat_range / px_h
|
|
1159
|
+
return lon, lat
|
|
1160
|
+
|
|
1161
|
+
def _sample_px(px_col: int, px_row: int) -> int:
|
|
1162
|
+
"""Coastline bitmap bit at this sub-pixel; 0 outside ±90° latitude."""
|
|
1163
|
+
lon, lat = _px_to_lonlat(px_col, px_row)
|
|
1164
|
+
if lat < -90 or lat > 90:
|
|
1165
|
+
return 0
|
|
1166
|
+
sc = int((lon + 180.0) / 360.0 * src_w)
|
|
1167
|
+
sr = int((90.0 - lat) / 180.0 * src_h)
|
|
1168
|
+
return bitmap[min(max(sr, 0), src_h - 1)][min(sc, src_w - 1)]
|
|
1169
|
+
|
|
1170
|
+
def _char_lon(char_col: int) -> float:
|
|
1171
|
+
"""Longitude at the center of a map character column."""
|
|
1172
|
+
return -180.0 + (char_col + 0.5) * 360.0 / map_cols
|
|
1173
|
+
|
|
1174
|
+
def _char_lat(char_row: int) -> float:
|
|
1175
|
+
"""Latitude at the center of a map character row."""
|
|
1176
|
+
return lat_top - (char_row + 0.5) * lat_range / map_rows
|
|
1177
|
+
|
|
1178
|
+
# Timezone raster lookup (1440×720, byte = round((utc_offset+12)*4), 255=ocean)
|
|
1179
|
+
tzmap = _get_tzmap()
|
|
1180
|
+
TZ_W, TZ_H = 1440, 720
|
|
1181
|
+
selected_zone = selected_offset_h + selected_offset_m / 60.0
|
|
1182
|
+
selected_code = int(round((selected_zone + 12) * 4))
|
|
1183
|
+
def _is_hl_ll(lat: float, lon: float) -> bool:
|
|
1184
|
+
"""Whether (lat, lon) falls in the currently selected UTC offset's timezone."""
|
|
1185
|
+
tc = min(TZ_W - 1, max(0, int((lon + 180.0) / 360.0 * TZ_W)))
|
|
1186
|
+
tr = min(TZ_H - 1, max(0, int((90.0 - lat) / 180.0 * TZ_H)))
|
|
1187
|
+
code = tzmap[tr * TZ_W + tc]
|
|
1188
|
+
return code != 255 and code == selected_code
|
|
1189
|
+
|
|
1190
|
+
def _is_hl(char_col: int, char_row: int) -> bool:
|
|
1191
|
+
"""Whether a map character cell falls in the currently selected offset's timezone."""
|
|
1192
|
+
return _is_hl_ll(_char_lat(char_row), _char_lon(char_col))
|
|
1193
|
+
|
|
1194
|
+
def _lat_to_crow(lat: float) -> int:
|
|
1195
|
+
"""Latitude to map character row."""
|
|
1196
|
+
return int((lat_top - lat) / lat_range * map_rows)
|
|
1197
|
+
|
|
1198
|
+
def _lon_to_ccol(lon: float) -> int:
|
|
1199
|
+
"""Longitude to map character column."""
|
|
1200
|
+
return int((lon + 180.0) / 360.0 * map_cols)
|
|
1201
|
+
|
|
1202
|
+
# Build dot maps
|
|
1203
|
+
# all_cap_cells: cell → True if also a highlighted tz, False if global capital only
|
|
1204
|
+
cur_tz_cell: tuple[int, int] | None = None
|
|
1205
|
+
if current_tz_idx >= 0:
|
|
1206
|
+
_, _, clat, clon, _, _, _, _ = _TIMEZONES[current_tz_idx]
|
|
1207
|
+
cr, cc = _lat_to_crow(clat), _lon_to_ccol(clon)
|
|
1208
|
+
if 0 <= cr < map_rows and 0 <= cc < map_cols:
|
|
1209
|
+
cur_tz_cell = (cr, cc)
|
|
1210
|
+
|
|
1211
|
+
# Capitals in the current offset (bright dots)
|
|
1212
|
+
hl_cap_cells: set[tuple[int, int]] = set()
|
|
1213
|
+
for idx in highlighted_tz_indices:
|
|
1214
|
+
entry = _TIMEZONES[idx]
|
|
1215
|
+
if not entry[7]:
|
|
1216
|
+
continue
|
|
1217
|
+
dr = _lat_to_crow(entry[2])
|
|
1218
|
+
dc = _lon_to_ccol(entry[3])
|
|
1219
|
+
if 0 <= dr < map_rows and 0 <= dc < map_cols:
|
|
1220
|
+
hl_cap_cells.add((dr, dc))
|
|
1221
|
+
|
|
1222
|
+
eq_row = _lat_to_crow(0.0)
|
|
1223
|
+
pm_col = _lon_to_ccol(0.0)
|
|
1224
|
+
|
|
1225
|
+
LAND_FG = "\033[38;2;80;160;80m"
|
|
1226
|
+
HL_LAND = "\033[38;2;160;255;160m"
|
|
1227
|
+
RESET = "\033[0m"
|
|
1228
|
+
DOT_FG = "\033[38;2;200;190;80m" # same-offset capital: bright yellow
|
|
1229
|
+
DOT_CUR_FG = "\033[1;97m" # selected city: bright white bold
|
|
1230
|
+
DIM_FG = "\033[38;2;45;75;45m"
|
|
1231
|
+
|
|
1232
|
+
lines = []
|
|
1233
|
+
for char_row in range(map_rows):
|
|
1234
|
+
line = ""
|
|
1235
|
+
base_py = char_row * 4
|
|
1236
|
+
for char_col in range(map_cols):
|
|
1237
|
+
hl = _is_hl(char_col, char_row)
|
|
1238
|
+
cell = (char_row, char_col)
|
|
1239
|
+
is_eq = (char_row == eq_row)
|
|
1240
|
+
is_pm = (char_col == pm_col)
|
|
1241
|
+
|
|
1242
|
+
if cell == cur_tz_cell:
|
|
1243
|
+
line += DOT_CUR_FG + "◉" + RESET
|
|
1244
|
+
continue
|
|
1245
|
+
if cell in hl_cap_cells:
|
|
1246
|
+
line += DOT_FG + "•" + RESET
|
|
1247
|
+
continue
|
|
1248
|
+
|
|
1249
|
+
# Sample the 8 braille sub-pixels (2 cols × 4 rows)
|
|
1250
|
+
base_px = char_col * 2
|
|
1251
|
+
bits = 0
|
|
1252
|
+
any_land = False
|
|
1253
|
+
for dc in range(2):
|
|
1254
|
+
for dr in range(4):
|
|
1255
|
+
if _sample_px(base_px + dc, base_py + dr):
|
|
1256
|
+
bits |= (1 << _BRAILLE_BIT[dc][dr])
|
|
1257
|
+
any_land = True
|
|
1258
|
+
|
|
1259
|
+
if any_land:
|
|
1260
|
+
ch = chr(0x2800 + bits)
|
|
1261
|
+
line += (HL_LAND if hl else LAND_FG) + ch + RESET
|
|
1262
|
+
elif is_eq or is_pm:
|
|
1263
|
+
marker = "┼" if (is_eq and is_pm) else ("─" if is_eq else "│")
|
|
1264
|
+
line += DIM_FG + marker + RESET
|
|
1265
|
+
else:
|
|
1266
|
+
line += " "
|
|
1267
|
+
|
|
1268
|
+
lines.append(line)
|
|
1269
|
+
|
|
1270
|
+
return lines
|
|
1271
|
+
|
|
1272
|
+
|
|
1273
|
+
def timezone_select(initial_offset: str = "") -> str | None:
|
|
1274
|
+
"""
|
|
1275
|
+
Full-screen interactive timezone picker.
|
|
1276
|
+
|
|
1277
|
+
Navigation:
|
|
1278
|
+
←/→: cycle UTC offsets
|
|
1279
|
+
↑/↓: cycle timezones within current offset
|
|
1280
|
+
Type: search filter
|
|
1281
|
+
ESC (search empty): cancel, return None
|
|
1282
|
+
ESC (search non-empty): clear search
|
|
1283
|
+
BACKSPACE (search non-empty): clear search
|
|
1284
|
+
ENTER: confirm, return offset string
|
|
1285
|
+
printable keys: typed into the search box (so 'q' searches, it does not quit)
|
|
1286
|
+
|
|
1287
|
+
Returns:
|
|
1288
|
+
"Z" for UTC+0, "+05:30" for UTC+5:30, "-08:00" for UTC-8, or None on cancel.
|
|
1289
|
+
"""
|
|
1290
|
+
def _parse_initial(s: str) -> tuple[int, int]:
|
|
1291
|
+
"""Parse an offset string like "+05:30" or "Z" into (hour, minute); default (0, 0)."""
|
|
1292
|
+
if not s or s == "Z":
|
|
1293
|
+
return (0, 0)
|
|
1294
|
+
m = re.match(r'^([+-])(\d{1,2}):(\d{2})$', s)
|
|
1295
|
+
if m:
|
|
1296
|
+
sign = 1 if m.group(1) == '+' else -1
|
|
1297
|
+
return (sign * int(m.group(2)), int(m.group(3)))
|
|
1298
|
+
return (0, 0)
|
|
1299
|
+
|
|
1300
|
+
init_h, init_m = _parse_initial(initial_offset)
|
|
1301
|
+
|
|
1302
|
+
unique_offsets = sorted(set((tz[0], tz[1]) for tz in _TIMEZONES))
|
|
1303
|
+
|
|
1304
|
+
try:
|
|
1305
|
+
off_idx = unique_offsets.index((init_h, init_m))
|
|
1306
|
+
except ValueError:
|
|
1307
|
+
off_idx = unique_offsets.index((0, 0)) if (0, 0) in unique_offsets else 0
|
|
1308
|
+
|
|
1309
|
+
cur_offset = unique_offsets[off_idx]
|
|
1310
|
+
|
|
1311
|
+
def _tzs_for_offset(oh: int, om: int) -> list[int]:
|
|
1312
|
+
"""Indices into _TIMEZONES sharing this UTC offset."""
|
|
1313
|
+
return [i for i, tz in enumerate(_TIMEZONES) if tz[0] == oh and tz[1] == om]
|
|
1314
|
+
|
|
1315
|
+
tz_idx_in_offset = 0
|
|
1316
|
+
zone_viewport = 0 # top visible zone index in the list
|
|
1317
|
+
search_str = ""
|
|
1318
|
+
|
|
1319
|
+
MAX_ZONE_ROWS = 4 # max zone list rows shown at once
|
|
1320
|
+
|
|
1321
|
+
def _offset_str(oh: int, om: int) -> str:
|
|
1322
|
+
"""Format (hour, minute) as the widget's return value: "Z" or "±HH:MM"."""
|
|
1323
|
+
if oh == 0 and om == 0:
|
|
1324
|
+
return "Z"
|
|
1325
|
+
sign = "+" if oh >= 0 else "-"
|
|
1326
|
+
return f"{sign}{abs(oh):02d}:{om:02d}"
|
|
1327
|
+
|
|
1328
|
+
def _offset_display(oh: int, om: int) -> str:
|
|
1329
|
+
"""Format (hour, minute) as a human-readable "UTC±HH:MM" label."""
|
|
1330
|
+
if oh == 0 and om == 0:
|
|
1331
|
+
return "UTC+00:00"
|
|
1332
|
+
sign = "+" if oh >= 0 else "-"
|
|
1333
|
+
return f"UTC{sign}{abs(oh):02d}:{om:02d}"
|
|
1334
|
+
|
|
1335
|
+
def _tz_desc(idx: int) -> str:
|
|
1336
|
+
"""Display label for a timezone entry: "City (ABBR)"."""
|
|
1337
|
+
tz = _TIMEZONES[idx]
|
|
1338
|
+
return f"{tz[6]} ({tz[5]})"
|
|
1339
|
+
|
|
1340
|
+
fd = sys.stdin.fileno()
|
|
1341
|
+
old = _get_term_attrs(fd)
|
|
1342
|
+
w = _Widget(fd)
|
|
1343
|
+
|
|
1344
|
+
def _render():
|
|
1345
|
+
nonlocal zone_viewport
|
|
1346
|
+
cols = _cols()
|
|
1347
|
+
rows = _visible_rows()
|
|
1348
|
+
lines = []
|
|
1349
|
+
|
|
1350
|
+
oh, om = cur_offset
|
|
1351
|
+
tzs = _tzs_for_offset(oh, om)
|
|
1352
|
+
cur_tz_idx = tzs[tz_idx_in_offset] if tzs else -1
|
|
1353
|
+
n_zones = len(tzs)
|
|
1354
|
+
|
|
1355
|
+
# Keep viewport tracking the selection
|
|
1356
|
+
vis = min(MAX_ZONE_ROWS, n_zones)
|
|
1357
|
+
if tz_idx_in_offset < zone_viewport:
|
|
1358
|
+
zone_viewport = tz_idx_in_offset
|
|
1359
|
+
elif tz_idx_in_offset >= zone_viewport + vis:
|
|
1360
|
+
zone_viewport = tz_idx_in_offset - vis + 1
|
|
1361
|
+
|
|
1362
|
+
# ── Offset navigator strip ──────────────────────────────────────────
|
|
1363
|
+
# Show up to 2 neighbours each side: ‹ UTC-5 · UTC-4:30 · [UTC-4] · UTC-3:30 · UTC-3 ›
|
|
1364
|
+
NEIGHBORS = 2
|
|
1365
|
+
strip_parts = []
|
|
1366
|
+
lo = max(0, off_idx - NEIGHBORS)
|
|
1367
|
+
hi = min(len(unique_offsets) - 1, off_idx + NEIGHBORS)
|
|
1368
|
+
if lo > 0:
|
|
1369
|
+
strip_parts.append(f"{C.DIM}‹{C.RESET}")
|
|
1370
|
+
for i in range(lo, hi + 1):
|
|
1371
|
+
label = _offset_display(*unique_offsets[i])
|
|
1372
|
+
if i == off_idx:
|
|
1373
|
+
strip_parts.append(f"{C.BOLD}{C.PRIMARY}{label}{C.RESET}")
|
|
1374
|
+
else:
|
|
1375
|
+
strip_parts.append(f"{C.DIM}{label}{C.RESET}")
|
|
1376
|
+
if hi < len(unique_offsets) - 1:
|
|
1377
|
+
strip_parts.append(f"{C.DIM}›{C.RESET}")
|
|
1378
|
+
strip = f" {(' · ').join(strip_parts)}"
|
|
1379
|
+
|
|
1380
|
+
lines.append(strip)
|
|
1381
|
+
|
|
1382
|
+
if search_str:
|
|
1383
|
+
lines.append(f" {C.DIM}search:{C.RESET} {search_str}{C.DIM}█{C.RESET}")
|
|
1384
|
+
|
|
1385
|
+
# ── Zone list ───────────────────────────────────────────────────────
|
|
1386
|
+
zone_rows_emitted = 0
|
|
1387
|
+
if n_zones == 0:
|
|
1388
|
+
lines.append(f" {C.DIM}(no zones for this offset){C.RESET}")
|
|
1389
|
+
lines.append("")
|
|
1390
|
+
zone_rows_emitted = 2
|
|
1391
|
+
else:
|
|
1392
|
+
for rank in range(zone_viewport, min(zone_viewport + vis, n_zones)):
|
|
1393
|
+
tidx = tzs[rank]
|
|
1394
|
+
selected = (rank == tz_idx_in_offset)
|
|
1395
|
+
pointer = f"{C.ACCENT}›{C.RESET}" if selected else " "
|
|
1396
|
+
name = _tz_desc(tidx)
|
|
1397
|
+
if selected:
|
|
1398
|
+
name_s = f"{C.BOLD}{name}{C.RESET}"
|
|
1399
|
+
else:
|
|
1400
|
+
name_s = f"{C.DIM}{name}{C.RESET}"
|
|
1401
|
+
count_s = ""
|
|
1402
|
+
if selected and n_zones > 1:
|
|
1403
|
+
count_s = f" {C.DIM}{tz_idx_in_offset + 1}/{n_zones}{C.RESET}"
|
|
1404
|
+
lines.append(f" {pointer} {name_s}{count_s}")
|
|
1405
|
+
zone_rows_emitted += 1
|
|
1406
|
+
# Pad to MAX_ZONE_ROWS so map never shifts
|
|
1407
|
+
while zone_rows_emitted < MAX_ZONE_ROWS:
|
|
1408
|
+
lines.append("")
|
|
1409
|
+
zone_rows_emitted += 1
|
|
1410
|
+
|
|
1411
|
+
# Hint bar, via the shared chrome, so it carries the transport keys
|
|
1412
|
+
# while background audio is playing and its keys are clickable.
|
|
1413
|
+
L = keys.label
|
|
1414
|
+
_tz_pairs = [(L("timezone.earlier", "timezone.later"), "offset"), (L("timezone.up", "timezone.down"), "zone"),
|
|
1415
|
+
(L("timezone.choose"), "confirm"), (L("timezone.back"), "cancel/clear")]
|
|
1416
|
+
hint_line_count = len(_prompt.chrome_hint_lines(_tz_pairs))
|
|
1417
|
+
|
|
1418
|
+
# Map fills remaining rows; search line is always 1 slot (blank when empty)
|
|
1419
|
+
fixed_rows = 1 + 1 + MAX_ZONE_ROWS + hint_line_count # strip + search + zones + hints
|
|
1420
|
+
if not search_str:
|
|
1421
|
+
lines.insert(1, "") # blank placeholder keeps map stable
|
|
1422
|
+
map_rows = max(4, rows - fixed_rows)
|
|
1423
|
+
map_cols = cols
|
|
1424
|
+
|
|
1425
|
+
map_lines = _render_world_map(oh, om, tzs, map_cols, map_rows, cur_tz_idx)
|
|
1426
|
+
lines.extend(map_lines)
|
|
1427
|
+
|
|
1428
|
+
_prompt.append_chrome(lines, _tz_pairs, _hint_cells)
|
|
1429
|
+
w.render(lines)
|
|
1430
|
+
|
|
1431
|
+
_hint_cells: dict = {} # clickable hint keys, filled by append_chrome
|
|
1432
|
+
result = None
|
|
1433
|
+
try:
|
|
1434
|
+
_set_raw(fd)
|
|
1435
|
+
_prompt.enable_mouse()
|
|
1436
|
+
ui.clear_screen() # through ui, so the painter forgets the old rows
|
|
1437
|
+
_render()
|
|
1438
|
+
|
|
1439
|
+
while True:
|
|
1440
|
+
if ui.consume_resize():
|
|
1441
|
+
sys.stdout.write("\033[H\033[3J\033[J")
|
|
1442
|
+
sys.stdout.flush()
|
|
1443
|
+
w.anchor_reset()
|
|
1444
|
+
_render()
|
|
1445
|
+
continue
|
|
1446
|
+
|
|
1447
|
+
if not _wait_for_keypress(0.05):
|
|
1448
|
+
continue
|
|
1449
|
+
|
|
1450
|
+
key = _read_key(fd)
|
|
1451
|
+
|
|
1452
|
+
_ch = _prompt.consume_chrome(key, _hint_cells)
|
|
1453
|
+
if _ch is _prompt.CHROME_HANDLED:
|
|
1454
|
+
continue
|
|
1455
|
+
if _ch is _prompt.CHROME_REDRAW:
|
|
1456
|
+
w.anchor_reset(); _render(); continue
|
|
1457
|
+
if _ch is not None:
|
|
1458
|
+
key = _ch
|
|
1459
|
+
|
|
1460
|
+
act = keys.action(key, "timezone")
|
|
1461
|
+
if key == 'CTRL_C':
|
|
1462
|
+
break
|
|
1463
|
+
|
|
1464
|
+
if act == 'timezone.back':
|
|
1465
|
+
if search_str:
|
|
1466
|
+
search_str = ""
|
|
1467
|
+
_render()
|
|
1468
|
+
else:
|
|
1469
|
+
break
|
|
1470
|
+
|
|
1471
|
+
elif key == 'BACKSPACE':
|
|
1472
|
+
if search_str:
|
|
1473
|
+
search_str = search_str[:-1]
|
|
1474
|
+
_render()
|
|
1475
|
+
|
|
1476
|
+
elif act == 'timezone.choose':
|
|
1477
|
+
oh, om = cur_offset
|
|
1478
|
+
result = _offset_str(oh, om)
|
|
1479
|
+
break
|
|
1480
|
+
|
|
1481
|
+
elif act == 'timezone.later':
|
|
1482
|
+
off_idx = (off_idx + 1) % len(unique_offsets)
|
|
1483
|
+
cur_offset = unique_offsets[off_idx]
|
|
1484
|
+
tz_idx_in_offset = 0
|
|
1485
|
+
zone_viewport = 0
|
|
1486
|
+
search_str = ""
|
|
1487
|
+
_render()
|
|
1488
|
+
|
|
1489
|
+
elif act == 'timezone.earlier':
|
|
1490
|
+
off_idx = (off_idx - 1) % len(unique_offsets)
|
|
1491
|
+
cur_offset = unique_offsets[off_idx]
|
|
1492
|
+
tz_idx_in_offset = 0
|
|
1493
|
+
zone_viewport = 0
|
|
1494
|
+
search_str = ""
|
|
1495
|
+
_render()
|
|
1496
|
+
|
|
1497
|
+
elif act == 'timezone.down':
|
|
1498
|
+
tzs = _tzs_for_offset(*cur_offset)
|
|
1499
|
+
if tzs:
|
|
1500
|
+
tz_idx_in_offset = (tz_idx_in_offset + 1) % len(tzs)
|
|
1501
|
+
_render()
|
|
1502
|
+
|
|
1503
|
+
elif act == 'timezone.up':
|
|
1504
|
+
tzs = _tzs_for_offset(*cur_offset)
|
|
1505
|
+
if tzs:
|
|
1506
|
+
tz_idx_in_offset = (tz_idx_in_offset - 1) % len(tzs)
|
|
1507
|
+
_render()
|
|
1508
|
+
|
|
1509
|
+
elif key == 'SPACE' or (len(key) == 1 and (key.isalpha() or key.isdigit() or key in '+-_/')):
|
|
1510
|
+
search_str += ' ' if key == 'SPACE' else key
|
|
1511
|
+
q = search_str.lower()
|
|
1512
|
+
for i, tz in enumerate(_TIMEZONES):
|
|
1513
|
+
if (q in tz[4].lower() or q in tz[5].lower() or
|
|
1514
|
+
q in tz[6].lower()):
|
|
1515
|
+
oh2, om2 = tz[0], tz[1]
|
|
1516
|
+
if (oh2, om2) in unique_offsets:
|
|
1517
|
+
idx2 = unique_offsets.index((oh2, om2))
|
|
1518
|
+
off_idx = idx2
|
|
1519
|
+
cur_offset = unique_offsets[off_idx]
|
|
1520
|
+
tzs2 = _tzs_for_offset(oh2, om2)
|
|
1521
|
+
tz_idx_in_offset = tzs2.index(i) if i in tzs2 else 0
|
|
1522
|
+
zone_viewport = 0
|
|
1523
|
+
break
|
|
1524
|
+
_render()
|
|
1525
|
+
|
|
1526
|
+
finally:
|
|
1527
|
+
_prompt.disable_mouse()
|
|
1528
|
+
_restore_term_attrs(fd, old)
|
|
1529
|
+
w.clear()
|
|
1530
|
+
|
|
1531
|
+
return result
|
|
1532
|
+
|
|
1533
|
+
|
|
1534
|
+
if __name__ == '__main__':
|
|
1535
|
+
# Standalone demo: `python3 -m backbone.prompt.timezone [+05:30]`
|
|
1536
|
+
_initial = sys.argv[1] if len(sys.argv) > 1 else ""
|
|
1537
|
+
try:
|
|
1538
|
+
_picked = timezone_select(_initial)
|
|
1539
|
+
except QuitToTerminal:
|
|
1540
|
+
_picked = None
|
|
1541
|
+
print(f"Selected offset: {_picked}" if _picked is not None else "Cancelled.")
|
|
1542
|
+
|
|
1543
|
+
|