AceTime  1.8.0
Date and time classes for Arduino that support timezones from the TZ Database, and a system clock that can synchronize from an NTP server or an RTC chip.
zone_policies.cpp
1 // This file was generated by the following script:
2 //
3 // $ /home/brian/src/AceTimeTools/src/acetimetools/tzcompiler.py
4 // --input_dir /home/brian/dev/tz
5 // --output_dir /home/brian/src/AceTime/src/ace_time/zonedb
6 // --tz_version 2021c
7 // --action zonedb
8 // --language arduino
9 // --scope basic
10 // --start_year 2000
11 // --until_year 2050
12 //
13 // using the TZ Database files
14 //
15 // africa
16 // antarctica
17 // asia
18 // australasia
19 // backward
20 // etcetera
21 // europe
22 // northamerica
23 // southamerica
24 //
25 // from https://github.com/eggert/tz/releases/tag/2021c
26 //
27 // Policies: 64
28 // Rules: 362
29 // Letter Size (bytes): 0
30 // Total Memory 8-bit (bytes): 3642
31 // Total Memory 32-bit (bytes): 5112
32 //
33 // DO NOT EDIT
34 
35 #include <ace_time/common/compat.h>
36 #include "zone_policies.h"
37 
38 namespace ace_time {
39 namespace zonedb {
40 
41 //---------------------------------------------------------------------------
42 // Policy name: AN
43 // Rules: 9
44 // Memory (8-bit): 87
45 // Memory (32-bit): 120
46 //---------------------------------------------------------------------------
47 
48 static const basic::ZoneRule kZoneRulesAN[] ACE_TIME_PROGMEM = {
49  // Rule AN 1987 1999 - Oct lastSun 2:00s 1:00 D
50  {
51  -13 /*fromYearTiny*/,
52  -1 /*toYearTiny*/,
53  10 /*inMonth*/,
54  7 /*onDayOfWeek*/,
55  0 /*onDayOfMonth*/,
56  8 /*atTimeCode*/,
57  16 /*atTimeModifier (kSuffixS + minute=0)*/,
58  4 /*deltaCode ((deltaMinutes=60)/15)*/,
59  'D' /*letter*/,
60  },
61  // Rule AN 1990 1995 - Mar Sun>=1 2:00s 0 S
62  {
63  -10 /*fromYearTiny*/,
64  -5 /*toYearTiny*/,
65  3 /*inMonth*/,
66  7 /*onDayOfWeek*/,
67  1 /*onDayOfMonth*/,
68  8 /*atTimeCode*/,
69  16 /*atTimeModifier (kSuffixS + minute=0)*/,
70  0 /*deltaCode ((deltaMinutes=0)/15)*/,
71  'S' /*letter*/,
72  },
73  // Rule AN 1996 2005 - Mar lastSun 2:00s 0 S
74  {
75  -4 /*fromYearTiny*/,
76  5 /*toYearTiny*/,
77  3 /*inMonth*/,
78  7 /*onDayOfWeek*/,
79  0 /*onDayOfMonth*/,
80  8 /*atTimeCode*/,
81  16 /*atTimeModifier (kSuffixS + minute=0)*/,
82  0 /*deltaCode ((deltaMinutes=0)/15)*/,
83  'S' /*letter*/,
84  },
85  // Rule AN 2000 only - Aug lastSun 2:00s 1:00 D
86  {
87  0 /*fromYearTiny*/,
88  0 /*toYearTiny*/,
89  8 /*inMonth*/,
90  7 /*onDayOfWeek*/,
91  0 /*onDayOfMonth*/,
92  8 /*atTimeCode*/,
93  16 /*atTimeModifier (kSuffixS + minute=0)*/,
94  4 /*deltaCode ((deltaMinutes=60)/15)*/,
95  'D' /*letter*/,
96  },
97  // Rule AN 2001 2007 - Oct lastSun 2:00s 1:00 D
98  {
99  1 /*fromYearTiny*/,
100  7 /*toYearTiny*/,
101  10 /*inMonth*/,
102  7 /*onDayOfWeek*/,
103  0 /*onDayOfMonth*/,
104  8 /*atTimeCode*/,
105  16 /*atTimeModifier (kSuffixS + minute=0)*/,
106  4 /*deltaCode ((deltaMinutes=60)/15)*/,
107  'D' /*letter*/,
108  },
109  // Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
110  {
111  6 /*fromYearTiny*/,
112  6 /*toYearTiny*/,
113  4 /*inMonth*/,
114  7 /*onDayOfWeek*/,
115  1 /*onDayOfMonth*/,
116  8 /*atTimeCode*/,
117  16 /*atTimeModifier (kSuffixS + minute=0)*/,
118  0 /*deltaCode ((deltaMinutes=0)/15)*/,
119  'S' /*letter*/,
120  },
121  // Rule AN 2007 only - Mar lastSun 2:00s 0 S
122  {
123  7 /*fromYearTiny*/,
124  7 /*toYearTiny*/,
125  3 /*inMonth*/,
126  7 /*onDayOfWeek*/,
127  0 /*onDayOfMonth*/,
128  8 /*atTimeCode*/,
129  16 /*atTimeModifier (kSuffixS + minute=0)*/,
130  0 /*deltaCode ((deltaMinutes=0)/15)*/,
131  'S' /*letter*/,
132  },
133  // Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
134  {
135  8 /*fromYearTiny*/,
136  126 /*toYearTiny*/,
137  4 /*inMonth*/,
138  7 /*onDayOfWeek*/,
139  1 /*onDayOfMonth*/,
140  8 /*atTimeCode*/,
141  16 /*atTimeModifier (kSuffixS + minute=0)*/,
142  0 /*deltaCode ((deltaMinutes=0)/15)*/,
143  'S' /*letter*/,
144  },
145  // Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
146  {
147  8 /*fromYearTiny*/,
148  126 /*toYearTiny*/,
149  10 /*inMonth*/,
150  7 /*onDayOfWeek*/,
151  1 /*onDayOfMonth*/,
152  8 /*atTimeCode*/,
153  16 /*atTimeModifier (kSuffixS + minute=0)*/,
154  4 /*deltaCode ((deltaMinutes=60)/15)*/,
155  'D' /*letter*/,
156  },
157 
158 };
159 
160 
161 
162 const basic::ZonePolicy kPolicyAN ACE_TIME_PROGMEM = {
163  kZoneRulesAN /*rules*/,
164  nullptr /*letters*/,
165  9 /*numRules*/,
166  0 /*numLetters*/,
167 };
168 
169 //---------------------------------------------------------------------------
170 // Policy name: AQ
171 // Rules: 1
172 // Memory (8-bit): 15
173 // Memory (32-bit): 24
174 //---------------------------------------------------------------------------
175 
176 static const basic::ZoneRule kZoneRulesAQ[] ACE_TIME_PROGMEM = {
177  // Rule AQ 1990 1992 - Mar Sun>=1 2:00s 0 S
178  {
179  -10 /*fromYearTiny*/,
180  -8 /*toYearTiny*/,
181  3 /*inMonth*/,
182  7 /*onDayOfWeek*/,
183  1 /*onDayOfMonth*/,
184  8 /*atTimeCode*/,
185  16 /*atTimeModifier (kSuffixS + minute=0)*/,
186  0 /*deltaCode ((deltaMinutes=0)/15)*/,
187  'S' /*letter*/,
188  },
189 
190 };
191 
192 
193 
194 const basic::ZonePolicy kPolicyAQ ACE_TIME_PROGMEM = {
195  kZoneRulesAQ /*rules*/,
196  nullptr /*letters*/,
197  1 /*numRules*/,
198  0 /*numLetters*/,
199 };
200 
201 //---------------------------------------------------------------------------
202 // Policy name: AS
203 // Rules: 7
204 // Memory (8-bit): 69
205 // Memory (32-bit): 96
206 //---------------------------------------------------------------------------
207 
208 static const basic::ZoneRule kZoneRulesAS[] ACE_TIME_PROGMEM = {
209  // Rule AS 1987 2007 - Oct lastSun 2:00s 1:00 D
210  {
211  -13 /*fromYearTiny*/,
212  7 /*toYearTiny*/,
213  10 /*inMonth*/,
214  7 /*onDayOfWeek*/,
215  0 /*onDayOfMonth*/,
216  8 /*atTimeCode*/,
217  16 /*atTimeModifier (kSuffixS + minute=0)*/,
218  4 /*deltaCode ((deltaMinutes=60)/15)*/,
219  'D' /*letter*/,
220  },
221  // Rule AS 1994 only - Mar 20 2:00s 0 S
222  {
223  -6 /*fromYearTiny*/,
224  -6 /*toYearTiny*/,
225  3 /*inMonth*/,
226  0 /*onDayOfWeek*/,
227  20 /*onDayOfMonth*/,
228  8 /*atTimeCode*/,
229  16 /*atTimeModifier (kSuffixS + minute=0)*/,
230  0 /*deltaCode ((deltaMinutes=0)/15)*/,
231  'S' /*letter*/,
232  },
233  // Rule AS 1995 2005 - Mar lastSun 2:00s 0 S
234  {
235  -5 /*fromYearTiny*/,
236  5 /*toYearTiny*/,
237  3 /*inMonth*/,
238  7 /*onDayOfWeek*/,
239  0 /*onDayOfMonth*/,
240  8 /*atTimeCode*/,
241  16 /*atTimeModifier (kSuffixS + minute=0)*/,
242  0 /*deltaCode ((deltaMinutes=0)/15)*/,
243  'S' /*letter*/,
244  },
245  // Rule AS 2006 only - Apr 2 2:00s 0 S
246  {
247  6 /*fromYearTiny*/,
248  6 /*toYearTiny*/,
249  4 /*inMonth*/,
250  0 /*onDayOfWeek*/,
251  2 /*onDayOfMonth*/,
252  8 /*atTimeCode*/,
253  16 /*atTimeModifier (kSuffixS + minute=0)*/,
254  0 /*deltaCode ((deltaMinutes=0)/15)*/,
255  'S' /*letter*/,
256  },
257  // Rule AS 2007 only - Mar lastSun 2:00s 0 S
258  {
259  7 /*fromYearTiny*/,
260  7 /*toYearTiny*/,
261  3 /*inMonth*/,
262  7 /*onDayOfWeek*/,
263  0 /*onDayOfMonth*/,
264  8 /*atTimeCode*/,
265  16 /*atTimeModifier (kSuffixS + minute=0)*/,
266  0 /*deltaCode ((deltaMinutes=0)/15)*/,
267  'S' /*letter*/,
268  },
269  // Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
270  {
271  8 /*fromYearTiny*/,
272  126 /*toYearTiny*/,
273  4 /*inMonth*/,
274  7 /*onDayOfWeek*/,
275  1 /*onDayOfMonth*/,
276  8 /*atTimeCode*/,
277  16 /*atTimeModifier (kSuffixS + minute=0)*/,
278  0 /*deltaCode ((deltaMinutes=0)/15)*/,
279  'S' /*letter*/,
280  },
281  // Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
282  {
283  8 /*fromYearTiny*/,
284  126 /*toYearTiny*/,
285  10 /*inMonth*/,
286  7 /*onDayOfWeek*/,
287  1 /*onDayOfMonth*/,
288  8 /*atTimeCode*/,
289  16 /*atTimeModifier (kSuffixS + minute=0)*/,
290  4 /*deltaCode ((deltaMinutes=60)/15)*/,
291  'D' /*letter*/,
292  },
293 
294 };
295 
296 
297 
298 const basic::ZonePolicy kPolicyAS ACE_TIME_PROGMEM = {
299  kZoneRulesAS /*rules*/,
300  nullptr /*letters*/,
301  7 /*numRules*/,
302  0 /*numLetters*/,
303 };
304 
305 //---------------------------------------------------------------------------
306 // Policy name: AT
307 // Rules: 8
308 // Memory (8-bit): 78
309 // Memory (32-bit): 108
310 //---------------------------------------------------------------------------
311 
312 static const basic::ZoneRule kZoneRulesAT[] ACE_TIME_PROGMEM = {
313  // Rule AT 1988 1990 - Oct lastSun 2:00s 1:00 D
314  {
315  -12 /*fromYearTiny*/,
316  -10 /*toYearTiny*/,
317  10 /*inMonth*/,
318  7 /*onDayOfWeek*/,
319  0 /*onDayOfMonth*/,
320  8 /*atTimeCode*/,
321  16 /*atTimeModifier (kSuffixS + minute=0)*/,
322  4 /*deltaCode ((deltaMinutes=60)/15)*/,
323  'D' /*letter*/,
324  },
325  // Rule AT 1991 1999 - Oct Sun>=1 2:00s 1:00 D
326  {
327  -9 /*fromYearTiny*/,
328  -1 /*toYearTiny*/,
329  10 /*inMonth*/,
330  7 /*onDayOfWeek*/,
331  1 /*onDayOfMonth*/,
332  8 /*atTimeCode*/,
333  16 /*atTimeModifier (kSuffixS + minute=0)*/,
334  4 /*deltaCode ((deltaMinutes=60)/15)*/,
335  'D' /*letter*/,
336  },
337  // Rule AT 1991 2005 - Mar lastSun 2:00s 0 S
338  {
339  -9 /*fromYearTiny*/,
340  5 /*toYearTiny*/,
341  3 /*inMonth*/,
342  7 /*onDayOfWeek*/,
343  0 /*onDayOfMonth*/,
344  8 /*atTimeCode*/,
345  16 /*atTimeModifier (kSuffixS + minute=0)*/,
346  0 /*deltaCode ((deltaMinutes=0)/15)*/,
347  'S' /*letter*/,
348  },
349  // Rule AT 2000 only - Aug lastSun 2:00s 1:00 D
350  {
351  0 /*fromYearTiny*/,
352  0 /*toYearTiny*/,
353  8 /*inMonth*/,
354  7 /*onDayOfWeek*/,
355  0 /*onDayOfMonth*/,
356  8 /*atTimeCode*/,
357  16 /*atTimeModifier (kSuffixS + minute=0)*/,
358  4 /*deltaCode ((deltaMinutes=60)/15)*/,
359  'D' /*letter*/,
360  },
361  // Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
362  {
363  1 /*fromYearTiny*/,
364  126 /*toYearTiny*/,
365  10 /*inMonth*/,
366  7 /*onDayOfWeek*/,
367  1 /*onDayOfMonth*/,
368  8 /*atTimeCode*/,
369  16 /*atTimeModifier (kSuffixS + minute=0)*/,
370  4 /*deltaCode ((deltaMinutes=60)/15)*/,
371  'D' /*letter*/,
372  },
373  // Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
374  {
375  6 /*fromYearTiny*/,
376  6 /*toYearTiny*/,
377  4 /*inMonth*/,
378  7 /*onDayOfWeek*/,
379  1 /*onDayOfMonth*/,
380  8 /*atTimeCode*/,
381  16 /*atTimeModifier (kSuffixS + minute=0)*/,
382  0 /*deltaCode ((deltaMinutes=0)/15)*/,
383  'S' /*letter*/,
384  },
385  // Rule AT 2007 only - Mar lastSun 2:00s 0 S
386  {
387  7 /*fromYearTiny*/,
388  7 /*toYearTiny*/,
389  3 /*inMonth*/,
390  7 /*onDayOfWeek*/,
391  0 /*onDayOfMonth*/,
392  8 /*atTimeCode*/,
393  16 /*atTimeModifier (kSuffixS + minute=0)*/,
394  0 /*deltaCode ((deltaMinutes=0)/15)*/,
395  'S' /*letter*/,
396  },
397  // Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
398  {
399  8 /*fromYearTiny*/,
400  126 /*toYearTiny*/,
401  4 /*inMonth*/,
402  7 /*onDayOfWeek*/,
403  1 /*onDayOfMonth*/,
404  8 /*atTimeCode*/,
405  16 /*atTimeModifier (kSuffixS + minute=0)*/,
406  0 /*deltaCode ((deltaMinutes=0)/15)*/,
407  'S' /*letter*/,
408  },
409 
410 };
411 
412 
413 
414 const basic::ZonePolicy kPolicyAT ACE_TIME_PROGMEM = {
415  kZoneRulesAT /*rules*/,
416  nullptr /*letters*/,
417  8 /*numRules*/,
418  0 /*numLetters*/,
419 };
420 
421 //---------------------------------------------------------------------------
422 // Policy name: AV
423 // Rules: 9
424 // Memory (8-bit): 87
425 // Memory (32-bit): 120
426 //---------------------------------------------------------------------------
427 
428 static const basic::ZoneRule kZoneRulesAV[] ACE_TIME_PROGMEM = {
429  // Rule AV 1988 1999 - Oct lastSun 2:00s 1:00 D
430  {
431  -12 /*fromYearTiny*/,
432  -1 /*toYearTiny*/,
433  10 /*inMonth*/,
434  7 /*onDayOfWeek*/,
435  0 /*onDayOfMonth*/,
436  8 /*atTimeCode*/,
437  16 /*atTimeModifier (kSuffixS + minute=0)*/,
438  4 /*deltaCode ((deltaMinutes=60)/15)*/,
439  'D' /*letter*/,
440  },
441  // Rule AV 1991 1994 - Mar Sun>=1 2:00s 0 S
442  {
443  -9 /*fromYearTiny*/,
444  -6 /*toYearTiny*/,
445  3 /*inMonth*/,
446  7 /*onDayOfWeek*/,
447  1 /*onDayOfMonth*/,
448  8 /*atTimeCode*/,
449  16 /*atTimeModifier (kSuffixS + minute=0)*/,
450  0 /*deltaCode ((deltaMinutes=0)/15)*/,
451  'S' /*letter*/,
452  },
453  // Rule AV 1995 2005 - Mar lastSun 2:00s 0 S
454  {
455  -5 /*fromYearTiny*/,
456  5 /*toYearTiny*/,
457  3 /*inMonth*/,
458  7 /*onDayOfWeek*/,
459  0 /*onDayOfMonth*/,
460  8 /*atTimeCode*/,
461  16 /*atTimeModifier (kSuffixS + minute=0)*/,
462  0 /*deltaCode ((deltaMinutes=0)/15)*/,
463  'S' /*letter*/,
464  },
465  // Rule AV 2000 only - Aug lastSun 2:00s 1:00 D
466  {
467  0 /*fromYearTiny*/,
468  0 /*toYearTiny*/,
469  8 /*inMonth*/,
470  7 /*onDayOfWeek*/,
471  0 /*onDayOfMonth*/,
472  8 /*atTimeCode*/,
473  16 /*atTimeModifier (kSuffixS + minute=0)*/,
474  4 /*deltaCode ((deltaMinutes=60)/15)*/,
475  'D' /*letter*/,
476  },
477  // Rule AV 2001 2007 - Oct lastSun 2:00s 1:00 D
478  {
479  1 /*fromYearTiny*/,
480  7 /*toYearTiny*/,
481  10 /*inMonth*/,
482  7 /*onDayOfWeek*/,
483  0 /*onDayOfMonth*/,
484  8 /*atTimeCode*/,
485  16 /*atTimeModifier (kSuffixS + minute=0)*/,
486  4 /*deltaCode ((deltaMinutes=60)/15)*/,
487  'D' /*letter*/,
488  },
489  // Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
490  {
491  6 /*fromYearTiny*/,
492  6 /*toYearTiny*/,
493  4 /*inMonth*/,
494  7 /*onDayOfWeek*/,
495  1 /*onDayOfMonth*/,
496  8 /*atTimeCode*/,
497  16 /*atTimeModifier (kSuffixS + minute=0)*/,
498  0 /*deltaCode ((deltaMinutes=0)/15)*/,
499  'S' /*letter*/,
500  },
501  // Rule AV 2007 only - Mar lastSun 2:00s 0 S
502  {
503  7 /*fromYearTiny*/,
504  7 /*toYearTiny*/,
505  3 /*inMonth*/,
506  7 /*onDayOfWeek*/,
507  0 /*onDayOfMonth*/,
508  8 /*atTimeCode*/,
509  16 /*atTimeModifier (kSuffixS + minute=0)*/,
510  0 /*deltaCode ((deltaMinutes=0)/15)*/,
511  'S' /*letter*/,
512  },
513  // Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
514  {
515  8 /*fromYearTiny*/,
516  126 /*toYearTiny*/,
517  4 /*inMonth*/,
518  7 /*onDayOfWeek*/,
519  1 /*onDayOfMonth*/,
520  8 /*atTimeCode*/,
521  16 /*atTimeModifier (kSuffixS + minute=0)*/,
522  0 /*deltaCode ((deltaMinutes=0)/15)*/,
523  'S' /*letter*/,
524  },
525  // Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
526  {
527  8 /*fromYearTiny*/,
528  126 /*toYearTiny*/,
529  10 /*inMonth*/,
530  7 /*onDayOfWeek*/,
531  1 /*onDayOfMonth*/,
532  8 /*atTimeCode*/,
533  16 /*atTimeModifier (kSuffixS + minute=0)*/,
534  4 /*deltaCode ((deltaMinutes=60)/15)*/,
535  'D' /*letter*/,
536  },
537 
538 };
539 
540 
541 
542 const basic::ZonePolicy kPolicyAV ACE_TIME_PROGMEM = {
543  kZoneRulesAV /*rules*/,
544  nullptr /*letters*/,
545  9 /*numRules*/,
546  0 /*numLetters*/,
547 };
548 
549 //---------------------------------------------------------------------------
550 // Policy name: AW
551 // Rules: 4
552 // Memory (8-bit): 42
553 // Memory (32-bit): 60
554 //---------------------------------------------------------------------------
555 
556 static const basic::ZoneRule kZoneRulesAW[] ACE_TIME_PROGMEM = {
557  // Rule AW 1992 only - Mar Sun>=1 2:00s 0 S
558  {
559  -8 /*fromYearTiny*/,
560  -8 /*toYearTiny*/,
561  3 /*inMonth*/,
562  7 /*onDayOfWeek*/,
563  1 /*onDayOfMonth*/,
564  8 /*atTimeCode*/,
565  16 /*atTimeModifier (kSuffixS + minute=0)*/,
566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
567  'S' /*letter*/,
568  },
569  // Rule AW 2006 only - Dec 3 2:00s 1:00 D
570  {
571  6 /*fromYearTiny*/,
572  6 /*toYearTiny*/,
573  12 /*inMonth*/,
574  0 /*onDayOfWeek*/,
575  3 /*onDayOfMonth*/,
576  8 /*atTimeCode*/,
577  16 /*atTimeModifier (kSuffixS + minute=0)*/,
578  4 /*deltaCode ((deltaMinutes=60)/15)*/,
579  'D' /*letter*/,
580  },
581  // Rule AW 2007 2009 - Mar lastSun 2:00s 0 S
582  {
583  7 /*fromYearTiny*/,
584  9 /*toYearTiny*/,
585  3 /*inMonth*/,
586  7 /*onDayOfWeek*/,
587  0 /*onDayOfMonth*/,
588  8 /*atTimeCode*/,
589  16 /*atTimeModifier (kSuffixS + minute=0)*/,
590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
591  'S' /*letter*/,
592  },
593  // Rule AW 2007 2008 - Oct lastSun 2:00s 1:00 D
594  {
595  7 /*fromYearTiny*/,
596  8 /*toYearTiny*/,
597  10 /*inMonth*/,
598  7 /*onDayOfWeek*/,
599  0 /*onDayOfMonth*/,
600  8 /*atTimeCode*/,
601  16 /*atTimeModifier (kSuffixS + minute=0)*/,
602  4 /*deltaCode ((deltaMinutes=60)/15)*/,
603  'D' /*letter*/,
604  },
605 
606 };
607 
608 
609 
610 const basic::ZonePolicy kPolicyAW ACE_TIME_PROGMEM = {
611  kZoneRulesAW /*rules*/,
612  nullptr /*letters*/,
613  4 /*numRules*/,
614  0 /*numLetters*/,
615 };
616 
617 //---------------------------------------------------------------------------
618 // Policy name: Armenia
619 // Rules: 3
620 // Memory (8-bit): 33
621 // Memory (32-bit): 48
622 //---------------------------------------------------------------------------
623 
624 static const basic::ZoneRule kZoneRulesArmenia[] ACE_TIME_PROGMEM = {
625  // Anchor: Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
626  {
627  -127 /*fromYearTiny*/,
628  -127 /*toYearTiny*/,
629  1 /*inMonth*/,
630  0 /*onDayOfWeek*/,
631  1 /*onDayOfMonth*/,
632  0 /*atTimeCode*/,
633  0 /*atTimeModifier (kSuffixW + minute=0)*/,
634  0 /*deltaCode ((deltaMinutes=0)/15)*/,
635  '-' /*letter*/,
636  },
637  // Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
638  {
639  11 /*fromYearTiny*/,
640  11 /*toYearTiny*/,
641  3 /*inMonth*/,
642  7 /*onDayOfWeek*/,
643  0 /*onDayOfMonth*/,
644  8 /*atTimeCode*/,
645  16 /*atTimeModifier (kSuffixS + minute=0)*/,
646  4 /*deltaCode ((deltaMinutes=60)/15)*/,
647  '-' /*letter*/,
648  },
649  // Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
650  {
651  11 /*fromYearTiny*/,
652  11 /*toYearTiny*/,
653  10 /*inMonth*/,
654  7 /*onDayOfWeek*/,
655  0 /*onDayOfMonth*/,
656  8 /*atTimeCode*/,
657  16 /*atTimeModifier (kSuffixS + minute=0)*/,
658  0 /*deltaCode ((deltaMinutes=0)/15)*/,
659  '-' /*letter*/,
660  },
661 
662 };
663 
664 
665 
666 const basic::ZonePolicy kPolicyArmenia ACE_TIME_PROGMEM = {
667  kZoneRulesArmenia /*rules*/,
668  nullptr /*letters*/,
669  3 /*numRules*/,
670  0 /*numLetters*/,
671 };
672 
673 //---------------------------------------------------------------------------
674 // Policy name: Aus
675 // Rules: 1
676 // Memory (8-bit): 15
677 // Memory (32-bit): 24
678 //---------------------------------------------------------------------------
679 
680 static const basic::ZoneRule kZoneRulesAus[] ACE_TIME_PROGMEM = {
681  // Rule Aus 1943 1944 - Mar lastSun 2:00s 0 S
682  {
683  -57 /*fromYearTiny*/,
684  -56 /*toYearTiny*/,
685  3 /*inMonth*/,
686  7 /*onDayOfWeek*/,
687  0 /*onDayOfMonth*/,
688  8 /*atTimeCode*/,
689  16 /*atTimeModifier (kSuffixS + minute=0)*/,
690  0 /*deltaCode ((deltaMinutes=0)/15)*/,
691  'S' /*letter*/,
692  },
693 
694 };
695 
696 
697 
698 const basic::ZonePolicy kPolicyAus ACE_TIME_PROGMEM = {
699  kZoneRulesAus /*rules*/,
700  nullptr /*letters*/,
701  1 /*numRules*/,
702  0 /*numLetters*/,
703 };
704 
705 //---------------------------------------------------------------------------
706 // Policy name: Azer
707 // Rules: 2
708 // Memory (8-bit): 24
709 // Memory (32-bit): 36
710 //---------------------------------------------------------------------------
711 
712 static const basic::ZoneRule kZoneRulesAzer[] ACE_TIME_PROGMEM = {
713  // Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
714  {
715  -3 /*fromYearTiny*/,
716  15 /*toYearTiny*/,
717  3 /*inMonth*/,
718  7 /*onDayOfWeek*/,
719  0 /*onDayOfMonth*/,
720  16 /*atTimeCode*/,
721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
722  4 /*deltaCode ((deltaMinutes=60)/15)*/,
723  '-' /*letter*/,
724  },
725  // Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
726  {
727  -3 /*fromYearTiny*/,
728  15 /*toYearTiny*/,
729  10 /*inMonth*/,
730  7 /*onDayOfWeek*/,
731  0 /*onDayOfMonth*/,
732  20 /*atTimeCode*/,
733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
734  0 /*deltaCode ((deltaMinutes=0)/15)*/,
735  '-' /*letter*/,
736  },
737 
738 };
739 
740 
741 
742 const basic::ZonePolicy kPolicyAzer ACE_TIME_PROGMEM = {
743  kZoneRulesAzer /*rules*/,
744  nullptr /*letters*/,
745  2 /*numRules*/,
746  0 /*numLetters*/,
747 };
748 
749 //---------------------------------------------------------------------------
750 // Policy name: Barb
751 // Rules: 1
752 // Memory (8-bit): 15
753 // Memory (32-bit): 24
754 //---------------------------------------------------------------------------
755 
756 static const basic::ZoneRule kZoneRulesBarb[] ACE_TIME_PROGMEM = {
757  // Rule Barb 1980 only - Sep 25 2:00 0 S
758  {
759  -20 /*fromYearTiny*/,
760  -20 /*toYearTiny*/,
761  9 /*inMonth*/,
762  0 /*onDayOfWeek*/,
763  25 /*onDayOfMonth*/,
764  8 /*atTimeCode*/,
765  0 /*atTimeModifier (kSuffixW + minute=0)*/,
766  0 /*deltaCode ((deltaMinutes=0)/15)*/,
767  'S' /*letter*/,
768  },
769 
770 };
771 
772 
773 
774 const basic::ZonePolicy kPolicyBarb ACE_TIME_PROGMEM = {
775  kZoneRulesBarb /*rules*/,
776  nullptr /*letters*/,
777  1 /*numRules*/,
778  0 /*numLetters*/,
779 };
780 
781 //---------------------------------------------------------------------------
782 // Policy name: Brazil
783 // Rules: 20
784 // Memory (8-bit): 186
785 // Memory (32-bit): 252
786 //---------------------------------------------------------------------------
787 
788 static const basic::ZoneRule kZoneRulesBrazil[] ACE_TIME_PROGMEM = {
789  // Rule Brazil 1998 only - Oct 11 0:00 1:00 -
790  {
791  -2 /*fromYearTiny*/,
792  -2 /*toYearTiny*/,
793  10 /*inMonth*/,
794  0 /*onDayOfWeek*/,
795  11 /*onDayOfMonth*/,
796  0 /*atTimeCode*/,
797  0 /*atTimeModifier (kSuffixW + minute=0)*/,
798  4 /*deltaCode ((deltaMinutes=60)/15)*/,
799  '-' /*letter*/,
800  },
801  // Rule Brazil 1999 only - Feb 21 0:00 0 -
802  {
803  -1 /*fromYearTiny*/,
804  -1 /*toYearTiny*/,
805  2 /*inMonth*/,
806  0 /*onDayOfWeek*/,
807  21 /*onDayOfMonth*/,
808  0 /*atTimeCode*/,
809  0 /*atTimeModifier (kSuffixW + minute=0)*/,
810  0 /*deltaCode ((deltaMinutes=0)/15)*/,
811  '-' /*letter*/,
812  },
813  // Rule Brazil 1999 only - Oct 3 0:00 1:00 -
814  {
815  -1 /*fromYearTiny*/,
816  -1 /*toYearTiny*/,
817  10 /*inMonth*/,
818  0 /*onDayOfWeek*/,
819  3 /*onDayOfMonth*/,
820  0 /*atTimeCode*/,
821  0 /*atTimeModifier (kSuffixW + minute=0)*/,
822  4 /*deltaCode ((deltaMinutes=60)/15)*/,
823  '-' /*letter*/,
824  },
825  // Rule Brazil 2000 only - Feb 27 0:00 0 -
826  {
827  0 /*fromYearTiny*/,
828  0 /*toYearTiny*/,
829  2 /*inMonth*/,
830  0 /*onDayOfWeek*/,
831  27 /*onDayOfMonth*/,
832  0 /*atTimeCode*/,
833  0 /*atTimeModifier (kSuffixW + minute=0)*/,
834  0 /*deltaCode ((deltaMinutes=0)/15)*/,
835  '-' /*letter*/,
836  },
837  // Rule Brazil 2000 2001 - Oct Sun>=8 0:00 1:00 -
838  {
839  0 /*fromYearTiny*/,
840  1 /*toYearTiny*/,
841  10 /*inMonth*/,
842  7 /*onDayOfWeek*/,
843  8 /*onDayOfMonth*/,
844  0 /*atTimeCode*/,
845  0 /*atTimeModifier (kSuffixW + minute=0)*/,
846  4 /*deltaCode ((deltaMinutes=60)/15)*/,
847  '-' /*letter*/,
848  },
849  // Rule Brazil 2001 2006 - Feb Sun>=15 0:00 0 -
850  {
851  1 /*fromYearTiny*/,
852  6 /*toYearTiny*/,
853  2 /*inMonth*/,
854  7 /*onDayOfWeek*/,
855  15 /*onDayOfMonth*/,
856  0 /*atTimeCode*/,
857  0 /*atTimeModifier (kSuffixW + minute=0)*/,
858  0 /*deltaCode ((deltaMinutes=0)/15)*/,
859  '-' /*letter*/,
860  },
861  // Rule Brazil 2002 only - Nov 3 0:00 1:00 -
862  {
863  2 /*fromYearTiny*/,
864  2 /*toYearTiny*/,
865  11 /*inMonth*/,
866  0 /*onDayOfWeek*/,
867  3 /*onDayOfMonth*/,
868  0 /*atTimeCode*/,
869  0 /*atTimeModifier (kSuffixW + minute=0)*/,
870  4 /*deltaCode ((deltaMinutes=60)/15)*/,
871  '-' /*letter*/,
872  },
873  // Rule Brazil 2003 only - Oct 19 0:00 1:00 -
874  {
875  3 /*fromYearTiny*/,
876  3 /*toYearTiny*/,
877  10 /*inMonth*/,
878  0 /*onDayOfWeek*/,
879  19 /*onDayOfMonth*/,
880  0 /*atTimeCode*/,
881  0 /*atTimeModifier (kSuffixW + minute=0)*/,
882  4 /*deltaCode ((deltaMinutes=60)/15)*/,
883  '-' /*letter*/,
884  },
885  // Rule Brazil 2004 only - Nov 2 0:00 1:00 -
886  {
887  4 /*fromYearTiny*/,
888  4 /*toYearTiny*/,
889  11 /*inMonth*/,
890  0 /*onDayOfWeek*/,
891  2 /*onDayOfMonth*/,
892  0 /*atTimeCode*/,
893  0 /*atTimeModifier (kSuffixW + minute=0)*/,
894  4 /*deltaCode ((deltaMinutes=60)/15)*/,
895  '-' /*letter*/,
896  },
897  // Rule Brazil 2005 only - Oct 16 0:00 1:00 -
898  {
899  5 /*fromYearTiny*/,
900  5 /*toYearTiny*/,
901  10 /*inMonth*/,
902  0 /*onDayOfWeek*/,
903  16 /*onDayOfMonth*/,
904  0 /*atTimeCode*/,
905  0 /*atTimeModifier (kSuffixW + minute=0)*/,
906  4 /*deltaCode ((deltaMinutes=60)/15)*/,
907  '-' /*letter*/,
908  },
909  // Rule Brazil 2006 only - Nov 5 0:00 1:00 -
910  {
911  6 /*fromYearTiny*/,
912  6 /*toYearTiny*/,
913  11 /*inMonth*/,
914  0 /*onDayOfWeek*/,
915  5 /*onDayOfMonth*/,
916  0 /*atTimeCode*/,
917  0 /*atTimeModifier (kSuffixW + minute=0)*/,
918  4 /*deltaCode ((deltaMinutes=60)/15)*/,
919  '-' /*letter*/,
920  },
921  // Rule Brazil 2007 only - Feb 25 0:00 0 -
922  {
923  7 /*fromYearTiny*/,
924  7 /*toYearTiny*/,
925  2 /*inMonth*/,
926  0 /*onDayOfWeek*/,
927  25 /*onDayOfMonth*/,
928  0 /*atTimeCode*/,
929  0 /*atTimeModifier (kSuffixW + minute=0)*/,
930  0 /*deltaCode ((deltaMinutes=0)/15)*/,
931  '-' /*letter*/,
932  },
933  // Rule Brazil 2007 only - Oct Sun>=8 0:00 1:00 -
934  {
935  7 /*fromYearTiny*/,
936  7 /*toYearTiny*/,
937  10 /*inMonth*/,
938  7 /*onDayOfWeek*/,
939  8 /*onDayOfMonth*/,
940  0 /*atTimeCode*/,
941  0 /*atTimeModifier (kSuffixW + minute=0)*/,
942  4 /*deltaCode ((deltaMinutes=60)/15)*/,
943  '-' /*letter*/,
944  },
945  // Rule Brazil 2008 2017 - Oct Sun>=15 0:00 1:00 -
946  {
947  8 /*fromYearTiny*/,
948  17 /*toYearTiny*/,
949  10 /*inMonth*/,
950  7 /*onDayOfWeek*/,
951  15 /*onDayOfMonth*/,
952  0 /*atTimeCode*/,
953  0 /*atTimeModifier (kSuffixW + minute=0)*/,
954  4 /*deltaCode ((deltaMinutes=60)/15)*/,
955  '-' /*letter*/,
956  },
957  // Rule Brazil 2008 2011 - Feb Sun>=15 0:00 0 -
958  {
959  8 /*fromYearTiny*/,
960  11 /*toYearTiny*/,
961  2 /*inMonth*/,
962  7 /*onDayOfWeek*/,
963  15 /*onDayOfMonth*/,
964  0 /*atTimeCode*/,
965  0 /*atTimeModifier (kSuffixW + minute=0)*/,
966  0 /*deltaCode ((deltaMinutes=0)/15)*/,
967  '-' /*letter*/,
968  },
969  // Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
970  {
971  12 /*fromYearTiny*/,
972  12 /*toYearTiny*/,
973  2 /*inMonth*/,
974  7 /*onDayOfWeek*/,
975  22 /*onDayOfMonth*/,
976  0 /*atTimeCode*/,
977  0 /*atTimeModifier (kSuffixW + minute=0)*/,
978  0 /*deltaCode ((deltaMinutes=0)/15)*/,
979  '-' /*letter*/,
980  },
981  // Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
982  {
983  13 /*fromYearTiny*/,
984  14 /*toYearTiny*/,
985  2 /*inMonth*/,
986  7 /*onDayOfWeek*/,
987  15 /*onDayOfMonth*/,
988  0 /*atTimeCode*/,
989  0 /*atTimeModifier (kSuffixW + minute=0)*/,
990  0 /*deltaCode ((deltaMinutes=0)/15)*/,
991  '-' /*letter*/,
992  },
993  // Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
994  {
995  15 /*fromYearTiny*/,
996  15 /*toYearTiny*/,
997  2 /*inMonth*/,
998  7 /*onDayOfWeek*/,
999  22 /*onDayOfMonth*/,
1000  0 /*atTimeCode*/,
1001  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1002  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1003  '-' /*letter*/,
1004  },
1005  // Rule Brazil 2016 2019 - Feb Sun>=15 0:00 0 -
1006  {
1007  16 /*fromYearTiny*/,
1008  19 /*toYearTiny*/,
1009  2 /*inMonth*/,
1010  7 /*onDayOfWeek*/,
1011  15 /*onDayOfMonth*/,
1012  0 /*atTimeCode*/,
1013  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1014  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1015  '-' /*letter*/,
1016  },
1017  // Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
1018  {
1019  18 /*fromYearTiny*/,
1020  18 /*toYearTiny*/,
1021  11 /*inMonth*/,
1022  7 /*onDayOfWeek*/,
1023  1 /*onDayOfMonth*/,
1024  0 /*atTimeCode*/,
1025  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1026  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1027  '-' /*letter*/,
1028  },
1029 
1030 };
1031 
1032 
1033 
1034 const basic::ZonePolicy kPolicyBrazil ACE_TIME_PROGMEM = {
1035  kZoneRulesBrazil /*rules*/,
1036  nullptr /*letters*/,
1037  20 /*numRules*/,
1038  0 /*numLetters*/,
1039 };
1040 
1041 //---------------------------------------------------------------------------
1042 // Policy name: C_Eur
1043 // Rules: 3
1044 // Memory (8-bit): 33
1045 // Memory (32-bit): 48
1046 //---------------------------------------------------------------------------
1047 
1048 static const basic::ZoneRule kZoneRulesC_Eur[] ACE_TIME_PROGMEM = {
1049  // Rule C-Eur 1979 1995 - Sep lastSun 2:00s 0 -
1050  {
1051  -21 /*fromYearTiny*/,
1052  -5 /*toYearTiny*/,
1053  9 /*inMonth*/,
1054  7 /*onDayOfWeek*/,
1055  0 /*onDayOfMonth*/,
1056  8 /*atTimeCode*/,
1057  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1058  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1059  '-' /*letter*/,
1060  },
1061  // Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S
1062  {
1063  -19 /*fromYearTiny*/,
1064  126 /*toYearTiny*/,
1065  3 /*inMonth*/,
1066  7 /*onDayOfWeek*/,
1067  0 /*onDayOfMonth*/,
1068  8 /*atTimeCode*/,
1069  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1070  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1071  'S' /*letter*/,
1072  },
1073  // Rule C-Eur 1996 max - Oct lastSun 2:00s 0 -
1074  {
1075  -4 /*fromYearTiny*/,
1076  126 /*toYearTiny*/,
1077  10 /*inMonth*/,
1078  7 /*onDayOfWeek*/,
1079  0 /*onDayOfMonth*/,
1080  8 /*atTimeCode*/,
1081  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1082  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1083  '-' /*letter*/,
1084  },
1085 
1086 };
1087 
1088 
1089 
1090 const basic::ZonePolicy kPolicyC_Eur ACE_TIME_PROGMEM = {
1091  kZoneRulesC_Eur /*rules*/,
1092  nullptr /*letters*/,
1093  3 /*numRules*/,
1094  0 /*numLetters*/,
1095 };
1096 
1097 //---------------------------------------------------------------------------
1098 // Policy name: CO
1099 // Rules: 1
1100 // Memory (8-bit): 15
1101 // Memory (32-bit): 24
1102 //---------------------------------------------------------------------------
1103 
1104 static const basic::ZoneRule kZoneRulesCO[] ACE_TIME_PROGMEM = {
1105  // Rule CO 1993 only - Apr 4 0:00 0 -
1106  {
1107  -7 /*fromYearTiny*/,
1108  -7 /*toYearTiny*/,
1109  4 /*inMonth*/,
1110  0 /*onDayOfWeek*/,
1111  4 /*onDayOfMonth*/,
1112  0 /*atTimeCode*/,
1113  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1114  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1115  '-' /*letter*/,
1116  },
1117 
1118 };
1119 
1120 
1121 
1122 const basic::ZonePolicy kPolicyCO ACE_TIME_PROGMEM = {
1123  kZoneRulesCO /*rules*/,
1124  nullptr /*letters*/,
1125  1 /*numRules*/,
1126  0 /*numLetters*/,
1127 };
1128 
1129 //---------------------------------------------------------------------------
1130 // Policy name: CR
1131 // Rules: 1
1132 // Memory (8-bit): 15
1133 // Memory (32-bit): 24
1134 //---------------------------------------------------------------------------
1135 
1136 static const basic::ZoneRule kZoneRulesCR[] ACE_TIME_PROGMEM = {
1137  // Rule CR 1992 only - Mar 15 0:00 0 S
1138  {
1139  -8 /*fromYearTiny*/,
1140  -8 /*toYearTiny*/,
1141  3 /*inMonth*/,
1142  0 /*onDayOfWeek*/,
1143  15 /*onDayOfMonth*/,
1144  0 /*atTimeCode*/,
1145  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1146  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1147  'S' /*letter*/,
1148  },
1149 
1150 };
1151 
1152 
1153 
1154 const basic::ZonePolicy kPolicyCR ACE_TIME_PROGMEM = {
1155  kZoneRulesCR /*rules*/,
1156  nullptr /*letters*/,
1157  1 /*numRules*/,
1158  0 /*numLetters*/,
1159 };
1160 
1161 //---------------------------------------------------------------------------
1162 // Policy name: Canada
1163 // Rules: 5
1164 // Memory (8-bit): 51
1165 // Memory (32-bit): 72
1166 //---------------------------------------------------------------------------
1167 
1168 static const basic::ZoneRule kZoneRulesCanada[] ACE_TIME_PROGMEM = {
1169  // Rule Canada 1974 1986 - Apr lastSun 2:00 1:00 D
1170  {
1171  -26 /*fromYearTiny*/,
1172  -14 /*toYearTiny*/,
1173  4 /*inMonth*/,
1174  7 /*onDayOfWeek*/,
1175  0 /*onDayOfMonth*/,
1176  8 /*atTimeCode*/,
1177  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1178  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1179  'D' /*letter*/,
1180  },
1181  // Rule Canada 1974 2006 - Oct lastSun 2:00 0 S
1182  {
1183  -26 /*fromYearTiny*/,
1184  6 /*toYearTiny*/,
1185  10 /*inMonth*/,
1186  7 /*onDayOfWeek*/,
1187  0 /*onDayOfMonth*/,
1188  8 /*atTimeCode*/,
1189  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1190  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1191  'S' /*letter*/,
1192  },
1193  // Rule Canada 1987 2006 - Apr Sun>=1 2:00 1:00 D
1194  {
1195  -13 /*fromYearTiny*/,
1196  6 /*toYearTiny*/,
1197  4 /*inMonth*/,
1198  7 /*onDayOfWeek*/,
1199  1 /*onDayOfMonth*/,
1200  8 /*atTimeCode*/,
1201  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1202  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1203  'D' /*letter*/,
1204  },
1205  // Rule Canada 2007 max - Mar Sun>=8 2:00 1:00 D
1206  {
1207  7 /*fromYearTiny*/,
1208  126 /*toYearTiny*/,
1209  3 /*inMonth*/,
1210  7 /*onDayOfWeek*/,
1211  8 /*onDayOfMonth*/,
1212  8 /*atTimeCode*/,
1213  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1214  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1215  'D' /*letter*/,
1216  },
1217  // Rule Canada 2007 max - Nov Sun>=1 2:00 0 S
1218  {
1219  7 /*fromYearTiny*/,
1220  126 /*toYearTiny*/,
1221  11 /*inMonth*/,
1222  7 /*onDayOfWeek*/,
1223  1 /*onDayOfMonth*/,
1224  8 /*atTimeCode*/,
1225  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1226  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1227  'S' /*letter*/,
1228  },
1229 
1230 };
1231 
1232 
1233 
1234 const basic::ZonePolicy kPolicyCanada ACE_TIME_PROGMEM = {
1235  kZoneRulesCanada /*rules*/,
1236  nullptr /*letters*/,
1237  5 /*numRules*/,
1238  0 /*numLetters*/,
1239 };
1240 
1241 //---------------------------------------------------------------------------
1242 // Policy name: Chatham
1243 // Rules: 5
1244 // Memory (8-bit): 51
1245 // Memory (32-bit): 72
1246 //---------------------------------------------------------------------------
1247 
1248 static const basic::ZoneRule kZoneRulesChatham[] ACE_TIME_PROGMEM = {
1249  // Rule Chatham 1989 only - Oct Sun>=8 2:45s 1:00 -
1250  {
1251  -11 /*fromYearTiny*/,
1252  -11 /*toYearTiny*/,
1253  10 /*inMonth*/,
1254  7 /*onDayOfWeek*/,
1255  8 /*onDayOfMonth*/,
1256  11 /*atTimeCode*/,
1257  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1258  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1259  '-' /*letter*/,
1260  },
1261  // Rule Chatham 1990 2006 - Oct Sun>=1 2:45s 1:00 -
1262  {
1263  -10 /*fromYearTiny*/,
1264  6 /*toYearTiny*/,
1265  10 /*inMonth*/,
1266  7 /*onDayOfWeek*/,
1267  1 /*onDayOfMonth*/,
1268  11 /*atTimeCode*/,
1269  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1270  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1271  '-' /*letter*/,
1272  },
1273  // Rule Chatham 1990 2007 - Mar Sun>=15 2:45s 0 -
1274  {
1275  -10 /*fromYearTiny*/,
1276  7 /*toYearTiny*/,
1277  3 /*inMonth*/,
1278  7 /*onDayOfWeek*/,
1279  15 /*onDayOfMonth*/,
1280  11 /*atTimeCode*/,
1281  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1282  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1283  '-' /*letter*/,
1284  },
1285  // Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
1286  {
1287  7 /*fromYearTiny*/,
1288  126 /*toYearTiny*/,
1289  9 /*inMonth*/,
1290  7 /*onDayOfWeek*/,
1291  0 /*onDayOfMonth*/,
1292  11 /*atTimeCode*/,
1293  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1294  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1295  '-' /*letter*/,
1296  },
1297  // Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
1298  {
1299  8 /*fromYearTiny*/,
1300  126 /*toYearTiny*/,
1301  4 /*inMonth*/,
1302  7 /*onDayOfWeek*/,
1303  1 /*onDayOfMonth*/,
1304  11 /*atTimeCode*/,
1305  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1306  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1307  '-' /*letter*/,
1308  },
1309 
1310 };
1311 
1312 
1313 
1314 const basic::ZonePolicy kPolicyChatham ACE_TIME_PROGMEM = {
1315  kZoneRulesChatham /*rules*/,
1316  nullptr /*letters*/,
1317  5 /*numRules*/,
1318  0 /*numLetters*/,
1319 };
1320 
1321 //---------------------------------------------------------------------------
1322 // Policy name: Chile
1323 // Rules: 15
1324 // Memory (8-bit): 141
1325 // Memory (32-bit): 192
1326 //---------------------------------------------------------------------------
1327 
1328 static const basic::ZoneRule kZoneRulesChile[] ACE_TIME_PROGMEM = {
1329  // Rule Chile 1998 only - Sep 27 4:00u 1:00 -
1330  {
1331  -2 /*fromYearTiny*/,
1332  -2 /*toYearTiny*/,
1333  9 /*inMonth*/,
1334  0 /*onDayOfWeek*/,
1335  27 /*onDayOfMonth*/,
1336  16 /*atTimeCode*/,
1337  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1338  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1339  '-' /*letter*/,
1340  },
1341  // Rule Chile 1999 only - Apr 4 3:00u 0 -
1342  {
1343  -1 /*fromYearTiny*/,
1344  -1 /*toYearTiny*/,
1345  4 /*inMonth*/,
1346  0 /*onDayOfWeek*/,
1347  4 /*onDayOfMonth*/,
1348  12 /*atTimeCode*/,
1349  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1350  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1351  '-' /*letter*/,
1352  },
1353  // Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 -
1354  {
1355  -1 /*fromYearTiny*/,
1356  10 /*toYearTiny*/,
1357  10 /*inMonth*/,
1358  7 /*onDayOfWeek*/,
1359  9 /*onDayOfMonth*/,
1360  16 /*atTimeCode*/,
1361  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1362  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1363  '-' /*letter*/,
1364  },
1365  // Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
1366  {
1367  0 /*fromYearTiny*/,
1368  7 /*toYearTiny*/,
1369  3 /*inMonth*/,
1370  7 /*onDayOfWeek*/,
1371  9 /*onDayOfMonth*/,
1372  12 /*atTimeCode*/,
1373  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1374  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1375  '-' /*letter*/,
1376  },
1377  // Rule Chile 2008 only - Mar 30 3:00u 0 -
1378  {
1379  8 /*fromYearTiny*/,
1380  8 /*toYearTiny*/,
1381  3 /*inMonth*/,
1382  0 /*onDayOfWeek*/,
1383  30 /*onDayOfMonth*/,
1384  12 /*atTimeCode*/,
1385  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1386  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1387  '-' /*letter*/,
1388  },
1389  // Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
1390  {
1391  9 /*fromYearTiny*/,
1392  9 /*toYearTiny*/,
1393  3 /*inMonth*/,
1394  7 /*onDayOfWeek*/,
1395  9 /*onDayOfMonth*/,
1396  12 /*atTimeCode*/,
1397  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1398  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1399  '-' /*letter*/,
1400  },
1401  // Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
1402  {
1403  10 /*fromYearTiny*/,
1404  10 /*toYearTiny*/,
1405  4 /*inMonth*/,
1406  7 /*onDayOfWeek*/,
1407  1 /*onDayOfMonth*/,
1408  12 /*atTimeCode*/,
1409  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1410  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1411  '-' /*letter*/,
1412  },
1413  // Rule Chile 2011 only - May Sun>=2 3:00u 0 -
1414  {
1415  11 /*fromYearTiny*/,
1416  11 /*toYearTiny*/,
1417  5 /*inMonth*/,
1418  7 /*onDayOfWeek*/,
1419  2 /*onDayOfMonth*/,
1420  12 /*atTimeCode*/,
1421  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1422  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1423  '-' /*letter*/,
1424  },
1425  // Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 -
1426  {
1427  11 /*fromYearTiny*/,
1428  11 /*toYearTiny*/,
1429  8 /*inMonth*/,
1430  7 /*onDayOfWeek*/,
1431  16 /*onDayOfMonth*/,
1432  16 /*atTimeCode*/,
1433  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1434  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1435  '-' /*letter*/,
1436  },
1437  // Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
1438  {
1439  12 /*fromYearTiny*/,
1440  14 /*toYearTiny*/,
1441  4 /*inMonth*/,
1442  7 /*onDayOfWeek*/,
1443  23 /*onDayOfMonth*/,
1444  12 /*atTimeCode*/,
1445  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1446  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1447  '-' /*letter*/,
1448  },
1449  // Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 -
1450  {
1451  12 /*fromYearTiny*/,
1452  14 /*toYearTiny*/,
1453  9 /*inMonth*/,
1454  7 /*onDayOfWeek*/,
1455  2 /*onDayOfMonth*/,
1456  16 /*atTimeCode*/,
1457  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1458  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1459  '-' /*letter*/,
1460  },
1461  // Rule Chile 2016 2018 - May Sun>=9 3:00u 0 -
1462  {
1463  16 /*fromYearTiny*/,
1464  18 /*toYearTiny*/,
1465  5 /*inMonth*/,
1466  7 /*onDayOfWeek*/,
1467  9 /*onDayOfMonth*/,
1468  12 /*atTimeCode*/,
1469  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1470  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1471  '-' /*letter*/,
1472  },
1473  // Rule Chile 2016 2018 - Aug Sun>=9 4:00u 1:00 -
1474  {
1475  16 /*fromYearTiny*/,
1476  18 /*toYearTiny*/,
1477  8 /*inMonth*/,
1478  7 /*onDayOfWeek*/,
1479  9 /*onDayOfMonth*/,
1480  16 /*atTimeCode*/,
1481  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1482  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1483  '-' /*letter*/,
1484  },
1485  // Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
1486  {
1487  19 /*fromYearTiny*/,
1488  126 /*toYearTiny*/,
1489  4 /*inMonth*/,
1490  7 /*onDayOfWeek*/,
1491  2 /*onDayOfMonth*/,
1492  12 /*atTimeCode*/,
1493  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1494  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1495  '-' /*letter*/,
1496  },
1497  // Rule Chile 2019 max - Sep Sun>=2 4:00u 1:00 -
1498  {
1499  19 /*fromYearTiny*/,
1500  126 /*toYearTiny*/,
1501  9 /*inMonth*/,
1502  7 /*onDayOfWeek*/,
1503  2 /*onDayOfMonth*/,
1504  16 /*atTimeCode*/,
1505  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1506  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1507  '-' /*letter*/,
1508  },
1509 
1510 };
1511 
1512 
1513 
1514 const basic::ZonePolicy kPolicyChile ACE_TIME_PROGMEM = {
1515  kZoneRulesChile /*rules*/,
1516  nullptr /*letters*/,
1517  15 /*numRules*/,
1518  0 /*numLetters*/,
1519 };
1520 
1521 //---------------------------------------------------------------------------
1522 // Policy name: Cook
1523 // Rules: 1
1524 // Memory (8-bit): 15
1525 // Memory (32-bit): 24
1526 //---------------------------------------------------------------------------
1527 
1528 static const basic::ZoneRule kZoneRulesCook[] ACE_TIME_PROGMEM = {
1529  // Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
1530  {
1531  -21 /*fromYearTiny*/,
1532  -9 /*toYearTiny*/,
1533  3 /*inMonth*/,
1534  7 /*onDayOfWeek*/,
1535  1 /*onDayOfMonth*/,
1536  0 /*atTimeCode*/,
1537  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1538  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1539  '-' /*letter*/,
1540  },
1541 
1542 };
1543 
1544 
1545 
1546 const basic::ZonePolicy kPolicyCook ACE_TIME_PROGMEM = {
1547  kZoneRulesCook /*rules*/,
1548  nullptr /*letters*/,
1549  1 /*numRules*/,
1550  0 /*numLetters*/,
1551 };
1552 
1553 //---------------------------------------------------------------------------
1554 // Policy name: Cuba
1555 // Rules: 14
1556 // Memory (8-bit): 132
1557 // Memory (32-bit): 180
1558 //---------------------------------------------------------------------------
1559 
1560 static const basic::ZoneRule kZoneRulesCuba[] ACE_TIME_PROGMEM = {
1561  // Rule Cuba 1997 only - Oct 12 0:00s 0 S
1562  {
1563  -3 /*fromYearTiny*/,
1564  -3 /*toYearTiny*/,
1565  10 /*inMonth*/,
1566  0 /*onDayOfWeek*/,
1567  12 /*onDayOfMonth*/,
1568  0 /*atTimeCode*/,
1569  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1570  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1571  'S' /*letter*/,
1572  },
1573  // Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
1574  {
1575  -2 /*fromYearTiny*/,
1576  -1 /*toYearTiny*/,
1577  3 /*inMonth*/,
1578  7 /*onDayOfWeek*/,
1579  0 /*onDayOfMonth*/,
1580  0 /*atTimeCode*/,
1581  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1582  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1583  'D' /*letter*/,
1584  },
1585  // Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
1586  {
1587  -2 /*fromYearTiny*/,
1588  3 /*toYearTiny*/,
1589  10 /*inMonth*/,
1590  7 /*onDayOfWeek*/,
1591  0 /*onDayOfMonth*/,
1592  0 /*atTimeCode*/,
1593  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1594  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1595  'S' /*letter*/,
1596  },
1597  // Rule Cuba 2000 2003 - Apr Sun>=1 0:00s 1:00 D
1598  {
1599  0 /*fromYearTiny*/,
1600  3 /*toYearTiny*/,
1601  4 /*inMonth*/,
1602  7 /*onDayOfWeek*/,
1603  1 /*onDayOfMonth*/,
1604  0 /*atTimeCode*/,
1605  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1606  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1607  'D' /*letter*/,
1608  },
1609  // Rule Cuba 2004 only - Mar lastSun 0:00s 1:00 D
1610  {
1611  4 /*fromYearTiny*/,
1612  4 /*toYearTiny*/,
1613  3 /*inMonth*/,
1614  7 /*onDayOfWeek*/,
1615  0 /*onDayOfMonth*/,
1616  0 /*atTimeCode*/,
1617  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1618  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1619  'D' /*letter*/,
1620  },
1621  // Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
1622  {
1623  6 /*fromYearTiny*/,
1624  10 /*toYearTiny*/,
1625  10 /*inMonth*/,
1626  7 /*onDayOfWeek*/,
1627  0 /*onDayOfMonth*/,
1628  0 /*atTimeCode*/,
1629  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1630  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1631  'S' /*letter*/,
1632  },
1633  // Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
1634  {
1635  7 /*fromYearTiny*/,
1636  7 /*toYearTiny*/,
1637  3 /*inMonth*/,
1638  7 /*onDayOfWeek*/,
1639  8 /*onDayOfMonth*/,
1640  0 /*atTimeCode*/,
1641  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1642  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1643  'D' /*letter*/,
1644  },
1645  // Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
1646  {
1647  8 /*fromYearTiny*/,
1648  8 /*toYearTiny*/,
1649  3 /*inMonth*/,
1650  7 /*onDayOfWeek*/,
1651  15 /*onDayOfMonth*/,
1652  0 /*atTimeCode*/,
1653  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1654  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1655  'D' /*letter*/,
1656  },
1657  // Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D
1658  {
1659  9 /*fromYearTiny*/,
1660  10 /*toYearTiny*/,
1661  3 /*inMonth*/,
1662  7 /*onDayOfWeek*/,
1663  8 /*onDayOfMonth*/,
1664  0 /*atTimeCode*/,
1665  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1666  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1667  'D' /*letter*/,
1668  },
1669  // Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D
1670  {
1671  11 /*fromYearTiny*/,
1672  11 /*toYearTiny*/,
1673  3 /*inMonth*/,
1674  7 /*onDayOfWeek*/,
1675  15 /*onDayOfMonth*/,
1676  0 /*atTimeCode*/,
1677  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1678  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1679  'D' /*letter*/,
1680  },
1681  // Rule Cuba 2011 only - Nov 13 0:00s 0 S
1682  {
1683  11 /*fromYearTiny*/,
1684  11 /*toYearTiny*/,
1685  11 /*inMonth*/,
1686  0 /*onDayOfWeek*/,
1687  13 /*onDayOfMonth*/,
1688  0 /*atTimeCode*/,
1689  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1690  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1691  'S' /*letter*/,
1692  },
1693  // Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
1694  {
1695  12 /*fromYearTiny*/,
1696  12 /*toYearTiny*/,
1697  4 /*inMonth*/,
1698  0 /*onDayOfWeek*/,
1699  1 /*onDayOfMonth*/,
1700  0 /*atTimeCode*/,
1701  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1702  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1703  'D' /*letter*/,
1704  },
1705  // Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S
1706  {
1707  12 /*fromYearTiny*/,
1708  126 /*toYearTiny*/,
1709  11 /*inMonth*/,
1710  7 /*onDayOfWeek*/,
1711  1 /*onDayOfMonth*/,
1712  0 /*atTimeCode*/,
1713  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1714  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1715  'S' /*letter*/,
1716  },
1717  // Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
1718  {
1719  13 /*fromYearTiny*/,
1720  126 /*toYearTiny*/,
1721  3 /*inMonth*/,
1722  7 /*onDayOfWeek*/,
1723  8 /*onDayOfMonth*/,
1724  0 /*atTimeCode*/,
1725  16 /*atTimeModifier (kSuffixS + minute=0)*/,
1726  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1727  'D' /*letter*/,
1728  },
1729 
1730 };
1731 
1732 
1733 
1734 const basic::ZonePolicy kPolicyCuba ACE_TIME_PROGMEM = {
1735  kZoneRulesCuba /*rules*/,
1736  nullptr /*letters*/,
1737  14 /*numRules*/,
1738  0 /*numLetters*/,
1739 };
1740 
1741 //---------------------------------------------------------------------------
1742 // Policy name: Dhaka
1743 // Rules: 3
1744 // Memory (8-bit): 33
1745 // Memory (32-bit): 48
1746 //---------------------------------------------------------------------------
1747 
1748 static const basic::ZoneRule kZoneRulesDhaka[] ACE_TIME_PROGMEM = {
1749  // Anchor: Rule Dhaka 2009 only - Dec 31 24:00 0 -
1750  {
1751  -127 /*fromYearTiny*/,
1752  -127 /*toYearTiny*/,
1753  1 /*inMonth*/,
1754  0 /*onDayOfWeek*/,
1755  1 /*onDayOfMonth*/,
1756  0 /*atTimeCode*/,
1757  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1758  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1759  '-' /*letter*/,
1760  },
1761  // Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
1762  {
1763  9 /*fromYearTiny*/,
1764  9 /*toYearTiny*/,
1765  6 /*inMonth*/,
1766  0 /*onDayOfWeek*/,
1767  19 /*onDayOfMonth*/,
1768  92 /*atTimeCode*/,
1769  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1770  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1771  '-' /*letter*/,
1772  },
1773  // Rule Dhaka 2009 only - Dec 31 24:00 0 -
1774  {
1775  9 /*fromYearTiny*/,
1776  9 /*toYearTiny*/,
1777  12 /*inMonth*/,
1778  0 /*onDayOfWeek*/,
1779  31 /*onDayOfMonth*/,
1780  96 /*atTimeCode*/,
1781  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1782  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1783  '-' /*letter*/,
1784  },
1785 
1786 };
1787 
1788 
1789 
1790 const basic::ZonePolicy kPolicyDhaka ACE_TIME_PROGMEM = {
1791  kZoneRulesDhaka /*rules*/,
1792  nullptr /*letters*/,
1793  3 /*numRules*/,
1794  0 /*numLetters*/,
1795 };
1796 
1797 //---------------------------------------------------------------------------
1798 // Policy name: EU
1799 // Rules: 3
1800 // Memory (8-bit): 33
1801 // Memory (32-bit): 48
1802 //---------------------------------------------------------------------------
1803 
1804 static const basic::ZoneRule kZoneRulesEU[] ACE_TIME_PROGMEM = {
1805  // Rule EU 1979 1995 - Sep lastSun 1:00u 0 -
1806  {
1807  -21 /*fromYearTiny*/,
1808  -5 /*toYearTiny*/,
1809  9 /*inMonth*/,
1810  7 /*onDayOfWeek*/,
1811  0 /*onDayOfMonth*/,
1812  4 /*atTimeCode*/,
1813  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1814  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1815  '-' /*letter*/,
1816  },
1817  // Rule EU 1981 max - Mar lastSun 1:00u 1:00 S
1818  {
1819  -19 /*fromYearTiny*/,
1820  126 /*toYearTiny*/,
1821  3 /*inMonth*/,
1822  7 /*onDayOfWeek*/,
1823  0 /*onDayOfMonth*/,
1824  4 /*atTimeCode*/,
1825  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1826  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1827  'S' /*letter*/,
1828  },
1829  // Rule EU 1996 max - Oct lastSun 1:00u 0 -
1830  {
1831  -4 /*fromYearTiny*/,
1832  126 /*toYearTiny*/,
1833  10 /*inMonth*/,
1834  7 /*onDayOfWeek*/,
1835  0 /*onDayOfMonth*/,
1836  4 /*atTimeCode*/,
1837  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1838  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1839  '-' /*letter*/,
1840  },
1841 
1842 };
1843 
1844 
1845 
1846 const basic::ZonePolicy kPolicyEU ACE_TIME_PROGMEM = {
1847  kZoneRulesEU /*rules*/,
1848  nullptr /*letters*/,
1849  3 /*numRules*/,
1850  0 /*numLetters*/,
1851 };
1852 
1853 //---------------------------------------------------------------------------
1854 // Policy name: EUAsia
1855 // Rules: 3
1856 // Memory (8-bit): 33
1857 // Memory (32-bit): 48
1858 //---------------------------------------------------------------------------
1859 
1860 static const basic::ZoneRule kZoneRulesEUAsia[] ACE_TIME_PROGMEM = {
1861  // Rule EUAsia 1981 max - Mar lastSun 1:00u 1:00 S
1862  {
1863  -19 /*fromYearTiny*/,
1864  126 /*toYearTiny*/,
1865  3 /*inMonth*/,
1866  7 /*onDayOfWeek*/,
1867  0 /*onDayOfMonth*/,
1868  4 /*atTimeCode*/,
1869  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1870  4 /*deltaCode ((deltaMinutes=60)/15)*/,
1871  'S' /*letter*/,
1872  },
1873  // Rule EUAsia 1979 1995 - Sep lastSun 1:00u 0 -
1874  {
1875  -21 /*fromYearTiny*/,
1876  -5 /*toYearTiny*/,
1877  9 /*inMonth*/,
1878  7 /*onDayOfWeek*/,
1879  0 /*onDayOfMonth*/,
1880  4 /*atTimeCode*/,
1881  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1882  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1883  '-' /*letter*/,
1884  },
1885  // Rule EUAsia 1996 max - Oct lastSun 1:00u 0 -
1886  {
1887  -4 /*fromYearTiny*/,
1888  126 /*toYearTiny*/,
1889  10 /*inMonth*/,
1890  7 /*onDayOfWeek*/,
1891  0 /*onDayOfMonth*/,
1892  4 /*atTimeCode*/,
1893  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1894  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1895  '-' /*letter*/,
1896  },
1897 
1898 };
1899 
1900 
1901 
1902 const basic::ZonePolicy kPolicyEUAsia ACE_TIME_PROGMEM = {
1903  kZoneRulesEUAsia /*rules*/,
1904  nullptr /*letters*/,
1905  3 /*numRules*/,
1906  0 /*numLetters*/,
1907 };
1908 
1909 //---------------------------------------------------------------------------
1910 // Policy name: Ecuador
1911 // Rules: 1
1912 // Memory (8-bit): 15
1913 // Memory (32-bit): 24
1914 //---------------------------------------------------------------------------
1915 
1916 static const basic::ZoneRule kZoneRulesEcuador[] ACE_TIME_PROGMEM = {
1917  // Rule Ecuador 1993 only - Feb 5 0:00 0 -
1918  {
1919  -7 /*fromYearTiny*/,
1920  -7 /*toYearTiny*/,
1921  2 /*inMonth*/,
1922  0 /*onDayOfWeek*/,
1923  5 /*onDayOfMonth*/,
1924  0 /*atTimeCode*/,
1925  0 /*atTimeModifier (kSuffixW + minute=0)*/,
1926  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1927  '-' /*letter*/,
1928  },
1929 
1930 };
1931 
1932 
1933 
1934 const basic::ZonePolicy kPolicyEcuador ACE_TIME_PROGMEM = {
1935  kZoneRulesEcuador /*rules*/,
1936  nullptr /*letters*/,
1937  1 /*numRules*/,
1938  0 /*numLetters*/,
1939 };
1940 
1941 //---------------------------------------------------------------------------
1942 // Policy name: Eire
1943 // Rules: 3
1944 // Memory (8-bit): 33
1945 // Memory (32-bit): 48
1946 //---------------------------------------------------------------------------
1947 
1948 static const basic::ZoneRule kZoneRulesEire[] ACE_TIME_PROGMEM = {
1949  // Rule Eire 1981 max - Mar lastSun 1:00u 0 -
1950  {
1951  -19 /*fromYearTiny*/,
1952  126 /*toYearTiny*/,
1953  3 /*inMonth*/,
1954  7 /*onDayOfWeek*/,
1955  0 /*onDayOfMonth*/,
1956  4 /*atTimeCode*/,
1957  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1958  0 /*deltaCode ((deltaMinutes=0)/15)*/,
1959  '-' /*letter*/,
1960  },
1961  // Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
1962  {
1963  -10 /*fromYearTiny*/,
1964  -5 /*toYearTiny*/,
1965  10 /*inMonth*/,
1966  7 /*onDayOfWeek*/,
1967  22 /*onDayOfMonth*/,
1968  4 /*atTimeCode*/,
1969  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1970  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
1971  '-' /*letter*/,
1972  },
1973  // Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
1974  {
1975  -4 /*fromYearTiny*/,
1976  126 /*toYearTiny*/,
1977  10 /*inMonth*/,
1978  7 /*onDayOfWeek*/,
1979  0 /*onDayOfMonth*/,
1980  4 /*atTimeCode*/,
1981  32 /*atTimeModifier (kSuffixU + minute=0)*/,
1982  -4 /*deltaCode ((deltaMinutes=-60)/15)*/,
1983  '-' /*letter*/,
1984  },
1985 
1986 };
1987 
1988 
1989 
1990 const basic::ZonePolicy kPolicyEire ACE_TIME_PROGMEM = {
1991  kZoneRulesEire /*rules*/,
1992  nullptr /*letters*/,
1993  3 /*numRules*/,
1994  0 /*numLetters*/,
1995 };
1996 
1997 //---------------------------------------------------------------------------
1998 // Policy name: Fiji
1999 // Rules: 13
2000 // Memory (8-bit): 123
2001 // Memory (32-bit): 168
2002 //---------------------------------------------------------------------------
2003 
2004 static const basic::ZoneRule kZoneRulesFiji[] ACE_TIME_PROGMEM = {
2005  // Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 -
2006  {
2007  -2 /*fromYearTiny*/,
2008  -1 /*toYearTiny*/,
2009  11 /*inMonth*/,
2010  7 /*onDayOfWeek*/,
2011  1 /*onDayOfMonth*/,
2012  8 /*atTimeCode*/,
2013  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2014  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2015  '-' /*letter*/,
2016  },
2017  // Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
2018  {
2019  -1 /*fromYearTiny*/,
2020  0 /*toYearTiny*/,
2021  2 /*inMonth*/,
2022  7 /*onDayOfWeek*/,
2023  0 /*onDayOfMonth*/,
2024  12 /*atTimeCode*/,
2025  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2026  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2027  '-' /*letter*/,
2028  },
2029  // Rule Fiji 2009 only - Nov 29 2:00 1:00 -
2030  {
2031  9 /*fromYearTiny*/,
2032  9 /*toYearTiny*/,
2033  11 /*inMonth*/,
2034  0 /*onDayOfWeek*/,
2035  29 /*onDayOfMonth*/,
2036  8 /*atTimeCode*/,
2037  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2038  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2039  '-' /*letter*/,
2040  },
2041  // Rule Fiji 2010 only - Mar lastSun 3:00 0 -
2042  {
2043  10 /*fromYearTiny*/,
2044  10 /*toYearTiny*/,
2045  3 /*inMonth*/,
2046  7 /*onDayOfWeek*/,
2047  0 /*onDayOfMonth*/,
2048  12 /*atTimeCode*/,
2049  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2050  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2051  '-' /*letter*/,
2052  },
2053  // Rule Fiji 2010 2013 - Oct Sun>=21 2:00 1:00 -
2054  {
2055  10 /*fromYearTiny*/,
2056  13 /*toYearTiny*/,
2057  10 /*inMonth*/,
2058  7 /*onDayOfWeek*/,
2059  21 /*onDayOfMonth*/,
2060  8 /*atTimeCode*/,
2061  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2062  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2063  '-' /*letter*/,
2064  },
2065  // Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
2066  {
2067  11 /*fromYearTiny*/,
2068  11 /*toYearTiny*/,
2069  3 /*inMonth*/,
2070  7 /*onDayOfWeek*/,
2071  1 /*onDayOfMonth*/,
2072  12 /*atTimeCode*/,
2073  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2074  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2075  '-' /*letter*/,
2076  },
2077  // Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
2078  {
2079  12 /*fromYearTiny*/,
2080  13 /*toYearTiny*/,
2081  1 /*inMonth*/,
2082  7 /*onDayOfWeek*/,
2083  18 /*onDayOfMonth*/,
2084  12 /*atTimeCode*/,
2085  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2086  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2087  '-' /*letter*/,
2088  },
2089  // Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
2090  {
2091  14 /*fromYearTiny*/,
2092  14 /*toYearTiny*/,
2093  1 /*inMonth*/,
2094  7 /*onDayOfWeek*/,
2095  18 /*onDayOfMonth*/,
2096  8 /*atTimeCode*/,
2097  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2098  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2099  '-' /*letter*/,
2100  },
2101  // Rule Fiji 2014 2018 - Nov Sun>=1 2:00 1:00 -
2102  {
2103  14 /*fromYearTiny*/,
2104  18 /*toYearTiny*/,
2105  11 /*inMonth*/,
2106  7 /*onDayOfWeek*/,
2107  1 /*onDayOfMonth*/,
2108  8 /*atTimeCode*/,
2109  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2110  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2111  '-' /*letter*/,
2112  },
2113  // Rule Fiji 2015 max - Jan Sun>=12 3:00 0 -
2114  {
2115  15 /*fromYearTiny*/,
2116  126 /*toYearTiny*/,
2117  1 /*inMonth*/,
2118  7 /*onDayOfWeek*/,
2119  12 /*onDayOfMonth*/,
2120  12 /*atTimeCode*/,
2121  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2122  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2123  '-' /*letter*/,
2124  },
2125  // Rule Fiji 2019 only - Nov Sun>=8 2:00 1:00 -
2126  {
2127  19 /*fromYearTiny*/,
2128  19 /*toYearTiny*/,
2129  11 /*inMonth*/,
2130  7 /*onDayOfWeek*/,
2131  8 /*onDayOfMonth*/,
2132  8 /*atTimeCode*/,
2133  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2134  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2135  '-' /*letter*/,
2136  },
2137  // Rule Fiji 2020 only - Dec 20 2:00 1:00 -
2138  {
2139  20 /*fromYearTiny*/,
2140  20 /*toYearTiny*/,
2141  12 /*inMonth*/,
2142  0 /*onDayOfWeek*/,
2143  20 /*onDayOfMonth*/,
2144  8 /*atTimeCode*/,
2145  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2146  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2147  '-' /*letter*/,
2148  },
2149  // Rule Fiji 2021 max - Nov Sun>=8 2:00 1:00 -
2150  {
2151  21 /*fromYearTiny*/,
2152  126 /*toYearTiny*/,
2153  11 /*inMonth*/,
2154  7 /*onDayOfWeek*/,
2155  8 /*onDayOfMonth*/,
2156  8 /*atTimeCode*/,
2157  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2158  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2159  '-' /*letter*/,
2160  },
2161 
2162 };
2163 
2164 
2165 
2166 const basic::ZonePolicy kPolicyFiji ACE_TIME_PROGMEM = {
2167  kZoneRulesFiji /*rules*/,
2168  nullptr /*letters*/,
2169  13 /*numRules*/,
2170  0 /*numLetters*/,
2171 };
2172 
2173 //---------------------------------------------------------------------------
2174 // Policy name: Guat
2175 // Rules: 3
2176 // Memory (8-bit): 33
2177 // Memory (32-bit): 48
2178 //---------------------------------------------------------------------------
2179 
2180 static const basic::ZoneRule kZoneRulesGuat[] ACE_TIME_PROGMEM = {
2181  // Rule Guat 1991 only - Sep 7 0:00 0 S
2182  {
2183  -9 /*fromYearTiny*/,
2184  -9 /*toYearTiny*/,
2185  9 /*inMonth*/,
2186  0 /*onDayOfWeek*/,
2187  7 /*onDayOfMonth*/,
2188  0 /*atTimeCode*/,
2189  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2190  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2191  'S' /*letter*/,
2192  },
2193  // Rule Guat 2006 only - Apr 30 0:00 1:00 D
2194  {
2195  6 /*fromYearTiny*/,
2196  6 /*toYearTiny*/,
2197  4 /*inMonth*/,
2198  0 /*onDayOfWeek*/,
2199  30 /*onDayOfMonth*/,
2200  0 /*atTimeCode*/,
2201  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2202  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2203  'D' /*letter*/,
2204  },
2205  // Rule Guat 2006 only - Oct 1 0:00 0 S
2206  {
2207  6 /*fromYearTiny*/,
2208  6 /*toYearTiny*/,
2209  10 /*inMonth*/,
2210  0 /*onDayOfWeek*/,
2211  1 /*onDayOfMonth*/,
2212  0 /*atTimeCode*/,
2213  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2214  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2215  'S' /*letter*/,
2216  },
2217 
2218 };
2219 
2220 
2221 
2222 const basic::ZonePolicy kPolicyGuat ACE_TIME_PROGMEM = {
2223  kZoneRulesGuat /*rules*/,
2224  nullptr /*letters*/,
2225  3 /*numRules*/,
2226  0 /*numLetters*/,
2227 };
2228 
2229 //---------------------------------------------------------------------------
2230 // Policy name: HK
2231 // Rules: 1
2232 // Memory (8-bit): 15
2233 // Memory (32-bit): 24
2234 //---------------------------------------------------------------------------
2235 
2236 static const basic::ZoneRule kZoneRulesHK[] ACE_TIME_PROGMEM = {
2237  // Rule HK 1979 only - Oct 21 3:30 0 -
2238  {
2239  -21 /*fromYearTiny*/,
2240  -21 /*toYearTiny*/,
2241  10 /*inMonth*/,
2242  0 /*onDayOfWeek*/,
2243  21 /*onDayOfMonth*/,
2244  14 /*atTimeCode*/,
2245  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2246  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2247  '-' /*letter*/,
2248  },
2249 
2250 };
2251 
2252 
2253 
2254 const basic::ZonePolicy kPolicyHK ACE_TIME_PROGMEM = {
2255  kZoneRulesHK /*rules*/,
2256  nullptr /*letters*/,
2257  1 /*numRules*/,
2258  0 /*numLetters*/,
2259 };
2260 
2261 //---------------------------------------------------------------------------
2262 // Policy name: Haiti
2263 // Rules: 7
2264 // Memory (8-bit): 69
2265 // Memory (32-bit): 96
2266 //---------------------------------------------------------------------------
2267 
2268 static const basic::ZoneRule kZoneRulesHaiti[] ACE_TIME_PROGMEM = {
2269  // Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
2270  {
2271  -12 /*fromYearTiny*/,
2272  -3 /*toYearTiny*/,
2273  10 /*inMonth*/,
2274  7 /*onDayOfWeek*/,
2275  0 /*onDayOfMonth*/,
2276  4 /*atTimeCode*/,
2277  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2278  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2279  'S' /*letter*/,
2280  },
2281  // Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
2282  {
2283  5 /*fromYearTiny*/,
2284  6 /*toYearTiny*/,
2285  4 /*inMonth*/,
2286  7 /*onDayOfWeek*/,
2287  1 /*onDayOfMonth*/,
2288  0 /*atTimeCode*/,
2289  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2290  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2291  'D' /*letter*/,
2292  },
2293  // Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
2294  {
2295  5 /*fromYearTiny*/,
2296  6 /*toYearTiny*/,
2297  10 /*inMonth*/,
2298  7 /*onDayOfWeek*/,
2299  0 /*onDayOfMonth*/,
2300  0 /*atTimeCode*/,
2301  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2302  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2303  'S' /*letter*/,
2304  },
2305  // Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
2306  {
2307  12 /*fromYearTiny*/,
2308  15 /*toYearTiny*/,
2309  3 /*inMonth*/,
2310  7 /*onDayOfWeek*/,
2311  8 /*onDayOfMonth*/,
2312  8 /*atTimeCode*/,
2313  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2314  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2315  'D' /*letter*/,
2316  },
2317  // Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
2318  {
2319  12 /*fromYearTiny*/,
2320  15 /*toYearTiny*/,
2321  11 /*inMonth*/,
2322  7 /*onDayOfWeek*/,
2323  1 /*onDayOfMonth*/,
2324  8 /*atTimeCode*/,
2325  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2326  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2327  'S' /*letter*/,
2328  },
2329  // Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
2330  {
2331  17 /*fromYearTiny*/,
2332  126 /*toYearTiny*/,
2333  3 /*inMonth*/,
2334  7 /*onDayOfWeek*/,
2335  8 /*onDayOfMonth*/,
2336  8 /*atTimeCode*/,
2337  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2338  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2339  'D' /*letter*/,
2340  },
2341  // Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
2342  {
2343  17 /*fromYearTiny*/,
2344  126 /*toYearTiny*/,
2345  11 /*inMonth*/,
2346  7 /*onDayOfWeek*/,
2347  1 /*onDayOfMonth*/,
2348  8 /*atTimeCode*/,
2349  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2350  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2351  'S' /*letter*/,
2352  },
2353 
2354 };
2355 
2356 
2357 
2358 const basic::ZonePolicy kPolicyHaiti ACE_TIME_PROGMEM = {
2359  kZoneRulesHaiti /*rules*/,
2360  nullptr /*letters*/,
2361  7 /*numRules*/,
2362  0 /*numLetters*/,
2363 };
2364 
2365 //---------------------------------------------------------------------------
2366 // Policy name: Holiday
2367 // Rules: 1
2368 // Memory (8-bit): 15
2369 // Memory (32-bit): 24
2370 //---------------------------------------------------------------------------
2371 
2372 static const basic::ZoneRule kZoneRulesHoliday[] ACE_TIME_PROGMEM = {
2373  // Rule Holiday 1993 1994 - Mar Sun>=1 2:00s 0 S
2374  {
2375  -7 /*fromYearTiny*/,
2376  -6 /*toYearTiny*/,
2377  3 /*inMonth*/,
2378  7 /*onDayOfWeek*/,
2379  1 /*onDayOfMonth*/,
2380  8 /*atTimeCode*/,
2381  16 /*atTimeModifier (kSuffixS + minute=0)*/,
2382  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2383  'S' /*letter*/,
2384  },
2385 
2386 };
2387 
2388 
2389 
2390 const basic::ZonePolicy kPolicyHoliday ACE_TIME_PROGMEM = {
2391  kZoneRulesHoliday /*rules*/,
2392  nullptr /*letters*/,
2393  1 /*numRules*/,
2394  0 /*numLetters*/,
2395 };
2396 
2397 //---------------------------------------------------------------------------
2398 // Policy name: Hond
2399 // Rules: 3
2400 // Memory (8-bit): 33
2401 // Memory (32-bit): 48
2402 //---------------------------------------------------------------------------
2403 
2404 static const basic::ZoneRule kZoneRulesHond[] ACE_TIME_PROGMEM = {
2405  // Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
2406  {
2407  -13 /*fromYearTiny*/,
2408  -12 /*toYearTiny*/,
2409  9 /*inMonth*/,
2410  7 /*onDayOfWeek*/,
2411  0 /*onDayOfMonth*/,
2412  0 /*atTimeCode*/,
2413  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2414  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2415  'S' /*letter*/,
2416  },
2417  // Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
2418  {
2419  6 /*fromYearTiny*/,
2420  6 /*toYearTiny*/,
2421  5 /*inMonth*/,
2422  7 /*onDayOfWeek*/,
2423  1 /*onDayOfMonth*/,
2424  0 /*atTimeCode*/,
2425  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2426  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2427  'D' /*letter*/,
2428  },
2429  // Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
2430  {
2431  6 /*fromYearTiny*/,
2432  6 /*toYearTiny*/,
2433  8 /*inMonth*/,
2434  1 /*onDayOfWeek*/,
2435  1 /*onDayOfMonth*/,
2436  0 /*atTimeCode*/,
2437  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2438  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2439  'S' /*letter*/,
2440  },
2441 
2442 };
2443 
2444 
2445 
2446 const basic::ZonePolicy kPolicyHond ACE_TIME_PROGMEM = {
2447  kZoneRulesHond /*rules*/,
2448  nullptr /*letters*/,
2449  3 /*numRules*/,
2450  0 /*numLetters*/,
2451 };
2452 
2453 //---------------------------------------------------------------------------
2454 // Policy name: Iran
2455 // Rules: 55
2456 // Memory (8-bit): 501
2457 // Memory (32-bit): 672
2458 //---------------------------------------------------------------------------
2459 
2460 static const basic::ZoneRule kZoneRulesIran[] ACE_TIME_PROGMEM = {
2461  // Rule Iran 1996 only - Sep 20 24:00 0 -
2462  {
2463  -4 /*fromYearTiny*/,
2464  -4 /*toYearTiny*/,
2465  9 /*inMonth*/,
2466  0 /*onDayOfWeek*/,
2467  20 /*onDayOfMonth*/,
2468  96 /*atTimeCode*/,
2469  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2470  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2471  '-' /*letter*/,
2472  },
2473  // Rule Iran 1997 1999 - Mar 21 24:00 1:00 -
2474  {
2475  -3 /*fromYearTiny*/,
2476  -1 /*toYearTiny*/,
2477  3 /*inMonth*/,
2478  0 /*onDayOfWeek*/,
2479  21 /*onDayOfMonth*/,
2480  96 /*atTimeCode*/,
2481  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2482  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2483  '-' /*letter*/,
2484  },
2485  // Rule Iran 1997 1999 - Sep 21 24:00 0 -
2486  {
2487  -3 /*fromYearTiny*/,
2488  -1 /*toYearTiny*/,
2489  9 /*inMonth*/,
2490  0 /*onDayOfWeek*/,
2491  21 /*onDayOfMonth*/,
2492  96 /*atTimeCode*/,
2493  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2494  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2495  '-' /*letter*/,
2496  },
2497  // Rule Iran 2000 only - Mar 20 24:00 1:00 -
2498  {
2499  0 /*fromYearTiny*/,
2500  0 /*toYearTiny*/,
2501  3 /*inMonth*/,
2502  0 /*onDayOfWeek*/,
2503  20 /*onDayOfMonth*/,
2504  96 /*atTimeCode*/,
2505  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2506  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2507  '-' /*letter*/,
2508  },
2509  // Rule Iran 2000 only - Sep 20 24:00 0 -
2510  {
2511  0 /*fromYearTiny*/,
2512  0 /*toYearTiny*/,
2513  9 /*inMonth*/,
2514  0 /*onDayOfWeek*/,
2515  20 /*onDayOfMonth*/,
2516  96 /*atTimeCode*/,
2517  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2518  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2519  '-' /*letter*/,
2520  },
2521  // Rule Iran 2001 2003 - Mar 21 24:00 1:00 -
2522  {
2523  1 /*fromYearTiny*/,
2524  3 /*toYearTiny*/,
2525  3 /*inMonth*/,
2526  0 /*onDayOfWeek*/,
2527  21 /*onDayOfMonth*/,
2528  96 /*atTimeCode*/,
2529  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2530  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2531  '-' /*letter*/,
2532  },
2533  // Rule Iran 2001 2003 - Sep 21 24:00 0 -
2534  {
2535  1 /*fromYearTiny*/,
2536  3 /*toYearTiny*/,
2537  9 /*inMonth*/,
2538  0 /*onDayOfWeek*/,
2539  21 /*onDayOfMonth*/,
2540  96 /*atTimeCode*/,
2541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2542  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2543  '-' /*letter*/,
2544  },
2545  // Rule Iran 2004 only - Mar 20 24:00 1:00 -
2546  {
2547  4 /*fromYearTiny*/,
2548  4 /*toYearTiny*/,
2549  3 /*inMonth*/,
2550  0 /*onDayOfWeek*/,
2551  20 /*onDayOfMonth*/,
2552  96 /*atTimeCode*/,
2553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2554  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2555  '-' /*letter*/,
2556  },
2557  // Rule Iran 2004 only - Sep 20 24:00 0 -
2558  {
2559  4 /*fromYearTiny*/,
2560  4 /*toYearTiny*/,
2561  9 /*inMonth*/,
2562  0 /*onDayOfWeek*/,
2563  20 /*onDayOfMonth*/,
2564  96 /*atTimeCode*/,
2565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2567  '-' /*letter*/,
2568  },
2569  // Rule Iran 2005 only - Mar 21 24:00 1:00 -
2570  {
2571  5 /*fromYearTiny*/,
2572  5 /*toYearTiny*/,
2573  3 /*inMonth*/,
2574  0 /*onDayOfWeek*/,
2575  21 /*onDayOfMonth*/,
2576  96 /*atTimeCode*/,
2577  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2578  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2579  '-' /*letter*/,
2580  },
2581  // Rule Iran 2005 only - Sep 21 24:00 0 -
2582  {
2583  5 /*fromYearTiny*/,
2584  5 /*toYearTiny*/,
2585  9 /*inMonth*/,
2586  0 /*onDayOfWeek*/,
2587  21 /*onDayOfMonth*/,
2588  96 /*atTimeCode*/,
2589  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2591  '-' /*letter*/,
2592  },
2593  // Rule Iran 2008 only - Mar 20 24:00 1:00 -
2594  {
2595  8 /*fromYearTiny*/,
2596  8 /*toYearTiny*/,
2597  3 /*inMonth*/,
2598  0 /*onDayOfWeek*/,
2599  20 /*onDayOfMonth*/,
2600  96 /*atTimeCode*/,
2601  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2602  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2603  '-' /*letter*/,
2604  },
2605  // Rule Iran 2008 only - Sep 20 24:00 0 -
2606  {
2607  8 /*fromYearTiny*/,
2608  8 /*toYearTiny*/,
2609  9 /*inMonth*/,
2610  0 /*onDayOfWeek*/,
2611  20 /*onDayOfMonth*/,
2612  96 /*atTimeCode*/,
2613  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2614  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2615  '-' /*letter*/,
2616  },
2617  // Rule Iran 2009 2011 - Mar 21 24:00 1:00 -
2618  {
2619  9 /*fromYearTiny*/,
2620  11 /*toYearTiny*/,
2621  3 /*inMonth*/,
2622  0 /*onDayOfWeek*/,
2623  21 /*onDayOfMonth*/,
2624  96 /*atTimeCode*/,
2625  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2626  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2627  '-' /*letter*/,
2628  },
2629  // Rule Iran 2009 2011 - Sep 21 24:00 0 -
2630  {
2631  9 /*fromYearTiny*/,
2632  11 /*toYearTiny*/,
2633  9 /*inMonth*/,
2634  0 /*onDayOfWeek*/,
2635  21 /*onDayOfMonth*/,
2636  96 /*atTimeCode*/,
2637  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2638  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2639  '-' /*letter*/,
2640  },
2641  // Rule Iran 2012 only - Mar 20 24:00 1:00 -
2642  {
2643  12 /*fromYearTiny*/,
2644  12 /*toYearTiny*/,
2645  3 /*inMonth*/,
2646  0 /*onDayOfWeek*/,
2647  20 /*onDayOfMonth*/,
2648  96 /*atTimeCode*/,
2649  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2650  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2651  '-' /*letter*/,
2652  },
2653  // Rule Iran 2012 only - Sep 20 24:00 0 -
2654  {
2655  12 /*fromYearTiny*/,
2656  12 /*toYearTiny*/,
2657  9 /*inMonth*/,
2658  0 /*onDayOfWeek*/,
2659  20 /*onDayOfMonth*/,
2660  96 /*atTimeCode*/,
2661  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2662  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2663  '-' /*letter*/,
2664  },
2665  // Rule Iran 2013 2015 - Mar 21 24:00 1:00 -
2666  {
2667  13 /*fromYearTiny*/,
2668  15 /*toYearTiny*/,
2669  3 /*inMonth*/,
2670  0 /*onDayOfWeek*/,
2671  21 /*onDayOfMonth*/,
2672  96 /*atTimeCode*/,
2673  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2674  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2675  '-' /*letter*/,
2676  },
2677  // Rule Iran 2013 2015 - Sep 21 24:00 0 -
2678  {
2679  13 /*fromYearTiny*/,
2680  15 /*toYearTiny*/,
2681  9 /*inMonth*/,
2682  0 /*onDayOfWeek*/,
2683  21 /*onDayOfMonth*/,
2684  96 /*atTimeCode*/,
2685  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2686  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2687  '-' /*letter*/,
2688  },
2689  // Rule Iran 2016 only - Mar 20 24:00 1:00 -
2690  {
2691  16 /*fromYearTiny*/,
2692  16 /*toYearTiny*/,
2693  3 /*inMonth*/,
2694  0 /*onDayOfWeek*/,
2695  20 /*onDayOfMonth*/,
2696  96 /*atTimeCode*/,
2697  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2698  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2699  '-' /*letter*/,
2700  },
2701  // Rule Iran 2016 only - Sep 20 24:00 0 -
2702  {
2703  16 /*fromYearTiny*/,
2704  16 /*toYearTiny*/,
2705  9 /*inMonth*/,
2706  0 /*onDayOfWeek*/,
2707  20 /*onDayOfMonth*/,
2708  96 /*atTimeCode*/,
2709  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2710  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2711  '-' /*letter*/,
2712  },
2713  // Rule Iran 2017 2019 - Mar 21 24:00 1:00 -
2714  {
2715  17 /*fromYearTiny*/,
2716  19 /*toYearTiny*/,
2717  3 /*inMonth*/,
2718  0 /*onDayOfWeek*/,
2719  21 /*onDayOfMonth*/,
2720  96 /*atTimeCode*/,
2721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2722  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2723  '-' /*letter*/,
2724  },
2725  // Rule Iran 2017 2019 - Sep 21 24:00 0 -
2726  {
2727  17 /*fromYearTiny*/,
2728  19 /*toYearTiny*/,
2729  9 /*inMonth*/,
2730  0 /*onDayOfWeek*/,
2731  21 /*onDayOfMonth*/,
2732  96 /*atTimeCode*/,
2733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2734  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2735  '-' /*letter*/,
2736  },
2737  // Rule Iran 2020 only - Mar 20 24:00 1:00 -
2738  {
2739  20 /*fromYearTiny*/,
2740  20 /*toYearTiny*/,
2741  3 /*inMonth*/,
2742  0 /*onDayOfWeek*/,
2743  20 /*onDayOfMonth*/,
2744  96 /*atTimeCode*/,
2745  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2746  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2747  '-' /*letter*/,
2748  },
2749  // Rule Iran 2020 only - Sep 20 24:00 0 -
2750  {
2751  20 /*fromYearTiny*/,
2752  20 /*toYearTiny*/,
2753  9 /*inMonth*/,
2754  0 /*onDayOfWeek*/,
2755  20 /*onDayOfMonth*/,
2756  96 /*atTimeCode*/,
2757  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2758  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2759  '-' /*letter*/,
2760  },
2761  // Rule Iran 2021 2023 - Mar 21 24:00 1:00 -
2762  {
2763  21 /*fromYearTiny*/,
2764  23 /*toYearTiny*/,
2765  3 /*inMonth*/,
2766  0 /*onDayOfWeek*/,
2767  21 /*onDayOfMonth*/,
2768  96 /*atTimeCode*/,
2769  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2770  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2771  '-' /*letter*/,
2772  },
2773  // Rule Iran 2021 2023 - Sep 21 24:00 0 -
2774  {
2775  21 /*fromYearTiny*/,
2776  23 /*toYearTiny*/,
2777  9 /*inMonth*/,
2778  0 /*onDayOfWeek*/,
2779  21 /*onDayOfMonth*/,
2780  96 /*atTimeCode*/,
2781  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2782  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2783  '-' /*letter*/,
2784  },
2785  // Rule Iran 2024 only - Mar 20 24:00 1:00 -
2786  {
2787  24 /*fromYearTiny*/,
2788  24 /*toYearTiny*/,
2789  3 /*inMonth*/,
2790  0 /*onDayOfWeek*/,
2791  20 /*onDayOfMonth*/,
2792  96 /*atTimeCode*/,
2793  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2794  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2795  '-' /*letter*/,
2796  },
2797  // Rule Iran 2024 only - Sep 20 24:00 0 -
2798  {
2799  24 /*fromYearTiny*/,
2800  24 /*toYearTiny*/,
2801  9 /*inMonth*/,
2802  0 /*onDayOfWeek*/,
2803  20 /*onDayOfMonth*/,
2804  96 /*atTimeCode*/,
2805  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2806  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2807  '-' /*letter*/,
2808  },
2809  // Rule Iran 2025 2027 - Mar 21 24:00 1:00 -
2810  {
2811  25 /*fromYearTiny*/,
2812  27 /*toYearTiny*/,
2813  3 /*inMonth*/,
2814  0 /*onDayOfWeek*/,
2815  21 /*onDayOfMonth*/,
2816  96 /*atTimeCode*/,
2817  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2818  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2819  '-' /*letter*/,
2820  },
2821  // Rule Iran 2025 2027 - Sep 21 24:00 0 -
2822  {
2823  25 /*fromYearTiny*/,
2824  27 /*toYearTiny*/,
2825  9 /*inMonth*/,
2826  0 /*onDayOfWeek*/,
2827  21 /*onDayOfMonth*/,
2828  96 /*atTimeCode*/,
2829  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2830  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2831  '-' /*letter*/,
2832  },
2833  // Rule Iran 2028 2029 - Mar 20 24:00 1:00 -
2834  {
2835  28 /*fromYearTiny*/,
2836  29 /*toYearTiny*/,
2837  3 /*inMonth*/,
2838  0 /*onDayOfWeek*/,
2839  20 /*onDayOfMonth*/,
2840  96 /*atTimeCode*/,
2841  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2842  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2843  '-' /*letter*/,
2844  },
2845  // Rule Iran 2028 2029 - Sep 20 24:00 0 -
2846  {
2847  28 /*fromYearTiny*/,
2848  29 /*toYearTiny*/,
2849  9 /*inMonth*/,
2850  0 /*onDayOfWeek*/,
2851  20 /*onDayOfMonth*/,
2852  96 /*atTimeCode*/,
2853  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2854  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2855  '-' /*letter*/,
2856  },
2857  // Rule Iran 2030 2031 - Mar 21 24:00 1:00 -
2858  {
2859  30 /*fromYearTiny*/,
2860  31 /*toYearTiny*/,
2861  3 /*inMonth*/,
2862  0 /*onDayOfWeek*/,
2863  21 /*onDayOfMonth*/,
2864  96 /*atTimeCode*/,
2865  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2866  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2867  '-' /*letter*/,
2868  },
2869  // Rule Iran 2030 2031 - Sep 21 24:00 0 -
2870  {
2871  30 /*fromYearTiny*/,
2872  31 /*toYearTiny*/,
2873  9 /*inMonth*/,
2874  0 /*onDayOfWeek*/,
2875  21 /*onDayOfMonth*/,
2876  96 /*atTimeCode*/,
2877  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2878  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2879  '-' /*letter*/,
2880  },
2881  // Rule Iran 2032 2033 - Mar 20 24:00 1:00 -
2882  {
2883  32 /*fromYearTiny*/,
2884  33 /*toYearTiny*/,
2885  3 /*inMonth*/,
2886  0 /*onDayOfWeek*/,
2887  20 /*onDayOfMonth*/,
2888  96 /*atTimeCode*/,
2889  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2890  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2891  '-' /*letter*/,
2892  },
2893  // Rule Iran 2032 2033 - Sep 20 24:00 0 -
2894  {
2895  32 /*fromYearTiny*/,
2896  33 /*toYearTiny*/,
2897  9 /*inMonth*/,
2898  0 /*onDayOfWeek*/,
2899  20 /*onDayOfMonth*/,
2900  96 /*atTimeCode*/,
2901  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2902  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2903  '-' /*letter*/,
2904  },
2905  // Rule Iran 2034 2035 - Mar 21 24:00 1:00 -
2906  {
2907  34 /*fromYearTiny*/,
2908  35 /*toYearTiny*/,
2909  3 /*inMonth*/,
2910  0 /*onDayOfWeek*/,
2911  21 /*onDayOfMonth*/,
2912  96 /*atTimeCode*/,
2913  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2914  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2915  '-' /*letter*/,
2916  },
2917  // Rule Iran 2034 2035 - Sep 21 24:00 0 -
2918  {
2919  34 /*fromYearTiny*/,
2920  35 /*toYearTiny*/,
2921  9 /*inMonth*/,
2922  0 /*onDayOfWeek*/,
2923  21 /*onDayOfMonth*/,
2924  96 /*atTimeCode*/,
2925  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2926  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2927  '-' /*letter*/,
2928  },
2929  // Rule Iran 2036 2037 - Mar 20 24:00 1:00 -
2930  {
2931  36 /*fromYearTiny*/,
2932  37 /*toYearTiny*/,
2933  3 /*inMonth*/,
2934  0 /*onDayOfWeek*/,
2935  20 /*onDayOfMonth*/,
2936  96 /*atTimeCode*/,
2937  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2938  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2939  '-' /*letter*/,
2940  },
2941  // Rule Iran 2036 2037 - Sep 20 24:00 0 -
2942  {
2943  36 /*fromYearTiny*/,
2944  37 /*toYearTiny*/,
2945  9 /*inMonth*/,
2946  0 /*onDayOfWeek*/,
2947  20 /*onDayOfMonth*/,
2948  96 /*atTimeCode*/,
2949  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2950  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2951  '-' /*letter*/,
2952  },
2953  // Rule Iran 2038 2039 - Mar 21 24:00 1:00 -
2954  {
2955  38 /*fromYearTiny*/,
2956  39 /*toYearTiny*/,
2957  3 /*inMonth*/,
2958  0 /*onDayOfWeek*/,
2959  21 /*onDayOfMonth*/,
2960  96 /*atTimeCode*/,
2961  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2962  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2963  '-' /*letter*/,
2964  },
2965  // Rule Iran 2038 2039 - Sep 21 24:00 0 -
2966  {
2967  38 /*fromYearTiny*/,
2968  39 /*toYearTiny*/,
2969  9 /*inMonth*/,
2970  0 /*onDayOfWeek*/,
2971  21 /*onDayOfMonth*/,
2972  96 /*atTimeCode*/,
2973  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2974  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2975  '-' /*letter*/,
2976  },
2977  // Rule Iran 2040 2041 - Mar 20 24:00 1:00 -
2978  {
2979  40 /*fromYearTiny*/,
2980  41 /*toYearTiny*/,
2981  3 /*inMonth*/,
2982  0 /*onDayOfWeek*/,
2983  20 /*onDayOfMonth*/,
2984  96 /*atTimeCode*/,
2985  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2986  4 /*deltaCode ((deltaMinutes=60)/15)*/,
2987  '-' /*letter*/,
2988  },
2989  // Rule Iran 2040 2041 - Sep 20 24:00 0 -
2990  {
2991  40 /*fromYearTiny*/,
2992  41 /*toYearTiny*/,
2993  9 /*inMonth*/,
2994  0 /*onDayOfWeek*/,
2995  20 /*onDayOfMonth*/,
2996  96 /*atTimeCode*/,
2997  0 /*atTimeModifier (kSuffixW + minute=0)*/,
2998  0 /*deltaCode ((deltaMinutes=0)/15)*/,
2999  '-' /*letter*/,
3000  },
3001  // Rule Iran 2042 2043 - Mar 21 24:00 1:00 -
3002  {
3003  42 /*fromYearTiny*/,
3004  43 /*toYearTiny*/,
3005  3 /*inMonth*/,
3006  0 /*onDayOfWeek*/,
3007  21 /*onDayOfMonth*/,
3008  96 /*atTimeCode*/,
3009  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3010  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3011  '-' /*letter*/,
3012  },
3013  // Rule Iran 2042 2043 - Sep 21 24:00 0 -
3014  {
3015  42 /*fromYearTiny*/,
3016  43 /*toYearTiny*/,
3017  9 /*inMonth*/,
3018  0 /*onDayOfWeek*/,
3019  21 /*onDayOfMonth*/,
3020  96 /*atTimeCode*/,
3021  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3022  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3023  '-' /*letter*/,
3024  },
3025  // Rule Iran 2044 2045 - Mar 20 24:00 1:00 -
3026  {
3027  44 /*fromYearTiny*/,
3028  45 /*toYearTiny*/,
3029  3 /*inMonth*/,
3030  0 /*onDayOfWeek*/,
3031  20 /*onDayOfMonth*/,
3032  96 /*atTimeCode*/,
3033  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3034  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3035  '-' /*letter*/,
3036  },
3037  // Rule Iran 2044 2045 - Sep 20 24:00 0 -
3038  {
3039  44 /*fromYearTiny*/,
3040  45 /*toYearTiny*/,
3041  9 /*inMonth*/,
3042  0 /*onDayOfWeek*/,
3043  20 /*onDayOfMonth*/,
3044  96 /*atTimeCode*/,
3045  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3046  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3047  '-' /*letter*/,
3048  },
3049  // Rule Iran 2046 2047 - Mar 21 24:00 1:00 -
3050  {
3051  46 /*fromYearTiny*/,
3052  47 /*toYearTiny*/,
3053  3 /*inMonth*/,
3054  0 /*onDayOfWeek*/,
3055  21 /*onDayOfMonth*/,
3056  96 /*atTimeCode*/,
3057  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3058  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3059  '-' /*letter*/,
3060  },
3061  // Rule Iran 2046 2047 - Sep 21 24:00 0 -
3062  {
3063  46 /*fromYearTiny*/,
3064  47 /*toYearTiny*/,
3065  9 /*inMonth*/,
3066  0 /*onDayOfWeek*/,
3067  21 /*onDayOfMonth*/,
3068  96 /*atTimeCode*/,
3069  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3070  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3071  '-' /*letter*/,
3072  },
3073  // Rule Iran 2048 2049 - Mar 20 24:00 1:00 -
3074  {
3075  48 /*fromYearTiny*/,
3076  49 /*toYearTiny*/,
3077  3 /*inMonth*/,
3078  0 /*onDayOfWeek*/,
3079  20 /*onDayOfMonth*/,
3080  96 /*atTimeCode*/,
3081  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3082  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3083  '-' /*letter*/,
3084  },
3085  // Rule Iran 2048 2049 - Sep 20 24:00 0 -
3086  {
3087  48 /*fromYearTiny*/,
3088  49 /*toYearTiny*/,
3089  9 /*inMonth*/,
3090  0 /*onDayOfWeek*/,
3091  20 /*onDayOfMonth*/,
3092  96 /*atTimeCode*/,
3093  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3094  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3095  '-' /*letter*/,
3096  },
3097  // Rule Iran 2050 2051 - Mar 21 24:00 1:00 -
3098  {
3099  50 /*fromYearTiny*/,
3100  51 /*toYearTiny*/,
3101  3 /*inMonth*/,
3102  0 /*onDayOfWeek*/,
3103  21 /*onDayOfMonth*/,
3104  96 /*atTimeCode*/,
3105  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3106  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3107  '-' /*letter*/,
3108  },
3109  // Rule Iran 2050 2051 - Sep 21 24:00 0 -
3110  {
3111  50 /*fromYearTiny*/,
3112  51 /*toYearTiny*/,
3113  9 /*inMonth*/,
3114  0 /*onDayOfWeek*/,
3115  21 /*onDayOfMonth*/,
3116  96 /*atTimeCode*/,
3117  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3118  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3119  '-' /*letter*/,
3120  },
3121 
3122 };
3123 
3124 
3125 
3126 const basic::ZonePolicy kPolicyIran ACE_TIME_PROGMEM = {
3127  kZoneRulesIran /*rules*/,
3128  nullptr /*letters*/,
3129  55 /*numRules*/,
3130  0 /*numLetters*/,
3131 };
3132 
3133 //---------------------------------------------------------------------------
3134 // Policy name: Iraq
3135 // Rules: 3
3136 // Memory (8-bit): 33
3137 // Memory (32-bit): 48
3138 //---------------------------------------------------------------------------
3139 
3140 static const basic::ZoneRule kZoneRulesIraq[] ACE_TIME_PROGMEM = {
3141  // Rule Iraq 1985 1990 - Sep lastSun 1:00s 0 -
3142  {
3143  -15 /*fromYearTiny*/,
3144  -10 /*toYearTiny*/,
3145  9 /*inMonth*/,
3146  7 /*onDayOfWeek*/,
3147  0 /*onDayOfMonth*/,
3148  4 /*atTimeCode*/,
3149  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3150  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3151  '-' /*letter*/,
3152  },
3153  // Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
3154  {
3155  -9 /*fromYearTiny*/,
3156  7 /*toYearTiny*/,
3157  4 /*inMonth*/,
3158  0 /*onDayOfWeek*/,
3159  1 /*onDayOfMonth*/,
3160  12 /*atTimeCode*/,
3161  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3162  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3163  '-' /*letter*/,
3164  },
3165  // Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
3166  {
3167  -9 /*fromYearTiny*/,
3168  7 /*toYearTiny*/,
3169  10 /*inMonth*/,
3170  0 /*onDayOfWeek*/,
3171  1 /*onDayOfMonth*/,
3172  12 /*atTimeCode*/,
3173  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3174  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3175  '-' /*letter*/,
3176  },
3177 
3178 };
3179 
3180 
3181 
3182 const basic::ZonePolicy kPolicyIraq ACE_TIME_PROGMEM = {
3183  kZoneRulesIraq /*rules*/,
3184  nullptr /*letters*/,
3185  3 /*numRules*/,
3186  0 /*numLetters*/,
3187 };
3188 
3189 //---------------------------------------------------------------------------
3190 // Policy name: Japan
3191 // Rules: 1
3192 // Memory (8-bit): 15
3193 // Memory (32-bit): 24
3194 //---------------------------------------------------------------------------
3195 
3196 static const basic::ZoneRule kZoneRulesJapan[] ACE_TIME_PROGMEM = {
3197  // Rule Japan 1948 1951 - Sep Sat>=8 25:00 0 S
3198  {
3199  -52 /*fromYearTiny*/,
3200  -49 /*toYearTiny*/,
3201  9 /*inMonth*/,
3202  6 /*onDayOfWeek*/,
3203  8 /*onDayOfMonth*/,
3204  100 /*atTimeCode*/,
3205  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3206  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3207  'S' /*letter*/,
3208  },
3209 
3210 };
3211 
3212 
3213 
3214 const basic::ZonePolicy kPolicyJapan ACE_TIME_PROGMEM = {
3215  kZoneRulesJapan /*rules*/,
3216  nullptr /*letters*/,
3217  1 /*numRules*/,
3218  0 /*numLetters*/,
3219 };
3220 
3221 //---------------------------------------------------------------------------
3222 // Policy name: Jordan
3223 // Rules: 13
3224 // Memory (8-bit): 123
3225 // Memory (32-bit): 168
3226 //---------------------------------------------------------------------------
3227 
3228 static const basic::ZoneRule kZoneRulesJordan[] ACE_TIME_PROGMEM = {
3229  // Rule Jordan 1995 1998 - Sep Fri>=15 0:00s 0 -
3230  {
3231  -5 /*fromYearTiny*/,
3232  -2 /*toYearTiny*/,
3233  9 /*inMonth*/,
3234  5 /*onDayOfWeek*/,
3235  15 /*onDayOfMonth*/,
3236  0 /*atTimeCode*/,
3237  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3238  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3239  '-' /*letter*/,
3240  },
3241  // Rule Jordan 1999 only - Jul 1 0:00s 1:00 S
3242  {
3243  -1 /*fromYearTiny*/,
3244  -1 /*toYearTiny*/,
3245  7 /*inMonth*/,
3246  0 /*onDayOfWeek*/,
3247  1 /*onDayOfMonth*/,
3248  0 /*atTimeCode*/,
3249  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3250  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3251  'S' /*letter*/,
3252  },
3253  // Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 -
3254  {
3255  -1 /*fromYearTiny*/,
3256  2 /*toYearTiny*/,
3257  9 /*inMonth*/,
3258  5 /*onDayOfWeek*/,
3259  0 /*onDayOfMonth*/,
3260  0 /*atTimeCode*/,
3261  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3262  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3263  '-' /*letter*/,
3264  },
3265  // Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S
3266  {
3267  0 /*fromYearTiny*/,
3268  1 /*toYearTiny*/,
3269  3 /*inMonth*/,
3270  4 /*onDayOfWeek*/,
3271  0 /*onDayOfMonth*/,
3272  0 /*atTimeCode*/,
3273  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3274  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3275  'S' /*letter*/,
3276  },
3277  // Rule Jordan 2002 2012 - Mar lastThu 24:00 1:00 S
3278  {
3279  2 /*fromYearTiny*/,
3280  12 /*toYearTiny*/,
3281  3 /*inMonth*/,
3282  4 /*onDayOfWeek*/,
3283  0 /*onDayOfMonth*/,
3284  96 /*atTimeCode*/,
3285  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3286  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3287  'S' /*letter*/,
3288  },
3289  // Rule Jordan 2003 only - Oct 24 0:00s 0 -
3290  {
3291  3 /*fromYearTiny*/,
3292  3 /*toYearTiny*/,
3293  10 /*inMonth*/,
3294  0 /*onDayOfWeek*/,
3295  24 /*onDayOfMonth*/,
3296  0 /*atTimeCode*/,
3297  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3298  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3299  '-' /*letter*/,
3300  },
3301  // Rule Jordan 2004 only - Oct 15 0:00s 0 -
3302  {
3303  4 /*fromYearTiny*/,
3304  4 /*toYearTiny*/,
3305  10 /*inMonth*/,
3306  0 /*onDayOfWeek*/,
3307  15 /*onDayOfMonth*/,
3308  0 /*atTimeCode*/,
3309  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3310  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3311  '-' /*letter*/,
3312  },
3313  // Rule Jordan 2005 only - Sep lastFri 0:00s 0 -
3314  {
3315  5 /*fromYearTiny*/,
3316  5 /*toYearTiny*/,
3317  9 /*inMonth*/,
3318  5 /*onDayOfWeek*/,
3319  0 /*onDayOfMonth*/,
3320  0 /*atTimeCode*/,
3321  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3322  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3323  '-' /*letter*/,
3324  },
3325  // Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
3326  {
3327  6 /*fromYearTiny*/,
3328  11 /*toYearTiny*/,
3329  10 /*inMonth*/,
3330  5 /*onDayOfWeek*/,
3331  0 /*onDayOfMonth*/,
3332  0 /*atTimeCode*/,
3333  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3334  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3335  '-' /*letter*/,
3336  },
3337  // Rule Jordan 2013 only - Dec 20 0:00 0 -
3338  {
3339  13 /*fromYearTiny*/,
3340  13 /*toYearTiny*/,
3341  12 /*inMonth*/,
3342  0 /*onDayOfWeek*/,
3343  20 /*onDayOfMonth*/,
3344  0 /*atTimeCode*/,
3345  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3346  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3347  '-' /*letter*/,
3348  },
3349  // Rule Jordan 2014 2021 - Mar lastThu 24:00 1:00 S
3350  {
3351  14 /*fromYearTiny*/,
3352  21 /*toYearTiny*/,
3353  3 /*inMonth*/,
3354  4 /*onDayOfWeek*/,
3355  0 /*onDayOfMonth*/,
3356  96 /*atTimeCode*/,
3357  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3358  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3359  'S' /*letter*/,
3360  },
3361  // Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
3362  {
3363  14 /*fromYearTiny*/,
3364  126 /*toYearTiny*/,
3365  10 /*inMonth*/,
3366  5 /*onDayOfWeek*/,
3367  0 /*onDayOfMonth*/,
3368  0 /*atTimeCode*/,
3369  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3370  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3371  '-' /*letter*/,
3372  },
3373  // Rule Jordan 2022 max - Feb lastThu 24:00 1:00 S
3374  {
3375  22 /*fromYearTiny*/,
3376  126 /*toYearTiny*/,
3377  2 /*inMonth*/,
3378  4 /*onDayOfWeek*/,
3379  0 /*onDayOfMonth*/,
3380  96 /*atTimeCode*/,
3381  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3382  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3383  'S' /*letter*/,
3384  },
3385 
3386 };
3387 
3388 
3389 
3390 const basic::ZonePolicy kPolicyJordan ACE_TIME_PROGMEM = {
3391  kZoneRulesJordan /*rules*/,
3392  nullptr /*letters*/,
3393  13 /*numRules*/,
3394  0 /*numLetters*/,
3395 };
3396 
3397 //---------------------------------------------------------------------------
3398 // Policy name: LH
3399 // Rules: 9
3400 // Memory (8-bit): 87
3401 // Memory (32-bit): 120
3402 //---------------------------------------------------------------------------
3403 
3404 static const basic::ZoneRule kZoneRulesLH[] ACE_TIME_PROGMEM = {
3405  // Rule LH 1987 1999 - Oct lastSun 2:00 0:30 -
3406  {
3407  -13 /*fromYearTiny*/,
3408  -1 /*toYearTiny*/,
3409  10 /*inMonth*/,
3410  7 /*onDayOfWeek*/,
3411  0 /*onDayOfMonth*/,
3412  8 /*atTimeCode*/,
3413  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3414  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3415  '-' /*letter*/,
3416  },
3417  // Rule LH 1990 1995 - Mar Sun>=1 2:00 0 -
3418  {
3419  -10 /*fromYearTiny*/,
3420  -5 /*toYearTiny*/,
3421  3 /*inMonth*/,
3422  7 /*onDayOfWeek*/,
3423  1 /*onDayOfMonth*/,
3424  8 /*atTimeCode*/,
3425  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3426  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3427  '-' /*letter*/,
3428  },
3429  // Rule LH 1996 2005 - Mar lastSun 2:00 0 -
3430  {
3431  -4 /*fromYearTiny*/,
3432  5 /*toYearTiny*/,
3433  3 /*inMonth*/,
3434  7 /*onDayOfWeek*/,
3435  0 /*onDayOfMonth*/,
3436  8 /*atTimeCode*/,
3437  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3438  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3439  '-' /*letter*/,
3440  },
3441  // Rule LH 2000 only - Aug lastSun 2:00 0:30 -
3442  {
3443  0 /*fromYearTiny*/,
3444  0 /*toYearTiny*/,
3445  8 /*inMonth*/,
3446  7 /*onDayOfWeek*/,
3447  0 /*onDayOfMonth*/,
3448  8 /*atTimeCode*/,
3449  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3450  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3451  '-' /*letter*/,
3452  },
3453  // Rule LH 2001 2007 - Oct lastSun 2:00 0:30 -
3454  {
3455  1 /*fromYearTiny*/,
3456  7 /*toYearTiny*/,
3457  10 /*inMonth*/,
3458  7 /*onDayOfWeek*/,
3459  0 /*onDayOfMonth*/,
3460  8 /*atTimeCode*/,
3461  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3462  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3463  '-' /*letter*/,
3464  },
3465  // Rule LH 2006 only - Apr Sun>=1 2:00 0 -
3466  {
3467  6 /*fromYearTiny*/,
3468  6 /*toYearTiny*/,
3469  4 /*inMonth*/,
3470  7 /*onDayOfWeek*/,
3471  1 /*onDayOfMonth*/,
3472  8 /*atTimeCode*/,
3473  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3474  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3475  '-' /*letter*/,
3476  },
3477  // Rule LH 2007 only - Mar lastSun 2:00 0 -
3478  {
3479  7 /*fromYearTiny*/,
3480  7 /*toYearTiny*/,
3481  3 /*inMonth*/,
3482  7 /*onDayOfWeek*/,
3483  0 /*onDayOfMonth*/,
3484  8 /*atTimeCode*/,
3485  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3486  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3487  '-' /*letter*/,
3488  },
3489  // Rule LH 2008 max - Apr Sun>=1 2:00 0 -
3490  {
3491  8 /*fromYearTiny*/,
3492  126 /*toYearTiny*/,
3493  4 /*inMonth*/,
3494  7 /*onDayOfWeek*/,
3495  1 /*onDayOfMonth*/,
3496  8 /*atTimeCode*/,
3497  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3498  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3499  '-' /*letter*/,
3500  },
3501  // Rule LH 2008 max - Oct Sun>=1 2:00 0:30 -
3502  {
3503  8 /*fromYearTiny*/,
3504  126 /*toYearTiny*/,
3505  10 /*inMonth*/,
3506  7 /*onDayOfWeek*/,
3507  1 /*onDayOfMonth*/,
3508  8 /*atTimeCode*/,
3509  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3510  2 /*deltaCode ((deltaMinutes=30)/15)*/,
3511  '-' /*letter*/,
3512  },
3513 
3514 };
3515 
3516 
3517 
3518 const basic::ZonePolicy kPolicyLH ACE_TIME_PROGMEM = {
3519  kZoneRulesLH /*rules*/,
3520  nullptr /*letters*/,
3521  9 /*numRules*/,
3522  0 /*numLetters*/,
3523 };
3524 
3525 //---------------------------------------------------------------------------
3526 // Policy name: Lebanon
3527 // Rules: 3
3528 // Memory (8-bit): 33
3529 // Memory (32-bit): 48
3530 //---------------------------------------------------------------------------
3531 
3532 static const basic::ZoneRule kZoneRulesLebanon[] ACE_TIME_PROGMEM = {
3533  // Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
3534  {
3535  -7 /*fromYearTiny*/,
3536  126 /*toYearTiny*/,
3537  3 /*inMonth*/,
3538  7 /*onDayOfWeek*/,
3539  0 /*onDayOfMonth*/,
3540  0 /*atTimeCode*/,
3541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3542  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3543  'S' /*letter*/,
3544  },
3545  // Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
3546  {
3547  -7 /*fromYearTiny*/,
3548  -2 /*toYearTiny*/,
3549  9 /*inMonth*/,
3550  7 /*onDayOfWeek*/,
3551  0 /*onDayOfMonth*/,
3552  0 /*atTimeCode*/,
3553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3554  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3555  '-' /*letter*/,
3556  },
3557  // Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
3558  {
3559  -1 /*fromYearTiny*/,
3560  126 /*toYearTiny*/,
3561  10 /*inMonth*/,
3562  7 /*onDayOfWeek*/,
3563  0 /*onDayOfMonth*/,
3564  0 /*atTimeCode*/,
3565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3567  '-' /*letter*/,
3568  },
3569 
3570 };
3571 
3572 
3573 
3574 const basic::ZonePolicy kPolicyLebanon ACE_TIME_PROGMEM = {
3575  kZoneRulesLebanon /*rules*/,
3576  nullptr /*letters*/,
3577  3 /*numRules*/,
3578  0 /*numLetters*/,
3579 };
3580 
3581 //---------------------------------------------------------------------------
3582 // Policy name: Macau
3583 // Rules: 1
3584 // Memory (8-bit): 15
3585 // Memory (32-bit): 24
3586 //---------------------------------------------------------------------------
3587 
3588 static const basic::ZoneRule kZoneRulesMacau[] ACE_TIME_PROGMEM = {
3589  // Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
3590  {
3591  -21 /*fromYearTiny*/,
3592  -21 /*toYearTiny*/,
3593  10 /*inMonth*/,
3594  7 /*onDayOfWeek*/,
3595  16 /*onDayOfMonth*/,
3596  14 /*atTimeCode*/,
3597  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3598  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3599  'S' /*letter*/,
3600  },
3601 
3602 };
3603 
3604 
3605 
3606 const basic::ZonePolicy kPolicyMacau ACE_TIME_PROGMEM = {
3607  kZoneRulesMacau /*rules*/,
3608  nullptr /*letters*/,
3609  1 /*numRules*/,
3610  0 /*numLetters*/,
3611 };
3612 
3613 //---------------------------------------------------------------------------
3614 // Policy name: Mauritius
3615 // Rules: 3
3616 // Memory (8-bit): 33
3617 // Memory (32-bit): 48
3618 //---------------------------------------------------------------------------
3619 
3620 static const basic::ZoneRule kZoneRulesMauritius[] ACE_TIME_PROGMEM = {
3621  // Rule Mauritius 1983 only - Mar 21 0:00 0 -
3622  {
3623  -17 /*fromYearTiny*/,
3624  -17 /*toYearTiny*/,
3625  3 /*inMonth*/,
3626  0 /*onDayOfWeek*/,
3627  21 /*onDayOfMonth*/,
3628  0 /*atTimeCode*/,
3629  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3630  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3631  '-' /*letter*/,
3632  },
3633  // Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
3634  {
3635  8 /*fromYearTiny*/,
3636  8 /*toYearTiny*/,
3637  10 /*inMonth*/,
3638  7 /*onDayOfWeek*/,
3639  0 /*onDayOfMonth*/,
3640  8 /*atTimeCode*/,
3641  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3642  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3643  '-' /*letter*/,
3644  },
3645  // Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
3646  {
3647  9 /*fromYearTiny*/,
3648  9 /*toYearTiny*/,
3649  3 /*inMonth*/,
3650  7 /*onDayOfWeek*/,
3651  0 /*onDayOfMonth*/,
3652  8 /*atTimeCode*/,
3653  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3654  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3655  '-' /*letter*/,
3656  },
3657 
3658 };
3659 
3660 
3661 
3662 const basic::ZonePolicy kPolicyMauritius ACE_TIME_PROGMEM = {
3663  kZoneRulesMauritius /*rules*/,
3664  nullptr /*letters*/,
3665  3 /*numRules*/,
3666  0 /*numLetters*/,
3667 };
3668 
3669 //---------------------------------------------------------------------------
3670 // Policy name: Mexico
3671 // Rules: 7
3672 // Memory (8-bit): 69
3673 // Memory (32-bit): 96
3674 //---------------------------------------------------------------------------
3675 
3676 static const basic::ZoneRule kZoneRulesMexico[] ACE_TIME_PROGMEM = {
3677  // Rule Mexico 1950 only - Jul 30 0:00 0 S
3678  {
3679  -50 /*fromYearTiny*/,
3680  -50 /*toYearTiny*/,
3681  7 /*inMonth*/,
3682  0 /*onDayOfWeek*/,
3683  30 /*onDayOfMonth*/,
3684  0 /*atTimeCode*/,
3685  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3686  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3687  'S' /*letter*/,
3688  },
3689  // Rule Mexico 1996 2000 - Apr Sun>=1 2:00 1:00 D
3690  {
3691  -4 /*fromYearTiny*/,
3692  0 /*toYearTiny*/,
3693  4 /*inMonth*/,
3694  7 /*onDayOfWeek*/,
3695  1 /*onDayOfMonth*/,
3696  8 /*atTimeCode*/,
3697  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3698  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3699  'D' /*letter*/,
3700  },
3701  // Rule Mexico 1996 2000 - Oct lastSun 2:00 0 S
3702  {
3703  -4 /*fromYearTiny*/,
3704  0 /*toYearTiny*/,
3705  10 /*inMonth*/,
3706  7 /*onDayOfWeek*/,
3707  0 /*onDayOfMonth*/,
3708  8 /*atTimeCode*/,
3709  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3710  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3711  'S' /*letter*/,
3712  },
3713  // Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
3714  {
3715  1 /*fromYearTiny*/,
3716  1 /*toYearTiny*/,
3717  5 /*inMonth*/,
3718  7 /*onDayOfWeek*/,
3719  1 /*onDayOfMonth*/,
3720  8 /*atTimeCode*/,
3721  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3722  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3723  'D' /*letter*/,
3724  },
3725  // Rule Mexico 2001 only - Sep lastSun 2:00 0 S
3726  {
3727  1 /*fromYearTiny*/,
3728  1 /*toYearTiny*/,
3729  9 /*inMonth*/,
3730  7 /*onDayOfWeek*/,
3731  0 /*onDayOfMonth*/,
3732  8 /*atTimeCode*/,
3733  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3734  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3735  'S' /*letter*/,
3736  },
3737  // Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
3738  {
3739  2 /*fromYearTiny*/,
3740  126 /*toYearTiny*/,
3741  4 /*inMonth*/,
3742  7 /*onDayOfWeek*/,
3743  1 /*onDayOfMonth*/,
3744  8 /*atTimeCode*/,
3745  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3746  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3747  'D' /*letter*/,
3748  },
3749  // Rule Mexico 2002 max - Oct lastSun 2:00 0 S
3750  {
3751  2 /*fromYearTiny*/,
3752  126 /*toYearTiny*/,
3753  10 /*inMonth*/,
3754  7 /*onDayOfWeek*/,
3755  0 /*onDayOfMonth*/,
3756  8 /*atTimeCode*/,
3757  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3758  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3759  'S' /*letter*/,
3760  },
3761 
3762 };
3763 
3764 
3765 
3766 const basic::ZonePolicy kPolicyMexico ACE_TIME_PROGMEM = {
3767  kZoneRulesMexico /*rules*/,
3768  nullptr /*letters*/,
3769  7 /*numRules*/,
3770  0 /*numLetters*/,
3771 };
3772 
3773 //---------------------------------------------------------------------------
3774 // Policy name: Moldova
3775 // Rules: 2
3776 // Memory (8-bit): 24
3777 // Memory (32-bit): 36
3778 //---------------------------------------------------------------------------
3779 
3780 static const basic::ZoneRule kZoneRulesMoldova[] ACE_TIME_PROGMEM = {
3781  // Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
3782  {
3783  -3 /*fromYearTiny*/,
3784  126 /*toYearTiny*/,
3785  3 /*inMonth*/,
3786  7 /*onDayOfWeek*/,
3787  0 /*onDayOfMonth*/,
3788  8 /*atTimeCode*/,
3789  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3790  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3791  'S' /*letter*/,
3792  },
3793  // Rule Moldova 1997 max - Oct lastSun 3:00 0 -
3794  {
3795  -3 /*fromYearTiny*/,
3796  126 /*toYearTiny*/,
3797  10 /*inMonth*/,
3798  7 /*onDayOfWeek*/,
3799  0 /*onDayOfMonth*/,
3800  12 /*atTimeCode*/,
3801  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3802  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3803  '-' /*letter*/,
3804  },
3805 
3806 };
3807 
3808 
3809 
3810 const basic::ZonePolicy kPolicyMoldova ACE_TIME_PROGMEM = {
3811  kZoneRulesMoldova /*rules*/,
3812  nullptr /*letters*/,
3813  2 /*numRules*/,
3814  0 /*numLetters*/,
3815 };
3816 
3817 //---------------------------------------------------------------------------
3818 // Policy name: Moncton
3819 // Rules: 3
3820 // Memory (8-bit): 33
3821 // Memory (32-bit): 48
3822 //---------------------------------------------------------------------------
3823 
3824 static const basic::ZoneRule kZoneRulesMoncton[] ACE_TIME_PROGMEM = {
3825  // Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
3826  {
3827  -43 /*fromYearTiny*/,
3828  -28 /*toYearTiny*/,
3829  10 /*inMonth*/,
3830  7 /*onDayOfWeek*/,
3831  0 /*onDayOfMonth*/,
3832  8 /*atTimeCode*/,
3833  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3834  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3835  'S' /*letter*/,
3836  },
3837  // Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
3838  {
3839  -7 /*fromYearTiny*/,
3840  6 /*toYearTiny*/,
3841  4 /*inMonth*/,
3842  7 /*onDayOfWeek*/,
3843  1 /*onDayOfMonth*/,
3844  0 /*atTimeCode*/,
3845  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3846  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3847  'D' /*letter*/,
3848  },
3849  // Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
3850  {
3851  -7 /*fromYearTiny*/,
3852  6 /*toYearTiny*/,
3853  10 /*inMonth*/,
3854  7 /*onDayOfWeek*/,
3855  0 /*onDayOfMonth*/,
3856  0 /*atTimeCode*/,
3857  1 /*atTimeModifier (kSuffixW + minute=1)*/,
3858  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3859  'S' /*letter*/,
3860  },
3861 
3862 };
3863 
3864 
3865 
3866 const basic::ZonePolicy kPolicyMoncton ACE_TIME_PROGMEM = {
3867  kZoneRulesMoncton /*rules*/,
3868  nullptr /*letters*/,
3869  3 /*numRules*/,
3870  0 /*numLetters*/,
3871 };
3872 
3873 //---------------------------------------------------------------------------
3874 // Policy name: Mongol
3875 // Rules: 6
3876 // Memory (8-bit): 60
3877 // Memory (32-bit): 84
3878 //---------------------------------------------------------------------------
3879 
3880 static const basic::ZoneRule kZoneRulesMongol[] ACE_TIME_PROGMEM = {
3881  // Rule Mongol 1984 1998 - Sep lastSun 0:00 0 -
3882  {
3883  -16 /*fromYearTiny*/,
3884  -2 /*toYearTiny*/,
3885  9 /*inMonth*/,
3886  7 /*onDayOfWeek*/,
3887  0 /*onDayOfMonth*/,
3888  0 /*atTimeCode*/,
3889  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3890  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3891  '-' /*letter*/,
3892  },
3893  // Rule Mongol 2001 only - Apr lastSat 2:00 1:00 -
3894  {
3895  1 /*fromYearTiny*/,
3896  1 /*toYearTiny*/,
3897  4 /*inMonth*/,
3898  6 /*onDayOfWeek*/,
3899  0 /*onDayOfMonth*/,
3900  8 /*atTimeCode*/,
3901  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3902  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3903  '-' /*letter*/,
3904  },
3905  // Rule Mongol 2001 2006 - Sep lastSat 2:00 0 -
3906  {
3907  1 /*fromYearTiny*/,
3908  6 /*toYearTiny*/,
3909  9 /*inMonth*/,
3910  6 /*onDayOfWeek*/,
3911  0 /*onDayOfMonth*/,
3912  8 /*atTimeCode*/,
3913  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3914  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3915  '-' /*letter*/,
3916  },
3917  // Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
3918  {
3919  2 /*fromYearTiny*/,
3920  6 /*toYearTiny*/,
3921  3 /*inMonth*/,
3922  6 /*onDayOfWeek*/,
3923  0 /*onDayOfMonth*/,
3924  8 /*atTimeCode*/,
3925  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3926  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3927  '-' /*letter*/,
3928  },
3929  // Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
3930  {
3931  15 /*fromYearTiny*/,
3932  16 /*toYearTiny*/,
3933  3 /*inMonth*/,
3934  6 /*onDayOfWeek*/,
3935  0 /*onDayOfMonth*/,
3936  8 /*atTimeCode*/,
3937  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3938  4 /*deltaCode ((deltaMinutes=60)/15)*/,
3939  '-' /*letter*/,
3940  },
3941  // Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
3942  {
3943  15 /*fromYearTiny*/,
3944  16 /*toYearTiny*/,
3945  9 /*inMonth*/,
3946  6 /*onDayOfWeek*/,
3947  0 /*onDayOfMonth*/,
3948  0 /*atTimeCode*/,
3949  0 /*atTimeModifier (kSuffixW + minute=0)*/,
3950  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3951  '-' /*letter*/,
3952  },
3953 
3954 };
3955 
3956 
3957 
3958 const basic::ZonePolicy kPolicyMongol ACE_TIME_PROGMEM = {
3959  kZoneRulesMongol /*rules*/,
3960  nullptr /*letters*/,
3961  6 /*numRules*/,
3962  0 /*numLetters*/,
3963 };
3964 
3965 //---------------------------------------------------------------------------
3966 // Policy name: NC
3967 // Rules: 1
3968 // Memory (8-bit): 15
3969 // Memory (32-bit): 24
3970 //---------------------------------------------------------------------------
3971 
3972 static const basic::ZoneRule kZoneRulesNC[] ACE_TIME_PROGMEM = {
3973  // Rule NC 1997 only - Mar 2 2:00s 0 -
3974  {
3975  -3 /*fromYearTiny*/,
3976  -3 /*toYearTiny*/,
3977  3 /*inMonth*/,
3978  0 /*onDayOfWeek*/,
3979  2 /*onDayOfMonth*/,
3980  8 /*atTimeCode*/,
3981  16 /*atTimeModifier (kSuffixS + minute=0)*/,
3982  0 /*deltaCode ((deltaMinutes=0)/15)*/,
3983  '-' /*letter*/,
3984  },
3985 
3986 };
3987 
3988 
3989 
3990 const basic::ZonePolicy kPolicyNC ACE_TIME_PROGMEM = {
3991  kZoneRulesNC /*rules*/,
3992  nullptr /*letters*/,
3993  1 /*numRules*/,
3994  0 /*numLetters*/,
3995 };
3996 
3997 //---------------------------------------------------------------------------
3998 // Policy name: NZ
3999 // Rules: 5
4000 // Memory (8-bit): 51
4001 // Memory (32-bit): 72
4002 //---------------------------------------------------------------------------
4003 
4004 static const basic::ZoneRule kZoneRulesNZ[] ACE_TIME_PROGMEM = {
4005  // Rule NZ 1989 only - Oct Sun>=8 2:00s 1:00 D
4006  {
4007  -11 /*fromYearTiny*/,
4008  -11 /*toYearTiny*/,
4009  10 /*inMonth*/,
4010  7 /*onDayOfWeek*/,
4011  8 /*onDayOfMonth*/,
4012  8 /*atTimeCode*/,
4013  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4014  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4015  'D' /*letter*/,
4016  },
4017  // Rule NZ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
4018  {
4019  -10 /*fromYearTiny*/,
4020  6 /*toYearTiny*/,
4021  10 /*inMonth*/,
4022  7 /*onDayOfWeek*/,
4023  1 /*onDayOfMonth*/,
4024  8 /*atTimeCode*/,
4025  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4026  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4027  'D' /*letter*/,
4028  },
4029  // Rule NZ 1990 2007 - Mar Sun>=15 2:00s 0 S
4030  {
4031  -10 /*fromYearTiny*/,
4032  7 /*toYearTiny*/,
4033  3 /*inMonth*/,
4034  7 /*onDayOfWeek*/,
4035  15 /*onDayOfMonth*/,
4036  8 /*atTimeCode*/,
4037  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4038  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4039  'S' /*letter*/,
4040  },
4041  // Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
4042  {
4043  7 /*fromYearTiny*/,
4044  126 /*toYearTiny*/,
4045  9 /*inMonth*/,
4046  7 /*onDayOfWeek*/,
4047  0 /*onDayOfMonth*/,
4048  8 /*atTimeCode*/,
4049  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4050  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4051  'D' /*letter*/,
4052  },
4053  // Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
4054  {
4055  8 /*fromYearTiny*/,
4056  126 /*toYearTiny*/,
4057  4 /*inMonth*/,
4058  7 /*onDayOfWeek*/,
4059  1 /*onDayOfMonth*/,
4060  8 /*atTimeCode*/,
4061  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4062  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4063  'S' /*letter*/,
4064  },
4065 
4066 };
4067 
4068 
4069 
4070 const basic::ZonePolicy kPolicyNZ ACE_TIME_PROGMEM = {
4071  kZoneRulesNZ /*rules*/,
4072  nullptr /*letters*/,
4073  5 /*numRules*/,
4074  0 /*numLetters*/,
4075 };
4076 
4077 //---------------------------------------------------------------------------
4078 // Policy name: Nic
4079 // Rules: 5
4080 // Memory (8-bit): 51
4081 // Memory (32-bit): 72
4082 //---------------------------------------------------------------------------
4083 
4084 static const basic::ZoneRule kZoneRulesNic[] ACE_TIME_PROGMEM = {
4085  // Rule Nic 1979 1980 - Jun Mon>=23 0:00 0 S
4086  {
4087  -21 /*fromYearTiny*/,
4088  -20 /*toYearTiny*/,
4089  6 /*inMonth*/,
4090  1 /*onDayOfWeek*/,
4091  23 /*onDayOfMonth*/,
4092  0 /*atTimeCode*/,
4093  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4094  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4095  'S' /*letter*/,
4096  },
4097  // Rule Nic 2005 only - Apr 10 0:00 1:00 D
4098  {
4099  5 /*fromYearTiny*/,
4100  5 /*toYearTiny*/,
4101  4 /*inMonth*/,
4102  0 /*onDayOfWeek*/,
4103  10 /*onDayOfMonth*/,
4104  0 /*atTimeCode*/,
4105  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4106  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4107  'D' /*letter*/,
4108  },
4109  // Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
4110  {
4111  5 /*fromYearTiny*/,
4112  5 /*toYearTiny*/,
4113  10 /*inMonth*/,
4114  7 /*onDayOfWeek*/,
4115  1 /*onDayOfMonth*/,
4116  0 /*atTimeCode*/,
4117  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4118  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4119  'S' /*letter*/,
4120  },
4121  // Rule Nic 2006 only - Apr 30 2:00 1:00 D
4122  {
4123  6 /*fromYearTiny*/,
4124  6 /*toYearTiny*/,
4125  4 /*inMonth*/,
4126  0 /*onDayOfWeek*/,
4127  30 /*onDayOfMonth*/,
4128  8 /*atTimeCode*/,
4129  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4130  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4131  'D' /*letter*/,
4132  },
4133  // Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
4134  {
4135  6 /*fromYearTiny*/,
4136  6 /*toYearTiny*/,
4137  10 /*inMonth*/,
4138  7 /*onDayOfWeek*/,
4139  1 /*onDayOfMonth*/,
4140  4 /*atTimeCode*/,
4141  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4142  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4143  'S' /*letter*/,
4144  },
4145 
4146 };
4147 
4148 
4149 
4150 const basic::ZonePolicy kPolicyNic ACE_TIME_PROGMEM = {
4151  kZoneRulesNic /*rules*/,
4152  nullptr /*letters*/,
4153  5 /*numRules*/,
4154  0 /*numLetters*/,
4155 };
4156 
4157 //---------------------------------------------------------------------------
4158 // Policy name: PRC
4159 // Rules: 1
4160 // Memory (8-bit): 15
4161 // Memory (32-bit): 24
4162 //---------------------------------------------------------------------------
4163 
4164 static const basic::ZoneRule kZoneRulesPRC[] ACE_TIME_PROGMEM = {
4165  // Rule PRC 1986 1991 - Sep Sun>=11 2:00 0 S
4166  {
4167  -14 /*fromYearTiny*/,
4168  -9 /*toYearTiny*/,
4169  9 /*inMonth*/,
4170  7 /*onDayOfWeek*/,
4171  11 /*onDayOfMonth*/,
4172  8 /*atTimeCode*/,
4173  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4174  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4175  'S' /*letter*/,
4176  },
4177 
4178 };
4179 
4180 
4181 
4182 const basic::ZonePolicy kPolicyPRC ACE_TIME_PROGMEM = {
4183  kZoneRulesPRC /*rules*/,
4184  nullptr /*letters*/,
4185  1 /*numRules*/,
4186  0 /*numLetters*/,
4187 };
4188 
4189 //---------------------------------------------------------------------------
4190 // Policy name: Pakistan
4191 // Rules: 6
4192 // Memory (8-bit): 60
4193 // Memory (32-bit): 84
4194 //---------------------------------------------------------------------------
4195 
4196 static const basic::ZoneRule kZoneRulesPakistan[] ACE_TIME_PROGMEM = {
4197  // Anchor: Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
4198  {
4199  -127 /*fromYearTiny*/,
4200  -127 /*toYearTiny*/,
4201  1 /*inMonth*/,
4202  0 /*onDayOfWeek*/,
4203  1 /*onDayOfMonth*/,
4204  0 /*atTimeCode*/,
4205  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4206  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4207  '-' /*letter*/,
4208  },
4209  // Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S
4210  {
4211  2 /*fromYearTiny*/,
4212  2 /*toYearTiny*/,
4213  4 /*inMonth*/,
4214  7 /*onDayOfWeek*/,
4215  2 /*onDayOfMonth*/,
4216  0 /*atTimeCode*/,
4217  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4218  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4219  'S' /*letter*/,
4220  },
4221  // Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
4222  {
4223  2 /*fromYearTiny*/,
4224  2 /*toYearTiny*/,
4225  10 /*inMonth*/,
4226  7 /*onDayOfWeek*/,
4227  2 /*onDayOfMonth*/,
4228  0 /*atTimeCode*/,
4229  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4230  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4231  '-' /*letter*/,
4232  },
4233  // Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
4234  {
4235  8 /*fromYearTiny*/,
4236  8 /*toYearTiny*/,
4237  6 /*inMonth*/,
4238  0 /*onDayOfWeek*/,
4239  1 /*onDayOfMonth*/,
4240  0 /*atTimeCode*/,
4241  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4242  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4243  'S' /*letter*/,
4244  },
4245  // Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
4246  {
4247  8 /*fromYearTiny*/,
4248  9 /*toYearTiny*/,
4249  11 /*inMonth*/,
4250  0 /*onDayOfWeek*/,
4251  1 /*onDayOfMonth*/,
4252  0 /*atTimeCode*/,
4253  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4254  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4255  '-' /*letter*/,
4256  },
4257  // Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
4258  {
4259  9 /*fromYearTiny*/,
4260  9 /*toYearTiny*/,
4261  4 /*inMonth*/,
4262  0 /*onDayOfWeek*/,
4263  15 /*onDayOfMonth*/,
4264  0 /*atTimeCode*/,
4265  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4266  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4267  'S' /*letter*/,
4268  },
4269 
4270 };
4271 
4272 
4273 
4274 const basic::ZonePolicy kPolicyPakistan ACE_TIME_PROGMEM = {
4275  kZoneRulesPakistan /*rules*/,
4276  nullptr /*letters*/,
4277  6 /*numRules*/,
4278  0 /*numLetters*/,
4279 };
4280 
4281 //---------------------------------------------------------------------------
4282 // Policy name: Para
4283 // Rules: 10
4284 // Memory (8-bit): 96
4285 // Memory (32-bit): 132
4286 //---------------------------------------------------------------------------
4287 
4288 static const basic::ZoneRule kZoneRulesPara[] ACE_TIME_PROGMEM = {
4289  // Rule Para 1996 2001 - Oct Sun>=1 0:00 1:00 -
4290  {
4291  -4 /*fromYearTiny*/,
4292  1 /*toYearTiny*/,
4293  10 /*inMonth*/,
4294  7 /*onDayOfWeek*/,
4295  1 /*onDayOfMonth*/,
4296  0 /*atTimeCode*/,
4297  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4298  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4299  '-' /*letter*/,
4300  },
4301  // Rule Para 1997 only - Feb lastSun 0:00 0 -
4302  {
4303  -3 /*fromYearTiny*/,
4304  -3 /*toYearTiny*/,
4305  2 /*inMonth*/,
4306  7 /*onDayOfWeek*/,
4307  0 /*onDayOfMonth*/,
4308  0 /*atTimeCode*/,
4309  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4310  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4311  '-' /*letter*/,
4312  },
4313  // Rule Para 1998 2001 - Mar Sun>=1 0:00 0 -
4314  {
4315  -2 /*fromYearTiny*/,
4316  1 /*toYearTiny*/,
4317  3 /*inMonth*/,
4318  7 /*onDayOfWeek*/,
4319  1 /*onDayOfMonth*/,
4320  0 /*atTimeCode*/,
4321  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4322  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4323  '-' /*letter*/,
4324  },
4325  // Rule Para 2002 2004 - Apr Sun>=1 0:00 0 -
4326  {
4327  2 /*fromYearTiny*/,
4328  4 /*toYearTiny*/,
4329  4 /*inMonth*/,
4330  7 /*onDayOfWeek*/,
4331  1 /*onDayOfMonth*/,
4332  0 /*atTimeCode*/,
4333  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4334  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4335  '-' /*letter*/,
4336  },
4337  // Rule Para 2002 2003 - Sep Sun>=1 0:00 1:00 -
4338  {
4339  2 /*fromYearTiny*/,
4340  3 /*toYearTiny*/,
4341  9 /*inMonth*/,
4342  7 /*onDayOfWeek*/,
4343  1 /*onDayOfMonth*/,
4344  0 /*atTimeCode*/,
4345  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4346  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4347  '-' /*letter*/,
4348  },
4349  // Rule Para 2004 2009 - Oct Sun>=15 0:00 1:00 -
4350  {
4351  4 /*fromYearTiny*/,
4352  9 /*toYearTiny*/,
4353  10 /*inMonth*/,
4354  7 /*onDayOfWeek*/,
4355  15 /*onDayOfMonth*/,
4356  0 /*atTimeCode*/,
4357  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4358  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4359  '-' /*letter*/,
4360  },
4361  // Rule Para 2005 2009 - Mar Sun>=8 0:00 0 -
4362  {
4363  5 /*fromYearTiny*/,
4364  9 /*toYearTiny*/,
4365  3 /*inMonth*/,
4366  7 /*onDayOfWeek*/,
4367  8 /*onDayOfMonth*/,
4368  0 /*atTimeCode*/,
4369  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4370  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4371  '-' /*letter*/,
4372  },
4373  // Rule Para 2010 max - Oct Sun>=1 0:00 1:00 -
4374  {
4375  10 /*fromYearTiny*/,
4376  126 /*toYearTiny*/,
4377  10 /*inMonth*/,
4378  7 /*onDayOfWeek*/,
4379  1 /*onDayOfMonth*/,
4380  0 /*atTimeCode*/,
4381  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4382  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4383  '-' /*letter*/,
4384  },
4385  // Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
4386  {
4387  10 /*fromYearTiny*/,
4388  12 /*toYearTiny*/,
4389  4 /*inMonth*/,
4390  7 /*onDayOfWeek*/,
4391  8 /*onDayOfMonth*/,
4392  0 /*atTimeCode*/,
4393  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4394  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4395  '-' /*letter*/,
4396  },
4397  // Rule Para 2013 max - Mar Sun>=22 0:00 0 -
4398  {
4399  13 /*fromYearTiny*/,
4400  126 /*toYearTiny*/,
4401  3 /*inMonth*/,
4402  7 /*onDayOfWeek*/,
4403  22 /*onDayOfMonth*/,
4404  0 /*atTimeCode*/,
4405  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4406  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4407  '-' /*letter*/,
4408  },
4409 
4410 };
4411 
4412 
4413 
4414 const basic::ZonePolicy kPolicyPara ACE_TIME_PROGMEM = {
4415  kZoneRulesPara /*rules*/,
4416  nullptr /*letters*/,
4417  10 /*numRules*/,
4418  0 /*numLetters*/,
4419 };
4420 
4421 //---------------------------------------------------------------------------
4422 // Policy name: Peru
4423 // Rules: 1
4424 // Memory (8-bit): 15
4425 // Memory (32-bit): 24
4426 //---------------------------------------------------------------------------
4427 
4428 static const basic::ZoneRule kZoneRulesPeru[] ACE_TIME_PROGMEM = {
4429  // Rule Peru 1994 only - Apr 1 0:00 0 -
4430  {
4431  -6 /*fromYearTiny*/,
4432  -6 /*toYearTiny*/,
4433  4 /*inMonth*/,
4434  0 /*onDayOfWeek*/,
4435  1 /*onDayOfMonth*/,
4436  0 /*atTimeCode*/,
4437  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4438  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4439  '-' /*letter*/,
4440  },
4441 
4442 };
4443 
4444 
4445 
4446 const basic::ZonePolicy kPolicyPeru ACE_TIME_PROGMEM = {
4447  kZoneRulesPeru /*rules*/,
4448  nullptr /*letters*/,
4449  1 /*numRules*/,
4450  0 /*numLetters*/,
4451 };
4452 
4453 //---------------------------------------------------------------------------
4454 // Policy name: Phil
4455 // Rules: 1
4456 // Memory (8-bit): 15
4457 // Memory (32-bit): 24
4458 //---------------------------------------------------------------------------
4459 
4460 static const basic::ZoneRule kZoneRulesPhil[] ACE_TIME_PROGMEM = {
4461  // Rule Phil 1978 only - Sep 21 0:00 0 S
4462  {
4463  -22 /*fromYearTiny*/,
4464  -22 /*toYearTiny*/,
4465  9 /*inMonth*/,
4466  0 /*onDayOfWeek*/,
4467  21 /*onDayOfMonth*/,
4468  0 /*atTimeCode*/,
4469  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4470  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4471  'S' /*letter*/,
4472  },
4473 
4474 };
4475 
4476 
4477 
4478 const basic::ZonePolicy kPolicyPhil ACE_TIME_PROGMEM = {
4479  kZoneRulesPhil /*rules*/,
4480  nullptr /*letters*/,
4481  1 /*numRules*/,
4482  0 /*numLetters*/,
4483 };
4484 
4485 //---------------------------------------------------------------------------
4486 // Policy name: ROK
4487 // Rules: 1
4488 // Memory (8-bit): 15
4489 // Memory (32-bit): 24
4490 //---------------------------------------------------------------------------
4491 
4492 static const basic::ZoneRule kZoneRulesROK[] ACE_TIME_PROGMEM = {
4493  // Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
4494  {
4495  -13 /*fromYearTiny*/,
4496  -12 /*toYearTiny*/,
4497  10 /*inMonth*/,
4498  7 /*onDayOfWeek*/,
4499  8 /*onDayOfMonth*/,
4500  12 /*atTimeCode*/,
4501  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4502  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4503  'S' /*letter*/,
4504  },
4505 
4506 };
4507 
4508 
4509 
4510 const basic::ZonePolicy kPolicyROK ACE_TIME_PROGMEM = {
4511  kZoneRulesROK /*rules*/,
4512  nullptr /*letters*/,
4513  1 /*numRules*/,
4514  0 /*numLetters*/,
4515 };
4516 
4517 //---------------------------------------------------------------------------
4518 // Policy name: RussiaAsia
4519 // Rules: 3
4520 // Memory (8-bit): 33
4521 // Memory (32-bit): 48
4522 //---------------------------------------------------------------------------
4523 
4524 static const basic::ZoneRule kZoneRulesRussiaAsia[] ACE_TIME_PROGMEM = {
4525  // Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
4526  {
4527  -16 /*fromYearTiny*/,
4528  -5 /*toYearTiny*/,
4529  9 /*inMonth*/,
4530  7 /*onDayOfWeek*/,
4531  0 /*onDayOfMonth*/,
4532  8 /*atTimeCode*/,
4533  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4534  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4535  '-' /*letter*/,
4536  },
4537  // Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
4538  {
4539  -15 /*fromYearTiny*/,
4540  10 /*toYearTiny*/,
4541  3 /*inMonth*/,
4542  7 /*onDayOfWeek*/,
4543  0 /*onDayOfMonth*/,
4544  8 /*atTimeCode*/,
4545  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4546  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4547  '-' /*letter*/,
4548  },
4549  // Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
4550  {
4551  -4 /*fromYearTiny*/,
4552  10 /*toYearTiny*/,
4553  10 /*inMonth*/,
4554  7 /*onDayOfWeek*/,
4555  0 /*onDayOfMonth*/,
4556  8 /*atTimeCode*/,
4557  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4558  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4559  '-' /*letter*/,
4560  },
4561 
4562 };
4563 
4564 
4565 
4566 const basic::ZonePolicy kPolicyRussiaAsia ACE_TIME_PROGMEM = {
4567  kZoneRulesRussiaAsia /*rules*/,
4568  nullptr /*letters*/,
4569  3 /*numRules*/,
4570  0 /*numLetters*/,
4571 };
4572 
4573 //---------------------------------------------------------------------------
4574 // Policy name: SA
4575 // Rules: 1
4576 // Memory (8-bit): 15
4577 // Memory (32-bit): 24
4578 //---------------------------------------------------------------------------
4579 
4580 static const basic::ZoneRule kZoneRulesSA[] ACE_TIME_PROGMEM = {
4581  // Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
4582  {
4583  -57 /*fromYearTiny*/,
4584  -56 /*toYearTiny*/,
4585  3 /*inMonth*/,
4586  7 /*onDayOfWeek*/,
4587  15 /*onDayOfMonth*/,
4588  8 /*atTimeCode*/,
4589  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4591  '-' /*letter*/,
4592  },
4593 
4594 };
4595 
4596 
4597 
4598 const basic::ZonePolicy kPolicySA ACE_TIME_PROGMEM = {
4599  kZoneRulesSA /*rules*/,
4600  nullptr /*letters*/,
4601  1 /*numRules*/,
4602  0 /*numLetters*/,
4603 };
4604 
4605 //---------------------------------------------------------------------------
4606 // Policy name: Salv
4607 // Rules: 1
4608 // Memory (8-bit): 15
4609 // Memory (32-bit): 24
4610 //---------------------------------------------------------------------------
4611 
4612 static const basic::ZoneRule kZoneRulesSalv[] ACE_TIME_PROGMEM = {
4613  // Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
4614  {
4615  -13 /*fromYearTiny*/,
4616  -12 /*toYearTiny*/,
4617  9 /*inMonth*/,
4618  7 /*onDayOfWeek*/,
4619  0 /*onDayOfMonth*/,
4620  0 /*atTimeCode*/,
4621  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4622  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4623  'S' /*letter*/,
4624  },
4625 
4626 };
4627 
4628 
4629 
4630 const basic::ZonePolicy kPolicySalv ACE_TIME_PROGMEM = {
4631  kZoneRulesSalv /*rules*/,
4632  nullptr /*letters*/,
4633  1 /*numRules*/,
4634  0 /*numLetters*/,
4635 };
4636 
4637 //---------------------------------------------------------------------------
4638 // Policy name: Syria
4639 // Rules: 12
4640 // Memory (8-bit): 114
4641 // Memory (32-bit): 156
4642 //---------------------------------------------------------------------------
4643 
4644 static const basic::ZoneRule kZoneRulesSyria[] ACE_TIME_PROGMEM = {
4645  // Rule Syria 1994 2005 - Oct 1 0:00 0 -
4646  {
4647  -6 /*fromYearTiny*/,
4648  5 /*toYearTiny*/,
4649  10 /*inMonth*/,
4650  0 /*onDayOfWeek*/,
4651  1 /*onDayOfMonth*/,
4652  0 /*atTimeCode*/,
4653  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4654  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4655  '-' /*letter*/,
4656  },
4657  // Rule Syria 1997 1998 - Mar lastMon 0:00 1:00 S
4658  {
4659  -3 /*fromYearTiny*/,
4660  -2 /*toYearTiny*/,
4661  3 /*inMonth*/,
4662  1 /*onDayOfWeek*/,
4663  0 /*onDayOfMonth*/,
4664  0 /*atTimeCode*/,
4665  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4666  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4667  'S' /*letter*/,
4668  },
4669  // Rule Syria 1999 2006 - Apr 1 0:00 1:00 S
4670  {
4671  -1 /*fromYearTiny*/,
4672  6 /*toYearTiny*/,
4673  4 /*inMonth*/,
4674  0 /*onDayOfWeek*/,
4675  1 /*onDayOfMonth*/,
4676  0 /*atTimeCode*/,
4677  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4678  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4679  'S' /*letter*/,
4680  },
4681  // Rule Syria 2006 only - Sep 22 0:00 0 -
4682  {
4683  6 /*fromYearTiny*/,
4684  6 /*toYearTiny*/,
4685  9 /*inMonth*/,
4686  0 /*onDayOfWeek*/,
4687  22 /*onDayOfMonth*/,
4688  0 /*atTimeCode*/,
4689  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4690  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4691  '-' /*letter*/,
4692  },
4693  // Rule Syria 2007 only - Mar lastFri 0:00 1:00 S
4694  {
4695  7 /*fromYearTiny*/,
4696  7 /*toYearTiny*/,
4697  3 /*inMonth*/,
4698  5 /*onDayOfWeek*/,
4699  0 /*onDayOfMonth*/,
4700  0 /*atTimeCode*/,
4701  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4702  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4703  'S' /*letter*/,
4704  },
4705  // Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
4706  {
4707  7 /*fromYearTiny*/,
4708  7 /*toYearTiny*/,
4709  11 /*inMonth*/,
4710  5 /*onDayOfWeek*/,
4711  1 /*onDayOfMonth*/,
4712  0 /*atTimeCode*/,
4713  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4714  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4715  '-' /*letter*/,
4716  },
4717  // Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
4718  {
4719  8 /*fromYearTiny*/,
4720  8 /*toYearTiny*/,
4721  4 /*inMonth*/,
4722  5 /*onDayOfWeek*/,
4723  1 /*onDayOfMonth*/,
4724  0 /*atTimeCode*/,
4725  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4726  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4727  'S' /*letter*/,
4728  },
4729  // Rule Syria 2008 only - Nov 1 0:00 0 -
4730  {
4731  8 /*fromYearTiny*/,
4732  8 /*toYearTiny*/,
4733  11 /*inMonth*/,
4734  0 /*onDayOfWeek*/,
4735  1 /*onDayOfMonth*/,
4736  0 /*atTimeCode*/,
4737  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4738  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4739  '-' /*letter*/,
4740  },
4741  // Rule Syria 2009 only - Mar lastFri 0:00 1:00 S
4742  {
4743  9 /*fromYearTiny*/,
4744  9 /*toYearTiny*/,
4745  3 /*inMonth*/,
4746  5 /*onDayOfWeek*/,
4747  0 /*onDayOfMonth*/,
4748  0 /*atTimeCode*/,
4749  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4750  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4751  'S' /*letter*/,
4752  },
4753  // Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S
4754  {
4755  10 /*fromYearTiny*/,
4756  11 /*toYearTiny*/,
4757  4 /*inMonth*/,
4758  5 /*onDayOfWeek*/,
4759  1 /*onDayOfMonth*/,
4760  0 /*atTimeCode*/,
4761  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4762  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4763  'S' /*letter*/,
4764  },
4765  // Rule Syria 2012 max - Mar lastFri 0:00 1:00 S
4766  {
4767  12 /*fromYearTiny*/,
4768  126 /*toYearTiny*/,
4769  3 /*inMonth*/,
4770  5 /*onDayOfWeek*/,
4771  0 /*onDayOfMonth*/,
4772  0 /*atTimeCode*/,
4773  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4774  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4775  'S' /*letter*/,
4776  },
4777  // Rule Syria 2009 max - Oct lastFri 0:00 0 -
4778  {
4779  9 /*fromYearTiny*/,
4780  126 /*toYearTiny*/,
4781  10 /*inMonth*/,
4782  5 /*onDayOfWeek*/,
4783  0 /*onDayOfMonth*/,
4784  0 /*atTimeCode*/,
4785  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4786  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4787  '-' /*letter*/,
4788  },
4789 
4790 };
4791 
4792 
4793 
4794 const basic::ZonePolicy kPolicySyria ACE_TIME_PROGMEM = {
4795  kZoneRulesSyria /*rules*/,
4796  nullptr /*letters*/,
4797  12 /*numRules*/,
4798  0 /*numLetters*/,
4799 };
4800 
4801 //---------------------------------------------------------------------------
4802 // Policy name: Taiwan
4803 // Rules: 1
4804 // Memory (8-bit): 15
4805 // Memory (32-bit): 24
4806 //---------------------------------------------------------------------------
4807 
4808 static const basic::ZoneRule kZoneRulesTaiwan[] ACE_TIME_PROGMEM = {
4809  // Rule Taiwan 1979 only - Oct 1 0:00 0 S
4810  {
4811  -21 /*fromYearTiny*/,
4812  -21 /*toYearTiny*/,
4813  10 /*inMonth*/,
4814  0 /*onDayOfWeek*/,
4815  1 /*onDayOfMonth*/,
4816  0 /*atTimeCode*/,
4817  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4818  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4819  'S' /*letter*/,
4820  },
4821 
4822 };
4823 
4824 
4825 
4826 const basic::ZonePolicy kPolicyTaiwan ACE_TIME_PROGMEM = {
4827  kZoneRulesTaiwan /*rules*/,
4828  nullptr /*letters*/,
4829  1 /*numRules*/,
4830  0 /*numLetters*/,
4831 };
4832 
4833 //---------------------------------------------------------------------------
4834 // Policy name: Thule
4835 // Rules: 5
4836 // Memory (8-bit): 51
4837 // Memory (32-bit): 72
4838 //---------------------------------------------------------------------------
4839 
4840 static const basic::ZoneRule kZoneRulesThule[] ACE_TIME_PROGMEM = {
4841  // Rule Thule 1991 1992 - Sep lastSun 2:00 0 S
4842  {
4843  -9 /*fromYearTiny*/,
4844  -8 /*toYearTiny*/,
4845  9 /*inMonth*/,
4846  7 /*onDayOfWeek*/,
4847  0 /*onDayOfMonth*/,
4848  8 /*atTimeCode*/,
4849  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4850  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4851  'S' /*letter*/,
4852  },
4853  // Rule Thule 1993 2006 - Apr Sun>=1 2:00 1:00 D
4854  {
4855  -7 /*fromYearTiny*/,
4856  6 /*toYearTiny*/,
4857  4 /*inMonth*/,
4858  7 /*onDayOfWeek*/,
4859  1 /*onDayOfMonth*/,
4860  8 /*atTimeCode*/,
4861  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4862  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4863  'D' /*letter*/,
4864  },
4865  // Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
4866  {
4867  -7 /*fromYearTiny*/,
4868  6 /*toYearTiny*/,
4869  10 /*inMonth*/,
4870  7 /*onDayOfWeek*/,
4871  0 /*onDayOfMonth*/,
4872  8 /*atTimeCode*/,
4873  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4874  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4875  'S' /*letter*/,
4876  },
4877  // Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
4878  {
4879  7 /*fromYearTiny*/,
4880  126 /*toYearTiny*/,
4881  3 /*inMonth*/,
4882  7 /*onDayOfWeek*/,
4883  8 /*onDayOfMonth*/,
4884  8 /*atTimeCode*/,
4885  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4886  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4887  'D' /*letter*/,
4888  },
4889  // Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
4890  {
4891  7 /*fromYearTiny*/,
4892  126 /*toYearTiny*/,
4893  11 /*inMonth*/,
4894  7 /*onDayOfWeek*/,
4895  1 /*onDayOfMonth*/,
4896  8 /*atTimeCode*/,
4897  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4898  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4899  'S' /*letter*/,
4900  },
4901 
4902 };
4903 
4904 
4905 
4906 const basic::ZonePolicy kPolicyThule ACE_TIME_PROGMEM = {
4907  kZoneRulesThule /*rules*/,
4908  nullptr /*letters*/,
4909  5 /*numRules*/,
4910  0 /*numLetters*/,
4911 };
4912 
4913 //---------------------------------------------------------------------------
4914 // Policy name: Tonga
4915 // Rules: 7
4916 // Memory (8-bit): 69
4917 // Memory (32-bit): 96
4918 //---------------------------------------------------------------------------
4919 
4920 static const basic::ZoneRule kZoneRulesTonga[] ACE_TIME_PROGMEM = {
4921  // Anchor: Rule Tonga 2000 only - Mar 19 2:00s 0 -
4922  {
4923  -127 /*fromYearTiny*/,
4924  -127 /*toYearTiny*/,
4925  1 /*inMonth*/,
4926  0 /*onDayOfWeek*/,
4927  1 /*onDayOfMonth*/,
4928  0 /*atTimeCode*/,
4929  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4930  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4931  '-' /*letter*/,
4932  },
4933  // Rule Tonga 1999 only - Oct 7 2:00s 1:00 -
4934  {
4935  -1 /*fromYearTiny*/,
4936  -1 /*toYearTiny*/,
4937  10 /*inMonth*/,
4938  0 /*onDayOfWeek*/,
4939  7 /*onDayOfMonth*/,
4940  8 /*atTimeCode*/,
4941  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4942  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4943  '-' /*letter*/,
4944  },
4945  // Rule Tonga 2000 only - Mar 19 2:00s 0 -
4946  {
4947  0 /*fromYearTiny*/,
4948  0 /*toYearTiny*/,
4949  3 /*inMonth*/,
4950  0 /*onDayOfWeek*/,
4951  19 /*onDayOfMonth*/,
4952  8 /*atTimeCode*/,
4953  16 /*atTimeModifier (kSuffixS + minute=0)*/,
4954  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4955  '-' /*letter*/,
4956  },
4957  // Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
4958  {
4959  0 /*fromYearTiny*/,
4960  1 /*toYearTiny*/,
4961  11 /*inMonth*/,
4962  7 /*onDayOfWeek*/,
4963  1 /*onDayOfMonth*/,
4964  8 /*atTimeCode*/,
4965  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4966  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4967  '-' /*letter*/,
4968  },
4969  // Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
4970  {
4971  1 /*fromYearTiny*/,
4972  2 /*toYearTiny*/,
4973  1 /*inMonth*/,
4974  7 /*onDayOfWeek*/,
4975  0 /*onDayOfMonth*/,
4976  8 /*atTimeCode*/,
4977  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4978  0 /*deltaCode ((deltaMinutes=0)/15)*/,
4979  '-' /*letter*/,
4980  },
4981  // Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
4982  {
4983  16 /*fromYearTiny*/,
4984  16 /*toYearTiny*/,
4985  11 /*inMonth*/,
4986  7 /*onDayOfWeek*/,
4987  1 /*onDayOfMonth*/,
4988  8 /*atTimeCode*/,
4989  0 /*atTimeModifier (kSuffixW + minute=0)*/,
4990  4 /*deltaCode ((deltaMinutes=60)/15)*/,
4991  '-' /*letter*/,
4992  },
4993  // Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
4994  {
4995  17 /*fromYearTiny*/,
4996  17 /*toYearTiny*/,
4997  1 /*inMonth*/,
4998  7 /*onDayOfWeek*/,
4999  15 /*onDayOfMonth*/,
5000  12 /*atTimeCode*/,
5001  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5002  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5003  '-' /*letter*/,
5004  },
5005 
5006 };
5007 
5008 
5009 
5010 const basic::ZonePolicy kPolicyTonga ACE_TIME_PROGMEM = {
5011  kZoneRulesTonga /*rules*/,
5012  nullptr /*letters*/,
5013  7 /*numRules*/,
5014  0 /*numLetters*/,
5015 };
5016 
5017 //---------------------------------------------------------------------------
5018 // Policy name: Tunisia
5019 // Rules: 5
5020 // Memory (8-bit): 51
5021 // Memory (32-bit): 72
5022 //---------------------------------------------------------------------------
5023 
5024 static const basic::ZoneRule kZoneRulesTunisia[] ACE_TIME_PROGMEM = {
5025  // Rule Tunisia 1988 1990 - Sep lastSun 0:00s 0 -
5026  {
5027  -12 /*fromYearTiny*/,
5028  -10 /*toYearTiny*/,
5029  9 /*inMonth*/,
5030  7 /*onDayOfWeek*/,
5031  0 /*onDayOfMonth*/,
5032  0 /*atTimeCode*/,
5033  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5034  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5035  '-' /*letter*/,
5036  },
5037  // Rule Tunisia 2005 only - May 1 0:00s 1:00 S
5038  {
5039  5 /*fromYearTiny*/,
5040  5 /*toYearTiny*/,
5041  5 /*inMonth*/,
5042  0 /*onDayOfWeek*/,
5043  1 /*onDayOfMonth*/,
5044  0 /*atTimeCode*/,
5045  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5046  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5047  'S' /*letter*/,
5048  },
5049  // Rule Tunisia 2005 only - Sep 30 1:00s 0 -
5050  {
5051  5 /*fromYearTiny*/,
5052  5 /*toYearTiny*/,
5053  9 /*inMonth*/,
5054  0 /*onDayOfWeek*/,
5055  30 /*onDayOfMonth*/,
5056  4 /*atTimeCode*/,
5057  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5058  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5059  '-' /*letter*/,
5060  },
5061  // Rule Tunisia 2006 2008 - Mar lastSun 2:00s 1:00 S
5062  {
5063  6 /*fromYearTiny*/,
5064  8 /*toYearTiny*/,
5065  3 /*inMonth*/,
5066  7 /*onDayOfWeek*/,
5067  0 /*onDayOfMonth*/,
5068  8 /*atTimeCode*/,
5069  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5070  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5071  'S' /*letter*/,
5072  },
5073  // Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
5074  {
5075  6 /*fromYearTiny*/,
5076  8 /*toYearTiny*/,
5077  10 /*inMonth*/,
5078  7 /*onDayOfWeek*/,
5079  0 /*onDayOfMonth*/,
5080  8 /*atTimeCode*/,
5081  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5082  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5083  '-' /*letter*/,
5084  },
5085 
5086 };
5087 
5088 
5089 
5090 const basic::ZonePolicy kPolicyTunisia ACE_TIME_PROGMEM = {
5091  kZoneRulesTunisia /*rules*/,
5092  nullptr /*letters*/,
5093  5 /*numRules*/,
5094  0 /*numLetters*/,
5095 };
5096 
5097 //---------------------------------------------------------------------------
5098 // Policy name: US
5099 // Rules: 5
5100 // Memory (8-bit): 51
5101 // Memory (32-bit): 72
5102 //---------------------------------------------------------------------------
5103 
5104 static const basic::ZoneRule kZoneRulesUS[] ACE_TIME_PROGMEM = {
5105  // Rule US 1967 2006 - Oct lastSun 2:00 0 S
5106  {
5107  -33 /*fromYearTiny*/,
5108  6 /*toYearTiny*/,
5109  10 /*inMonth*/,
5110  7 /*onDayOfWeek*/,
5111  0 /*onDayOfMonth*/,
5112  8 /*atTimeCode*/,
5113  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5114  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5115  'S' /*letter*/,
5116  },
5117  // Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
5118  {
5119  -24 /*fromYearTiny*/,
5120  -14 /*toYearTiny*/,
5121  4 /*inMonth*/,
5122  7 /*onDayOfWeek*/,
5123  0 /*onDayOfMonth*/,
5124  8 /*atTimeCode*/,
5125  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5126  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5127  'D' /*letter*/,
5128  },
5129  // Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
5130  {
5131  -13 /*fromYearTiny*/,
5132  6 /*toYearTiny*/,
5133  4 /*inMonth*/,
5134  7 /*onDayOfWeek*/,
5135  1 /*onDayOfMonth*/,
5136  8 /*atTimeCode*/,
5137  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5138  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5139  'D' /*letter*/,
5140  },
5141  // Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
5142  {
5143  7 /*fromYearTiny*/,
5144  126 /*toYearTiny*/,
5145  3 /*inMonth*/,
5146  7 /*onDayOfWeek*/,
5147  8 /*onDayOfMonth*/,
5148  8 /*atTimeCode*/,
5149  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5150  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5151  'D' /*letter*/,
5152  },
5153  // Rule US 2007 max - Nov Sun>=1 2:00 0 S
5154  {
5155  7 /*fromYearTiny*/,
5156  126 /*toYearTiny*/,
5157  11 /*inMonth*/,
5158  7 /*onDayOfWeek*/,
5159  1 /*onDayOfMonth*/,
5160  8 /*atTimeCode*/,
5161  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5162  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5163  'S' /*letter*/,
5164  },
5165 
5166 };
5167 
5168 
5169 
5170 const basic::ZonePolicy kPolicyUS ACE_TIME_PROGMEM = {
5171  kZoneRulesUS /*rules*/,
5172  nullptr /*letters*/,
5173  5 /*numRules*/,
5174  0 /*numLetters*/,
5175 };
5176 
5177 //---------------------------------------------------------------------------
5178 // Policy name: Uruguay
5179 // Rules: 6
5180 // Memory (8-bit): 60
5181 // Memory (32-bit): 84
5182 //---------------------------------------------------------------------------
5183 
5184 static const basic::ZoneRule kZoneRulesUruguay[] ACE_TIME_PROGMEM = {
5185  // Rule Uruguay 1993 only - Feb 28 0:00 0 -
5186  {
5187  -7 /*fromYearTiny*/,
5188  -7 /*toYearTiny*/,
5189  2 /*inMonth*/,
5190  0 /*onDayOfWeek*/,
5191  28 /*onDayOfMonth*/,
5192  0 /*atTimeCode*/,
5193  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5194  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5195  '-' /*letter*/,
5196  },
5197  // Rule Uruguay 2004 only - Sep 19 0:00 1:00 -
5198  {
5199  4 /*fromYearTiny*/,
5200  4 /*toYearTiny*/,
5201  9 /*inMonth*/,
5202  0 /*onDayOfWeek*/,
5203  19 /*onDayOfMonth*/,
5204  0 /*atTimeCode*/,
5205  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5206  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5207  '-' /*letter*/,
5208  },
5209  // Rule Uruguay 2005 only - Mar 27 2:00 0 -
5210  {
5211  5 /*fromYearTiny*/,
5212  5 /*toYearTiny*/,
5213  3 /*inMonth*/,
5214  0 /*onDayOfWeek*/,
5215  27 /*onDayOfMonth*/,
5216  8 /*atTimeCode*/,
5217  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5218  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5219  '-' /*letter*/,
5220  },
5221  // Rule Uruguay 2005 only - Oct 9 2:00 1:00 -
5222  {
5223  5 /*fromYearTiny*/,
5224  5 /*toYearTiny*/,
5225  10 /*inMonth*/,
5226  0 /*onDayOfWeek*/,
5227  9 /*onDayOfMonth*/,
5228  8 /*atTimeCode*/,
5229  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5230  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5231  '-' /*letter*/,
5232  },
5233  // Rule Uruguay 2006 2015 - Mar Sun>=8 2:00 0 -
5234  {
5235  6 /*fromYearTiny*/,
5236  15 /*toYearTiny*/,
5237  3 /*inMonth*/,
5238  7 /*onDayOfWeek*/,
5239  8 /*onDayOfMonth*/,
5240  8 /*atTimeCode*/,
5241  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5242  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5243  '-' /*letter*/,
5244  },
5245  // Rule Uruguay 2006 2014 - Oct Sun>=1 2:00 1:00 -
5246  {
5247  6 /*fromYearTiny*/,
5248  14 /*toYearTiny*/,
5249  10 /*inMonth*/,
5250  7 /*onDayOfWeek*/,
5251  1 /*onDayOfMonth*/,
5252  8 /*atTimeCode*/,
5253  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5254  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5255  '-' /*letter*/,
5256  },
5257 
5258 };
5259 
5260 
5261 
5262 const basic::ZonePolicy kPolicyUruguay ACE_TIME_PROGMEM = {
5263  kZoneRulesUruguay /*rules*/,
5264  nullptr /*letters*/,
5265  6 /*numRules*/,
5266  0 /*numLetters*/,
5267 };
5268 
5269 //---------------------------------------------------------------------------
5270 // Policy name: Vanuatu
5271 // Rules: 1
5272 // Memory (8-bit): 15
5273 // Memory (32-bit): 24
5274 //---------------------------------------------------------------------------
5275 
5276 static const basic::ZoneRule kZoneRulesVanuatu[] ACE_TIME_PROGMEM = {
5277  // Rule Vanuatu 1992 1993 - Jan Sat>=22 24:00 0 -
5278  {
5279  -8 /*fromYearTiny*/,
5280  -7 /*toYearTiny*/,
5281  1 /*inMonth*/,
5282  6 /*onDayOfWeek*/,
5283  22 /*onDayOfMonth*/,
5284  96 /*atTimeCode*/,
5285  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5286  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5287  '-' /*letter*/,
5288  },
5289 
5290 };
5291 
5292 
5293 
5294 const basic::ZonePolicy kPolicyVanuatu ACE_TIME_PROGMEM = {
5295  kZoneRulesVanuatu /*rules*/,
5296  nullptr /*letters*/,
5297  1 /*numRules*/,
5298  0 /*numLetters*/,
5299 };
5300 
5301 //---------------------------------------------------------------------------
5302 // Policy name: Winn
5303 // Rules: 3
5304 // Memory (8-bit): 33
5305 // Memory (32-bit): 48
5306 //---------------------------------------------------------------------------
5307 
5308 static const basic::ZoneRule kZoneRulesWinn[] ACE_TIME_PROGMEM = {
5309  // Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
5310  {
5311  -34 /*fromYearTiny*/,
5312  -14 /*toYearTiny*/,
5313  4 /*inMonth*/,
5314  7 /*onDayOfWeek*/,
5315  0 /*onDayOfMonth*/,
5316  8 /*atTimeCode*/,
5317  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5318  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5319  'D' /*letter*/,
5320  },
5321  // Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
5322  {
5323  -34 /*fromYearTiny*/,
5324  5 /*toYearTiny*/,
5325  10 /*inMonth*/,
5326  7 /*onDayOfWeek*/,
5327  0 /*onDayOfMonth*/,
5328  8 /*atTimeCode*/,
5329  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5330  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5331  'S' /*letter*/,
5332  },
5333  // Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
5334  {
5335  -13 /*fromYearTiny*/,
5336  5 /*toYearTiny*/,
5337  4 /*inMonth*/,
5338  7 /*onDayOfWeek*/,
5339  1 /*onDayOfMonth*/,
5340  8 /*atTimeCode*/,
5341  16 /*atTimeModifier (kSuffixS + minute=0)*/,
5342  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5343  'D' /*letter*/,
5344  },
5345 
5346 };
5347 
5348 
5349 
5350 const basic::ZonePolicy kPolicyWinn ACE_TIME_PROGMEM = {
5351  kZoneRulesWinn /*rules*/,
5352  nullptr /*letters*/,
5353  3 /*numRules*/,
5354  0 /*numLetters*/,
5355 };
5356 
5357 //---------------------------------------------------------------------------
5358 // Policy name: Zion
5359 // Rules: 24
5360 // Memory (8-bit): 222
5361 // Memory (32-bit): 300
5362 //---------------------------------------------------------------------------
5363 
5364 static const basic::ZoneRule kZoneRulesZion[] ACE_TIME_PROGMEM = {
5365  // Rule Zion 1998 only - Sep 6 0:00 0 S
5366  {
5367  -2 /*fromYearTiny*/,
5368  -2 /*toYearTiny*/,
5369  9 /*inMonth*/,
5370  0 /*onDayOfWeek*/,
5371  6 /*onDayOfMonth*/,
5372  0 /*atTimeCode*/,
5373  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5374  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5375  'S' /*letter*/,
5376  },
5377  // Rule Zion 1999 only - Apr 2 2:00 1:00 D
5378  {
5379  -1 /*fromYearTiny*/,
5380  -1 /*toYearTiny*/,
5381  4 /*inMonth*/,
5382  0 /*onDayOfWeek*/,
5383  2 /*onDayOfMonth*/,
5384  8 /*atTimeCode*/,
5385  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5386  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5387  'D' /*letter*/,
5388  },
5389  // Rule Zion 1999 only - Sep 3 2:00 0 S
5390  {
5391  -1 /*fromYearTiny*/,
5392  -1 /*toYearTiny*/,
5393  9 /*inMonth*/,
5394  0 /*onDayOfWeek*/,
5395  3 /*onDayOfMonth*/,
5396  8 /*atTimeCode*/,
5397  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5398  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5399  'S' /*letter*/,
5400  },
5401  // Rule Zion 2000 only - Apr 14 2:00 1:00 D
5402  {
5403  0 /*fromYearTiny*/,
5404  0 /*toYearTiny*/,
5405  4 /*inMonth*/,
5406  0 /*onDayOfWeek*/,
5407  14 /*onDayOfMonth*/,
5408  8 /*atTimeCode*/,
5409  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5410  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5411  'D' /*letter*/,
5412  },
5413  // Rule Zion 2000 only - Oct 6 1:00 0 S
5414  {
5415  0 /*fromYearTiny*/,
5416  0 /*toYearTiny*/,
5417  10 /*inMonth*/,
5418  0 /*onDayOfWeek*/,
5419  6 /*onDayOfMonth*/,
5420  4 /*atTimeCode*/,
5421  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5422  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5423  'S' /*letter*/,
5424  },
5425  // Rule Zion 2001 only - Apr 9 1:00 1:00 D
5426  {
5427  1 /*fromYearTiny*/,
5428  1 /*toYearTiny*/,
5429  4 /*inMonth*/,
5430  0 /*onDayOfWeek*/,
5431  9 /*onDayOfMonth*/,
5432  4 /*atTimeCode*/,
5433  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5434  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5435  'D' /*letter*/,
5436  },
5437  // Rule Zion 2001 only - Sep 24 1:00 0 S
5438  {
5439  1 /*fromYearTiny*/,
5440  1 /*toYearTiny*/,
5441  9 /*inMonth*/,
5442  0 /*onDayOfWeek*/,
5443  24 /*onDayOfMonth*/,
5444  4 /*atTimeCode*/,
5445  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5446  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5447  'S' /*letter*/,
5448  },
5449  // Rule Zion 2002 only - Mar 29 1:00 1:00 D
5450  {
5451  2 /*fromYearTiny*/,
5452  2 /*toYearTiny*/,
5453  3 /*inMonth*/,
5454  0 /*onDayOfWeek*/,
5455  29 /*onDayOfMonth*/,
5456  4 /*atTimeCode*/,
5457  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5458  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5459  'D' /*letter*/,
5460  },
5461  // Rule Zion 2002 only - Oct 7 1:00 0 S
5462  {
5463  2 /*fromYearTiny*/,
5464  2 /*toYearTiny*/,
5465  10 /*inMonth*/,
5466  0 /*onDayOfWeek*/,
5467  7 /*onDayOfMonth*/,
5468  4 /*atTimeCode*/,
5469  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5470  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5471  'S' /*letter*/,
5472  },
5473  // Rule Zion 2003 only - Mar 28 1:00 1:00 D
5474  {
5475  3 /*fromYearTiny*/,
5476  3 /*toYearTiny*/,
5477  3 /*inMonth*/,
5478  0 /*onDayOfWeek*/,
5479  28 /*onDayOfMonth*/,
5480  4 /*atTimeCode*/,
5481  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5482  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5483  'D' /*letter*/,
5484  },
5485  // Rule Zion 2003 only - Oct 3 1:00 0 S
5486  {
5487  3 /*fromYearTiny*/,
5488  3 /*toYearTiny*/,
5489  10 /*inMonth*/,
5490  0 /*onDayOfWeek*/,
5491  3 /*onDayOfMonth*/,
5492  4 /*atTimeCode*/,
5493  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5494  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5495  'S' /*letter*/,
5496  },
5497  // Rule Zion 2004 only - Apr 7 1:00 1:00 D
5498  {
5499  4 /*fromYearTiny*/,
5500  4 /*toYearTiny*/,
5501  4 /*inMonth*/,
5502  0 /*onDayOfWeek*/,
5503  7 /*onDayOfMonth*/,
5504  4 /*atTimeCode*/,
5505  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5506  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5507  'D' /*letter*/,
5508  },
5509  // Rule Zion 2004 only - Sep 22 1:00 0 S
5510  {
5511  4 /*fromYearTiny*/,
5512  4 /*toYearTiny*/,
5513  9 /*inMonth*/,
5514  0 /*onDayOfWeek*/,
5515  22 /*onDayOfMonth*/,
5516  4 /*atTimeCode*/,
5517  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5518  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5519  'S' /*letter*/,
5520  },
5521  // Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D
5522  {
5523  5 /*fromYearTiny*/,
5524  12 /*toYearTiny*/,
5525  4 /*inMonth*/,
5526  5 /*onDayOfWeek*/,
5527  -1 /*onDayOfMonth*/,
5528  8 /*atTimeCode*/,
5529  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5530  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5531  'D' /*letter*/,
5532  },
5533  // Rule Zion 2005 only - Oct 9 2:00 0 S
5534  {
5535  5 /*fromYearTiny*/,
5536  5 /*toYearTiny*/,
5537  10 /*inMonth*/,
5538  0 /*onDayOfWeek*/,
5539  9 /*onDayOfMonth*/,
5540  8 /*atTimeCode*/,
5541  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5542  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5543  'S' /*letter*/,
5544  },
5545  // Rule Zion 2006 only - Oct 1 2:00 0 S
5546  {
5547  6 /*fromYearTiny*/,
5548  6 /*toYearTiny*/,
5549  10 /*inMonth*/,
5550  0 /*onDayOfWeek*/,
5551  1 /*onDayOfMonth*/,
5552  8 /*atTimeCode*/,
5553  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5554  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5555  'S' /*letter*/,
5556  },
5557  // Rule Zion 2007 only - Sep 16 2:00 0 S
5558  {
5559  7 /*fromYearTiny*/,
5560  7 /*toYearTiny*/,
5561  9 /*inMonth*/,
5562  0 /*onDayOfWeek*/,
5563  16 /*onDayOfMonth*/,
5564  8 /*atTimeCode*/,
5565  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5566  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5567  'S' /*letter*/,
5568  },
5569  // Rule Zion 2008 only - Oct 5 2:00 0 S
5570  {
5571  8 /*fromYearTiny*/,
5572  8 /*toYearTiny*/,
5573  10 /*inMonth*/,
5574  0 /*onDayOfWeek*/,
5575  5 /*onDayOfMonth*/,
5576  8 /*atTimeCode*/,
5577  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5578  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5579  'S' /*letter*/,
5580  },
5581  // Rule Zion 2009 only - Sep 27 2:00 0 S
5582  {
5583  9 /*fromYearTiny*/,
5584  9 /*toYearTiny*/,
5585  9 /*inMonth*/,
5586  0 /*onDayOfWeek*/,
5587  27 /*onDayOfMonth*/,
5588  8 /*atTimeCode*/,
5589  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5590  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5591  'S' /*letter*/,
5592  },
5593  // Rule Zion 2010 only - Sep 12 2:00 0 S
5594  {
5595  10 /*fromYearTiny*/,
5596  10 /*toYearTiny*/,
5597  9 /*inMonth*/,
5598  0 /*onDayOfWeek*/,
5599  12 /*onDayOfMonth*/,
5600  8 /*atTimeCode*/,
5601  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5602  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5603  'S' /*letter*/,
5604  },
5605  // Rule Zion 2011 only - Oct 2 2:00 0 S
5606  {
5607  11 /*fromYearTiny*/,
5608  11 /*toYearTiny*/,
5609  10 /*inMonth*/,
5610  0 /*onDayOfWeek*/,
5611  2 /*onDayOfMonth*/,
5612  8 /*atTimeCode*/,
5613  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5614  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5615  'S' /*letter*/,
5616  },
5617  // Rule Zion 2012 only - Sep 23 2:00 0 S
5618  {
5619  12 /*fromYearTiny*/,
5620  12 /*toYearTiny*/,
5621  9 /*inMonth*/,
5622  0 /*onDayOfWeek*/,
5623  23 /*onDayOfMonth*/,
5624  8 /*atTimeCode*/,
5625  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5626  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5627  'S' /*letter*/,
5628  },
5629  // Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
5630  {
5631  13 /*fromYearTiny*/,
5632  126 /*toYearTiny*/,
5633  3 /*inMonth*/,
5634  5 /*onDayOfWeek*/,
5635  23 /*onDayOfMonth*/,
5636  8 /*atTimeCode*/,
5637  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5638  4 /*deltaCode ((deltaMinutes=60)/15)*/,
5639  'D' /*letter*/,
5640  },
5641  // Rule Zion 2013 max - Oct lastSun 2:00 0 S
5642  {
5643  13 /*fromYearTiny*/,
5644  126 /*toYearTiny*/,
5645  10 /*inMonth*/,
5646  7 /*onDayOfWeek*/,
5647  0 /*onDayOfMonth*/,
5648  8 /*atTimeCode*/,
5649  0 /*atTimeModifier (kSuffixW + minute=0)*/,
5650  0 /*deltaCode ((deltaMinutes=0)/15)*/,
5651  'S' /*letter*/,
5652  },
5653 
5654 };
5655 
5656 
5657 
5658 const basic::ZonePolicy kPolicyZion ACE_TIME_PROGMEM = {
5659  kZoneRulesZion /*rules*/,
5660  nullptr /*letters*/,
5661  24 /*numRules*/,
5662  0 /*numLetters*/,
5663 };
5664 
5665 
5666 
5667 }
5668 }
compat.h