about summary refs log tree commit diff
path: root/timezone
diff options
context:
space:
mode:
Diffstat (limited to 'timezone')
-rw-r--r--timezone/Makefile30
-rw-r--r--timezone/africa33
-rw-r--r--timezone/antarctica51
-rw-r--r--timezone/asia355
-rw-r--r--timezone/australasia155
-rw-r--r--timezone/backward34
-rw-r--r--timezone/checktab.awk4
-rw-r--r--timezone/etcetera7
-rw-r--r--timezone/europe213
-rw-r--r--timezone/factory2
-rw-r--r--timezone/iso3166.tab6
-rw-r--r--timezone/leapseconds65
-rw-r--r--timezone/northamerica560
-rw-r--r--timezone/pacificnew2
-rw-r--r--timezone/private.h123
-rw-r--r--timezone/scheck.c9
-rw-r--r--timezone/solar878
-rw-r--r--timezone/solar888
-rw-r--r--timezone/solar898
-rw-r--r--timezone/southamerica79
-rw-r--r--timezone/systemv36
-rw-r--r--timezone/tst-timezone.c6
-rw-r--r--timezone/tzfile.h62
-rw-r--r--timezone/tzselect.ksh4
-rwxr-xr-xtimezone/yearistype8
-rw-r--r--timezone/zdump.c460
-rw-r--r--timezone/zic.c988
-rw-r--r--timezone/zone.tab43
28 files changed, 1009 insertions, 2350 deletions
diff --git a/timezone/Makefile b/timezone/Makefile
index 9947d45b17..cf2c7d7f42 100644
--- a/timezone/Makefile
+++ b/timezone/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1998,1999,2000,2002,2005 Free Software Foundation, Inc.
+# Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -190,24 +190,28 @@ $(objpfx)tst-timezone.out: $(addprefix $(testdata)/, \
 test-tz-ENV = TZDIR=$(testdata)
 tst-timezone-ENV = TZDIR=$(testdata)
 
-# Note this must come second in the deps list for $(built-program-cmd) to work.
-zic-deps = $(objpfx)zic $(leapseconds) yearistype
-
-$(testdata)/America/New_York: northamerica $(zic-deps)
+$(testdata)/America/New_York: northamerica $(objpfx)zic $(leapseconds) \
+			      yearistype
+	$(build-testdata)
+$(testdata)/Etc/UTC: etcetera $(objpfx)zic $(leapseconds) yearistype
+	$(build-testdata)
+$(testdata)/UTC: simplebackw $(objpfx)zic $(testdata)/Etc/UTC \
+		 $(leapseconds) yearistype
 	$(build-testdata)
-$(testdata)/Etc/UTC: etcetera $(zic-deps)
+$(testdata)/Europe/Berlin: europe $(objpfx)zic $(leapseconds) yearistype
 	$(build-testdata)
-# Use a pattern rule to indicate the command produces both targets at once.
-# Two separate targets built separately can collide if in parallel.
-%/UTC %/Universal: simplebackw $(zic-deps) %/Etc/UTC
+$(testdata)/Universal: simplebackw $(objpfx)zic $(testdata)/Etc/UTC \
+		       $(leapseconds) yearistype
 	$(build-testdata)
-$(testdata)/%/Berlin $(testdata)/%/London: europe $(zic-deps)
+$(testdata)/Australia/Melbourne: australasia $(objpfx)zic $(leapseconds) \
+				 yearistype
 	$(build-testdata)
-$(testdata)/Australia/Melbourne: australasia $(zic-deps)
+$(testdata)/America/Sao_Paulo: southamerica $(objpfx)zic $(leapseconds) \
+			       yearistype
 	$(build-testdata)
-$(testdata)/America/Sao_Paulo: southamerica $(zic-deps)
+$(testdata)/Asia/Tokyo: asia $(objpfx)zic $(leapseconds) yearistype
 	$(build-testdata)
-$(testdata)/Asia/Tokyo: asia $(zic-deps)
+$(testdata)/Europe/London: europe $(objpfx)zic $(leapseconds) yearistype
 	$(build-testdata)
 
 
diff --git a/timezone/africa b/timezone/africa
index 29625df934..e8223f78f5 100644
--- a/timezone/africa
+++ b/timezone/africa
@@ -1,11 +1,10 @@
-# @(#)africa	8.1
-# <pre>
+# @(#)africa	7.36
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert <eggert@twinsun.com> (1999-03-22):
 #
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (5th edition),
@@ -29,7 +28,7 @@
 #
 # Previous editions of this database used WAT, CAT, SAT, and EAT
 # for +0:00 through +3:00, respectively,
-# but Mark R V Murray reports that
+# but Mark R V Murray <markm@grondar.za> reports that
 # `SAST' is the official abbreviation for +2:00 in the country of South Africa,
 # `CAT' is commonly used for +2:00 in countries north of South Africa, and
 # `WAT' is probably the best name for +1:00, as the common phrase for
@@ -288,7 +287,7 @@ Zone	Africa/Maseru	1:50:00 -	LMT	1903 Mar
 			2:00	-	SAST
 
 # Liberia
-# From Paul Eggert (2001-07-17):
+# From Paul Eggert <eggert@twinsun.com> (2001-07-17):
 # In 1972 Liberia was the last country to switch
 # from a UTC offset that was not a multiple of 15 or 20 minutes.
 # Howse reports that it was in honor of their president's birthday.
@@ -318,7 +317,7 @@ Rule	Libya	1985	only	-	Apr	 6	0:00	1:00	S
 Rule	Libya	1986	only	-	Apr	 4	0:00	1:00	S
 Rule	Libya	1986	only	-	Oct	 3	0:00	0	-
 Rule	Libya	1987	1989	-	Apr	 1	0:00	1:00	S
-Rule	Libya	1987	1989	-	Oct	 1	0:00	0	-
+Rule	Libya	1987	1990	-	Oct	 1	0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Africa/Tripoli	0:52:44 -	LMT	1920
 			1:00	Libya	CE%sT	1959
@@ -349,6 +348,9 @@ Zone	Africa/Bamako	-0:32:00 -	LMT	1912
 			 0:00	-	GMT	1934 Feb 26
 			-1:00	-	WAT	1960 Jun 20
 			 0:00	-	GMT
+# no longer different from Bamako, but too famous to omit
+Zone	Africa/Timbuktu	-0:12:04 -	LMT	1912
+			 0:00	-	GMT
 
 # Mauritania
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -555,23 +557,6 @@ Zone	Africa/Lome	0:04:52 -	LMT	1893
 			0:00	-	GMT
 
 # Tunisia
-
-# From Gwillim Law (2005-04-30):
-#
-# My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
-# this time in Tunisia.  According to Yahoo France News
-# <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
-# and dated 2005-04-26, "Tunisia has decided to advance its official time by
-# one hour, starting on Sunday, May 1.  Henceforth, Tunisian time will be
-# UTC+2 instead of UTC+1.  The change will take place at 23:00 UTC next
-# Saturday."  (My translation)
-#
-# From Oscar van Vlijmen (2005-05-02):
-# LaPresse, the first national daily newspaper ...
-# <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
-# ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
-# 1h standard time.
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Tunisia	1939	only	-	Apr	15	23:00s	1:00	S
 Rule	Tunisia	1939	only	-	Nov	18	23:00s	0	-
@@ -594,8 +579,6 @@ Rule	Tunisia	1988	only	-	Jun	 1	 0:00s	1:00	S
 Rule	Tunisia	1988	1990	-	Sep	lastSun	 0:00s	0	-
 Rule	Tunisia	1989	only	-	Mar	26	 0:00s	1:00	S
 Rule	Tunisia	1990	only	-	May	 1	 0:00s	1:00	S
-Rule	Tunisia	2005	only	-	May	 1	 0:00s	1:00	S
-Rule	Tunisia	2005	only	-	Sep	30	 1:00s	0	-
 # Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
 # Shanks says the 1911 switch occurred on Mar 9; go with Howse's Mar 11.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
diff --git a/timezone/antarctica b/timezone/antarctica
index 8a9ea939c9..b5c12cbaee 100644
--- a/timezone/antarctica
+++ b/timezone/antarctica
@@ -1,5 +1,4 @@
-# @(#)antarctica	8.1
-# <pre>
+# @(#)antarctica	7.23
 
 # From Paul Eggert (1999-11-15):
 # To keep things manageable, we list only locations occupied year-round; see
@@ -60,7 +59,7 @@ Rule	ChileAQ	2000	max	-	Mar	Sun>=9	0:00	0	-
 # Australia - territories
 # Heard Island, McDonald Islands (uninhabited)
 #	previously sealers and scientific personnel wintered
-#	<a href="http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html">
+#	<a href="http://www.dstc.qut.edu.au/DST/marg/daylight.html">
 #	Margaret Turner reports
 #	</a> (1999-09-30) that they're UTC+5, with no DST;
 #	presumably this is when they have visitors.
@@ -91,23 +90,23 @@ Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
 # </a>
 
 # Brazil - year-round base
-# Comandante Ferraz, King George Island, -6205+05824, since 1983/4
+# Ferraz, King George Island, since 1983/4
 
 # Chile - year-round bases and towns
 # Escudero, South Shetland Is, -621157-0585735, since 1994
-# Presidente Eduadro Frei, King George Island, -6214-05848, since 1969-03-07
-# General Bernardo O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
-# Capitan Arturo Prat, -6230-05941
-# Villa Las Estrellas (a town), around the Frei base, since 1984-04-09
+# Frei, King George Island, -6214-05848, since 1969-03-07
+# O'Higgins, Antarctic Peninsula, -6319-05704, since 1948-02
+# Prat, -6230-05941
+# Villa Las Estrellas (a town), King George Island, since 1984-04-09
 # These locations have always used Santiago time; use TZ='America/Santiago'.
 
 # China - year-round bases
-# Great Wall, King George Island, -6213-05858, since 1985-02-20
-# Zhongshan, Larsemann Hills, Prydz Bay, -6922+07623, since 1989-02-26
+# Great Wall, King George Island, since 1985-02-20
+# Zhongshan, Larsemann Hills, Prydz Bay, since 1989-02-26
 
 # France - year-round bases
 #
-# From Antoine Leca (1997-01-20):
+# From Antoine Leca <Antoine.Leca@Renault.FR> (1997-01-20):
 # Time data are from Nicole Pailleau at the IFRTP
 # (French Institute for Polar Research and Technology).
 # She confirms that French Southern Territories and Terre Adelie bases
@@ -140,22 +139,25 @@ Zone Antarctica/DumontDUrville 0 -	zzz	1947
 			0	-	zzz	1956 Nov
 			10:00	-	DDUT	# Dumont-d'Urville Time
 # Reference:
-# <a href="http://en.wikipedia.org/wiki/Dumont_d'Urville_Station">
-# Dumont d'Urville Station (2005-12-05)
+# <a href="http://www.icair.iac.org.nz/science/reports/fr/IFRTP.html">
+# Support and Development of Polar Research and Technology (1997-02-03)
 # </a>
 
+
 # Germany - year-round base
-# Georg von Neumayer, -7039-00815
+# Georg von Neumayer
 
 # India - year-round base
-# Dakshin Gangotri, -7005+01200
+# Dakshin Gangotri
 
 # Japan - year-round bases
-# Dome Fuji, -7719+03942
-# Syowa, -690022+0393524
+# Dome Fuji
+# Syowa
 #
 # From Hideyuki Suzuki (1999-02-06):
-# In all Japanese stations, +0300 is used as the standard time.
+# In all Japanese stations, +0300 is used as the standard time.  [See]
+# <a href="http://www.crl.go.jp/uk/uk201/basyo.htm">[reference in Japanese]</a>
+# and information from KAMO Hiroyasu <wd@ics.nara-wu.ac.jp>.
 #
 # Syowa station, which is the first antarctic station of Japan,
 # was established on 1957-01-29.  Since Syowa station is still the main
@@ -169,7 +171,7 @@ Zone Antarctica/Syowa	0	-	zzz	1957 Jan 29
 # </a>
 
 # S Korea - year-round base
-# King Sejong, King George Island, -6213-05847, since 1988
+# King Sejong, King George Island, since 1988
 
 # New Zealand - claims
 # Balleny Islands (never inhabited)
@@ -200,8 +202,7 @@ Rule	NZAQ	1990	max	-	Mar	Sun>=15	2:00s	0	S
 # Russia - year-round bases
 # Bellingshausen, King George Island, -621159-0585337, since 1968-02-22
 # Mirny, Davis coast, -6633+09301, since 1956-02
-# Molodezhnaya, Alasheyev Bay, -6740+04551,
-#	year-round from 1962-02 to 1999-07-01
+# Molodezhnaya, Alasheyev Bay, year-round from 1962-02 to 1999-07-01
 # Novolazarevskaya, Queen Maud Land, -7046+01150,
 #	year-round from 1960/61 to 1992
 
@@ -233,8 +234,8 @@ Zone Antarctica/Vostok	0	-	zzz	1957 Dec 16
 			6:00	-	VOST	# Vostok time
 
 # S Africa - year-round bases
-# Marion Island, -4653+03752
-# Sanae, -7141-00250
+# Marion Island
+# Sanae
 
 # UK
 #
@@ -269,7 +270,7 @@ Zone Antarctica/Rothera	0	-	zzz	1976 Dec  1
 #
 # Palmer, Anvers Island, since 1965 (moved 2 miles in 1968)
 #
-# From Ethan Dicks (1996-10-06):
+# From Ethan Dicks <erd@mcmsun5.mcmurdo.gov> (1996-10-06):
 # It keeps the same time as Punta Arenas, Chile, because, just like us
 # and the South Pole, that's the other end of their supply line....
 # I verified with someone who was there that since 1980,
@@ -294,7 +295,7 @@ Zone Antarctica/McMurdo	0	-	zzz	1956
 # Normally it wouldn't have a separate entry, since it's like the
 # larger Antarctica/McMurdo since 1970, but it's too famous to omit.
 #
-# From Chris Carrier (1996-06-27):
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-27):
 # Siple, the first commander of the South Pole station,
 # stated that he would have liked to have kept GMT at the station,
 # but that he found it more convenient to keep GMT+12
diff --git a/timezone/asia b/timezone/asia
index 446cc16e6f..3c2c1a1868 100644
--- a/timezone/asia
+++ b/timezone/asia
@@ -1,11 +1,10 @@
-# @(#)asia	8.1
-# <pre>
+# @(#)asia	7.77
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert <eggert@twinsun.com> (1999-03-22):
 #
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (5th edition),
@@ -44,8 +43,8 @@
 #	8:00 CST	China
 #	9:00 CJT	Central Japanese Time (1896/1937)*
 #	9:00 EIT	east Indonesia
-#	9:00 JST  JDT	Japan
-#	9:00 KST  KDT	Korea
+#	9:00 JST	Japan
+#	9:00 KST	Korea
 #	9:30 CST	(Australian) Central Standard Time
 #
 # See the `europe' file for Russia and Turkey in Asia.
@@ -86,7 +85,7 @@ Zone	Asia/Kabul	4:36:48 -	LMT	1890
 # Shanks has Yerevan switching to 3:00 (with Russian DST) in spring 1991,
 # then to 4:00 with no DST in fall 1995, then readopting Russian DST in 1997.
 # Go with Shanks, even when he disagrees with others.  Edgar Der-Danieliantz
-# reported (1996-05-04) that Yerevan probably wouldn't use DST
+# <edd@AIC.NET> reported (1996-05-04) that Yerevan probably wouldn't use DST
 # in 1996, though it did use DST in 1995.  IATA SSIM (1991/1998) reports that
 # Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
 # but started switching at 3:00s in 1998.
@@ -100,18 +99,15 @@ Zone	Asia/Yerevan	2:58:00 -	LMT	1924 May  2
 			4:00 RussiaAsia	AM%sT
 
 # Azerbaijan
-# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
-# According to the resolution of Cabinet of Ministers, 1997
-# Resolution available at: http://aif.az/docs/daylight_res.pdf
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Azer	1997	max	-	Mar	lastSun	 4:00	1:00	S
-Rule	Azer	1997	max	-	Oct	lastSun	 5:00	0	-
+Rule	Azer	1997	max	-	Mar	lastSun	 1:00	1:00	S
+Rule	Azer	1997	max	-	Oct	lastSun	 1:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Baku	3:19:24 -	LMT	1924 May  2
 			3:00	-	BAKT	1957 Mar    # Baku Time
 			4:00 RussiaAsia BAK%sT	1991 Mar 31 2:00s
 			3:00	1:00	BAKST	1991 Aug 30 # independence
-			3:00 RussiaAsia	AZ%sT	1992 Sep lastSat 23:00
+			3:00 RussiaAsia	AZ%sT	1992 Sep lastSun 2:00s
 			4:00	-	AZT	1996 # Azerbaijan time
 			4:00	EUAsia	AZ%sT	1997
 			4:00	Azer	AZ%sT
@@ -141,12 +137,8 @@ Zone	Asia/Thimphu	5:58:36 -	LMT	1947 Aug 15 # or Thimbu
 # British Indian Ocean Territory
 # Whitman and the 1995 CIA time zone map say 5:00, but the
 # 1997 and later maps say 6:00.  Assume the switch occurred in 1996.
-# We have no information as to when standard time was introduced;
-# assume it occurred in 1907, the same year as Mauritius (which
-# then contained the Chagos Archipelago).
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Chagos	4:49:40	-	LMT	1907
-			5:00	-	IOT	1996 # BIOT Time
+Zone	Indian/Chagos	5:00	-	IOT	1996 # BIOT Time
 			6:00	-	IOT
 
 # Brunei
@@ -194,7 +186,7 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
 # CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
 # CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
 
-# From Paul Eggert (1995-12-19):
+# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
 # Shanks writes that China has had a single time zone since 1980 May 1,
 # observing summer DST from 1986 through 1991; this contradicts Devine's
 # note about Time magazine, though apparently _something_ happened in 1986.
@@ -205,6 +197,7 @@ Zone	Asia/Phnom_Penh	6:59:40 -	LMT	1906 Jun  9
 Rule	Shang	1940	only	-	Jun	 3	0:00	1:00	D
 Rule	Shang	1940	1941	-	Oct	 1	0:00	0	S
 Rule	Shang	1941	only	-	Mar	16	0:00	1:00	D
+Rule	PRC	1949	only	-	Jan	 1	0:00	0	S
 Rule	PRC	1986	only	-	May	 4	0:00	1:00	D
 Rule	PRC	1986	1991	-	Sep	Sun>=11	0:00	0	S
 Rule	PRC	1987	1991	-	Apr	Sun>=10	0:00	1:00	D
@@ -332,19 +325,19 @@ Zone	Asia/Nicosia	2:13:28 -	LMT	1921 Nov 14
 Link	Asia/Nicosia	Europe/Nicosia
 
 # Georgia
-# From Paul Eggert (1994-11-19):
+# From Paul Eggert <eggert@twinsun.com> (1994-11-19):
 # Today's _Economist_ (p 60) reports that Georgia moved its clocks forward
 # an hour recently, due to a law proposed by Zurab Murvanidze,
 # an MP who went on a hunger strike for 11 days to force discussion about it!
 # We have no details, but we'll guess they didn't move the clocks back in fall.
 #
-# From Mathew Englander, quoting AP (1996-10-23 13:05-04):
+# From Mathew Englander <mathew@io.org>, quoting AP (1996-10-23 13:05-04):
 # Instead of putting back clocks at the end of October, Georgia
 # will stay on daylight savings time this winter to save energy,
 # President Eduard Shevardnadze decreed Wednesday.
 #
 # From the BBC via Joseph S. Myers (2004-06-27):
-#
+#  	
 # Georgia moved closer to Western Europe on Sunday...  The former Soviet
 # republic has changed its time zone back to that of Moscow.  As a result it
 # is now just four hours ahead of Greenwich Mean Time, rather than five hours
@@ -352,17 +345,6 @@ Link	Asia/Nicosia	Europe/Nicosia
 # Mikhail Saakashvili, who said the change was partly prompted by the process
 # of integration into Europe.
 
-# From Teimuraz Abashidze (2005-11-07):
-# Government of Georgia ... decided to NOT CHANGE daylight savings time on
-# [Oct.] 30, as it was done before during last more than 10 years.
-# Currently, we are in fact GMT +4:00, as before 30 October it was GMT
-# +3:00.... The problem is, there is NO FORMAL LAW or governmental document
-# about it.  As far as I can find, I was told, that there is no document,
-# because we just DIDN'T ISSUE document about switching to winter time....
-# I don't know what can be done, especially knowing that some years ago our
-# DST rules where changed THREE TIMES during one month.
-
-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
 			2:59:16	-	TBMT	1924 May  2 # Tbilisi Mean Time
@@ -374,8 +356,7 @@ Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
 			4:00 E-EurAsia	GE%sT	1996 Oct lastSun
 			4:00	1:00	GEST	1997 Mar lastSun
 			4:00 E-EurAsia	GE%sT	2004 Jun 27
-			3:00 RussiaAsia	GE%sT	2005 Mar lastSun 2:00
-			4:00	-	GET
+			3:00 RussiaAsia	GE%sT
 
 # East Timor
 
@@ -402,11 +383,11 @@ Zone	Asia/Tbilisi	2:59:16 -	LMT	1880
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dili	8:22:20 -	LMT	1912
-			8:00	-	TLT	1942 Feb 21 23:00 # E Timor Time
+			8:00	-	TPT	1942 Feb 21 23:00 # E Timor Time
 			9:00	-	JST	1945 Aug
-			9:00	-	TLT	1976 May  3
+			9:00	-	TPT	1976 May  3
 			8:00	-	CIT	2000 Sep 17 00:00
-			9:00	-	TLT
+			9:00	-	TPT
 
 # India
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -491,33 +472,12 @@ Zone Asia/Jayapura	9:22:48 -	LMT	1932 Nov
 # Thursday night of Shahrivar, but I can't give exact dates....
 # I have also changed the abbreviations to what is considered correct
 # here in Iran, IRST for regular time and IRDT for daylight saving time.
-#
-# From Roozbeh Pournader (2005-04-05):
-# The text of the Iranian law, in effect since 1925, clearly mentions
-# that the true solar year is the measure, and there is no arithmetic
-# leap year calculation involved.  There has never been any serious
-# plan to change that law....
-#
-# From Paul Eggert (2005-04-05):
+
+# From Paul Eggert (2003-03-15)
 # Go with Shanks before September 1991, and with Pournader thereafter.
-# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,
-# stopping after 2037 when 32-bit time_t's overflow.
-# That cal-persia used Birashk's approximation, which disagrees with the solar
-# calendar predictions for the year 2025, so I corrected those dates by hand.
-#
-# From Oscar van Vlijmen (2005-03-30), writing about future
-# discrepancies between cal-persia and the Iranian calendar:
-# For 2091 solar-longitude-after yields 2091-03-20 08:40:07.7 UT for
-# the vernal equinox and that gets so close to 12:00 some local
-# Iranian time that the definition of the correct location needs to be
-# known exactly, amongst other factors.  2157 is even closer:
-# 2157-03-20 08:37:15.5 UT.  But the Gregorian year 2025 should give
-# no interpretation problem whatsoever.  By the way, another instant
-# in the near future where there will be a discrepancy between
-# arithmetical and astronomical Iranian calendars will be in 2058:
-# vernal equinox on 2058-03-20 09:03:05.9 UT.  The Java version of
-# Reingold's/Dershowitz' calculator gives correctly the Gregorian date
-# 2058-03-21 for 1 Farvardin 1437 (astronomical).
+# I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates.
+# The Persian calendar is based on the sun, and dates after around 2050
+# are approximate; stop after 2037 when 32-bit time_t's overflow.
 #
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Iran	1978	1980	-	Mar	21	0:00	1:00	D
@@ -555,10 +515,10 @@ Rule	Iran	2020	only	-	Mar	21	0:00	1:00	D
 Rule	Iran	2020	only	-	Sep	21	0:00	0	S
 Rule	Iran	2021	2023	-	Mar	22	0:00	1:00	D
 Rule	Iran	2021	2023	-	Sep	22	0:00	0	S
-Rule	Iran	2024	only	-	Mar	21	0:00	1:00	D
-Rule	Iran	2024	only	-	Sep	21	0:00	0	S
-Rule	Iran	2025	2027	-	Mar	22	0:00	1:00	D
-Rule	Iran	2025	2027	-	Sep	22	0:00	0	S
+Rule	Iran	2024	2025	-	Mar	21	0:00	1:00	D
+Rule	Iran	2024	2025	-	Sep	21	0:00	0	S
+Rule	Iran	2026	2027	-	Mar	22	0:00	1:00	D
+Rule	Iran	2026	2027	-	Sep	22	0:00	0	S
 Rule	Iran	2028	2029	-	Mar	21	0:00	1:00	D
 Rule	Iran	2028	2029	-	Sep	21	0:00	0	S
 Rule	Iran	2030	2031	-	Mar	22	0:00	1:00	D
@@ -579,7 +539,7 @@ Zone	Asia/Tehran	3:25:44	-	LMT	1916
 
 # Iraq
 #
-# From Jonathan Lennox (2000-06-12):
+# From Jonathan Lennox <lennox@cs.columbia.edu> (2000-06-12):
 # An article in this week's Economist ("Inside the Saddam-free zone", p. 50 in
 # the U.S. edition) on the Iraqi Kurds contains a paragraph:
 # "The three northern provinces ... switched their clocks this spring and
@@ -678,9 +638,8 @@ Rule	Zion	1987	only	-	Sep	13	0:00	0	S
 Rule	Zion	1988	only	-	Apr	 9	0:00	1:00	D
 Rule	Zion	1988	only	-	Sep	 3	0:00	0	S
 
-# From Ephraim Silverberg
-# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
-# and 2005-02-17):
+# From Ephraim Silverberg <ephraim@cs.huji.ac.il>
+# (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17 and 2000-07-25):
 
 # According to the Office of the Secretary General of the Ministry of
 # Interior, there is NO set rule for Daylight-Savings/Standard time changes.
@@ -731,13 +690,13 @@ Rule	Zion	1995	only	-	Sep	 3	0:00	0	S
 # time, Haim Ramon.  The official announcement regarding 1996-1998
 # (with the dates for 1997-1998 no longer being relevant) can be viewed at:
 #
-#   ftp://ftp.cs.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz
+#   ftp://ftp.huji.ac.il/pub/tz/announcements/1996-1998.ramon.ps.gz
 #
 # The dates for 1997-1998 were altered by his successor, Rabbi Eli Suissa.
 #
 # The official announcements for the years 1997-1999 can be viewed at:
 #
-#   ftp://ftp.cs.huji.ac.il/pub/tz/announcements/YYYY.ps.gz
+#   ftp://ftp.huji.ac.il/pub/tz/announcements/YYYY.ps.gz
 #
 #       where YYYY is the relevant year.
 
@@ -757,12 +716,12 @@ Rule	Zion	1999	only	-	Sep	 3	2:00	0	S
 #
 # The official announcement for the start date of 2000 can be viewed at:
 #
-#	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-start.ps.gz
+#	ftp://ftp.huji.ac.il/pub/tz/announcements/2000-start.ps.gz
 #
 # The official announcement for the end date of 2000 and the dates
 # for the years 2001-2004 can be viewed at:
 #
-#	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz
+#	ftp://ftp.huji.ac.il/pub/tz/announcements/2000-2004.ps.gz
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Zion	2000	only	-	Apr	14	2:00	1:00	D
@@ -776,80 +735,52 @@ Rule	Zion	2003	only	-	Oct	 3	1:00	0	S
 Rule	Zion	2004	only	-	Apr	 7	1:00	1:00	D
 Rule	Zion	2004	only	-	Sep	22	1:00	0	S
 
-# The proposed law agreed upon by the Knesset Interior Committee on
-# 2005-02-14 is that, for 2005 and beyond, DST starts at 02:00 the
-# last Friday before April 2nd (i.e. the last Friday in March or April
-# 1st itself if it falls on a Friday) and ends at 02:00 on the Saturday
-# night _before_ the fast of Yom Kippur.
-#
-# Those who can read Hebrew can view the announcement at:
-#
-#	ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
-
-# From Paul Eggert (2005-02-22):
-# I used Ephraim Silverberg's dst-israel.el program
-# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20)
-# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
-# to generate the transitions in this list.
-# (I replaced "lastFri" with "Fri>=26" by hand.)
-# The spring transitions below all correspond to the following Rule:
-#
-# Rule	Zion	2005	max	-	Mar	Fri>=26	2:00	1:00	D
-#
-# but older zic implementations (e.g., Solaris 8) do not support
-# "Fri>=26" to mean April 1 in years like 2005, so for now we list the
-# springtime transitions explicitly.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Zion	2005	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2005	only	-	Oct	 9	2:00	0	S
-Rule	Zion	2006	2010	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2006	only	-	Oct	 1	2:00	0	S
-Rule	Zion	2007	only	-	Sep	16	2:00	0	S
-Rule	Zion	2008	only	-	Oct	 5	2:00	0	S
-Rule	Zion	2009	only	-	Sep	27	2:00	0	S
-Rule	Zion	2010	only	-	Sep	12	2:00	0	S
-Rule	Zion	2011	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2011	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2012	2015	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2012	only	-	Sep	23	2:00	0	S
-Rule	Zion	2013	only	-	Sep	 8	2:00	0	S
-Rule	Zion	2014	only	-	Sep	28	2:00	0	S
-Rule	Zion	2015	only	-	Sep	20	2:00	0	S
-Rule	Zion	2016	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2016	only	-	Oct	 9	2:00	0	S
-Rule	Zion	2017	2021	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2017	only	-	Sep	24	2:00	0	S
-Rule	Zion	2018	only	-	Sep	16	2:00	0	S
-Rule	Zion	2019	only	-	Oct	 6	2:00	0	S
-Rule	Zion	2020	only	-	Sep	27	2:00	0	S
-Rule	Zion	2021	only	-	Sep	12	2:00	0	S
-Rule	Zion	2022	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2022	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2023	2032	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2023	only	-	Sep	24	2:00	0	S
-Rule	Zion	2024	only	-	Oct	 6	2:00	0	S
-Rule	Zion	2025	only	-	Sep	28	2:00	0	S
-Rule	Zion	2026	only	-	Sep	20	2:00	0	S
-Rule	Zion	2027	only	-	Oct	10	2:00	0	S
-Rule	Zion	2028	only	-	Sep	24	2:00	0	S
-Rule	Zion	2029	only	-	Sep	16	2:00	0	S
-Rule	Zion	2030	only	-	Oct	 6	2:00	0	S
-Rule	Zion	2031	only	-	Sep	21	2:00	0	S
-Rule	Zion	2032	only	-	Sep	12	2:00	0	S
-Rule	Zion	2033	only	-	Apr	 1	2:00	1:00	D
-Rule	Zion	2033	only	-	Oct	 2	2:00	0	S
-Rule	Zion	2034	2037	-	Mar	Fri>=26	2:00	1:00	D
-Rule	Zion	2034	only	-	Sep	17	2:00	0	S
-Rule	Zion	2035	only	-	Oct	 7	2:00	0	S
-Rule	Zion	2036	only	-	Sep	28	2:00	0	S
-Rule	Zion	2037	only	-	Sep	13	2:00	0	S
+# From Paul Eggert (2000-07-25):
+# Here are guesses for rules after 2004.
+# They are probably wrong, but they are more likely than no DST at all.
+# Rule	NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
+Rule	Zion	2005	max	-	Apr	 1	1:00	1:00	D
+Rule	Zion	2005	max	-	Oct	 1	1:00	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
 			2:20:40	-	JMT	1918	# Jerusalem Mean Time?
 			2:00	Zion	I%sT
 
+# From Ephraim Silverberg (2003-03-23):
+#
+# Minister of Interior Poraz has announced that he will respect the law
+# passed in July 2000 (proposed at the time jointly by himself and
+# then-MK David Azulai [Shas]) fixing the dates for 2000-2004.  Hence,
+# the dates for 2003 and 2004 remain unchanged....
+#
+# As far as 2005 and beyond, no dates have been set.  However, the
+# minister has mentioned that he wishes to propose to move Israel's
+# timezone in 2005 from GMT+2 to GMT+3 and upon that have DST during
+# the summer months (i.e. GMT+4).  However, no legislation in this
+# direction is expected until the latter part of 2004 which is a long
+# time off in terms of Israeli politics.
+
+# (2004-09-20):
+# The latest rumour, however, is that in 2005, when the clock changes to
+# Daylight Saving Time (date as yet unknown), the move will be a two-hour leap
+# forward (from UTC+0200 to UTC+0400) and then, in the fall, the clock will
+# move back only an hour to UTC+0300 thus effectively moving Israel's timezone
+# from UTC+0200 to UTC+0300.  However, no actual draft has been put before the
+# Knesset (Israel's Parliament) though the intention is to do so this
+# month [2004-09].
+
+# (2004-09-26):
+# Even though the draft law for the above did pass the Ministerial Committee
+# for Legislative Matters three months ago, it was voted down in today's
+# Cabinet meeting.  The current suggestion is to keep the current timezone at
+# UTC+0200 but have an extended period of Daylight Saving Time (UTC+0300) from
+# the beginning of Passover holiday in the spring to after the Tabernacle
+# holiday in the fall (i.e. the dates of which are governed by the Hebrew
+# calendar but this means at least 184 days of DST).  However, this is only a
+# suggestion that was raised in today's cabinet meeting and has not yet been
+# drafted.
+
 
 
 ###############################################################################
@@ -858,32 +789,18 @@ Zone	Asia/Jerusalem	2:20:56 -	LMT	1880
 
 # `9:00' and `JST' is from Guy Harris.
 
-# From Paul Eggert (1995-03-06):
+# From Paul Eggert <eggert@twinsun.com> (1995-03-06):
 # Today's _Asahi Evening News_ (page 4) reports that Japan had
 # daylight saving between 1948 and 1951, but ``the system was discontinued
 # because the public believed it would lead to longer working hours.''
-
-# From Mayumi Negishi in the 2005-08-10 Japan Times
-# <http://www.japantimes.co.jp/cgi-bin/getarticle.pl5?nn20050810f2.htm>:
-# Occupation authorities imposed daylight-saving time on Japan on
-# [1948-05-01]....  But lack of prior debate and the execution of
-# daylight-saving time just three days after the bill was passed generated
-# deep hatred of the concept....  The Diet unceremoniously passed a bill to
-# dump the unpopular system in October 1951, less than a month after the San
-# Francisco Peace Treaty was signed.  (A government poll in 1951 showed 53%
-# of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
-# wanted to keep it.)
-
 # Shanks writes that daylight saving in Japan during those years was as follows:
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Japan	1948	only	-	May	Sun>=1	2:00	1:00	D
-Rule	Japan	1948	1951	-	Sep	Sat>=8	2:00	0	S
-Rule	Japan	1949	only	-	Apr	Sun>=1	2:00	1:00	D
-Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
-# but the only locations using it (for birth certificates, presumably, since
-# Shanks's audience is astrologers) were US military bases.  For now, assume
-# that for most purposes daylight-saving time was observed; otherwise, what
-# would have been the point of the 1951 poll?
+#Rule	Japan	1948	only	-	May	Sun>=1	2:00	1:00	D
+#Rule	Japan	1948	1951	-	Sep	Sat>=8	2:00	0	S
+#Rule	Japan	1949	only	-	Apr	Sun>=1	2:00	1:00	D
+#Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
+# but the only locations using it were US military bases.
+# We go with Shanks and omit daylight saving in those years for Asia/Tokyo.
 
 # From Hideyuki Suzuki (1998-11-09):
 # 'Tokyo' usually stands for the former location of Tokyo Astronomical
@@ -913,7 +830,7 @@ Rule	Japan	1950	1951	-	May	Sun>=1	2:00	1:00	D
 Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
 			9:00	-	JST	1896
 			9:00	-	CJT	1938
-			9:00	Japan	J%sT
+			9:00	-	JST
 # Since 1938, all Japanese possessions have been like Asia/Tokyo.
 
 # Jordan
@@ -931,13 +848,6 @@ Zone	Asia/Tokyo	9:18:59	-	LMT	1887 Dec 31 15:00u
 # The decision was taken because of the increase in working hours in
 # government's departments from six to seven hours.
 #
-# From Paul Eggert (2005-11-22):
-# Starting 2003 transitions are from Steffen Thorsen's web site timeanddate.com.
-#
-# From Steffen Thorsen (2005-11-23):
-# For Jordan I have received multiple independent user reports every year
-# about DST end dates, as the end-rule is different every year.
-#
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Jordan	1973	only	-	Jun	6	0:00	1:00	S
 Rule	Jordan	1973	1975	-	Oct	1	0:00	0	-
@@ -960,25 +870,20 @@ Rule	Jordan	1993	1998	-	Apr	Fri>=1	0:00	1:00	S
 Rule	Jordan	1994	only	-	Sep	Fri>=15	0:00	0	-
 Rule	Jordan	1995	1998	-	Sep	Fri>=15	0:00s	0	-
 Rule	Jordan	1999	only	-	Jul	 1	0:00s	1:00	S
-Rule	Jordan	1999	2002	-	Sep	lastThu	0:00s	0	-
+Rule	Jordan	1999	max	-	Sep	lastThu	0:00s	0	-
 Rule	Jordan	2000	max	-	Mar	lastThu	0:00s	1:00	S
-Rule	Jordan	2003	only	-	Oct	24	0:00s	0	-
-Rule	Jordan	2004	only	-	Oct	15	0:00s	0	-
-Rule	Jordan	2005	max	-	Sep	lastFri	0:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Amman	2:23:44 -	LMT	1931
 			2:00	Jordan	EE%sT
 
-
 # Kazakhstan
-
 # From Paul Eggert (1996-11-22):
-# Andrew Evtichov (1996-04-13) writes that Kazakhstan
+# Andrew Evtichov <evti@chevron.com> (1996-04-13) writes that Kazakhstan
 # stayed in sync with Moscow after 1990, and that Aqtobe (formerly Aktyubinsk)
 # and Aqtau (formerly Shevchenko) are the largest cities in their zones.
 # Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time
 # IATA SSIM mentions a third time zone in Kazakhstan.
-
+#
 # From Paul Eggert (2001-10-18):
 # German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses
 # RussiaAsia rules, instead of switching at 00:00 as the IATA has it.
@@ -988,24 +893,7 @@ Zone	Asia/Amman	2:23:44 -	LMT	1931
 # - Kazakhstan did not observe DST in 1991.
 # - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
 # - Oral switched from +5:00 to +4:00 in spring 1989.
-
-# <a href="http://www.kazsociety.org.uk/news/2005/03/30.htm">
-# From Kazakhstan Embassy's News Bulletin #11 (2005-03-21):
-# </a>
-# The Government of Kazakhstan passed a resolution March 15 abolishing
-# daylight saving time citing lack of economic benefits and health
-# complications coupled with a decrease in productivity.
 #
-# From Branislav Kojic (in Astana) via Gwillim Law (2005-06-28):
-# ... what happened was that the former Kazakhstan Eastern time zone
-# was "blended" with the Central zone.  Therefore, Kazakhstan now has
-# two time zones, and difference between them is one hour.  The zone
-# closer to UTC is the former Western zone (probably still called the
-# same), encompassing four provinces in the west: Aqtobe, Atyrau,
-# Mangghystau, and West Kazakhstan.  The other zone encompasses
-# everything else....  I guess that would make Kazakhstan time zones
-# de jure UTC+5 and UTC+6 respectively.
-
 #
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 #
@@ -1014,8 +902,7 @@ Zone	Asia/Almaty	5:07:48 -	LMT	1924 May  2 # or Alma-Ata
 			5:00	-	ALMT	1930 Jun 21 # Alma-Ata Time
 			6:00 RussiaAsia ALM%sT	1991
 			6:00	-	ALMT	1992
-			6:00 RussiaAsia	ALM%sT	2005 Mar 15
-			6:00	-	ALMT
+			6:00 RussiaAsia	ALM%sT
 # Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.)
 Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 May  2
 			4:00	-	KIZT	1930 Jun 21 # Kizilorda Time
@@ -1025,8 +912,7 @@ Zone	Asia/Qyzylorda	4:21:52 -	LMT	1924 May  2
 			5:00 RussiaAsia	KIZ%sT	1991
 			5:00	-	KIZT	1991 Dec 16 # independence
 			5:00	-	QYZT	1992 Jan 19 2:00
-			6:00 RussiaAsia	QYZ%sT	2005 Mar 15
-			6:00	-	QYZT
+			6:00 RussiaAsia	QYZ%sT
 # Aqtobe (aka Aktobe, formerly Akt'ubinsk)
 Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
 			4:00	-	AKTT	1930 Jun 21 # Aktyubinsk Time
@@ -1035,8 +921,7 @@ Zone	Asia/Aqtobe	3:48:40	-	LMT	1924 May  2
 			6:00	-	AKTT	1982 Apr  1
 			5:00 RussiaAsia	AKT%sT	1991
 			5:00	-	AKTT	1991 Dec 16 # independence
-			5:00 RussiaAsia	AQT%sT	2005 Mar 15 # Aqtobe Time
-			5:00	-	AQTT
+			5:00 RussiaAsia	AQT%sT	# Aqtobe Time
 # Mangghystau
 # Aqtau was not founded until 1963, but it represents an inhabited region,
 # so include time stamps before 1963.
@@ -1048,8 +933,7 @@ Zone	Asia/Aqtau	3:21:04	-	LMT	1924 May  2
 			5:00 RussiaAsia	SHE%sT	1991
 			5:00	-	SHET	1991 Dec 16 # independence
 			5:00 RussiaAsia	AQT%sT	1995 Mar lastSun 2:00 # Aqtau Time
-			4:00 RussiaAsia	AQT%sT	2005 Mar 15
-			5:00	-	AQTT
+			4:00 RussiaAsia	AQT%sT
 # West Kazakhstan
 Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
 			4:00	-	URAT	1930 Jun 21 # Ural'sk time
@@ -1059,33 +943,21 @@ Zone	Asia/Oral	3:25:24	-	LMT	1924 May  2 # or Ural'sk
 			5:00 RussiaAsia	URA%sT	1989 Mar 26 2:00
 			4:00 RussiaAsia	URA%sT	1991
 			4:00	-	URAT	1991 Dec 16 # independence
-			4:00 RussiaAsia	ORA%sT	2005 Mar 15 # Oral Time
-			5:00	-	ORAT
+			4:00 RussiaAsia	ORA%sT	# Oral Time
 
 # Kyrgyzstan (Kirgizstan)
 # Transitions through 1991 are from Shanks.
-
-# From Paul Eggert (2005-08-15):
-# According to an article dated today in the Kyrgyzstan Development Gateway
-# <http://eng.gateway.kg/cgi-bin/page.pl?id=1&story_name=doc9979.shtml>
-# Kyrgyzstan is canceling the daylight saving time system.  I take the article
-# to mean that they will leave their clocks at 6 hours ahead of UTC.
-# From Malik Abdugaliev (2005-09-21):
-# Our government cancels daylight saving time 6th of August 2005.
-# From 2005-08-12 our GMT-offset is +6, w/o any daylight saving.
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Kyrgyz	1992	1996	-	Apr	Sun>=7	0:00s	1:00	S
-Rule	Kyrgyz	1992	1996	-	Sep	lastSun	0:00	0	-
-Rule	Kyrgyz	1997	2005	-	Mar	lastSun	2:30	1:00	S
-Rule	Kyrgyz	1997	2004	-	Oct	lastSun	2:30	0	-
+Rule	Kirgiz	1992	1996	-	Apr	Sun>=7	0:00s	1:00	S
+Rule	Kirgiz	1992	1996	-	Sep	lastSun	0:00	0	-
+Rule	Kirgiz	1997	max	-	Mar	lastSun	2:30	1:00	S
+Rule	Kirgiz	1997	max	-	Oct	lastSun	2:30	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Bishkek	4:58:24 -	LMT	1924 May  2
 			5:00	-	FRUT	1930 Jun 21 # Frunze Time
 			6:00 RussiaAsia FRU%sT	1991 Mar 31 2:00s
 			5:00	1:00	FRUST	1991 Aug 31 2:00 # independence
-			5:00	Kyrgyz	KG%sT	2005 Aug 12    # Kyrgyzstan Time
-			6:00	-	KGT
+			5:00	Kirgiz	KG%sT		    # Kirgizstan Time
 
 ###############################################################################
 
@@ -1244,7 +1116,7 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
 #
 # [The province of Selenge is omitted from the above lists.]
 
-# From Ganbold Ts., Ulaanbaatar (2004-04-17):
+# From Ganbold Ts., Ulaanbaatar <ganbold@micom.mng.net> (2004-04-17):
 # Daylight saving occurs at 02:00 local time last Saturday of March.
 # It will change back to normal at 02:00 local time last Saturday of
 # September.... As I remember this rule was changed in 2001.
@@ -1253,24 +1125,6 @@ Zone	Indian/Maldives	4:54:00 -	LMT	1880	# Male
 # For now, assume Rives McDow's informant got confused about Friday vs
 # Saturday, and that his 2001 dates should have 1 added to them.
 
-# From Paul Eggert (2005-07-26):
-# We have wildly conflicting information about Mongolia's time zones.
-# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
-# there is only one time zone and that DST is observed, citing Microsoft
-# Windows XP as the source.  Risto Nykanen (2005-05-16) reports that
-# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
-# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
-# Washington, DC says there are two time zones, with DST observed.
-# He also found
-# <http://ubpost.mongolnews.mn/index.php?subaction=showcomments&id=1111634894&archive=&start_from=&ucat=1&>
-# which also says that there is DST, and which has a comment by "Toddius"
-# (2005-03-31 06:05 +0700) saying "Mongolia actually has 3.5 time zones.
-# The West (OLGII) is +7 GMT, most of the country is ULAT is +8 GMT
-# and some Eastern provinces are +9 GMT but Sukhbaatar Aimag is SUHK +8.5 GMT.
-# The SUKH timezone is new this year, it is one of the few things the
-# parliament passed during the tumultuous winter session."
-# For now, let's ignore this information, until we have more confirmation.
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Mongol	1983	1984	-	Apr	1	0:00	1:00	S
 Rule	Mongol	1983	only	-	Oct	1	0:00	0	-
@@ -1362,7 +1216,7 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 
 # Palestine
 
-# From Amos Shapir (1998-02-15):
+# From Amos Shapir <amos@nsof.co.il> (1998-02-15):
 #
 # From 1917 until 1948-05-15, all of Palestine, including the parts now
 # known as the Gaza Strip and the West Bank, was under British rule.
@@ -1434,15 +1288,6 @@ Zone	Asia/Karachi	4:28:12 -	LMT	1907
 # For now, let's assume that the spring switch was at 24:00,
 # and that they switch at 0:00 on the 3rd Fridays of April and October.
 
-# From Paul Eggert (2005-11-22):
-# Starting 2004 transitions are from Steffen Thorsen's web site timeanddate.com.
-
-# From Steffen Thorsen (2005-11-23):
-# A user from Gaza reported that Gaza made the change early because of
-# the Ramadan.  Next year Ramadan will be even earlier, so I think
-# there is a good chance next year's end date will be around two weeks
-# earlier--the same goes for Jordan.
-
 # The rules for Egypt are stolen from the `africa' file.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule EgyptAsia	1957	only	-	May	10	0:00	1:00	S
@@ -1453,9 +1298,7 @@ Rule EgyptAsia	1959	1965	-	Sep	30	3:00	0	-
 Rule EgyptAsia	1966	only	-	Oct	 1	3:00	0	-
 
 Rule Palestine	1999	max	-	Apr	Fri>=15	0:00	1:00	S
-Rule Palestine	1999	2003	-	Oct	Fri>=15	0:00	0	-
-Rule Palestine	2004	only	-	Oct	 1	1:00	0	-
-Rule Palestine	2005	max	-	Oct	 4	2:00	0	-
+Rule Palestine	1999	max	-	Oct	Fri>=15	0:00	0	-
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Gaza	2:17:52	-	LMT	1900 Oct
@@ -1635,7 +1478,7 @@ Zone	Asia/Tashkent	4:37:12 -	LMT	1924 May  2
 			5:00	-	UZT
 
 # Vietnam
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
 # Saigon's official name is Thanh-Pho Ho Chi Minh, but it's too long.
 # We'll stick with the traditional name for now.
 # From Shanks:
diff --git a/timezone/australasia b/timezone/australasia
index 70b845560e..d8a8e36d53 100644
--- a/timezone/australasia
+++ b/timezone/australasia
@@ -1,6 +1,4 @@
-# @(#)australasia	8.1
-# <pre>
-
+# @(#)australasia	7.69
 # This file also includes Pacific islands.
 
 # Notes are at the end of this file
@@ -40,7 +38,7 @@ Zone Australia/Perth	 7:43:24 -	LMT	1895 Dec
 			 8:00	-	WST
 # Queensland
 #
-# From Alex Livingston (1996-11-01):
+# From Alex Livingston <alex@agsm.unsw.edu.au> (1996-11-01):
 # I have heard or read more than once that some resort islands off the coast
 # of Queensland chose to keep observing daylight-saving time even after
 # Queensland ceased to.
@@ -79,9 +77,7 @@ Rule	AS	1991	only	-	Mar	Sun>=1	2:00s	0	-
 Rule	AS	1992	only	-	Mar	Sun>=18	2:00s	0	-
 Rule	AS	1993	only	-	Mar	Sun>=1	2:00s	0	-
 Rule	AS	1994	only	-	Mar	Sun>=18	2:00s	0	-
-Rule	AS	1995	2005	-	Mar	lastSun	2:00s	0	-
-Rule	AS	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AS	2007	max	-	Mar	lastSun	2:00s	0	-
+Rule	AS	1995	max	-	Mar	lastSun	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
 			9:00	-	CST	1899 May
@@ -89,11 +85,6 @@ Zone Australia/Adelaide	9:14:20 -	LMT	1895 Feb
 			9:30	AS	CST
 
 # Tasmania
-#
-# From Paul Eggert (2005-08-16):
-# <http://www.bom.gov.au/climate/averages/tables/dst_times.shtml>
-# says King Island didn't observe DST from WWII until late 1971.
-#
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	AT	1967	only	-	Oct	Sun>=1	2:00s	1:00	-
 Rule	AT	1968	only	-	Mar	lastSun	2:00s	0	-
@@ -108,22 +99,15 @@ Rule	AT	1987	1990	-	Mar	Sun>=15	2:00s	0	-
 Rule	AT	1987	only	-	Oct	Sun>=22	2:00s	1:00	-
 Rule	AT	1988	1990	-	Oct	lastSun	2:00s	1:00	-
 Rule	AT	1991	1999	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	1991	2005	-	Mar	lastSun	2:00s	0	-
+Rule	AT	1991	max	-	Mar	lastSun	2:00s	0	-
 Rule	AT	2000	only	-	Aug	lastSun	2:00s	1:00	-
 Rule	AT	2001	max	-	Oct	Sun>=1	2:00s	1:00	-
-Rule	AT	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AT	2007	max	-	Mar	lastSun	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Hobart	9:49:16	-	LMT	1895 Sep
 			10:00	-	EST	1916 Oct 1 2:00
 			10:00	1:00	EST	1917 Feb
 			10:00	Aus	EST	1967
 			10:00	AT	EST
-Zone Australia/Currie	9:35:28	-	LMT	1895 Sep
-			10:00	-	EST	1916 Oct 1 2:00
-			10:00	1:00	EST	1917 Feb
-			10:00	Aus	EST	1971 Jul
-			10:00	AT	EST
 
 # Victoria
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -134,11 +118,9 @@ Rule	AV	1986	1990	-	Mar	Sun>=15	2:00s	0	-
 Rule	AV	1986	1987	-	Oct	Sun>=15	2:00s	1:00	-
 Rule	AV	1988	1999	-	Oct	lastSun	2:00s	1:00	-
 Rule	AV	1991	1994	-	Mar	Sun>=1	2:00s	0	-
-Rule	AV	1995	2005	-	Mar	lastSun	2:00s	0	-
+Rule	AV	1995	max	-	Mar	lastSun	2:00s	0	-
 Rule	AV	2000	only	-	Aug	lastSun	2:00s	1:00	-
 Rule	AV	2001	max	-	Oct	lastSun	2:00s	1:00	-
-Rule	AV	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AV	2007	max	-	Mar	lastSun	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Melbourne 9:39:52 -	LMT	1895 Feb
 			10:00	Aus	EST	1971
@@ -155,11 +137,9 @@ Rule	AN	1986	1989	-	Mar	Sun>=15	2:00s	0	-
 Rule	AN	1986	only	-	Oct	19	2:00s	1:00	-
 Rule	AN	1987	1999	-	Oct	lastSun	2:00s	1:00	-
 Rule	AN	1990	1995	-	Mar	Sun>=1	2:00s	0	-
-Rule	AN	1996	2005	-	Mar	lastSun	2:00s	0	-
+Rule	AN	1996	max	-	Mar	lastSun	2:00s	0	-
 Rule	AN	2000	only	-	Aug	lastSun	2:00s	1:00	-
 Rule	AN	2001	max	-	Oct	lastSun	2:00s	1:00	-
-Rule	AN	2006	only	-	Apr	Sun>=1	2:00s	0	-
-Rule	AN	2007	max	-	Mar	lastSun	2:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Australia/Sydney	10:04:52 -	LMT	1895 Feb
 			10:00	Aus	EST	1971
@@ -180,11 +160,9 @@ Rule	LH	1986	1989	-	Mar	Sun>=15	2:00	0	-
 Rule	LH	1986	only	-	Oct	19	2:00	0:30	-
 Rule	LH	1987	1999	-	Oct	lastSun	2:00	0:30	-
 Rule	LH	1990	1995	-	Mar	Sun>=1	2:00	0	-
-Rule	LH	1996	2005	-	Mar	lastSun	2:00	0	-
+Rule	LH	1996	max	-	Mar	lastSun	2:00	0	-
 Rule	LH	2000	only	-	Aug	lastSun	2:00	0:30	-
 Rule	LH	2001	max	-	Oct	lastSun	2:00	0:30	-
-Rule	LH	2006	only	-	Apr	Sun>=1	2:00	0	-
-Rule	LH	2007	max	-	Mar	lastSun	2:00	0	-
 Zone Australia/Lord_Howe 10:36:20 -	LMT	1895 Feb
 			10:00	-	EST	1981 Mar
 			10:30	LH	LHST
@@ -221,11 +199,9 @@ Zone Pacific/Rarotonga	-10:39:04 -	LMT	1901		# Avarua
 			-10:00	Cook	CK%sT
 
 # Cocos
-# These islands were ruled by the Ross family from about 1830 to 1978.
-# We don't know when standard time was introduced; for now, we guess 1900.
+# From USNO (1989):
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	Indian/Cocos	6:27:40	-	LMT	1900
-			6:30	-	CCT	# Cocos Islands Time
+Zone	Indian/Cocos	6:30	-	CCT	# Cocos Islands Time
 
 # Fiji
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -286,6 +262,9 @@ Zone Pacific/Kwajalein	11:09:20 -	LMT	1901
 
 # Micronesia
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
+Zone Pacific/Yap	9:12:32	-	LMT	1901		# Colonia
+			9:00	-	YAPT	1969 Oct	# Yap Time
+			10:00	-	YAPT
 Zone Pacific/Truk	10:07:08 -	LMT	1901
 			10:00	-	TRUT			# Truk Time
 Zone Pacific/Ponape	10:32:52 -	LMT	1901		# Kolonia
@@ -402,11 +381,11 @@ Zone Pacific/Pago_Pago	 12:37:12 -	LMT	1879 Jul  5
 			-11:00	-	BST	1983 Nov 30	# B=Bering
 			-11:00	-	SST			# S=Samoa
 
-# Samoa
+# W Samoa
 Zone Pacific/Apia	 12:33:04 -	LMT	1879 Jul  5
 			-11:26:56 -	LMT	1911
 			-11:30	-	SAMT	1950		# Samoa Time
-			-11:00	-	WST			# Samoa Time
+			-11:00	-	WST			# W Samoa Time
 
 # Solomon Is
 # excludes Bougainville, for which see Papua New Guinea
@@ -455,17 +434,6 @@ Zone Pacific/Johnston	-10:00	-	HST
 # uninhabited
 
 # Midway
-#
-# From Mark Brader (2005-01-23):
-# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
-# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
-# reproduced a Pan American Airways timeables from 1936, for their weekly
-# "Orient Express" flights between San Francisco and Manila, and connecting
-# flights to Chicago and the US East Coast.  As it uses some time zone
-# designations that I've never seen before:....
-# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I.   H.L.T. Ar. 5:30P Sun.
-#  "   3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A  "
-#
 Zone Pacific/Midway	-11:49:28 -	LMT	1901
 			-11:00	-	NST	1956 Jun  3
 			-11:00	1:00	NDT	1956 Sep  2
@@ -507,7 +475,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (5th edition),
 # San Diego: ACS Publications, Inc. (1999).
@@ -553,15 +521,9 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # Australia
 
-# From Paul Eggert (2005-12-08):
-# <a href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">
-# Implementation Dates of Daylight Saving Time within Australia
-# </a> summarizes daylight saving issues in Australia.
-
-# From Arthur David Olson (2005-12-12):
-# <a href="http://www.lawlink.nsw.gov.au/lawlink/Corporate/ll_agdinfo.nsf/pages/community_relations_daylight_saving">
-# Lawlink NSW:Daylight Saving in New South Wales
-# </a> covers New South Wales in particular.
+# <a href="http://www.dstc.qut.edu.au/DST/marg/daylight.html">
+# Australia's Daylight Saving Times
+# </a>, by Margaret Turner, summarizes daylight saving issues in Australia.
 
 # From John Mackin (1991-03-06):
 # We in Australia have _never_ referred to DST as `daylight' time.
@@ -670,13 +632,13 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # From Paul Eggert (1995-12-19):
 # Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
-# Mark Prior writes that his newspaper
+# Mark Prior <mrp@itd.adelaide.edu.au> writes that his newspaper
 # reports that NSW's fall 1995 change will occur at 2:00,
 # but Robert Elz says it's been 3:00 in Victoria since 1970
 # and perhaps the newspaper's `2:00' is referring to standard time.
 # For now we'll continue to assume 2:00s for changes since 1960.
 
-# From Eric Ulevik (1998-01-05):
+# From Eric Ulevik <eau@zip.com.au> (1998-01-05):
 #
 # Here are some URLs to Australian time legislation. These URLs are stable,
 # and should probably be included in the data file. There are probably more
@@ -695,24 +657,6 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Standard Time Act, 1898
 # </a>
 
-# From David Grosz (2005-06-13):
-# It was announced last week that Daylight Saving would be extended by
-# one week next year to allow for the 2006 Commonwealth Games.
-# Daylight Saving is now to end for next year only on the first Sunday
-# in April instead of the last Sunday in March.
-#
-# From Gwillim Law (2005-06-14):
-# I did some Googling and found that all of those states (and territory) plan
-# to extend DST together in 2006.
-# ACT: http://www.cmd.act.gov.au/mediareleases/fileread.cfm?file=86.txt
-# New South Wales: http://www.thecouriermail.news.com.au/common/story_page/0,5936,15538869%255E1702,00.html
-# South Australia: http://www.news.com.au/story/0,10117,15555031-1246,00.html
-# Tasmania: http://www.media.tas.gov.au/release.php?id=14772
-# Victoria: I wasn't able to find anything separate, but the other articles
-# allude to it.
-# But not Queensland
-# http://www.news.com.au/story/0,10117,15564030-1248,00.html.
-
 # Northern Territory
 
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
@@ -899,7 +843,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # 1994 was at +0930 as John Connolly's customer seems to assert, then I can
 # only conclude that the actual rule is more complicated....
 
-# From John Warburton (1994-10-07):
+# From John Warburton <jwarb@SACBH.com.au> (1994-10-07):
 # The new Daylight Savings dates for South Australia ...
 # was gazetted in the Government Hansard on Sep 26 1994....
 # start on last Sunday in October and end in last sunday in March.
@@ -959,7 +903,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # From Arthur David Olson:
 # New South Wales and subjurisdictions have their own ideas of a fun time.
-# Based on law library research by John Mackin,
+# Based on law library research by John Mackin (john@basser.cs.su.oz),
 # who notes:
 #	In Australia, time is not legislated federally, but rather by the
 #	individual states.  Thus, while such terms as ``Eastern Standard Time''
@@ -968,7 +912,18 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 #	legislation.  This is very important to understand.
 #	I have researched New South Wales time only...
 
-# From Eric Ulevik (1999-05-26):
+# From Paul Eggert (1999-09-27):
+# The Information Service of the Australian National Standards Commission
+# <a href="http://www.nsc.gov.au/InfoServ/Ileaflet/il27.htm">
+# Daylight Saving
+# </a> page (1995-04) has an excellent overall history of Australian DST.
+# The Community Relations Division of the NSW Attorney General's Department
+# publishes a history of daylight saving in NSW.  See:
+# <a href="http://www.lawlink.nsw.gov.au/crd.nsf/pages/time2">
+# Lawlink NSW: Daylight Saving in New South Wales
+# </a>
+
+# From Eric Ulevik <eau@ozemail.com.au> (1999-05-26):
 # DST will start in NSW on the last Sunday of August, rather than the usual
 # October in 2000.  [See: Matthew Moore,
 # <a href="http://www.smh.com.au/news/9905/26/pageone/pageone4.html">
@@ -1045,7 +1000,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # Lord Howe Island
 
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
-# LHI...		[ Courtesy of Pauline Van Winsen ]
+# LHI...		[ Courtesy of Pauline Van Winsen.. pauline@Aus ]
 #					[ Dec 1990 ]
 # Lord Howe Island is located off the New South Wales coast, and is half an
 # hour ahead of NSW time.
@@ -1085,7 +1040,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # From George Shepherd via Simon Woodhead via Robert Elz (1991-03-06):
 # # The Country of New Zealand   (Australia's east island -) Gee they hate that!
 # #				   or is Australia the west island of N.Z.
-# #	[ courtesy of Geoff Tribble.. Auckland N.Z. ]
+# #	[ courtesy of Geoff Tribble.. Geofft@Aus.. Auckland N.Z. ]
 # #				[ Nov 1990 ]
 # ...
 # Rule	NZ      1974    1988	-	Oct	lastSun	2:00	1:00	D
@@ -1102,7 +1057,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # From Paul Eggert (1995-12-19);
 # Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
-# Robert Uzgalis writes that the New Zealand Daylight
+# Robert Uzgalis <buz@cs.aukuni.ac.nz> writes that the New Zealand Daylight
 # Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
 # time on both the first Sunday in October and the third Sunday in March.
 # As with Australia, we'll assume the tradition is 2:00s, not 2:00.
@@ -1181,7 +1136,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 
 # Micronesia
 
-# Alan Eugene Davis writes (1996-03-16),
+# Alan Eugene Davis <adavis@kuentos.guam.net> writes (1996-03-16),
 # ``I am certain, having lived there for the past decade, that "Truk"
 # (now properly known as Chuuk) ... is in the time zone GMT+10.''
 #
@@ -1289,10 +1244,10 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # October to March, which has won approval in principle from the Tongan
 # Government.
 
-# From Steffen Thorsen (1999-09-09):
+# From Steffen Thorsen [straen@thorsen.priv.no] (1999-09-09):
 # * Tonga will introduce DST in November
 #
-# I was given this link by John Letts:
+# I was given this link by John Letts <johnletts@earthlink.net>:
 # <a hef="http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm">
 # http://news.bbc.co.uk/hi/english/world/asia-pacific/newsid_424000/424764.stm
 # </a>
@@ -1302,7 +1257,7 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # of UTC as well, but as far as I know Fiji will only be 13 hours ahead
 # (12 + 1 hour DST).
 
-# From Arthur David Olson (1999-09-20):
+# From Arthur David Olson [arthur_david_olson@nih.gov] (1999-09-20):
 # According to <a href="http://www.tongaonline.com/news/sept1799.html>
 # http://www.tongaonline.com/news/sept1799.html
 # </a>:
@@ -1372,30 +1327,12 @@ Zone	Pacific/Wallis	12:15:20 -	LMT	1901
 # mapmakers redrew the IDL following the boundary of Kiribati.  Even that line
 # has a rather arbitrary nature.  The straight-line boundaries between Pacific
 # island nations that are shown on many maps are based on an international
-# convention, but are not legally binding national borders.... The date is
+# convention, but are not legally binding national borders.
+#
+# An Anglo-French Conference on Time-Keeping at Sea (June, 1917) agreed that
+# legal time on the high seas would be zone time, i.e., the standard time at
+# the nearest meridian that is a multiple of fifteen degrees.  The date is
 # governed by the IDL; therefore, even on the high seas, there may be some
 # places as late as fourteen hours later than UTC.  And, since the IDL is not
 # an international standard, there are some places on the high seas where the
 # correct date is ambiguous.
-
-# From Wikipedia <http://en.wikipedia.org/wiki/Time_zone> (2005-08-31):
-# Before 1920, all ships kept local apparent time on the high seas by setting
-# their clocks at night or at the morning sight so that, given the ship's
-# speed and direction, it would be 12 o'clock when the Sun crossed the ship's
-# meridian (12 o'clock = local apparent noon).  During 1917, at the
-# Anglo-French Conference on Time-keeping at Sea, it was recommended that all
-# ships, both military and civilian, should adopt hourly standard time zones
-# on the high seas.  Whenever a ship was within the territorial waters of any
-# nation it would use that nation's standard time.  The captain was permitted
-# to change his ship's clocks at a time of his choice following his ship's
-# entry into another zone time--he often chose midnight.  These zones were
-# adopted by all major fleets between 1920 and 1925 but not by many
-# independent merchant ships until World War II.
-
-# From Paul Eggert, using references suggested by Oscar van Vlijmen
-# (2005-03-20):
-#
-# The American Practical Navigator (2002)
-# <http://pollux.nss.nima.mil/pubs/pubs_j_apn_sections.html?rid=187>
-# talks only about the 180-degree meridian with respect to ships in
-# international waters; it ignores the international date line.
diff --git a/timezone/backward b/timezone/backward
index 66fbf30618..6e118c2726 100644
--- a/timezone/backward
+++ b/timezone/backward
@@ -1,31 +1,27 @@
-# @(#)backward	8.1
+# @(#)backward	7.26
 
 # This file provides links between current names for time zones
 # and their old names.  Many names changed in late 1993.
 
-Link	Africa/Bamako		Africa/Timbuktu
-Link	America/Argentina/Catamarca	America/Argentina/ComodRivadavia
 Link	America/Adak		America/Atka
 Link	America/Argentina/Buenos_Aires	America/Buenos_Aires
 Link	America/Argentina/Catamarca	America/Catamarca
 Link	America/Argentina/Cordoba	America/Cordoba
 Link	America/Tijuana		America/Ensenada
-Link	America/Indiana/Indianapolis	America/Fort_Wayne
-Link	America/Indiana/Indianapolis	America/Indianapolis
+Link	America/Indianapolis	America/Fort_Wayne
 Link	America/Argentina/Jujuy	America/Jujuy
 Link	America/Indiana/Knox	America/Knox_IN
-Link	America/Kentucky/Louisville	America/Louisville
 Link	America/Argentina/Mendoza	America/Mendoza
 Link	America/Rio_Branco	America/Porto_Acre
-Link	America/Argentina/Cordoba	America/Rosario
+Link	America/Cordoba		America/Rosario
 Link	America/St_Thomas	America/Virgin
 Link	Asia/Ashgabat		Asia/Ashkhabad
 Link	Asia/Chongqing		Asia/Chungking
 Link	Asia/Dhaka		Asia/Dacca
 Link	Asia/Macau		Asia/Macao
+Link	Asia/Makassar		Asia/Ujung_Pandang
 Link	Asia/Jerusalem		Asia/Tel_Aviv
 Link	Asia/Thimphu		Asia/Thimbu
-Link	Asia/Makassar		Asia/Ujung_Pandang
 Link	Asia/Ulaanbaatar	Asia/Ulan_Bator
 Link	Australia/Sydney	Australia/ACT
 Link	Australia/Sydney	Australia/Canberra
@@ -38,7 +34,7 @@ Link	Australia/Hobart	Australia/Tasmania
 Link	Australia/Melbourne	Australia/Victoria
 Link	Australia/Perth		Australia/West
 Link	Australia/Broken_Hill	Australia/Yancowinna
-Link	America/Rio_Branco	Brazil/Acre
+Link	America/Porto_Acre	Brazil/Acre
 Link	America/Noronha		Brazil/DeNoronha
 Link	America/Sao_Paulo	Brazil/East
 Link	America/Manaus		Brazil/West
@@ -56,14 +52,13 @@ Link	Pacific/Easter		Chile/EasterIsland
 Link	America/Havana		Cuba
 Link	Africa/Cairo		Egypt
 Link	Europe/Dublin		Eire
-Link	Europe/London		Europe/Belfast
 Link	Europe/Chisinau		Europe/Tiraspol
 Link	Europe/London		GB
 Link	Europe/London		GB-Eire
-Link	Etc/GMT			GMT+0
-Link	Etc/GMT			GMT-0
-Link	Etc/GMT			GMT0
-Link	Etc/GMT			Greenwich
+Link	Etc/GMT+0		GMT+0
+Link	Etc/GMT-0		GMT-0
+Link	Etc/GMT0		GMT0
+Link	Etc/Greenwich		Greenwich
 Link	Asia/Hong_Kong		Hongkong
 Link	Atlantic/Reykjavik	Iceland
 Link	Asia/Tehran		Iran
@@ -75,14 +70,13 @@ Link	Africa/Tripoli		Libya
 Link	America/Tijuana		Mexico/BajaNorte
 Link	America/Mazatlan	Mexico/BajaSur
 Link	America/Mexico_City	Mexico/General
+Link	America/Shiprock	Navajo
 Link	Pacific/Auckland	NZ
 Link	Pacific/Chatham		NZ-CHAT
-Link	America/Denver		Navajo
-Link	Asia/Shanghai		PRC
 Link	Pacific/Pago_Pago	Pacific/Samoa
-Link	Pacific/Truk		Pacific/Yap
 Link	Europe/Warsaw		Poland
 Link	Europe/Lisbon		Portugal
+Link	Asia/Shanghai		PRC
 Link	Asia/Taipei		ROC
 Link	Asia/Seoul		ROK
 Link	Asia/Singapore		Singapore
@@ -92,7 +86,7 @@ Link	America/Anchorage	US/Alaska
 Link	America/Adak		US/Aleutian
 Link	America/Phoenix		US/Arizona
 Link	America/Chicago		US/Central
-Link	America/Indiana/Indianapolis	US/East-Indiana
+Link	America/Indianapolis	US/East-Indiana
 Link	America/New_York	US/Eastern
 Link	Pacific/Honolulu	US/Hawaii
 Link	America/Indiana/Knox	US/Indiana-Starke
@@ -101,6 +95,6 @@ Link	America/Denver		US/Mountain
 Link	America/Los_Angeles	US/Pacific
 Link	Pacific/Pago_Pago	US/Samoa
 Link	Etc/UTC			UTC
-Link	Etc/UTC			Universal
+Link	Etc/Universal		Universal
 Link	Europe/Moscow		W-SU
-Link	Etc/UTC			Zulu
+Link	Etc/Zulu		Zulu
diff --git a/timezone/checktab.awk b/timezone/checktab.awk
index 6d532141e6..6a2d19ae00 100644
--- a/timezone/checktab.awk
+++ b/timezone/checktab.awk
@@ -1,8 +1,8 @@
 # Check tz tables for consistency.
 
-# @(#)checktab.awk	1.7
+# @(#)checktab.awk	1.6
 
-# Contributed by Paul Eggert.
+# Contributed by Paul Eggert <eggert@twinsun.com>.
 
 BEGIN {
 	FS = "\t"
diff --git a/timezone/etcetera b/timezone/etcetera
index cddbe8a294..f87a76ea48 100644
--- a/timezone/etcetera
+++ b/timezone/etcetera
@@ -1,11 +1,10 @@
-# @(#)etcetera	8.1
+# @(#)etcetera	7.11
 
 # These entries are mostly present for historical reasons, so that
 # people in areas not otherwise covered by the tz files could "zic -l"
 # to a time zone that was right for their area.  These days, the
-# tz files cover almost all the inhabited world, and the only practical
-# need now for the entries that are not on UTC are for ships at sea
-# that cannot use POSIX TZ settings.
+# tz files cover almost all the inhabited world, so there's little
+# need now for the entries that are not on UTC.
 
 Zone	Etc/GMT		0	-	GMT
 Zone	Etc/UTC		0	-	UTC
diff --git a/timezone/europe b/timezone/europe
index 54146d7400..eeb114f881 100644
--- a/timezone/europe
+++ b/timezone/europe
@@ -1,11 +1,10 @@
-# @(#)europe	8.1
-# <pre>
+# @(#)europe	7.88
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (5th edition),
 # San Diego: ACS Publications, Inc. (1999).
@@ -56,7 +55,7 @@
 # A reliable and entertaining source about time zones, especially in Britain,
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 
-# From Peter Ilieve (1994-12-04),
+# From Peter Ilieve <peter@memex.co.uk> (1994-12-04),
 # The original six [EU members]: Belgium, France, (West) Germany, Italy,
 # Luxembourg, the Netherlands.
 # Plus, from 1 Jan 73: Denmark, Ireland, United Kingdom.
@@ -82,7 +81,7 @@
 
 # Britain (United Kingdom) and Ireland (Eire)
 
-# From Peter Ilieve (1994-07-06):
+# From Peter Ilieve <peter@memex.co.uk> (1994-07-06):
 #
 # On 17 Jan 1994 the Independent, a UK quality newspaper, had a piece about
 # historical vistas along the Thames in west London. There was a photo
@@ -103,7 +102,7 @@
 #
 # [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
 
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
 #
 # Howse writes that Britain was the first country to use standard time.
 # The railways cared most about the inconsistencies of local mean time,
@@ -169,12 +168,12 @@
 # known as "British" Summer Time in all parts of the United Kingdom.
 
 # Date: 4 Jan 89 08:57:25 GMT (Wed)
-# From: Jonathan Leffler
+# From: Jonathan Leffler <nih-csl!uunet!mcvax!sphinx.co.uk!john>
 # [British Summer Time] is fixed annually by Act of Parliament.
 # If you can predict what Parliament will do, you should be in
 # politics making a fortune, not computing.
 
-# From Chris Carrier (1996-06-14):
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-06-14):
 # I remember reading in various wartime issues of the London Times the
 # acronym BDST for British Double Summer Time.  Look for the published
 # time of sunrise and sunset in The Times, when BDST was in effect, and
@@ -205,15 +204,15 @@
 # and follows the more usual convention of putting the location name first,
 # so we use `BDST'.
 
-# Peter Ilieve (1998-04-19) described at length
+# Peter Ilieve <peter@aldie.co.uk> (1998-04-19) described at length
 # the history of summer time legislation in the United Kingdom.
-# Since 1998 Joseph S. Myers has been updating
+# Since 1998 Joseph S. Myers <jsm28@cam.ac.uk> has been updating
 # and extending this list, which can be found in
 # <a href="http://student.cusu.cam.ac.uk/~jsm28/british-time/">
 # History of legal time in Britain
 # </a>
 
-# From Joseph S. Myers (1998-01-06):
+# From Joseph S. Myers <jsm28@cam.ac.uk> (1998-01-06):
 #
 # The legal time in the UK outside of summer time is definitely GMT, not UTC;
 # see Lord Tanlaw's speech
@@ -256,35 +255,6 @@
 #   "Timeball on the ballast office is down.  Dunsink time."
 #   -- James Joyce, Ulysses
 
-# From Joseph S. Myers (2005-01-26):
-# Irish laws are available online at www.irishstatutebook.ie.  These include 
-# various relating to legal time, for example:
-# 
-# ZZA13Y1923.html ZZA12Y1924.html ZZA8Y1925.html ZZSIV20PG1267.html
-# 
-# ZZSI71Y1947.html ZZSI128Y1948.html ZZSI23Y1949.html ZZSI41Y1950.html
-# ZZSI27Y1951.html ZZSI73Y1952.html
-# 
-# ZZSI11Y1961.html ZZSI232Y1961.html ZZSI182Y1962.html
-# ZZSI167Y1963.html ZZSI257Y1964.html ZZSI198Y1967.html
-# ZZA23Y1968.html ZZA17Y1971.html
-# 
-# ZZSI67Y1981.html ZZSI212Y1982.html ZZSI45Y1986.html
-# ZZSI264Y1988.html ZZSI52Y1990.html ZZSI371Y1992.html
-# ZZSI395Y1994.html ZZSI484Y1997.html ZZSI506Y2001.html
-#
-# [These are all relative to the root, e.g., the first is
-# <http://www.irishstatutebook.ie/ZZA13Y1923.html>.]
-# 
-# (These are those I found, but there could be more.  In any case these 
-# should allow various updates to the comments in the europe file to cover 
-# the laws applicable in Ireland.)
-# 
-# (Note that the time in the Republic of Ireland since 1968 has been defined 
-# in terms of standard time being GMT+1 with a period of winter time when it 
-# is GMT, rather than standard time being GMT with a period of summer time 
-# being GMT+1.)
-
 # From Paul Eggert (1999-03-28):
 # Clive Feather (<news:859845706.26043.0@office.demon.net>, 1997-03-31)
 # reports that Folkestone (Cheriton) Shuttle Terminal uses Concession Time
@@ -423,6 +393,13 @@ Zone	Europe/London	-0:01:15 -	LMT	1847 Dec  1
 			 1:00	-	BST	1971 Oct 31 2:00u
 			 0:00	GB-Eire	%s	1996
 			 0:00	EU	GMT/BST
+Zone	Europe/Belfast	-0:23:40 -	LMT	1880 Aug  2
+			-0:25:21 -	DMT	1916 May 21 2:00 # Dublin/Dunsink MT
+			-0:25:21 1:00	IST	1916 Oct  1 2:00s   # Irish Summer Time
+			 0:00	GB-Eire	%s	1968 Oct 27
+			 1:00	-	BST	1971 Oct 31 2:00u
+			 0:00	GB-Eire	%s	1996
+			 0:00	EU	GMT/BST
 Zone	Europe/Dublin	-0:25:00 -	LMT	1880 Aug  2
 			-0:25:21 -	DMT	1916 May 21 2:00
 			-0:25:21 1:00	IST	1916 Oct  1 2:00s
@@ -530,7 +507,7 @@ Zone	EET		2:00	EU	EE%sT
 # Previous editions of this database used abbreviations like MET DST
 # for Central European Summer Time, but this didn't agree with common usage.
 
-# From Markus Kuhn (1996-07-12):
+# From Markus Kuhn <mskuhn@unrza3.dialin.rrze.uni-erlangen.de> (1996-07-12):
 # The official German names ... are
 #
 #	Mitteleuropaeische Zeit (MEZ)         = UTC+01:00
@@ -646,7 +623,7 @@ Zone	Europe/Minsk	1:50:16 -	LMT	1880
 #	pp 8-9.
 # LMT before 1892 was 0:17:30, according to the official journal of Belgium:
 #	Moniteur Belge, Samedi 30 Avril 1892, N.121.
-# Thanks to Pascal Delmoitie for these references.
+# Thanks to Pascal Delmoitie <pascal@belnet.be> for these references.
 # The 1918 rules are listed for completeness; they apply to unoccupied Belgium.
 # Assume Brussels switched to WET in 1918 when the armistice took effect.
 #
@@ -705,7 +682,7 @@ Zone	Europe/Brussels	0:17:30 -	LMT	1880
 
 # Bulgaria
 #
-# From Plamen Simenov via Steffen Thorsen (1999-09-09):
+# From Plamen Simenov <P.Simeonov@cnsys.bg> via Steffen Thorsen (1999-09-09):
 # A document of Government of Bulgaria (No.94/1997) says:
 # EET --> EETDST is in 03:00 Local time in last Sunday of March ...
 # EETDST --> EET is in 04:00 Local time in last Sunday of October
@@ -731,7 +708,7 @@ Zone	Europe/Sofia	1:33:16 -	LMT	1880
 # see Serbia and Montenegro
 
 # Cyprus
-# Please see the `asia' file for Asia/Nicosia.
+# See the `asia' file.
 
 # Czech Republic
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -750,40 +727,6 @@ Zone	Europe/Prague	0:57:44 -	LMT	1850
 			1:00	EU	CE%sT
 
 # Denmark, Faeroe Islands, and Greenland
-
-# From Jesper Norgaard Welen (2005-04-26):
-# http://www.hum.aau.dk/~poe/tid/tine/DanskTid.htm says that the law
-# [introducing standard time] was in effect from 1894-01-01....
-# The page http://www.retsinfo.dk/_GETDOCI_/ACCN/A18930008330-REGL
-# confirms this, and states that the law was put forth 1893-03-29.
-#
-# The EU treaty with effect from 1973:
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19722110030-REGL
-#
-# This provoked a new law from 1974 to make possible summer time changes
-# in subsequenet decrees with the law
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/A19740022330-REGL
-#
-# It seems however that no decree was set forward until 1980.  I have
-# not found any decree, but in another related law, the effecting DST
-# changes are stated explicitly to be from 1980-04-06 at 02:00 to
-# 1980-09-28 at 02:00.  If this is true, this differs slightly from
-# the EU rule in that DST runs to 02:00, not 03:00.  We don't know
-# when Denmark began using the EU rule correctly, but we have only
-# confirmation of the 1980-time, so I presume it was correct in 1981:
-# The law is about the management of the extra hour, concerning
-# working hours reported and effect on obligatory-rest rules (which
-# was suspended on that night):
-# http://www.retsinfo.dk/_GETDOCI_/ACCN/C19801120554-REGL
-
-# From Jesper Norgaard Welen (2005-06-11):
-# The Herning Folkeblad (1980-09-26) reported that the night between
-# Saturday and Sunday the clock is set back from three to two.
-
-# From Paul Eggert (2005-06-11):
-# Hence the "02:00" of the 1980 law refers to standard time, not
-# wall-clock time, and so the EU rules were in effect in 1980.
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Denmark	1916	only	-	May	14	23:00	1:00	S
 Rule	Denmark	1916	only	-	Sep	30	23:00	0	-
@@ -796,10 +739,13 @@ Rule	Denmark	1947	only	-	May	 4	 2:00s	1:00	S
 Rule	Denmark	1947	only	-	Aug	10	 2:00s	0	-
 Rule	Denmark	1948	only	-	May	 9	 2:00s	1:00	S
 Rule	Denmark	1948	only	-	Aug	 8	 2:00s	0	-
+# Whitman also gives 1949 Apr 9 to 1949 Oct 1, and disagrees in minor ways
+# about many of the above dates; go with Shanks.
 #
+# For 1894, Shanks says Jan, Whitman Apr; go with Whitman.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Copenhagen	 0:50:20 -	LMT	1890
-			 0:50:20 -	CMT	1894 Jan  1 # Copenhagen MT
+			 0:50:20 -	CMT	1894 Apr  # Copenhagen Mean Time
 			 1:00	Denmark	CE%sT	1942 Nov  2 2:00s
 			 1:00	C-Eur	CE%sT	1945 Apr  2 2:00
 			 1:00	Denmark	CE%sT	1980
@@ -808,11 +754,6 @@ Zone Atlantic/Faeroe	-0:27:04 -	LMT	1908 Jan 11	# Torshavn
 			 0:00	-	WET	1981
 			 0:00	EU	WE%sT
 #
-# From Paul Eggert (2004-10-31):
-# During World War II, Germany maintained secret manned weather stations in
-# East Greenland and Franz Josef Land, but we don't know their time zones.
-# My source for this is Wilhelm Dege's book mentioned under Svalbard.
-#
 # From Paul Eggert (1996-11-22):
 # Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
 # and left the EU on 1985-02-01.  It therefore should have been using EU
@@ -899,12 +840,12 @@ Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
 			-4:00	Thule	A%sT
 
 # Estonia
-# From Peter Ilieve (1994-10-15):
+# From Peter Ilieve <peter@memex.co.uk> (1994-10-15):
 # A relative in Tallinn confirms the accuracy of the data for 1989 onwards
 # [through 1994] and gives the legal authority for it,
 # a regulation of the Government of Estonia, No. 111 of 1989....
 #
-# From Peter Ilieve (1996-10-28):
+# From Peter Ilieve <peter@aldie.co.uk> (1996-10-28):
 # [IATA SSIM (1992/1996) claims that the Baltic republics switch at 01:00s,
 # but a relative confirms that Estonia still switches at 02:00s, writing:]
 # ``I do not [know] exactly but there are some little different
@@ -914,7 +855,7 @@ Zone America/Thule	-4:35:08 -	LMT	1916 Jul 28 # Pituffik air base
 # human physiology.  It seems that Estonia maybe will not change to
 # summer time next spring.''
 
-# From Peter Ilieve (1998-11-04), heavily edited:
+# From Peter Ilieve <peter@aldie.co.uk> (1998-11-04), heavily edited:
 # <a href="http://trip.rk.ee/cgi-bin/thw?${BASE}=akt&${OOHTML}=rtd&TA=1998&TO=1&AN=1390">
 # The 1998-09-22 Estonian time law
 # </a>
@@ -963,11 +904,11 @@ Zone	Europe/Tallinn	1:39:00	-	LMT	1880
 
 # Finland
 #
-# From Hannu Strang (25 Sep 1994 06:03:37 UTC):
+# From Hannu Strang <chs@apu.fi> (25 Sep 1994 06:03:37 UTC):
 # Well, here in Helsinki we're just changing from summer time to regular one,
 # and it's supposed to change at 4am...
 #
-# From Paul Eggert (25 Sep 1994):
+# From Paul Eggert <eggert@twinsun.com> (25 Sep 1994):
 # Shanks says Finland has switched at 02:00 standard time since 1981.
 # Go with Strang instead.
 #
@@ -1044,7 +985,7 @@ Rule	France	1940	only	-	Feb	25	 2:00	1:00	S
 # Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
 Rule	France	1941	only	-	May	 5	 0:00	2:00	M # Midsummer
 # Shanks says this transition occurred at Oct 6 1:00,
-# but go with Denis Excoffier (1997-12-12),
+# but go with Denis.Excoffier@ens.fr (1997-12-12),
 # who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
 # as saying 5/10/41 22hUT.
 Rule	France	1941	only	-	Oct	 6	 0:00	1:00	S
@@ -1078,7 +1019,7 @@ Zone	Europe/Paris	0:09:21 -	LMT	1891 Mar 15  0:01
 
 # Germany
 
-# From Markus Kuhn (1998-09-29):
+# From Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> (1998-09-29):
 # The German time zone web site by the Physikalisch-Technische
 # Bundesanstalt contains DST information back to 1916.
 # [See tz-link.htm for the URL.]
@@ -1114,11 +1055,6 @@ Zone	Europe/Berlin	0:53:28 -	LMT	1893 Apr
 			1:00	Germany	CE%sT	1980
 			1:00	EU	CE%sT
 
-# Georgia
-# Please see the "asia" file for Asia/Tbilisi.
-# Herodotus (Histories, IV.45) says Georgia north of the Phasis (now Rioni)
-# is in Europe.  Our reference location Tbilisi is in the Asian part.
-
 # Gibraltar
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone Europe/Gibraltar	-0:21:24 -	LMT	1880 Aug  2
@@ -1193,7 +1129,7 @@ Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 
 # Iceland
 #
-# From Adam David (1993-11-06):
+# From Adam David <adam@veda.is> (1993-11-06):
 # The name of the timezone in Iceland for system / mail / news purposes is GMT.
 #
 # (1993-12-05):
@@ -1220,7 +1156,7 @@ Zone	Europe/Budapest	1:16:20 -	LMT	1890 Oct
 # might be a reference to the Julian calendar as opposed to Gregorian, or it
 # might mean something else (???).
 #
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
 # The Iceland Almanak, Shanks and Whitman disagree on many points.
 # We go with the Almanak, except for one claim from Shanks, namely that
 # Reykavik was 21W57 from 1837 to 1908, local mean time before that.
@@ -1336,7 +1272,7 @@ Link	Europe/Rome	Europe/San_Marino
 
 # Latvia
 
-# From Liene Kanepe (1998-09-17):
+# From Liene Kanepe <Liene_Kanepe@lm.gov.lv> (1998-09-17):
 
 # I asked about this matter Scientific Secretary of the Institute of Astronomy
 # of The University of Latvia Dr. paed Mr. Ilgonis Vilks. I also searched the
@@ -1423,7 +1359,7 @@ Zone	Europe/Vaduz	0:38:04 -	LMT	1894 Jun
 # IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
 # known to be wrong about Estonia and Latvia, assume it's wrong here too.
 
-# From Marius Gedminas (1998-08-07):
+# From Marius Gedminas <mgedmin@pub.osf.lt> (1998-08-07):
 # I would like to inform that in this year Lithuanian time zone
 # (Europe/Vilnius) was changed.
 
@@ -1530,7 +1466,7 @@ Zone	Europe/Malta	0:58:04 -	LMT	1893 Nov  2	# Valletta
 # on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).
 # In early 1992 there was large-scale interethnic violence in the area
 # and it's possible that some Russophones continued to observe Moscow time.
-# But [two people] separately reported via
+# But moldavizolit@tirastel.md and mk@tirastel.md separately reported via
 # Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
 # The Tiraspol entry has therefore been removed for now.
 
@@ -1633,10 +1569,12 @@ Zone Europe/Amsterdam	0:19:32 -	LMT	1835
 			1:00	EU	CE%sT
 
 # Norway
-# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+# Whitman gives 1916 May 21 - 1916 Oct 21; go with Shanks.
 Rule	Norway	1916	only	-	May	22	1:00	1:00	S
 Rule	Norway	1916	only	-	Sep	30	0:00	0	-
+# Whitman says DST observed 1935-08-11/1942-11-01, then 1943-03-29/10-04,
+# 1944-04-03/10-02, and 1945-04-01/10-01; go with Shanks.
 Rule	Norway	1945	only	-	Apr	 2	2:00s	1:00	S
 Rule	Norway	1945	only	-	Oct	 1	2:00s	0	-
 Rule	Norway	1959	1964	-	Mar	Sun>=15	2:00s	1:00	S
@@ -1673,7 +1611,7 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
 # From Paul Eggert (2001-05-01):
 #
 # Actually, Jan Mayen was never occupied by Germany during World War II,
-# so it must have diverged from Oslo time during the war, as Oslo was
+# so it must have diverged from Oslo time during the war, as Olso was
 # keeping Berlin time.
 #
 # <http://home.no.net/janmayen/history.htm> says that the meteorologists
@@ -1690,7 +1628,7 @@ Zone	Europe/Oslo	0:43:00 -	LMT	1895 Jan  1
 # <http://www.svalbard.com/SvalbardFAQ.html> says that the Germans were
 # expelled on 1942-05-14.  However, small parties of Germans did return,
 # and according to Wilhelm Dege's book "War North of 80" (1954)
-# <http://www.ucalgary.ca/UofC/departments/UP/1-55238/1-55238-110-2.html>
+# <http://www.utpress.utoronto.ca/publishing/rights/dege_warnorthof80.htm>
 # the German armed forces at the Svalbard weather station code-named
 # Haudegen did not surrender to the Allies until September 1945.
 #
@@ -1709,26 +1647,19 @@ Rule	Poland	1944	only	-	Oct	 4	2:00	0	-
 # For 1944-1948 Whitman gives the previous day; go with Shanks.
 Rule	Poland	1945	only	-	Apr	29	0:00	1:00	S
 Rule	Poland	1945	only	-	Nov	 1	0:00	0	-
-# For 1946 on the source is Kazimierz Borkowski,
-# Torun Center for Astronomy, Dept. of Radio Astronomy, Nicolaus Copernicus U.,
-# <http://www.astro.uni.torun.pl/~kb/Artykuly/U-PA/Czas2.htm#tth_tAb1>
-# Thanks to Przemyslaw Augustyniak (2005-05-28) for this reference.
-# He also gives these further references:
-# Mon Pol nr 13, poz 162 (1995) <http://www.abc.com.pl/serwis/mp/1995/0162.htm>
-# Druk nr 2180 (2003) <http://www.senat.gov.pl/k5/dok/sejm/053/2180.pdf>
-Rule	Poland	1946	only	-	Apr	14	0:00s	1:00	S
-Rule	Poland	1946	only	-	Oct	 7	2:00s	0	-
-Rule	Poland	1947	only	-	May	 4	2:00s	1:00	S
-Rule	Poland	1947	1949	-	Oct	Sun>=1	2:00s	0	-
-Rule	Poland	1948	only	-	Apr	18	2:00s	1:00	S
-Rule	Poland	1949	only	-	Apr	10	2:00s	1:00	S
+Rule	Poland	1946	only	-	Apr	14	0:00	1:00	S
+Rule	Poland	1946	only	-	Sep	 7	0:00	0	-
+Rule	Poland	1947	only	-	May	 4	0:00	1:00	S
+Rule	Poland	1947	1948	-	Oct	Sun>=1	0:00	0	-
+Rule	Poland	1948	only	-	Apr	18	0:00	1:00	S
+# Whitman also gives 1949 Apr 9 - 1949 Oct 1; go with Shanks.
 Rule	Poland	1957	only	-	Jun	 2	1:00s	1:00	S
 Rule	Poland	1957	1958	-	Sep	lastSun	1:00s	0	-
 Rule	Poland	1958	only	-	Mar	30	1:00s	1:00	S
 Rule	Poland	1959	only	-	May	31	1:00s	1:00	S
 Rule	Poland	1959	1961	-	Oct	Sun>=1	1:00s	0	-
 Rule	Poland	1960	only	-	Apr	 3	1:00s	1:00	S
-Rule	Poland	1961	1964	-	May	lastSun	1:00s	1:00	S
+Rule	Poland	1961	1964	-	May	Sun>=25	1:00s	1:00	S
 Rule	Poland	1962	1964	-	Sep	lastSun	1:00s	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Europe/Warsaw	1:24:00 -	LMT	1880
@@ -1737,17 +1668,33 @@ Zone	Europe/Warsaw	1:24:00 -	LMT	1880
 			2:00	Poland	EE%sT	1922 Jun
 			1:00	Poland	CE%sT	1940 Jun 23 2:00
 			1:00	C-Eur	CE%sT	1944 Oct
-			1:00	Poland	CE%sT	1977
-			1:00	W-Eur	CE%sT	1988
+			1:00	Poland	CE%sT	1977 Apr  3 1:00
+			1:00	W-Eur	CE%sT	1999
+# IATA SSIM (1991/1996) gives EU rules, but the _The Warsaw Voice_
+# <a href="http://www.warsawvoice.com.pl/v361/NewsInBrief.shtml">
+# http://www.warsawvoice.com/pl/v361/NewsInBrief.shtml (1995-09-24)
+# </a>
+# says the autumn 1995 switch was at 02:00.
+# Stick with W-Eur for now.
+#
+# From Marcin.Kasperski@softax.com.pl (1999-06-10):
+# According to my colleagues someone recently decided, that Poland would
+# follow European Union regulations, so - I think - the matter is not
+# worth further discussion.
+#
+# From Paul Eggert (1999-06-10):
+# Kasperski also writes that the government futzed with the rules in 1997
+# or 1998 but he doesn't remember the details.  Assume they switched to
+# EU rules in 1999.
 			1:00	EU	CE%sT
 
 # Portugal
 #
-# From Rui Pedro Salgueiro (1992-11-12):
+# From Rui Pedro Salgueiro <rps@inescca.inescc.pt> (1992-11-12):
 # Portugal has recently (September, 27) changed timezone
 # (from WET to MET or CET) to harmonize with EEC.
 #
-# Martin Bruckmann (1996-02-29) reports via Peter Ilieve
+# Martin Bruckmann <martin@ua.pt> (1996-02-29) reports via Peter Ilieve
 # that Portugal is reverting to 0:00 by not moving its clocks this spring.
 # The new Prime Minister was fed up with getting up in the dark in the winter.
 #
@@ -1877,25 +1824,25 @@ Zone Europe/Bucharest	1:44:24 -	LMT	1891 Oct
 
 # Russia
 
-# From Paul Eggert (1999-11-12):
+# From Paul Eggert <eggert@twinsun.com> (1999-11-12):
 # Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
 # Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
 # are from Andrey A. Chernov.  The rest is from Shanks, except we follow
 # Chernov's report that 1992 DST transitions were Sat 23:00, not Sun 02:00s.
 #
-# From Stanislaw A. Kuzikowski (1994-06-29):
+# From Stanislaw A. Kuzikowski <S.A.Kuz@iae.nsk.su> (1994-06-29):
 # But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
 # I do not know why they have decided to make this change;
 # as far as I remember it was done exactly during winter->summer switching
 # so we (Novosibirsk) simply did not switch.
 #
-# From Andrey A. Chernov (1996-10-04):
+# From Andrey A. Chernov <ache@nagual.ru> (1996-10-04):
 # `MSK' and `MSD' were born and used initially on Moscow computers with
 # UNIX-like OSes by several developer groups (e.g. Demos group, Kiae group)....
 # The next step was the UUCP network, the Relcom predecessor
 # (used mainly for mail), and MSK/MSD was actively used there.
 #
-# From Chris Carrier (1996-10-30):
+# From Chris Carrier <72157.3334@CompuServe.COM> (1996-10-30):
 # According to a friend of mine who rode the Trans-Siberian Railroad from
 # Moscow to Irkutsk in 1995, public air and rail transport in Russia ...
 # still follows Moscow time, no matter where in Russia it is located.
@@ -2083,7 +2030,7 @@ Zone	Europe/Belgrade	1:22:00	-	LMT	1884
 			1:00	-	CET	1941 Apr 18 23:00
 			1:00	C-Eur	CE%sT	1945 May  8  2:00s
 			1:00	1:00	CEST	1945 Sep 16  2:00s
-# Metod Kozelj reports that the legal date of
+# Metod Kozelj <metod.kozelj@rzs-hm.si> reports that the legal date of
 # transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
 # Shanks doesn't give as much detail, so go with Kozelj.
 			1:00	-	CET	1982 Nov 27
@@ -2357,7 +2304,7 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
 			3:00	Russia	MSK/MSD	1990
 			3:00	-	MSK	1990 Jul  1 2:00
 			2:00	-	EET	1992
-# From Paul Eggert (1999-11-12):
+# From Paul Eggert <eggert@twinsun.com> (1999-11-12):
 # The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
 # from Kiev to Moscow time sometime after the January 1994 elections.
 # Shanks says ``date of change uncertain'', but implies that it happened
@@ -2387,7 +2334,8 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
 
 # ...
 # Date: Wed, 28 Jan 87 16:56:27 -0100
-# From: Tom Hofmann
+# From: seismo!mcvax!cgcha!wtho (Tom Hofmann)
+# Message-Id: <8701281556.AA22174@cgcha.uucp>
 # ...
 #
 # ...the European time rules are...standardized since 1981, when
@@ -2406,11 +2354,11 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
 #
 # Tom Hofmann, Scientific Computer Center, CIBA-GEIGY AG,
 # 4002 Basle, Switzerland
-# ...
+# UUCP: ...!mcvax!cernvax!cgcha!wtho
 
 # ...
 # Date: Wed, 4 Feb 87 22:35:22 +0100
-# From: Dik T. Winter
+# From: seismo!mcvax!cwi.nl!dik (Dik T. Winter)
 # ...
 #
 # The information from Tom Hofmann is (as far as I know) not entirely correct.
@@ -2436,7 +2384,8 @@ Zone Europe/Simferopol	2:16:24 -	LMT	1880
 #
 # ...
 # dik t. winter, cwi, amsterdam, nederland
-# ...
+# INTERNET   : dik@cwi.nl
+# BITNET/EARN: dik@mcvax
 
 # From Bob Devine (1988-01-28):
 # ...
diff --git a/timezone/factory b/timezone/factory
index 946063c0dd..ba27c63269 100644
--- a/timezone/factory
+++ b/timezone/factory
@@ -1,4 +1,4 @@
-# @(#)factory	8.1
+# @(#)factory	7.3
 
 # For companies who don't want to put time zone specification in
 # their installation procedures.  When users run date, they'll get the message.
diff --git a/timezone/iso3166.tab b/timezone/iso3166.tab
index 1cfaf265c2..b17843ac8e 100644
--- a/timezone/iso3166.tab
+++ b/timezone/iso3166.tab
@@ -1,8 +1,8 @@
 # ISO 3166 alpha-2 country codes
 #
-# @(#)iso3166.tab	8.1
+# @(#)iso3166.tab	1.15
 #
-# From Paul Eggert (2004-06-14):
+# From Paul Eggert <eggert@twinsun.com> (2004-06-14):
 #
 # This file contains a table with the following columns:
 # 1.  ISO 3166-1 alpha-2 country code, current as of
@@ -255,7 +255,7 @@ VI	Virgin Islands (US)
 VN	Vietnam
 VU	Vanuatu
 WF	Wallis & Futuna
-WS	Samoa (western)
+WS	Samoa (Western)
 YE	Yemen
 YT	Mayotte
 ZA	South Africa
diff --git a/timezone/leapseconds b/timezone/leapseconds
index d2b506bab5..7add3303f2 100644
--- a/timezone/leapseconds
+++ b/timezone/leapseconds
@@ -1,4 +1,4 @@
-# @(#)leapseconds	8.1
+# @(#)leapseconds	7.17
 
 # Allowance for leapseconds added to each timezone file.
 
@@ -43,50 +43,39 @@ Leap	1994	Jun	30	23:59:60	+	S
 Leap	1995	Dec	31	23:59:60	+	S
 Leap	1997	Jun	30	23:59:60	+	S
 Leap	1998	Dec	31	23:59:60	+	S
-Leap	2005	Dec	31	23:59:60	+	S
 
-#	INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
-#
+# 	INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
+# 
 # SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
-#
+# 
 # SERVICE DE LA ROTATION TERRESTRE
 # OBSERVATOIRE DE PARIS
 # 61, Av. de l'Observatoire 75014 PARIS (France)
 # Tel.      : 33 (0) 1 40 51 22 26
 # FAX       : 33 (0) 1 40 51 22 91
-# ...
-# http://hpiers.obspm.fr/eop-pc
-#
-#						Paris, 4 July 2005
-#							
-#						Bulletin C 30
-#
-#						To authorities responsible
-#						for the measurement and
-#						distribution of time
-#
-#
-#                                    UTC TIME STEP
-#                             on the 1st of January 2006
-#
-# A positive leap second will be introduced at the end of December 2005.
-# The sequence of dates of the UTC second markers will be:
-#
-#			2005 December 31,     23h 59m 59s
-#			2005 December 31,     23h 59m 60s
-#			2006 January   1,      0h  0m  0s
-#
+# Internet  : services.iers@obspm.fr
+# 
+# 						Paris, 15 January 2004
+# 
+# 						Bulletin C 27
+# 
+# 						To authorities responsible
+# 						for the measurement and
+# 						distribution of time
+# 
+# 			INFORMATION ON UTC - TAI
+# 
+# NO positive leap second will be introduced at the end of June 2004.
 # The difference between UTC and the International Atomic Time TAI is:
-#
-# from 1999 January 1, 0h UTC, to 2006 January 1  0h UTC  : UTC-TAI = - 32s
-# from 2006 January 1, 0h UTC, until further notice       : UTC-TAI = - 33s
-#
-# Leap seconds can be introduced in UtC at the end of the months of December
+# 
+# 	from 1999 January 1, 0h UTC, until further notice : UTC-TAI = -32 s
+# 
+# Leap seconds can be introduced in UTC at the end of the months of December
 # or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
-# six months, either to announce a time step in UTC or to confirm that there
+# six months, either to announce a time step in UTC, or to confirm that there
 # will be no time step at the next possible date.
-#
-#					Daniel GAMBIS
-#					Head
-#					Earth Orientation Center of IERS
-#					Observatoire de Paris, France
+# 
+# 					Daniel GAMBIS
+# 					Director
+# 					Earth Orientation Center of IERS
+# 					Observatoire de Paris, France
diff --git a/timezone/northamerica b/timezone/northamerica
index 73e2470e0b..6e755b04b3 100644
--- a/timezone/northamerica
+++ b/timezone/northamerica
@@ -1,13 +1,11 @@
-# @(#)northamerica	8.1
-# <pre>
-
+# @(#)northamerica	7.69
 # also includes Central America and the Caribbean
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (1999-03-22):
+# From Paul Eggert <eggert@twinsun.com> (1999-03-22):
 # A reliable and entertaining source about time zones is
 # Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
 
@@ -26,16 +24,12 @@
 # His proposal was adopted by the railroads on 1883-11-18 at 12:00,
 # and the most of the country soon followed suit.
 
-# From Paul Eggert (2005-04-16):
-# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
-# See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).
-
-# From Paul Eggert (1995-12-19):
+# From Paul Eggert <eggert@twinsun.com> (1995-12-19):
 # A good source for time zone historical data in the US is
 # Thomas G. Shanks, The American Atlas (5th edition),
 # San Diego: ACS Publications, Inc. (1991).
 # Make sure you have the errata sheet; the book is somewhat useless without it.
-# It is the source for most of the pre-1991 US and Puerto Rico entries below.
+# It is the source for the US and Puerto Rico entries below.
 
 # From Paul Eggert (2001-03-06):
 # Daylight Saving Time was first suggested as a joke by Benjamin Franklin
@@ -54,8 +48,7 @@
 #	to push people into bed earlier, and get them up earlier, to make
 #	them healthy, wealthy and wise in spite of themselves.
 #
-#	-- Robertson Davies, The diary of Samuel Marchbanks,
-#	   Clarke, Irwin (1947), XIX, Sunday
+#	-- Robertson Davies, The Diary of Samuel Marchbanks (1947), XIX, Sunday
 #
 # For more about the first ten years of DST in the United States, see
 # Robert Garland's <a href="http://www.clpgh.org/exhibit/dst.html">
@@ -85,7 +78,7 @@
 # Time' instead of the old familiar 'Eastern War Time.'  Peace is wonderful."
 # </a> (August 1945) by way of confirmation.
 
-# From Joseph Gallant citing
+# From Joseph Gallant <notquite@hotmail.com>, citing
 # George H. Douglas, _The Early Days of Radio Broadcasting_ (1987):
 # At 7 P.M. (Eastern War Time) [on 1945-08-14], the networks were set
 # to switch to London for Attlee's address, but the American people
@@ -112,46 +105,21 @@
 #
 # He had scored a 20-second scoop on other broadcasters.
 
-# From Arthur David Olson (2005-08-22):
-# Paul has been careful to use the "US" rules only in those locations
-# that are part of the United States; this reflects the real scope of
-# U.S. government action.  So even though the "US" rules have changed
-# in the latest release, other countries won't be affected.
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	US	1918	1919	-	Mar	lastSun	2:00	1:00	D
 Rule	US	1918	1919	-	Oct	lastSun	2:00	0	S
 Rule	US	1942	only	-	Feb	9	2:00	1:00	W # War
 Rule	US	1945	only	-	Aug	14	23:00u	1:00	P # Peace
 Rule	US	1945	only	-	Sep	30	2:00	0	S
-Rule	US	1967	2006	-	Oct	lastSun	2:00	0	S
+Rule	US	1967	max	-	Oct	lastSun	2:00	0	S
 Rule	US	1967	1973	-	Apr	lastSun	2:00	1:00	D
 Rule	US	1974	only	-	Jan	6	2:00	1:00	D
 Rule	US	1975	only	-	Feb	23	2:00	1:00	D
 Rule	US	1976	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	US	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-Rule	US	2007	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	US	2007	max	-	Nov	Sun>=1	2:00	0	S
-
-# From Arthur David Olson, 2005-12-19
-# We generate the files specified below to guard against old files with
-# obsolete information being left in the time zone binary directory.
-# We limit the list to names that have appeared in previous versions of
-# this time zone package.
-# We do these as separate Zones rather than as Links to avoid problems if
-# a particular place changes whether it observes DST.
-# We put these specifications here in the northamerica file both to
-# increase the chances that they'll actually get compiled and to
-# avoid the need to duplicate the US rules in another file.
-
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone	EST		 -5:00	-	EST
-Zone	MST		 -7:00	-	MST
-Zone	HST		-10:00	-	HST
-Zone	EST5EDT		 -5:00	US	E%sT
-Zone	CST6CDT		 -6:00	US	C%sT
-Zone	MST7MDT		 -7:00	US	M%sT
-Zone	PST8PDT		 -8:00	US	P%sT
+Rule	US	1987	max	-	Apr	Sun>=1	2:00	1:00	D
+# <a href="http://thomas.loc.gov/cgi-bin/bdquery/z?d106:h.r.00177:">
+# H.R.177
+# </a> (introduced 1999-01-06) would change April to March in the above rule.
 
 # From Bob Devine (1988-01-28):
 # ...Alaska (and Hawaii) had the timezone names changed in 1967.
@@ -229,53 +197,17 @@ Zone	PST8PDT		 -8:00	US	P%sT
 # Public law 106-564 (2000-12-23) introduced the abbreviation
 # "Chamorro Standard Time" for time in Guam and the Northern Marianas.
 # See the file "australasia".
- 
-# From Arthur David Olson, 2005-08-09
-# The following was signed into law on 2005-08-08.
-#
-# H.R. 6, Energy Policy Act of 2005, SEC. 110. DAYLIGHT SAVINGS.
-#   (a) Amendment- Section 3(a) of the Uniform Time Act of 1966 (15
-#   U.S.C. 260a(a)) is amended--
-#     (1) by striking `first Sunday of April' and inserting `second
-#     Sunday of March'; and
-#     (2) by striking `last Sunday of October' and inserting `first
-#     Sunday of November'.
-#   (b) Effective Date- Subsection (a) shall take effect 1 year after the
-#   date of enactment of this Act or March 1, 2007, whichever is later.
-#   (c) Report to Congress- Not later than 9 months after the effective
-#   date stated in subsection (b), the Secretary shall report to Congress
-#   on the impact of this section on energy consumption in the United
-#   States.
-#   (d) Right to Revert- Congress retains the right to revert the
-#   Daylight Saving Time back to the 2005 time schedules once the
-#   Department study is complete.
+
 
 # US eastern time, represented by New York
 
 # Connecticut, Delaware, District of Columbia, most of Florida,
-# Georgia, southeast Indiana (Dearborn and Ohio counties), eastern Kentucky
-# (except America/Kentucky/Louisville below), Maine, Maryland, Massachusetts,
+# Georgia, southeast Indiana (Clark, Dearborn, Floyd, Harrison, and
+# Ohio counties), eastern Kentucky, Maine, Maryland, Massachusetts,
 # New Hampshire, New Jersey, New York, North Carolina, Ohio,
 # Pennsylvania, Rhode Island, South Carolina, eastern Tennessee,
 # Vermont, Virginia, West Virginia
 
-# From Dave Cantor (2004-11-02):
-# Early this summer I had the occasion to visit the Mount Washington
-# Observatory weather station atop (of course!) Mount Washington [, NH]....
-# One of the staff members said that the station was on Eastern Standard Time
-# and didn't change their clocks for Daylight Saving ... so that their
-# reports will always have times which are 5 hours behind UTC.
-
-# From Paul Eggert (2005-08-26):
-# According to today's Huntsville Times
-# <http://www.al.com/news/huntsvilletimes/index.ssf?/base/news/1125047783228320.xml&coll=1>
-# a few towns on Alabama's "eastern border with Georgia, such as Phenix City
-# in Russell County, Lanett in Chambers County and some towns in Lee County,
-# set their watches and clocks on Eastern time."  It quotes H.H. "Bubba"
-# Roberts, city administrator in Phenix City. as saying "We are in the Central
-# time zone, but we do go by the Eastern time zone because so many people work
-# in Columbus." 
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
 Rule	NYC	1920	only	-	Mar	lastSun	2:00	1:00	D
 Rule	NYC	1920	only	-	Oct	lastSun	2:00	0	S
@@ -283,7 +215,7 @@ Rule	NYC	1921	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	NYC	1921	1954	-	Sep	lastSun	2:00	0	S
 Rule	NYC	1955	1966	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/New_York	-4:56:02 -	LMT	1883 Nov 18 12:03:58
+Zone America/New_York	-4:56:02 -	LMT	1883 Nov 18 12:00
 			-5:00	US	E%sT	1920
 			-5:00	NYC	E%sT	1942
 			-5:00	US	E%sT	1946
@@ -309,7 +241,7 @@ Rule	Chicago	1922	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	Chicago	1922	1954	-	Sep	lastSun	2:00	0	S
 Rule	Chicago	1955	1966	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
+Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:00
 			-6:00	US	C%sT	1920
 			-6:00	Chicago	C%sT	1936 Mar  1 2:00
 			-5:00	-	EST	1936 Nov 15 2:00
@@ -318,17 +250,9 @@ Zone America/Chicago	-5:50:36 -	LMT	1883 Nov 18 12:09:24
 			-6:00	Chicago	C%sT	1967
 			-6:00	US	C%sT
 # Oliver County, ND switched from mountain to central time on 1992-10-25.
-Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:14:48
+Zone America/North_Dakota/Center -6:45:12 - LMT	1883 Nov 18 12:00
 			-7:00	US	M%sT	1992 Oct 25 02:00
 			-6:00	US	C%sT
-# From Paul Eggert (2006-01-20):
-# The following is not implemented yet.
-# What is the most populous city in that area?
-# From http://www.statoids.com/tus.html (2006-01-20):
-# 2003-10-26 02:00: All of Morton County, ND, and the part of Sioux
-# County, ND east of ND route 31 moved from MT to CT.  (The area
-# around Fort Yates in Sioux County and the area around Mandan in
-# Morton County were already in CT.)
 
 # US mountain time, represented by Denver
 #
@@ -345,7 +269,7 @@ Rule	Denver	1921	only	-	May	22	2:00	0	S
 Rule	Denver	1965	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	Denver	1965	1966	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Denver	-6:59:56 -	LMT	1883 Nov 18 12:00:04
+Zone America/Denver	-6:59:56 -	LMT	1883 Nov 18 12:00
 			-7:00	US	M%sT	1920
 			-7:00	Denver	M%sT	1942
 			-7:00	US	M%sT	1946
@@ -365,7 +289,7 @@ Rule	CA	1950	1966	-	Apr	lastSun	2:00	1:00	D
 Rule	CA	1950	1961	-	Sep	lastSun	2:00	0	S
 Rule	CA	1962	1966	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:07:02
+Zone America/Los_Angeles -7:52:58 -	LMT	1883 Nov 18 12:00
 			-8:00	US	P%sT	1946
 			-8:00	CA	P%sT	1967
 			-8:00	US	P%sT
@@ -431,26 +355,10 @@ Zone America/Adak	 12:13:21 -	LMT	1867 Oct 18
 			-11:00	US	B%sT	1983 Oct 30 2:00
 			-10:00	US	AH%sT	1983 Nov 30
 			-10:00	US	HA%sT
-# The following switches don't quite make our 1970 cutoff.
-#
 # Shanks writes that part of southwest Alaska (e.g. Aniak)
 # switched from -11:00 to -10:00 on 1968-09-22 at 02:00,
 # and another part (e.g. Akiak) made the same switch five weeks later.
-#
-# From David Flater (2004-11-09):
-# In e-mail, 2004-11-02, Ray Hudson, historian/liaison to the Unalaska
-# Historic Preservation Commission, provided this information, which
-# suggests that Unalaska deviated from statutory time from early 1967
-# possibly until 1983:
-#
-#  Minutes of the Unalaska City Council Meeting, January 10, 1967:
-#  "Except for St. Paul and Akutan, Unalaska is the only important
-#  location not on Alaska Standard Time.  The following resolution was
-#  made by William Robinson and seconded by Henry Swanson:  Be it
-#  resolved that the City of Unalaska hereby goes to Alaska Standard
-#  Time as of midnight Friday, January 13, 1967 (1 A.M. Saturday,
-#  January 14, Alaska Standard Time.)  This resolution was passed with
-#  three votes for and one against."
+# These switches don't quite make our 1970 cutoff.
 
 # Hawaii
 #
@@ -492,7 +400,7 @@ Zone Pacific/Honolulu	-10:31:26 -	LMT	1900 Jan  1 12:00
 # Shanks says the 1944 experiment came to an end on 1944-03-17.
 # Go with the Arizona State Library instead.
 
-Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 11:31:42
+Zone America/Phoenix	-7:28:18 -	LMT	1883 Nov 18 12:00
 			-7:00	US	M%sT	1944 Jan  1 00:01
 			-7:00	-	MST	1944 Apr  1 00:01
 			-7:00	US	M%sT	1944 Oct  1 00:01
@@ -514,9 +422,9 @@ Link America/Denver America/Shiprock
 # Lemhi, Lincoln, Madison, Minidoka, Oneida, Owyhee, Payette, Power,
 # Teton, Twin Falls, Valley, Washington counties) and eastern Oregon
 # switched four weeks late in 1974.
-#
+# 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
+Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:00
 			-8:00	US	P%sT	1923 May 13 2:00
 			-7:00	US	M%sT	1974
 			-7:00	-	MST	1974 Feb  3 2:00
@@ -527,55 +435,40 @@ Zone America/Boise	-7:44:49 -	LMT	1883 Nov 18 12:15:11
 # For a map of Indiana's time zone regions, see:
 # <a href="http://www.mccsc.edu/time.html">
 # What time is it in Indiana?
-# </a> (2005-10-30)
-#
-# From Paul Eggert (2006-01-20):
-# Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
-# with the following exceptions:
-#
-# - Gibson, Jasper, Lake, LaPorte, Newton, Porter, Posey, Spencer,
-#   Vandenburgh, and Warrick counties have been like America/Chicago.
-#
-# - Dearborn and Ohio counties have been like America/New_York.
+# </a> (1999-04-06)
 #
-# - Clark, Floyd, and Harrison counties have been like
-#   America/Kentucky/Louisville.
-#
-# - Daviess, Dubois, Knox, Martin, Perry, and Pulaski counties
-#   have been like America/Indiana/Vincennes.
-#
-# - Crawford, Pike, Starke, and Switzerland counties have their own time zone
-#   histories as noted below.
-#
-# Shanks partitioned Indiana into 345 regions, each with its own time history,
-# and wrote ``Even newspaper reports present contradictory information.''
+# From Paul Eggert (1995-12-19):
+# Indiana generally observes either EST all year, or CST/CDT,
+# but areas near Cincinnati and Louisville use those cities' timekeeping
+# and in 1969 and 1970 the whole state observed daylight time;
+# and there are other exceptions as noted below.
+# Shanks partitions Indiana into 345 regions, each with its own time history,
+# and writes ``Even newspaper reports present contradictory information.''
 # Fortunately, most of the complexity occurred before our cutoff date of 1970.
 #
+# Since 1970, EST-only Indiana has been like America/Indianapolis,
+# with exceptions noted below for Crawford, Starke, and Switzerland counties.
+# The parts of Indiana not listed below have been like America/Chicago,
+# America/Louisville, or America/New_York.
+#
 # Other than Indianapolis, the Indiana place names are so nondescript
 # that they would be ambiguous if we left them at the `America' level.
 # So we reluctantly put them all in a subdirectory `America/Indiana'.
+#
+# Most of EST-only Indiana last observed DST in 1970.
 
-# From Paul Eggert (2005-08-16):
-# http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
-
-# From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf
-# From Paul Eggert (2006-01-20):
-# It says "DOT is relocating the time zone boundary in Indiana to move Starke,
-# Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
-# Eastern Time Zone to the Central Time Zone.... The effective date of
-# this rule is 2:OO a.m. EST Sunday, April 2, 2006, which is the
-# changeover date from standard time to Daylight Saving Time."
-# Strictly speaking, this means the affected counties will change their
-# clocks twice that night, but this obviously is in error.  The intent
-# is that 01:59:59 EST be followed by 02:00:00 CDT.
+# From Paul Eggert (2001-03-06), following a tip by Markus Kuhn:
+# Pam Belluck reported in the New York Times (2001-01-31) that the
+# Indiana Legislature is considering a bill to adopt DST statewide.
+# Her article mentioned Vevay, whose post office observes a different
+# time zone from Danner's Hardware across the street.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
 Rule Indianapolis 1941	only	-	Jun	22	2:00	1:00	D
 Rule Indianapolis 1941	1954	-	Sep	lastSun	2:00	0	S
 Rule Indianapolis 1946	1954	-	Apr	lastSun	2:00	1:00	D
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
+Zone America/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:00
 			-6:00	US	C%sT	1920
 			-6:00 Indianapolis C%sT	1942
 			-6:00	US	C%sT	1946
@@ -584,66 +477,27 @@ Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
 			-6:00	-	CST	1958 Apr 27 2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006
-			-5:00	US	E%sT
+			-5:00	-	EST
+Link America/Indianapolis America/Indiana/Indianapolis
 #
-# Eastern Crawford County, Indiana, left its clocks alone in 1974,
-# as well as from 1976 through 2005.
+# Part of Crawford County, Indiana, last observed DST in 1975,
+# and left its clocks alone in 1974.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
 Rule	Marengo	1951	only	-	Apr	lastSun	2:00	1:00	D
 Rule	Marengo	1951	only	-	Sep	lastSun	2:00	0	S
 Rule	Marengo	1954	1960	-	Apr	lastSun	2:00	1:00	D
 Rule	Marengo	1954	1960	-	Sep	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:14:37
+Zone America/Indiana/Marengo -5:45:23 -	LMT	1883 Nov 18 12:00
 			-6:00	US	C%sT	1951
 			-6:00	Marengo	C%sT	1961 Apr 30 2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1974 Jan  6 2:00
 			-6:00	1:00	CDT	1974 Oct 27 2:00
 			-5:00	US	E%sT	1976
-			-5:00	-	EST	2006
-			-5:00	US	E%sT
-#
-# Daviess, Dubois, Knox, Martin, Perry, and Pulaski Counties, Indiana,
-# switched from eastern to central time in April 2006.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule Vincennes	1946	only	-	Apr	lastSun	2:00	1:00	D
-Rule Vincennes	1946	only	-	Sep	lastSun	2:00	0	S
-Rule Vincennes	1953	1954	-	Apr	lastSun	2:00	1:00	D
-Rule Vincennes	1953	1959	-	Sep	lastSun	2:00	0	S
-Rule Vincennes	1955	only	-	May	 1	0:00	1:00	D
-Rule Vincennes	1956	1963	-	Apr	lastSun	2:00	1:00	D
-Rule Vincennes	1960	only	-	Oct	lastSun	2:00	0	S
-Rule Vincennes	1961	only	-	Sep	lastSun	2:00	0	S
-Rule Vincennes	1962	1963	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Vincennes -5:50:07 - LMT	1883 Nov 18 12:09:53
-			-6:00	US	C%sT	1946
-			-6:00 Vincennes	C%sT	1964 Apr 26 2:00
-			-5:00	-	EST	1969
-			-5:00	US	E%sT	1971
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT
-# 
-# Pike County, Indiana moved from central to eastern time in 1977,
-# then switched back in 2006.
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
-Rule	Pike	1955	only	-	May	 1	0:00	1:00	D
-Rule	Pike	1955	1960	-	Sep	lastSun	2:00	0	S
-Rule	Pike	1956	1964	-	Apr	lastSun	2:00	1:00	D
-Rule	Pike	1961	1964	-	Oct	lastSun	2:00	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Petersburg -5:49:07 - LMT	1883 Nov 18 12:10:53
-			-6:00	US	C%sT	1955
-			-6:00	Pike	C%sT	1965 Apr 25 2:00
-			-5:00	-	EST	1966 Oct 30 2:00
-			-6:00	US	C%sT	1977 Oct 30 2:00
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT
+			-5:00	-	EST
 #
-# Starke County, Indiana moved from central to eastern time in 1991,
-# then switched back in 2006.
+# Starke County, Indiana
 # From Arthur David Olson (1991-10-28):
 # An article on page A3 of the Sunday, 1991-10-27 Washington Post
 # notes that Starke County switched from Central time to Eastern time as of
@@ -655,25 +509,23 @@ Rule	Starke	1955	1956	-	Oct	lastSun	2:00	0	S
 Rule	Starke	1957	1958	-	Sep	lastSun	2:00	0	S
 Rule	Starke	1959	1961	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:13:30
+Zone America/Indiana/Knox -5:46:30 -	LMT	1883 Nov 18 12:00
 			-6:00	US	C%sT	1947
 			-6:00	Starke	C%sT	1962 Apr 29 2:00
 			-5:00	-	EST	1963 Oct 27 2:00
 			-6:00	US	C%sT	1991 Oct 27 2:00
-			-5:00	-	EST	2006 Apr  2 2:00
-			-6:00	US	C%sT
+			-5:00	-	EST
 #
-# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
+# Switzerland County, Indiana, last observed DST in 1972.
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:19:44
+Zone America/Indiana/Vevay -5:40:16 -	LMT	1883 Nov 18 12:00
 			-6:00	US	C%sT	1954 Apr 25 2:00
 			-5:00	-	EST	1969
 			-5:00	US	E%sT	1973
-			-5:00	-	EST	2006
-			-5:00	US	E%sT
+			-5:00	-	EST
 
 # Part of Kentucky left its clocks alone in 1974.
-# This also includes Clark, Floyd, and Harrison counties in Indiana.
+# This also includes a part of Indiana immediately adjacent to Louisville.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
 Rule Louisville	1921	only	-	May	1	2:00	1:00	D
 Rule Louisville	1921	only	-	Sep	1	2:00	0	S
@@ -683,7 +535,7 @@ Rule Louisville	1946	only	-	Jun	2	2:00	0	S
 Rule Louisville	1950	1955	-	Sep	lastSun	2:00	0	S
 Rule Louisville	1956	1960	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
+Zone America/Louisville	-5:43:02 -	LMT	1883 Nov 18 12:00
 			-6:00	US	C%sT	1921
 			-6:00 Louisville C%sT	1942
 			-6:00	US	C%sT	1946
@@ -692,8 +544,9 @@ Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
 			-5:00	US	E%sT	1974 Jan  6 2:00
 			-6:00	1:00	CDT	1974 Oct 27 2:00
 			-5:00	US	E%sT
+Link America/Louisville America/Kentucky/Louisville
 #
-# Wayne County, Kentucky
+# Wayne, Clinton, and Russell Counties, Kentucky
 #
 # From
 # <a href="http://www.lake-cumberland.com/life/archive/news990129time.shtml">
@@ -719,7 +572,7 @@ Zone America/Kentucky/Louisville -5:43:02 -	LMT	1883 Nov 18 12:16:58
 # Federal Register 65, 160 (2000-08-17), page 50154-50158.
 # </a>
 #
-Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:20:36
+Zone America/Kentucky/Monticello -5:39:24 - LMT	1883 Nov 18 12:00
 			-6:00	US	C%sT	1946
 			-6:00	-	CST	1968
 			-6:00	US	C%sT	2000 Oct 29  2:00
@@ -790,8 +643,7 @@ Zone America/Detroit	-5:32:11 -	LMT	1905
 			-5:00	-	EST	1975 Apr 27 2:00
 			-5:00	US	E%sT
 #
-# Dickinson, Gogebic, Iron, and Menominee Counties, Michigan,
-# switched from EST to CST/CDT in 1973.
+# The Michigan border with Wisconsin switched from EST to CST/CDT in 1973.
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER
 Rule Menominee	1946	only	-	Apr	lastSun	2:00	1:00	D
 Rule Menominee	1946	only	-	Sep	lastSun	2:00	0	S
@@ -815,10 +667,21 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 # _Los Angeles Times_ (1998-11-10), A1, A10; it cites
 # Jimmy Skaggs, _The Great Guano Rush_ (1994).
 
+# Old names, for S5 users
+
+# Link	LINK-FROM		LINK-TO
+Link	America/New_York	EST5EDT
+Link	America/Chicago		CST6CDT
+Link	America/Denver		MST7MDT
+Link	America/Los_Angeles	PST8PDT
+Link	America/Indianapolis	EST
+Link	America/Phoenix		MST
+Link	Pacific/Honolulu	HST
+
 ################################################################################
 
 
-# From Paul Eggert (1999-10-29):
+# From Paul Eggert <eggert@twinsun.com> (1999-10-29):
 # A good source for time zone historical data outside the US is
 # Thomas G. Shanks, The International Atlas (5th edition),
 # San Diego: ACS Publications, Inc. (1999).
@@ -846,7 +709,7 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 
 # Canada
 
-# From Alain LaBont<e'> (1994-11-14):
+# From Alain LaBont<e'> <ALB@immedia.ca> (1994-11-14):
 # I post here the time zone abbreviations standardized in Canada
 # for both English and French in the CAN/CSA-Z234.4-89 standard....
 #
@@ -875,42 +738,23 @@ Zone America/Menominee	-5:50:27 -	LMT	1885 Sep 18 12:00
 #	T: de Terre-Neuve
 #	Y: du Yukon		Yukon
 #
-# From Paul Eggert (1994-11-22):
+# From Paul Eggert <eggert@twinsun.com> (1994-11-22):
 # Alas, this sort of thing must be handled by localization software.
 
 # Unless otherwise specified, the data for Canada are all from Shanks.
 
-# From Paul Eggert (2005-12-21):
+# From Paul Eggert (2000-10-02):
 # H. David Matthews and Mary Vincent's map
-# <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp">
+# <a href="http://www.canadiangeographic.ca/SO98/geomap.htm">
 # "It's about TIME", _Canadian Geographic_ (September-October 1998)
 # </a> contains detailed boundaries for regions observing nonstandard
 # time and daylight saving time arrangements in Canada circa 1998.
 #
-# INMS, the Institute for National Measurement Standards in Ottawa, has <a
-# href="http://inms-ienm.nrc-cnrc.gc.ca/en/time_services/daylight_saving_e.php">
+# INMS, the Institute for National Measurement Standards in Ottawa, has
+# <a href="http://www.nrc.ca/inms/time/tze.html">
 # information about standard and daylight saving time zones in Canada.
 # </a> (updated periodically).
 # Its unofficial information is often taken from Matthews and Vincent.
-#
-# CBC News reported that Ontario and Manitoba have announced plans to
-# follow the US change, and that Nova Scotia is considering it; see
-# <http://www.cbc.ca/news/background/daylightsavingtime/> (2005-10-21).
-# CBC news also reported that Prince Edward Island is the first
-# province in Atlantic Canada to follow the US change, and that Quebec
-# had agreed; see <http://www.cbc.ca/pei/story/pe_daylight_20051207.html>
-# (2005-12-07).
-#
-# To reflect all this, the Canada and Winn rules have been adjusted to
-# agree with the 2007 US change.  This means we assume most of Canada
-# will fall into line.  However, Alberta, British Columbia,
-# Newfoundland, Northwest Territories, and Yukon already have separate
-# rules in our database, so for now we'll leave them alone, which
-# means that we currently assume these regions will not change their
-# rules and will disagree with the US starting in 2007.  This
-# assumption is probably incorrect, with the possible exception of
-# Newfoundland.  We plan to adjust the Edm, Vanc, StJohns, and NT_YK
-# rules as the corresponding provinces make their announcements.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Canada	1918	only	-	Apr	14	2:00	1:00	D
@@ -919,10 +763,8 @@ Rule	Canada	1942	only	-	Feb	 9	2:00	1:00	W # War
 Rule	Canada	1945	only	-	Aug	14	23:00u	1:00	P # Peace
 Rule	Canada	1945	only	-	Sep	30	2:00	0	S
 Rule	Canada	1974	1986	-	Apr	lastSun	2:00	1:00	D
-Rule	Canada	1974	2006	-	Oct	lastSun	2:00	0	S
-Rule	Canada	1987	2006	-	Apr	Sun>=1	2:00	1:00	D
-Rule	Canada	2007	max	-	Mar	Sun>=8	2:00	1:00	D
-Rule	Canada	2007	max	-	Nov	Sun>=1	2:00	0	S
+Rule	Canada	1974	max	-	Oct	lastSun	2:00	0	S
+Rule	Canada	1987	max	-	Apr	Sun>=1	2:00	1:00	D
 
 
 # Newfoundland (and far southeast Labrador)
@@ -987,7 +829,7 @@ Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
 			-4:00	StJohns	A%sT
 
 
-# west Labrador, Nova Scotia, Prince Edward I
+# west Labrador, New Brunswick, Nova Scotia, Prince Edward I
 
 # From Paul Eggert (1996-06-12):
 # Shanks writes that since 1970 most of this region has been like Halifax.
@@ -996,48 +838,53 @@ Zone America/Goose_Bay	-4:01:40 -	LMT	1884 # Happy Valley-Goose Bay
 # Shanks also writes that Liverpool, NS was the only town in Canada to observe
 # DST in 1971 but not 1970; for now we'll assume this is a typo.
 
+# From Paul Eggert (2000-10-02):
+# INMS (2000-09-12) says that, since 1988 at least, New Brunswick switches
+# at 00:01 local time.  FIXME: verify and create a new Zone for this.
+
+
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Halifax	1916	only	-	Apr	 1	0:00	1:00	D
-Rule	Halifax	1916	only	-	Oct	 1	0:00	0	S
-Rule	Halifax	1920	only	-	May	 9	0:00	1:00	D
-Rule	Halifax	1920	only	-	Aug	29	0:00	0	S
-Rule	Halifax	1921	only	-	May	 6	0:00	1:00	D
-Rule	Halifax	1921	1922	-	Sep	 5	0:00	0	S
-Rule	Halifax	1922	only	-	Apr	30	0:00	1:00	D
-Rule	Halifax	1923	1925	-	May	Sun>=1	0:00	1:00	D
-Rule	Halifax	1923	only	-	Sep	 4	0:00	0	S
-Rule	Halifax	1924	only	-	Sep	15	0:00	0	S
-Rule	Halifax	1925	only	-	Sep	28	0:00	0	S
-Rule	Halifax	1926	only	-	May	16	0:00	1:00	D
-Rule	Halifax	1926	only	-	Sep	13	0:00	0	S
-Rule	Halifax	1927	only	-	May	 1	0:00	1:00	D
-Rule	Halifax	1927	only	-	Sep	26	0:00	0	S
-Rule	Halifax	1928	1931	-	May	Sun>=8	0:00	1:00	D
-Rule	Halifax	1928	only	-	Sep	 9	0:00	0	S
-Rule	Halifax	1929	only	-	Sep	 3	0:00	0	S
-Rule	Halifax	1930	only	-	Sep	15	0:00	0	S
-Rule	Halifax	1931	1932	-	Sep	Mon>=24	0:00	0	S
-Rule	Halifax	1932	only	-	May	 1	0:00	1:00	D
-Rule	Halifax	1933	only	-	Apr	30	0:00	1:00	D
-Rule	Halifax	1933	only	-	Oct	 2	0:00	0	S
-Rule	Halifax	1934	only	-	May	20	0:00	1:00	D
-Rule	Halifax	1934	only	-	Sep	16	0:00	0	S
-Rule	Halifax	1935	only	-	Jun	 2	0:00	1:00	D
-Rule	Halifax	1935	only	-	Sep	30	0:00	0	S
-Rule	Halifax	1936	only	-	Jun	 1	0:00	1:00	D
-Rule	Halifax	1936	only	-	Sep	14	0:00	0	S
-Rule	Halifax	1937	1938	-	May	Sun>=1	0:00	1:00	D
-Rule	Halifax	1937	1941	-	Sep	Mon>=24	0:00	0	S
-Rule	Halifax	1939	only	-	May	28	0:00	1:00	D
-Rule	Halifax	1940	1941	-	May	Sun>=1	0:00	1:00	D
-Rule	Halifax	1946	1949	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1946	1949	-	Sep	lastSun	2:00	0	S
-Rule	Halifax	1951	1954	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1951	1954	-	Sep	lastSun	2:00	0	S
-Rule	Halifax	1956	1959	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1956	1959	-	Sep	lastSun	2:00	0	S
-Rule	Halifax	1962	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
+Rule Halifax	1916	only	-	Apr	 1	0:00	1:00	D
+Rule Halifax	1916	only	-	Oct	 1	0:00	0	S
+Rule Halifax	1920	only	-	May	 9	0:00	1:00	D
+Rule Halifax	1920	only	-	Aug	29	0:00	0	S
+Rule Halifax	1921	only	-	May	 6	0:00	1:00	D
+Rule Halifax	1921	1922	-	Sep	 5	0:00	0	S
+Rule Halifax	1922	only	-	Apr	30	0:00	1:00	D
+Rule Halifax	1923	1925	-	May	Sun>=1	0:00	1:00	D
+Rule Halifax	1923	only	-	Sep	 4	0:00	0	S
+Rule Halifax	1924	only	-	Sep	15	0:00	0	S
+Rule Halifax	1925	only	-	Sep	28	0:00	0	S
+Rule Halifax	1926	only	-	May	16	0:00	1:00	D
+Rule Halifax	1926	only	-	Sep	13	0:00	0	S
+Rule Halifax	1927	only	-	May	 1	0:00	1:00	D
+Rule Halifax	1927	only	-	Sep	26	0:00	0	S
+Rule Halifax	1928	1931	-	May	Sun>=8	0:00	1:00	D
+Rule Halifax	1928	only	-	Sep	 9	0:00	0	S
+Rule Halifax	1929	only	-	Sep	 3	0:00	0	S
+Rule Halifax	1930	only	-	Sep	15	0:00	0	S
+Rule Halifax	1931	1932	-	Sep	Mon>=24	0:00	0	S
+Rule Halifax	1932	only	-	May	 1	0:00	1:00	D
+Rule Halifax	1933	only	-	Apr	30	0:00	1:00	D
+Rule Halifax	1933	only	-	Oct	 2	0:00	0	S
+Rule Halifax	1934	only	-	May	20	0:00	1:00	D
+Rule Halifax	1934	only	-	Sep	16	0:00	0	S
+Rule Halifax	1935	only	-	Jun	 2	0:00	1:00	D
+Rule Halifax	1935	only	-	Sep	30	0:00	0	S
+Rule Halifax	1936	only	-	Jun	 1	0:00	1:00	D
+Rule Halifax	1936	only	-	Sep	14	0:00	0	S
+Rule Halifax	1937	1938	-	May	Sun>=1	0:00	1:00	D
+Rule Halifax	1937	1941	-	Sep	Mon>=24	0:00	0	S
+Rule Halifax	1939	only	-	May	28	0:00	1:00	D
+Rule Halifax	1940	1941	-	May	Sun>=1	0:00	1:00	D
+Rule Halifax	1946	1949	-	Sep	lastSun	2:00	0	S
+Rule Halifax	1946	1949	-	Apr	lastSun	2:00	1:00	D
+Rule Halifax	1951	1954	-	Sep	lastSun	2:00	0	S
+Rule Halifax	1951	1954	-	Apr	lastSun	2:00	1:00	D
+Rule Halifax	1956	1959	-	Sep	lastSun	2:00	0	S
+Rule Halifax	1956	1959	-	Apr	lastSun	2:00	1:00	D
+Rule Halifax	1962	1973	-	Apr	lastSun	2:00	1:00	D
+Rule Halifax	1962	1973	-	Oct	lastSun	2:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Halifax	-4:14:24 -	LMT	1902 Jun 15
 			-4:00	Halifax	A%sT	1918
@@ -1053,43 +900,6 @@ Zone America/Glace_Bay	-3:59:48 -	LMT	1902 Jun 15
 			-4:00	Halifax	A%sT	1974
 			-4:00	Canada	A%sT
 
-# New Brunswick
-
-# From Paul Eggert (2006-01-20):
-# New Brunswick's Time Definition Act
-# <http://www.gnb.ca/0062/PDF-acts/t-06.pdf> says they change at 00:01, and
-# <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it
-# clear that this has been the case since at least 1993.
-# For now, assume it started in 1993.  The Office of the Premier announced
-# <http://www.gnb.ca/cnb/news/pre/2005e1737pr.htm> (2005-12-23)
-# that they will bring forward proposed amendments to harmonize with the US;
-# for now assume that this will happen, but they'll still switch at 00:01.
-
-# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	Moncton	1933	1935	-	Jun	Sun>=8	1:00	1:00	D
-Rule	Moncton	1933	1935	-	Sep	Sun>=8	1:00	0	S
-Rule	Moncton	1936	1938	-	Jun	Sun>=1	1:00	1:00	D
-Rule	Moncton	1936	1938	-	Sep	Sun>=1	1:00	0	S
-Rule	Moncton	1939	only	-	May	27	1:00	1:00	D
-Rule	Moncton	1939	1941	-	Sep	Sat>=21	1:00	0	S
-Rule	Moncton	1940	only	-	May	19	1:00	1:00	D
-Rule	Moncton	1941	only	-	May	 4	1:00	1:00	D
-Rule	Moncton	1946	1972	-	Apr	lastSun	2:00	1:00	D
-Rule	Moncton	1946	1956	-	Sep	lastSun	2:00	0	S
-Rule	Moncton	1956	1972	-	Oct	lastSun	2:00	0	S
-Rule	Moncton	1993	2006	-	Apr	Sun>=1	0:01	1:00	D
-Rule	Moncton	1993	2006	-	Oct	lastSun	0:01	0	S
-Rule	Moncton	2007	max	-	Mar	Sun>=8	0:01	1:00	D
-Rule	Moncton	2007	max	-	Nov	Sun>=1	0:01	0	S
-# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
-Zone America/Moncton	-4:19:08 -	LMT	1883 Dec  9
-			-5:00	-	EST	1902 Jun 15
-			-4:00	Canada	A%sT	1933
-			-4:00	Moncton	A%sT	1942
-			-4:00	Canada	A%sT	1946
-			-4:00	Moncton	A%sT	1973
-			-4:00	Canada	A%sT	1993
-			-4:00	Moncton	A%sT
 
 # Ontario, Quebec
 
@@ -1280,13 +1090,11 @@ Rule	Winn	1963	only	-	Apr	lastSun	2:00	1:00	D
 Rule	Winn	1963	only	-	Sep	22	2:00	0	S
 Rule	Winn	1966	1986	-	Apr	lastSun	2:00	1:00	D
 Rule	Winn	1966	1986	-	Oct	lastSun	2:00	0	S
-Rule	Winn	1987	2006	-	Apr	Sun>=1	2:00s	1:00	D
+Rule	Winn	1987	max	-	Apr	Sun>=1	2:00	1:00	D
 # From Paul Eggert (2000-10-02):
 # INMS (2000-09-12) says that, since 1988 at least, Manitoba switches from
 # DST at 03:00 local time.  For now, assume it started in 1987.
-Rule	Winn	1987	2006	-	Oct	lastSun	2:00s	0	S
-Rule	Winn	2007	max	-	Mar	Sun>=8	2:00s	1:00	D
-Rule	Winn	2007	max	-	Nov	Sun>=1	2:00s	0	S
+Rule	Winn	1987	max	-	Oct	lastSun	2:00s	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Winnipeg	-6:28:36 -	LMT	1887 Jul 16
 			-6:00	Winn	C%sT
@@ -1315,7 +1123,7 @@ Zone America/Winnipeg	-6:28:36 -	LMT	1887 Jul 16
 # Matthews and Vincent (1998) write that Denare Beach and Creighton
 # are like Winnipeg, in violation of Saskatchewan law.
 
-# From W. Jones (1992-11-06):
+# From W. Jones <jones@skdad.usask.ca> (1992-11-06):
 # The. . .below is based on information I got from our law library, the
 # provincial archives, and the provincial Community Services department.
 # A precise history would require digging through newspaper archives, and
@@ -1433,7 +1241,7 @@ Zone America/Dawson_Creek -8:00:56 -	LMT	1884
 
 # From Paul Eggert (1999-10-29):
 # Dawson switched to PST in 1973.  Inuvik switched to MST in 1979.
-# Mathew Englander (1996-10-07) gives the following refs:
+# Mathew Englander <mathew@io.org> (1996-10-07) gives the following refs:
 #	* 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
 #	c. 7 defines Yukon standard time as UTC-9.  This is still valid;
 #	see Interpretation Act, R.S.C. 1985, c. I-21, s. 35(1).
@@ -1458,6 +1266,8 @@ Zone America/Dawson_Creek -8:00:56 -	LMT	1884
 # </a> (1999) reports that Pangnirtung operates on eastern time,
 # and that Coral Harbour does not observe DST.  We don't know when
 # Pangnirtung switched to eastern time; we'll guess 1995.
+# We'll ignore the claim about Coral Harbour for now,
+# since we have no further info.
 
 # From Rives McDow (1999-11-08):
 # On October 31, when the rest of Nunavut went to Central time,
@@ -1532,23 +1342,6 @@ Zone America/Dawson_Creek -8:00:56 -	LMT	1884
 # more.
 # [Also see <http://www.nunatsiaq.com/nunavut/nvt10309_06.html> (2001-03-09).]
 
-# From Gwillim Law (2005-05-21):
-# According to maps at
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SWE.jpg
-# http://inms-ienm.nrc-cnrc.gc.ca/images/time_services/TZ01SSE.jpg
-# (both dated 2003), and
-# http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp
-# (from a 1998 Canadian Geographic article), the de facto and de jure time
-# for Southampton Island (at the north end of Hudson Bay) is UTC-5 all year
-# round.  Using Google, it's easy to find other websites that confirm this.
-# I wasn't able to find how far back this time regimen goes, but since it
-# predates the creation of Nunavut, it probably goes back many years....
-# The Inuktitut name of Coral Harbour is Sallit, but it's rarely used.
-#
-# From Paul Eggert (2005-07-26):
-# For lack of better information, assume that Southampton Island observed
-# daylight saving only during wartime.
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	NT_YK	1918	only	-	Apr	14	2:00	1:00	D
 Rule	NT_YK	1918	only	-	Oct	27	2:00	0	S
@@ -1572,9 +1365,6 @@ Zone America/Iqaluit	-4:33:52 -	LMT	1884 # Frobisher Bay before 1987
 			-5:00	NT_YK	E%sT	1999 Oct 31 2:00
 			-6:00	Canada	C%sT	2000 Oct 29 2:00
 			-5:00	Canada	E%sT
-Zone America/Coral_Harbour -5:32:40 -	LMT	1884
-			-5:00	NT_YK	E%sT	1946
-			-5:00	-	EST
 Zone America/Rankin_Inlet -6:08:40 -	LMT	1884
 			-6:00	NT_YK	C%sT	2000 Oct 29 2:00
 			-5:00	-	EST	2001 Apr  1 3:00
@@ -1614,7 +1404,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # Shanks reports that Baja was at -8:00 in 1922/1923.
 # Shanks says the 1930 transition in Baja was 1930-11-16.
 # Shanks reports no DST during summer 1931.
-# Shanks reports a transition at 1932-03-30 23:00, not 1932-04-01.
+# Shanks reports a transition at 1032-03-30 23:00, not 1932-04-01.
 # Shanks does not report transitions for Baja in 1945 or 1948.
 # Shanks reports southern Mexico transitions on 1981-12-01, not 12-23.
 # Shanks says Quintana Roo switched to -6:00 on 1982-12-02, and to -5:00
@@ -1630,7 +1420,7 @@ Zone America/Dawson	-9:17:40 -	LMT	1900 Aug 20
 # Shanks gives 1942-04-01 instead of 1942-04-24, and omits the 1981
 # and 1988 DST experiments.  Go with spin.com.mx.
 
-# From Alan Perry (1996-02-15):
+# From Alan Perry <alan.perry@eng.sun.com> (1996-02-15):
 # A guy from our Mexico subsidiary finally found the Presidential Decree
 # outlining the timezone changes in Mexico.
 #
@@ -1941,20 +1731,6 @@ Zone America/Costa_Rica	-5:36:20 -	LMT	1890		# San Jose
 # to DST--and one more hour on 1999-04-04--when the announcers will have
 # returned to Baltimore, which switches on that date.)
 
-# From Evert van der Veer via Steffen Thorsen (2004-10-28):
-# Cuba is not going back to standard time this year.
-# From Paul Eggert (2004-10-28):
-# http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html
-# says that it's due to a problem at the Antonio Guiteras
-# thermoelectric plant, and says "This October there will be no return
-# to normal hours (after daylight saving time)".
-# For now, let's assume that it's a one-year temporary measure.
-
-# From Carlos A. Carnero Delgado (2005-11-12):
-# This year (just like in 2004-2005) there's no change in time zone
-# adjustment in Cuba.  We will stay in daylight saving time:
-# http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Cuba	1928	only	-	Jun	10	0:00	1:00	D
 Rule	Cuba	1928	only	-	Oct	10	0:00	0	S
@@ -1983,9 +1759,8 @@ Rule	Cuba	1991	1995	-	Oct	Sun>=8	0:00s	0	S
 Rule	Cuba	1996	only	-	Oct	 6	0:00s	0	S
 Rule	Cuba	1997	only	-	Oct	12	0:00s	0	S
 Rule	Cuba	1998	1999	-	Mar	lastSun	0:00s	1:00	D
-Rule	Cuba	1998	2003	-	Oct	lastSun	0:00s	0	S
+Rule	Cuba	1998	max	-	Oct	lastSun	0:00s	0	S
 Rule	Cuba	2000	max	-	Apr	Sun>=1	0:00s	1:00	D
-Rule	Cuba	2006	max	-	Oct	lastSun	0:00s	0	S
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Havana	-5:29:28 -	LMT	1890
@@ -2065,26 +1840,6 @@ Zone America/Guatemala	-6:02:04 -	LMT	1918 Oct 5
 			-6:00	Guat	C%sT
 
 # Haiti
-# From Gwillim Law (2005-04-15):
-# Risto O. Nykanen wrote me that Haiti is now on DST.
-# I searched for confirmation, and I found a
-# <a href="http://www.haitianconsulate.org/time.doc"> press release
-# on the Web page of the Haitian Consulate in Chicago (2005-03-31),
-# </a>.  Translated from French, it says:
-#
-#  "The Prime Minister's Communication Office notifies the public in general
-#   and the press in particular that, following a decision of the Interior
-#   Ministry and the Territorial Collectivities [I suppose that means the
-#   provinces], Haiti will move to Eastern Daylight Time in the night from next
-#   Saturday the 2nd to Sunday the 3rd.
-#
-#  "Consequently, the Prime Minister's Communication Office wishes to inform
-#   the population that the country's clocks will be set forward one hour
-#   starting at midnight.  This provision will hold until the last Saturday in
-#   October 2005.
-#
-#  "Port-au-Prince, March 31, 2005"
-
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Haiti	1983	only	-	May	8	0:00	1:00	D
 Rule	Haiti	1984	1987	-	Apr	lastSun	0:00	1:00	D
@@ -2092,8 +1847,6 @@ Rule	Haiti	1983	1987	-	Oct	lastSun	0:00	0	S
 # Shanks says AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.  Go with IATA.
 Rule	Haiti	1988	1997	-	Apr	Sun>=1	1:00s	1:00	D
 Rule	Haiti	1988	1997	-	Oct	lastSun	1:00s	0	S
-Rule	Haiti	2005	only	-	Apr	Sun>=1	0:00	1:00	D
-Rule	Haiti	2005	only	-	Oct	lastSun	0:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Port-au-Prince -4:49:20 -	LMT	1890
 			-4:49	-	PPMT	1917 Jan 24 12:00 # P-a-P MT
@@ -2145,44 +1898,11 @@ Zone America/Montserrat	-4:08:52 -	LMT	1911 Jul 1 0:01   # Olveston
 # Nicaragua seems to be back at -6:00 but I have not been able to find when
 # they changed from -5:00.
 #
-# From Steffen Thorsen (2005-04-12):
-# I've got reports from 8 different people that Nicaragua just started
-# DST on Sunday 2005-04-10, in order to save energy because of
-# expensive petroleum.  The exact end date for DST is not yet
-# announced, only "September" but some sites also say "mid-September".
-# Some background information is available on the President's official site:
-# http://www.presidencia.gob.ni/Presidencia/Files_index/Secretaria/Notas%20de%20Prensa/Presidente/2005/ABRIL/Gobierno-de-nicaragua-adelanta-hora-oficial-06abril.htm
-# The Decree, no 23-2005 is available here:
-# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2005/Decreto%2023-2005%20Se%20adelanta%20en%20una%20hora%20en%20todo%20el%20territorio%20nacional%20apartir%20de%20las%2024horas%20del%2009%20de%20Abril.pdf
-#
-# From Paul Eggert (2005-05-01):
-# The decree doesn't say anything about daylight saving, but for now let's
-# assume that it is daylight saving and that they'll switch back on the
-# 3rd Sunday in September.
-#
-# From Gwillim Law (2005-04-21):
-# The Associated Press story on the time change, which can be found at
-# http://www.lapalmainteractivo.com/guias/content/gen/ap/America_Latina/AMC_GEN_NICARAGUA_HORA.html
-# and elsewhere, says (fifth paragraph, translated from Spanish):  "The last
-# time that a change of clocks was applied to save energy was in the year 2000
-# during the Arnoldo Aleman administration."...
-# The northamerica file says that Nicaragua has been on UTC-6 continuously
-# since December 1998.  I wasn't able to find any details of Nicaraguan time
-# changes in 2000.  Perhaps a note could be added to the northamerica file, to
-# the effect that we have indirect evidence that DST was observed in 2000.
-#
-# From Jesper Norgaard Welen (2005-11-02):
-# Nicaragua left DST the 2005-10-02 at 00:00 (local time).
-# http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
-# (2005-09-26)
-#
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Nic	1979	1980	-	Mar	Sun>=16	0:00	1:00	D
 Rule	Nic	1979	1980	-	Jun	Mon>=23	0:00	0	S
-Rule	Nic	1992	only	-	Jan	 1	4:00	1:00	D
+Rule	Nic	1992	only	-	Jan	1	4:00	1:00	D
 Rule	Nic	1992	only	-	Sep	24	0:00	0	S
-Rule	Nic	2005	only	-	Apr	10	0:00	1:00	D
-Rule	Nic	2005	only	-	Oct	 2	0:00	0	S
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	America/Managua	-5:45:08 -	LMT	1890
 			-5:45:12 -	MMT	1934 Jun 23 # Managua Mean Time?
@@ -2190,7 +1910,7 @@ Zone	America/Managua	-5:45:08 -	LMT	1890
 			-5:00	-	EST	1975 Feb 16
 			-6:00	Nic	C%sT	1993 Jan 1 4:00
 			-5:00	-	EST	1998 Dec
-			-6:00	Nic	C%sT
+			-6:00	-	CST
 
 # Panama
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
diff --git a/timezone/pacificnew b/timezone/pacificnew
index 667940bf53..86dd688341 100644
--- a/timezone/pacificnew
+++ b/timezone/pacificnew
@@ -1,4 +1,4 @@
-# @(#)pacificnew	8.1
+# @(#)pacificnew	7.10
 
 # From Arthur David Olson (1989-04-05):
 # On 1989-04-05, the U. S. House of Representatives passed (238-154) a bill
diff --git a/timezone/private.h b/timezone/private.h
index 2837b70c10..57663052f0 100644
--- a/timezone/private.h
+++ b/timezone/private.h
@@ -4,7 +4,7 @@
 
 /*
 ** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson.
+** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
 */
 
 /*
@@ -21,12 +21,10 @@
 
 #ifndef lint
 #ifndef NOID
-static char	privatehid[] = "@(#)private.h	8.2";
+static char	privatehid[] = "@(#)private.h	7.54";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
-#define GRANDPARENTED	"Local time zone must be set--see zic manual page"
-
 /*
 ** Defaults for preprocessor symbols.
 ** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'.
@@ -89,17 +87,17 @@ static char	privatehid[] = "@(#)private.h	8.2";
 #include "stdio.h"
 #include "errno.h"
 #include "string.h"
-#include "limits.h"	/* for CHAR_BIT et al. */
+#include "limits.h"	/* for CHAR_BIT */
 #include "time.h"
 #include "stdlib.h"
 
-#if HAVE_GETTEXT
+#if HAVE_GETTEXT - 0
 #include "libintl.h"
-#endif /* HAVE_GETTEXT */
+#endif /* HAVE_GETTEXT - 0 */
 
-#if HAVE_SYS_WAIT_H
+#if HAVE_SYS_WAIT_H - 0
 #include <sys/wait.h>	/* for WIFEXITED and WEXITSTATUS */
-#endif /* HAVE_SYS_WAIT_H */
+#endif /* HAVE_SYS_WAIT_H - 0 */
 
 #ifndef WIFEXITED
 #define WIFEXITED(status)	(((status) & 0xff) == 0)
@@ -108,68 +106,37 @@ static char	privatehid[] = "@(#)private.h	8.2";
 #define WEXITSTATUS(status)	(((status) >> 8) & 0xff)
 #endif /* !defined WEXITSTATUS */
 
-#if HAVE_UNISTD_H
+#if HAVE_UNISTD_H - 0
 #include "unistd.h"	/* for F_OK and R_OK */
-#endif /* HAVE_UNISTD_H */
+#endif /* HAVE_UNISTD_H - 0 */
 
-#if !HAVE_UNISTD_H
+#if !(HAVE_UNISTD_H - 0)
 #ifndef F_OK
 #define F_OK	0
 #endif /* !defined F_OK */
 #ifndef R_OK
 #define R_OK	4
 #endif /* !defined R_OK */
-#endif /* !HAVE_UNISTD_H */
+#endif /* !(HAVE_UNISTD_H - 0) */
 
-/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
+/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX.  */
 #define is_digit(c) ((unsigned)(c) - '0' <= 9)
 
 /*
-** Define HAVE_STDINT_H's default value here, rather than at the
-** start, since __GLIBC__'s value depends on previously-included
-** files.
-** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
-*/
-#ifndef HAVE_STDINT_H
-#define HAVE_STDINT_H \
-	(199901 <= __STDC_VERSION__ || \
-	2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
-#endif /* !defined HAVE_STDINT_H */
-
-#if HAVE_STDINT_H
-#include "stdint.h"
-#endif /* !HAVE_STDINT_H */
-
-#ifndef INT_FAST64_MAX
-/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX.  */
-#if defined LLONG_MAX || defined __LONG_LONG_MAX__
-typedef long long	int_fast64_t;
-#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#if (LONG_MAX >> 31) < 0xffffffff
-Please use a compiler that supports a 64-bit integer type (or wider);
-you may need to compile with "-DHAVE_STDINT_H".
-#endif /* (LONG_MAX >> 31) < 0xffffffff */
-typedef long		int_fast64_t;
-#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#endif /* !defined INT_FAST64_MAX */
-
-#ifndef INT32_MAX
-#define INT32_MAX 0x7fffffff
-#endif /* !defined INT32_MAX */
-#ifndef INT32_MIN
-#define INT32_MIN (-1 - INT32_MAX)
-#endif /* !defined INT32_MIN */
-
-/*
 ** Workarounds for compilers/systems.
 */
 
 /*
-** If your compiler lacks prototypes, "#define P(x) ()".
+** SunOS 4.1.1 cc lacks prototypes.
 */
 
 #ifndef P
+#ifdef __STDC__
 #define P(x)	x
+#endif /* defined __STDC__ */
+#ifndef __STDC__
+#define P(x)	()
+#endif /* !defined __STDC__ */
 #endif /* !defined P */
 
 /*
@@ -241,15 +208,15 @@ extern char *	asctime_r();
 /*
 ** Private function declarations.
 */
+char *	icalloc P((int nelem, int elsize));
+char *	icatalloc P((char * old, const char * new));
+char *	icpyalloc P((const char * string));
+char *	imalloc P((int n));
+void *	irealloc P((void * pointer, int size));
+void	icfree P((char * pointer));
+void	ifree P((char * pointer));
+char *	scheck P((const char *string, const char *format));
 
-char *		icalloc P((int nelem, int elsize));
-char *		icatalloc P((char * old, const char * new));
-char *		icpyalloc P((const char * string));
-char *		imalloc P((int n));
-void *		irealloc P((void * pointer, int size));
-void		icfree P((char * pointer));
-void		ifree P((char * pointer));
-const char *	scheck P((const char * string, const char * format));
 
 /*
 ** Finally, some convenience items.
@@ -271,15 +238,6 @@ const char *	scheck P((const char * string, const char * format));
 #define TYPE_SIGNED(type) (((type) -1) < 0)
 #endif /* !defined TYPE_SIGNED */
 
-/*
-** Since the definition of TYPE_INTEGRAL contains floating point numbers,
-** it cannot be used in preprocessor directives.
-*/
-
-#ifndef TYPE_INTEGRAL
-#define TYPE_INTEGRAL(type) (((type) 0.5) != 0.5)
-#endif /* !defined TYPE_INTEGRAL */
-
 #ifndef INT_STRLEN_MAXIMUM
 /*
 ** 302 / 1000 is log10(2.0) rounded up.
@@ -288,8 +246,7 @@ const char *	scheck P((const char * string, const char * format));
 ** add one more for a minus sign if the type is signed.
 */
 #define INT_STRLEN_MAXIMUM(type) \
-	((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + \
-	1 + TYPE_SIGNED(type))
+    ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))
 #endif /* !defined INT_STRLEN_MAXIMUM */
 
 /*
@@ -323,11 +280,11 @@ const char *	scheck P((const char * string, const char * format));
 */
 
 #ifndef _
-#if HAVE_GETTEXT
+#if HAVE_GETTEXT - 0
 #define _(msgid) gettext(msgid)
-#else /* !HAVE_GETTEXT */
+#else /* !(HAVE_GETTEXT - 0) */
 #define _(msgid) msgid
-#endif /* !HAVE_GETTEXT */
+#endif /* !(HAVE_GETTEXT - 0) */
 #endif /* !defined _ */
 
 #ifndef TZ_DOMAIN
@@ -341,26 +298,6 @@ char *asctime_r P((struct tm const *, char *));
 char *ctime_r P((time_t const *, char *));
 #endif /* HAVE_INCOMPATIBLE_CTIME_R */
 
-#ifndef YEARSPERREPEAT
-#define YEARSPERREPEAT		400	/* years before a Gregorian repeat */
-#endif /* !defined YEARSPERREPEAT */
-
-/*
-** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
-*/
-
-#ifndef AVGSECSPERYEAR
-#define AVGSECSPERYEAR		31556952L
-#endif /* !defined AVGSECSPERYEAR */
-
-#ifndef SECSPERREPEAT
-#define SECSPERREPEAT		((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
-#endif /* !defined SECSPERREPEAT */
- 
-#ifndef SECSPERREPEAT_BITS
-#define SECSPERREPEAT_BITS	34	/* ceil(log2(SECSPERREPEAT)) */
-#endif /* !defined SECSPERREPEAT_BITS */
-
 /*
 ** UNIX was a registered trademark of The Open Group in 2003.
 */
diff --git a/timezone/scheck.c b/timezone/scheck.c
index bc156379a0..39feeba701 100644
--- a/timezone/scheck.c
+++ b/timezone/scheck.c
@@ -1,6 +1,6 @@
 #ifndef lint
 #ifndef NOID
-static char	elsieid[] = "@(#)scheck.c	8.17";
+static char	elsieid[] = "@(#)scheck.c	8.15";
 #endif /* !defined lint */
 #endif /* !defined NOID */
 
@@ -8,7 +8,7 @@ static char	elsieid[] = "@(#)scheck.c	8.17";
 
 #include "private.h"
 
-const char *
+char *
 scheck(string, format)
 const char * const	string;
 const char * const	format;
@@ -17,10 +17,11 @@ const char * const	format;
 	register const char *	fp;
 	register char *		tp;
 	register int		c;
-	register const char *	result;
+	register char *		result;
 	char			dummy;
+	static char		nada;
 
-	result = "";
+	result = &nada;
 	if (string == NULL || format == NULL)
 		return result;
 	fbuf = imalloc((int) (2 * strlen(format) + 4));
diff --git a/timezone/solar87 b/timezone/solar87
index 71839320ad..3f32347973 100644
--- a/timezone/solar87
+++ b/timezone/solar87
@@ -1,4 +1,4 @@
-# @(#)solar87	8.1
+# @(#)solar87	7.3
 
 # So much for footnotes about Saudi Arabia.
 # Apparent noon times below are for Riyadh; your mileage will vary.
@@ -381,8 +381,8 @@ Rule	sol87	1987	only	-	Dec	31	12:02:45s -0:02:45 -
 # Before and after 1987, we'll operate on local mean solar time.
 
 # Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	Asia/Riyadh87	3:07:04	-		zzz	1987
-			3:07:04	sol87		zzz	1988
-			3:07:04	-		zzz
+Zone	Asia/Riyadh87	3:07:04	-		??	1987
+			3:07:04	sol87		??	1988
+			3:07:04	-		??
 # For backward compatibility...
 Link	Asia/Riyadh87	Mideast/Riyadh87
diff --git a/timezone/solar88 b/timezone/solar88
index b4cfe8e37a..41a64e5023 100644
--- a/timezone/solar88
+++ b/timezone/solar88
@@ -1,4 +1,4 @@
-# @(#)solar88	8.1
+# @(#)solar88	7.3
 
 # Apparent noon times below are for Riyadh; they're a bit off for other places.
 # Times were computed using formulas in the U.S. Naval Observatory's
@@ -381,8 +381,8 @@ Rule	sol88	1988	only	-	Dec	31	12:03:05s -0:03:05 -
 # Before and after 1988, we'll operate on local mean solar time.
 
 # Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	Asia/Riyadh88	3:07:04	-		zzz	1988
-			3:07:04	sol88		zzz	1989
-			3:07:04	-		zzz
+Zone	Asia/Riyadh88	3:07:04	-		??	1988
+			3:07:04	sol88		??	1989
+			3:07:04	-		??
 # For backward compatibility...
 Link	Asia/Riyadh88	Mideast/Riyadh88
diff --git a/timezone/solar89 b/timezone/solar89
index 8c48531461..a6d3d718d3 100644
--- a/timezone/solar89
+++ b/timezone/solar89
@@ -1,4 +1,4 @@
-# @(#)solar89	8.1
+# @(#)solar89	7.4
 
 # Apparent noon times below are for Riyadh; they're a bit off for other places.
 # Times were computed using a formula provided by the U. S. Naval Observatory:
@@ -386,8 +386,8 @@ Rule	sol89	1989	only	-	Dec	31	12:03:00s -0:03:00 -
 # Before and after 1989, we'll operate on local mean solar time.
 
 # Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
-Zone	Asia/Riyadh89	3:07:04	-		zzz	1989
-			3:07:04	sol89		zzz	1990
-			3:07:04	-		zzz
+Zone	Asia/Riyadh89	3:07:04	-		??	1989
+			3:07:04	sol89		??	1990
+			3:07:04	-		??
 # For backward compatibility...
 Link	Asia/Riyadh89	Mideast/Riyadh89
diff --git a/timezone/southamerica b/timezone/southamerica
index 3a61cd717a..912491049b 100644
--- a/timezone/southamerica
+++ b/timezone/southamerica
@@ -1,11 +1,10 @@
-# @(#)southamerica	8.1
-# <pre>
+# @(#)southamerica	7.54
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (1999-07-07):
+# From Paul Eggert <eggert@twinsun.com> (1999-07-07):
 # A good source for time zone historical data outside the U.S. is
 # Thomas G. Shanks, The International Atlas (5th edition),
 # San Diego: ACS Publications, Inc. (1999).
@@ -59,7 +58,7 @@
 # From U. S. Naval Observatory (1988-01-199):
 # ARGENTINA           3 H BEHIND   UTC
 
-# From Hernan G. Otero (1995-06-26):
+# From Hernan G. Otero <hernan@isoft.com.ar> (1995-06-26):
 # I am sending modifications to the Argentine time zone table...
 # AR was chosen because they are the ISO letters that represent Argentina.
 
@@ -87,7 +86,7 @@ Rule	Arg	1974	only	-	Jan	23	0:00	1:00	S
 Rule	Arg	1974	only	-	May	 1	0:00	0	-
 Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	S
 #
-# From Hernan G. Otero (1995-06-26):
+# From Hernan G. Otero <hernan@isoft.com.ar> (1995-06-26):
 # These corrections were contributed by InterSoft Argentina S.A.,
 # obtaining the data from the:
 # Talleres de Hidrografia Naval Argentina
@@ -97,7 +96,7 @@ Rule	Arg	1988	only	-	Dec	 1	0:00	1:00	S
 Rule	Arg	1989	1993	-	Mar	Sun>=1	0:00	0	-
 Rule	Arg	1989	1992	-	Oct	Sun>=15	0:00	1:00	S
 #
-# From Hernan G. Otero (1995-06-26):
+# From Hernan G. Otero <hernan@isoft.com.ar> (1995-06-26):
 # From this moment on, the law that mandated the daylight saving
 # time corrections was derogated and no more modifications
 # to the time zones (for daylight saving) are now made.
@@ -114,7 +113,7 @@ Rule	Arg	2000	only	-	Mar	Sun>=1	0:00	0	-
 # Argentina decided not to become one of the countries that go on or off DST.
 # So Buenos Aires should be -3 hours from GMT at all times.
 #
-# From Fabian L. Arce Jofre (2000-04-04):
+# From Fabian L. Arce Jofre <farcejofre@bigfoot.com> (2000-04-04):
 # The law that claimed DST for Argentina was derogated by President Fernando
 # de la Rua on March 2, 2000, because it would make people spend more energy
 # in the winter time, rather than less.  The change took effect on March 3.
@@ -294,7 +293,7 @@ Zone America/Argentina/Jujuy -4:21:12 -	LMT	1894 Oct 31
 			-4:00	Arg	AR%sT	2000 Mar  3
 			-3:00	-	ART
 #
-# Catamarca (CT), Chubut (CH)
+# Catamarca (CT)
 Zone America/Argentina/Catamarca -4:23:08 - LMT	1894 Oct 31
 			-4:16:48 -	CMT	1920 May
 			-4:00	-	ART	1930 Dec
@@ -324,6 +323,20 @@ Zone America/Argentina/Mendoza -4:35:16 - LMT	1894 Oct 31
 			-4:00	-	WART	2004 Sep 26
 			-3:00	-	ART
 #
+# Chubut (CH)
+# The name "Comodoro Rivadavia" exceeds the 14-byte POSIX limit.
+Zone America/Argentina/ComodRivadavia -4:30:00 - LMT	1894 Oct 31
+			-4:16:48 -	CMT	1920 May
+			-4:00	-	ART	1930 Dec
+			-4:00	Arg	AR%sT	1969 Oct  5
+			-3:00	Arg	AR%sT	1991 Mar  3
+			-4:00	-	WART	1991 Oct 20
+			-3:00	Arg	AR%sT	1999 Oct  3
+			-4:00	Arg	AR%sT	2000 Mar  3
+			-3:00	-	ART	2004 Jun  1
+			-4:00	-	WART	2004 Jun 20
+			-3:00	-	ART
+#
 # Santa Cruz (SC)
 Zone America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 Oct 31
 			-4:16:48 -	CMT	1920 May # Cordoba Mean Time
@@ -361,7 +374,7 @@ Zone	America/La_Paz	-4:32:36 -	LMT	1890
 
 # Brazil
 
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
 # The mayor of Rio recently attempted to change the time zone rules
 # just in his city, in order to leave more summer time for the tourist trade.
 # The rule change lasted only part of the day;
@@ -519,13 +532,19 @@ Rule	Brazil	1996	only	-	Feb	11	 0:00	0	-
 # adopted by same states, minus AL, SE.
 Rule	Brazil	1996	only	-	Oct	 6	 0:00	1:00	S
 Rule	Brazil	1997	only	-	Feb	16	 0:00	0	-
-# From Daniel C. Sobral (1998-02-12):
+# From Daniel C. Sobral <dcs@gns.com.br> (1998-02-12):
 # In 1997, the DS began on October 6. The stated reason was that
 # because international television networks ignored Brazil's policy on DS,
 # they bought the wrong times on satellite for coverage of Pope's visit.
 # This year, the ending date of DS was postponed to March 1
 # to help dealing with the shortages of electric power.
 #
+# From Paul Eggert (1998-02-25):
+# <a href="http://churchnet.ucsm.ac.uk/news/files2/news165.htm">
+# Brazil Prepares for Papal Visit
+# </a>,
+# Church Net UK (1997-10-02).
+#
 # Decree 2,317 (1997-09-04), adopted by same states.
 Rule	Brazil	1997	only	-	Oct	 6	 0:00	1:00	S
 # Decree <a href="http://pcdsh01.on.br/figuras/HV2495.JPG">2,495</a>
@@ -560,12 +579,11 @@ Rule	Brazil	2003	only	-	Oct	19	 0:00	1:00	S
 # Decree 5,223 (2004-10-01) reestablishes DST in MT.
 # <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2004/Decreto/D5223.htm"></a>
 Rule	Brazil	2004	only	-	Nov	 2	 0:00	1:00	S
-# Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
-# adopted by the same states as before.
-Rule	Brazil	2005	max	-	Oct	Sun>=15	 0:00	1:00	S
 # The latest ruleset listed above says that the following states observe DST:
 # DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
-# For dates after mid-2006, the above rules with TO="max" are guesses
+#
+Rule	Brazil	2005	max	-	Oct	Sun>=15	 0:00	1:00	S
+# For dates after mid-2005, the above rules with TO="max" are guesses
 # and are quite possibly wrong, but are more likely than no DST at all.
 
 
@@ -653,7 +671,7 @@ Zone America/Campo_Grande -3:38:28 -	LMT	1914
 # Mato Grosso (MT)
 Zone America/Cuiaba	-3:44:20 -	LMT	1914
 			-4:00	Brazil	AM%sT	2003 Sep 24
-			-4:00	-	AMT	2004 Oct  1
+			-4:00	-	AMT	2004 Oct  4
 			-4:00	Brazil	AM%sT
 #
 # west Para (PA), Rondonia (RO)
@@ -924,16 +942,9 @@ Rule	Para	1998	2001	-	Mar	Sun>=1	0:00	0	-
 # A decree was issued in Paraguay (no. 16350) on 2002-02-26 that changed the
 # dst method to be from the first Sunday in September to the first Sunday in
 # April.
-Rule	Para	2002	2004	-	Apr	Sun>=1	0:00	0	-
-Rule	Para	2002	2003	-	Sep	Sun>=1	0:00	1:00	S
-#
-# From Jesper Norgaard Welen (2005-01-02):
-# There are several sources that claim that Paraguay made
-# a timezone rule change in autumn 2004.
-# From Steffen Thorsen (2005-01-05):
-# Decree 1,867 (2004-03-05) <http://www.labor.com.py/noticias.asp?id=27>
-Rule	Para	2004	max	-	Oct	Sun>=15	0:00	1:00	S
-Rule	Para	2005	max	-	Mar	Sun>=8	0:00	0	-
+Rule	Para	2002	max	-	Apr	Sun>=1	0:00	0	-
+Rule	Para	2002	max	-	Sep	Sun>=1	0:00	1:00	S
+
 
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Asuncion	-3:50:40 -	LMT	1890
@@ -946,7 +957,7 @@ Zone America/Asuncion	-3:50:40 -	LMT	1890
 #
 # <a href="news:xrGmb.39935$gA1.13896113@news4.srv.hcvlny.cv.net">
 # From Evelyn C. Leeper via Mark Brader (2003-10-26):</a>
-# When we were in Peru in 1985-1986, they apparently switched over
+# When we were in Peru in 1985-1986, they apparently switched over 
 # sometime between December 29 and January 3 while we were on the Amazon.
 #
 # From Paul Eggert (2003-11-02):
@@ -992,7 +1003,7 @@ Zone America/Port_of_Spain -4:06:04 -	LMT	1912 Mar 2
 			-4:00	-	AST
 
 # Uruguay
-# From Paul Eggert (1993-11-18):
+# From Paul Eggert <eggert@twinsun.com> (1993-11-18):
 # Uruguay wins the prize for the strangest peacetime manipulation of the rules.
 # From Shanks:
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
@@ -1045,18 +1056,8 @@ Rule	Uruguay	1993	only	-	Feb	28	 0:00	0	-
 # From Eduardo Cota (2004-09-20):
 # The uruguayan government has decreed a change in the local time....
 # http://www.presidencia.gub.uy/decretos/2004091502.htm
-Rule	Uruguay	2004	only	-	Sep	19	 0:00	1:00	S
-# From Steffen Thorsen (2005-03-11):
-# Uruguay's DST was scheduled to end on Sunday, 2005-03-13, but in order to
-# save energy ... it was postponed two weeks....
-# http://www.presidencia.gub.uy/_Web/noticias/2005/03/2005031005.htm
-Rule	Uruguay	2005	only	-	Mar	27	 2:00	0	-
-# From Eduardo Cota (2005-09-27):
-# http://www.presidencia.gub.uy/_Web/decretos/2005/09/CM%20119_09%2009%202005_00001.PDF
-# This means that from 2005-10-09 at 02:00 local time, until 2006-03-12 at
-# 02:00 local time, official time in Uruguay will be at GMT -2.
-Rule	Uruguay	2005	only	-	Oct	 9	 2:00	1:00	S
-Rule	Uruguay	2006	only	-	Mar	12	 2:00	0	-
+Rule	Uruguay	2004	only	-	Sep	Sun>=15	 0:00	1:00	S
+Rule	Uruguay	2005	only	-	Mar	Sun>=8	 0:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone America/Montevideo	-3:44:44 -	LMT	1898 Jun 28
 			-3:44:44 -	MMT	1920 May  1	# Montevideo MT
diff --git a/timezone/systemv b/timezone/systemv
index 6cf9645de0..c6a6b6404b 100644
--- a/timezone/systemv
+++ b/timezone/systemv
@@ -1,24 +1,24 @@
-# @(#)systemv	8.1
+# @(#)systemv	7.3
 
 # Old rules, should the need arise.
 # No attempt is made to handle Newfoundland, since it cannot be expressed
 # using the System V "TZ" scheme (half-hour offset), or anything outside
 # North America (no support for non-standard DST start/end dates), nor
-# the changes in the DST rules in the US after 1976 (which occurred after
+# the change in the DST rules in the US in 1987 (which occurred before
 # the old rules were written).
 #
-# If you need the old rules, uncomment ## lines.
+# If you need the old rules, uncomment ## lines and comment-out Link lines.
 # Compile this *without* leap second correction for true conformance.
 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
-Rule	SystemV	min	1973	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	min	1973	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1974	only	-	Jan	6	2:00	1:00	D
-Rule	SystemV	1974	only	-	Nov	lastSun	2:00	0	S
-Rule	SystemV	1975	only	-	Feb	23	2:00	1:00	D
-Rule	SystemV	1975	only	-	Oct	lastSun	2:00	0	S
-Rule	SystemV	1976	max	-	Apr	lastSun	2:00	1:00	D
-Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
+## Rule	SystemV	min	1973	-	Apr	lastSun	2:00	1:00	D
+## Rule	SystemV	min	1973	-	Oct	lastSun	2:00	0	S
+## Rule	SystemV	1974	only	-	Jan	6	2:00	1:00	D
+## Rule	SystemV	1974	only	-	Nov	lastSun	2:00	0	S
+## Rule	SystemV	1975	only	-	Feb	23	2:00	1:00	D
+## Rule	SystemV	1975	only	-	Oct	lastSun	2:00	0	S
+## Rule	SystemV	1976	max	-	Apr	lastSun	2:00	1:00	D
+## Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
 
 # Zone	NAME		GMTOFF	RULES/SAVE	FORMAT	[UNTIL]
 ## Zone	SystemV/AST4ADT	-4:00	SystemV		A%sT
@@ -34,3 +34,17 @@ Rule	SystemV	1976	max	-	Oct	lastSun	2:00	0	S
 ## Zone	SystemV/PST8	-8:00	-		PST
 ## Zone	SystemV/YST9	-9:00	-		YST
 ## Zone	SystemV/HST10	-10:00	-		HST
+# For now...
+Link	America/Halifax		SystemV/AST4ADT
+Link	America/New_York	SystemV/EST5EDT
+Link	America/Chicago		SystemV/CST6CDT
+Link	America/Denver		SystemV/MST7MDT
+Link	America/Los_Angeles	SystemV/PST8PDT
+Link	America/Anchorage	SystemV/YST9YDT
+Link	America/Puerto_Rico	SystemV/AST4
+Link	America/Indianapolis	SystemV/EST5
+Link	America/Regina		SystemV/CST6
+Link	America/Phoenix		SystemV/MST7
+Link	Pacific/Pitcairn	SystemV/PST8
+Link	Pacific/Gambier		SystemV/YST9
+Link	Pacific/Honolulu	SystemV/HST10
diff --git a/timezone/tst-timezone.c b/timezone/tst-timezone.c
index 4c879163cf..127956de29 100644
--- a/timezone/tst-timezone.c
+++ b/timezone/tst-timezone.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 1998.
 
@@ -42,9 +42,9 @@ static const struct test_times tests[] =
   { "Australia/Melbourne", 1, -36000, { "EST", "EST" }},
   { "America/Sao_Paulo", 1, 10800, {"BRT", "BRST" }},
   { "America/Chicago", 1, 21600, {"CST", "CDT" }},
-  { "America/Indiana/Indianapolis", 1, 18000, {"EST", "EDT" }},
+  { "America/Indianapolis", 1, 18000, {"EST", "EDT" }},
   { "America/Los_Angeles", 1, 28800, {"PST", "PDT" }},
-  { "Asia/Tokyo", 1, -32400, {"JST", "JDT" }},
+  { "Asia/Tokyo", 0, -32400, {"JST", "JST" }},
   { "Pacific/Auckland", 1, -43200, { "NZST", "NZDT" }},
   { NULL, 0, 0 }
 };
diff --git a/timezone/tzfile.h b/timezone/tzfile.h
index 3a9eee305a..0921c3c339 100644
--- a/timezone/tzfile.h
+++ b/timezone/tzfile.h
@@ -4,7 +4,7 @@
 
 /*
 ** This file is in the public domain, so clarified as of
-** 1996-06-05 by Arthur David Olson.
+** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).
 */
 
 /*
@@ -21,7 +21,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char	tzfilehid[] = "@(#)tzfile.h	8.1";
+static char	tzfilehid[] = "@(#)tzfile.h	7.14";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -48,9 +48,8 @@ static char	tzfilehid[] = "@(#)tzfile.h	8.1";
 #define	TZ_MAGIC	"TZif"
 
 struct tzhead {
-	char	tzh_magic[4];		/* TZ_MAGIC */
-	char	tzh_version[1];		/* '\0' or '2' as of 2005 */
-	char	tzh_reserved[15];	/* reserved--must be zero */
+ 	char	tzh_magic[4];		/* TZ_MAGIC */
+	char	tzh_reserved[16];	/* reserved for future use */
 	char	tzh_ttisgmtcnt[4];	/* coded number of trans. time flags */
 	char	tzh_ttisstdcnt[4];	/* coded number of trans. time flags */
 	char	tzh_leapcnt[4];		/* coded number of leap seconds */
@@ -85,22 +84,18 @@ struct tzhead {
 */
 
 /*
-** If tzh_version is '2' or greater, the above is followed by a second instance
-** of tzhead and a second instance of the data in which each coded transition
-** time uses 8 rather than 4 chars,
-** then a POSIX-TZ-environment-variable-style string for use in handling
-** instants after the last transition time stored in the file
-** (with nothing between the newlines if there is no POSIX representation for
-** such instants).
-*/
-
-/*
 ** In the current implementation, "tzset()" refuses to deal with files that
 ** exceed any of the limits below.
 */
 
 #ifndef TZ_MAX_TIMES
-#define TZ_MAX_TIMES	1200
+/*
+** The TZ_MAX_TIMES value below is enough to handle a bit more than a
+** year's worth of solar time (corrected daily to the nearest second) or
+** 138 years of Pacific Presidential Election time
+** (where there are three time zone transitions every fourth year).
+*/
+#define TZ_MAX_TIMES	370
 #endif /* !defined TZ_MAX_TIMES */
 
 #ifndef TZ_MAX_TYPES
@@ -110,7 +105,7 @@ struct tzhead {
 #ifdef NOSOLAR
 /*
 ** Must be at least 14 for Europe/Riga as of Jan 12 1995,
-** as noted by Earl Chew.
+** as noted by Earl Chew <earl@hpato.aus.hp.com>.
 */
 #define TZ_MAX_TYPES	20	/* Maximum number of local time types */
 #endif /* !defined NOSOLAR */
@@ -161,20 +156,33 @@ struct tzhead {
 #define EPOCH_YEAR	1970
 #define EPOCH_WDAY	TM_THURSDAY
 
+/*
+** Accurate only for the past couple of centuries;
+** that will probably do.
+*/
+
 #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
 
+#ifndef USG
+
 /*
-** Since everything in isleap is modulo 400 (or a factor of 400), we know that
-**	isleap(y) == isleap(y % 400)
-** and so
-**	isleap(a + b) == isleap((a + b) % 400)
-** or
-**	isleap(a + b) == isleap(a % 400 + b % 400)
-** This is true even if % means modulo rather than Fortran remainder
-** (which is allowed by C89 but not C99).
-** We use this to avoid addition overflow problems.
+** Use of the underscored variants may cause problems if you move your code to
+** certain System-V-based systems; for maximum portability, use the
+** underscore-free variants.  The underscored variants are provided for
+** backward compatibility only; they may disappear from future versions of
+** this file.
 */
 
-#define isleap_sum(a, b)	isleap((a) % 400 + (b) % 400)
+#define SECS_PER_MIN	SECSPERMIN
+#define MINS_PER_HOUR	MINSPERHOUR
+#define HOURS_PER_DAY	HOURSPERDAY
+#define DAYS_PER_WEEK	DAYSPERWEEK
+#define DAYS_PER_NYEAR	DAYSPERNYEAR
+#define DAYS_PER_LYEAR	DAYSPERLYEAR
+#define SECS_PER_HOUR	SECSPERHOUR
+#define SECS_PER_DAY	SECSPERDAY
+#define MONS_PER_YEAR	MONSPERYEAR
+
+#endif /* !defined USG */
 
 #endif /* !defined TZFILE_H */
diff --git a/timezone/tzselect.ksh b/timezone/tzselect.ksh
index f6e28bfdab..be589240d1 100644
--- a/timezone/tzselect.ksh
+++ b/timezone/tzselect.ksh
@@ -1,11 +1,11 @@
 #! @KSH@
 
-# '@(#)tzselect.ksh	1.8'
+# '@(#)tzselect.ksh	1.7'
 
 # Ask the user about the time zone, and output the resulting TZ value to stdout.
 # Interact with the user via stderr and stdin.
 
-# Contributed by Paul Eggert.
+# Contributed by Paul Eggert <eggert@twinsun.com>.
 
 # Porting notes:
 #
diff --git a/timezone/yearistype b/timezone/yearistype
index d3a248032e..8d796f1f21 100755
--- a/timezone/yearistype
+++ b/timezone/yearistype
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-: '@(#)yearistype.sh	7.8'
+: '@(#)yearistype.sh	7.7'
 
 case $#-$1 in
 	2-|2-0*|2-*[!0-9]*)
@@ -9,7 +9,7 @@ case $#-$1 in
 esac
 
 case $#-$2 in
-	2-even)
+	2-even)	
 		case $1 in
 			*[24680])			exit 0 ;;
 			*)				exit 1 ;;
@@ -19,7 +19,7 @@ case $#-$2 in
 			*[02468][048]|*[13579][26])	exit 1 ;;
 			*)				exit 0 ;;
 		esac ;;
-	2-odd)
+	2-odd)	
 		case $1 in
 			*[13579])			exit 0 ;;
 			*)				exit 1 ;;
@@ -29,7 +29,7 @@ case $#-$2 in
 			*[02468][048]|*[13579][26])	exit 0 ;;
 			*)				exit 1 ;;
 		esac ;;
-	2-*)
+	2-*)	
 		echo "$0: wild type - $2" >&2 ;;
 esac
 
diff --git a/timezone/zdump.c b/timezone/zdump.c
index 3c8d179fce..20bb916822 100644
--- a/timezone/zdump.c
+++ b/timezone/zdump.c
@@ -1,4 +1,4 @@
-static char	elsieid[] = "@(#)zdump.c	8.2";
+static char	elsieid[] = "@(#)zdump.c	7.40";
 
 /*
 ** This code has been made independent of the rest of the time
@@ -11,19 +11,6 @@ static char	elsieid[] = "@(#)zdump.c	8.2";
 #include "sys/types.h"	/* for time_t */
 #include "time.h"	/* for struct tm */
 #include "stdlib.h"	/* for exit, malloc, atoi */
-#include "float.h"	/* for FLT_MAX and DBL_MAX */
-#include "ctype.h"	/* for isalpha et al. */
-#ifndef isascii
-#define isascii(x) 1
-#endif /* !defined isascii */
-
-#ifndef ZDUMP_LO_YEAR
-#define ZDUMP_LO_YEAR	(-500)
-#endif /* !defined ZDUMP_LO_YEAR */
-
-#ifndef ZDUMP_HI_YEAR
-#define ZDUMP_HI_YEAR	2500
-#endif /* !defined ZDUMP_HI_YEAR */
 
 #ifndef MAX_STRING_LENGTH
 #define MAX_STRING_LENGTH	1024
@@ -74,20 +61,9 @@ static char	elsieid[] = "@(#)zdump.c	8.2";
 #endif /* !defined DAYSPERNYEAR */
 
 #ifndef isleap
-#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
+#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
 #endif /* !defined isleap */
 
-#ifndef isleap_sum
-/*
-** See tzfile.h for details on isleap_sum.
-*/
-#define isleap_sum(a, b)	isleap((a) % 400 + (b) % 400)
-#endif /* !defined isleap_sum */
-
-#define SECSPERDAY	((long) SECSPERHOUR * HOURSPERDAY)
-#define SECSPERNYEAR	(SECSPERDAY * DAYSPERNYEAR)
-#define SECSPERLYEAR	(SECSPERNYEAR + SECSPERDAY)
-
 #if HAVE_GETTEXT
 #include "locale.h"	/* for setlocale */
 #include "libintl.h"
@@ -130,106 +106,27 @@ static char	elsieid[] = "@(#)zdump.c	8.2";
 #endif /* !defined TZ_DOMAIN */
 
 #ifndef P
+#ifdef __STDC__
 #define P(x)	x
+#else /* !defined __STDC__ */
+#define P(x)	()
+#endif /* !defined __STDC__ */
 #endif /* !defined P */
 
 extern char **	environ;
 extern int	getopt P((int argc, char * const argv[],
-			const char * options));
+			  const char * options));
 extern char *	optarg;
 extern int	optind;
 extern char *	tzname[2];
 
-static time_t	absolute_min_time;
-static time_t	absolute_max_time;
-static size_t	longest;
-static char *	progname;
-static int	warned;
-
 static char *	abbr P((struct tm * tmp));
-static void	abbrok P((const char * abbrp, const char * zone));
 static long	delta P((struct tm * newp, struct tm * oldp));
-static void	dumptime P((const struct tm * tmp));
 static time_t	hunt P((char * name, time_t lot, time_t	hit));
-static void	setabsolutes P((void));
+static size_t	longest;
+static char *	progname;
 static void	show P((char * zone, time_t t, int v));
-static const char *	tformat P((void));
-static time_t	yeartot P((long y));
-
-#ifndef TYPECHECK
-#define my_localtime	localtime
-#else /* !defined TYPECHECK */
-static struct tm *
-my_localtime(tp)
-time_t *	tp;
-{
-	register struct tm *	tmp;
-
-	tmp = localtime(tp);
-	if (tp != NULL && tmp != NULL) {
-		struct tm	tm;
-		register time_t	t;
-
-		tm = *tmp;
-		t = mktime(&tm);
-		if (t - *tp >= 1 || *tp - t >= 1) {
-			(void) fflush(stdout);
-			(void) fprintf(stderr, "\n%s: ", progname);
-			(void) fprintf(stderr, tformat(), *tp);
-			(void) fprintf(stderr, " ->");
-			(void) fprintf(stderr, " year=%d", tmp->tm_year);
-			(void) fprintf(stderr, " mon=%d", tmp->tm_mon);
-			(void) fprintf(stderr, " mday=%d", tmp->tm_mday);
-			(void) fprintf(stderr, " hour=%d", tmp->tm_hour);
-			(void) fprintf(stderr, " min=%d", tmp->tm_min);
-			(void) fprintf(stderr, " sec=%d", tmp->tm_sec);
-			(void) fprintf(stderr, " isdst=%d", tmp->tm_isdst);
-			(void) fprintf(stderr, " -> ");
-			(void) fprintf(stderr, tformat(), t);
-			(void) fprintf(stderr, "\n");
-		}
-	}
-	return tmp;
-}
-#endif /* !defined TYPECHECK */
-
-static void
-abbrok(abbrp, zone)
-const char * const	abbrp;
-const char * const	zone;
-{
-	register const char *	cp;
-	register char *		wp;
-
-	if (warned)
-		return;
-	cp = abbrp;
-	wp = NULL;
-	while (isascii((unsigned char) *cp) && isalpha((unsigned char) *cp))
-		++cp;
-	if (cp - abbrp == 0)
-		wp = _("lacks alphabetic at start");
-	else if (cp - abbrp < 3)
-		wp = _("has fewer than 3 alphabetics");
-	else if (cp - abbrp > 6)
-		wp = _("has more than 6 alphabetics");
-	if (wp == NULL && (*cp == '+' || *cp == '-')) {
-		++cp;
-		if (isascii((unsigned char) *cp) &&
-			isdigit((unsigned char) *cp))
-				if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
-					++cp;
-		if (*cp != '\0')
-			wp = _("differs from POSIX standard");
-	}
-	if (wp == NULL)
-		return;
-	(void) fflush(stdout);
-	(void) fprintf(stderr,
-		_("%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"),
-		progname, zone, abbrp, wp);
-	warned = TRUE;
-}
+static void	dumptime P((const struct tm * tmp));
 
 int
 main(argc, argv)
@@ -239,24 +136,20 @@ char *	argv[];
 	register int		i;
 	register int		c;
 	register int		vflag;
-	register char *		cutarg;
-	register long		cutloyear = ZDUMP_LO_YEAR;
-	register long		cuthiyear = ZDUMP_HI_YEAR;
-	register time_t		cutlotime;
-	register time_t		cuthitime;
-	register char **	fakeenv;
+	register char *		cutoff;
+	register int		cutyear;
+	register long		cuttime;
+	char **			fakeenv;
 	time_t			now;
 	time_t			t;
 	time_t			newt;
+	time_t			hibit;
 	struct tm		tm;
 	struct tm		newtm;
-	register struct tm *	tmp;
-	register struct tm *	newtmp;
 
-	INITIALIZE(cutlotime);
-	INITIALIZE(cuthitime);
+	INITIALIZE(cuttime);
 #if HAVE_GETTEXT
-	(void) setlocale(LC_ALL, "");
+	(void) setlocale(LC_MESSAGES, "");
 #ifdef TZ_DOMAINDIR
 	(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
 #endif /* defined TEXTDOMAINDIR */
@@ -266,60 +159,49 @@ char *	argv[];
 	for (i = 1; i < argc; ++i)
 		if (strcmp(argv[i], "--version") == 0) {
 			(void) printf("%s\n", elsieid);
-			exit(EXIT_SUCCESS);
+			(void) exit(EXIT_SUCCESS);
 		}
 	vflag = 0;
-	cutarg = NULL;
+	cutoff = NULL;
 	while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v')
 		if (c == 'v')
 			vflag = 1;
-		else	cutarg = optarg;
+		else	cutoff = optarg;
 	if ((c != EOF && c != -1) ||
 		(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
 			(void) fprintf(stderr,
-_("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
-				progname, progname);
-			exit(EXIT_FAILURE);
+_("%s: usage is %s [ --version ] [ -v ] [ -c cutoff ] zonename ...\n"),
+				argv[0], argv[0]);
+			(void) exit(EXIT_FAILURE);
 	}
-	if (vflag) {
-		if (cutarg != NULL) {
-			long	lo;
-			long	hi;
-			char	dummy;
-
-			if (sscanf(cutarg, "%ld%c", &hi, &dummy) == 1) {
-				cuthiyear = hi;
-			} else if (sscanf(cutarg, "%ld,%ld%c",
-				&lo, &hi, &dummy) == 2) {
-					cutloyear = lo;
-					cuthiyear = hi;
-			} else {
-(void) fprintf(stderr, _("%s: wild -c argument %s\n"),
-					progname, cutarg);
-				exit(EXIT_FAILURE);
-			}
-		}
-		setabsolutes();
-		cutlotime = yeartot(cutloyear);
-		cuthitime = yeartot(cuthiyear);
+	if (cutoff != NULL) {
+		int	y;
+
+		cutyear = atoi(cutoff);
+		cuttime = 0;
+		for (y = EPOCH_YEAR; y < cutyear; ++y)
+			cuttime += DAYSPERNYEAR + isleap(y);
+		cuttime *= SECSPERHOUR * HOURSPERDAY;
 	}
 	(void) time(&now);
 	longest = 0;
 	for (i = optind; i < argc; ++i)
 		if (strlen(argv[i]) > longest)
 			longest = strlen(argv[i]);
+	for (hibit = 1; (hibit << 1) != 0; hibit <<= 1)
+		continue;
 	{
 		register int	from;
 		register int	to;
 
-		for (i = 0; environ[i] != NULL; ++i)
+		for (i = 0;  environ[i] != NULL;  ++i)
 			continue;
 		fakeenv = (char **) malloc((size_t) ((i + 2) *
 			sizeof *fakeenv));
 		if (fakeenv == NULL ||
 			(fakeenv[0] = (char *) malloc(longest + 4)) == NULL) {
 					(void) perror(progname);
-					exit(EXIT_FAILURE);
+					(void) exit(EXIT_FAILURE);
 		}
 		to = 0;
 		(void) strcpy(fakeenv[to++], "TZ=");
@@ -337,175 +219,85 @@ _("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
 			show(argv[i], now, FALSE);
 			continue;
 		}
-		warned = FALSE;
-		t = absolute_min_time;
+		/*
+		** Get lowest value of t.
+		*/
+		t = hibit;
+		if (t > 0)		/* time_t is unsigned */
+			t = 0;
 		show(argv[i], t, TRUE);
 		t += SECSPERHOUR * HOURSPERDAY;
 		show(argv[i], t, TRUE);
-		if (t < cutlotime)
-			t = cutlotime;
-		tmp = my_localtime(&t);
-		if (tmp != NULL) {
-			tm = *tmp;
-			(void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
-		}
+		tm = *localtime(&t);
+		(void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
 		for ( ; ; ) {
-			if (t >= cuthitime)
+			if (cutoff != NULL && t >= cuttime)
 				break;
 			newt = t + SECSPERHOUR * 12;
-			if (newt >= cuthitime)
+			if (cutoff != NULL && newt >= cuttime)
 				break;
 			if (newt <= t)
 				break;
-			newtmp = localtime(&newt);
-			if (newtmp != NULL)
-				newtm = *newtmp;
-			if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) :
-				(delta(&newtm, &tm) != (newt - t) ||
+			newtm = *localtime(&newt);
+			if (delta(&newtm, &tm) != (newt - t) ||
 				newtm.tm_isdst != tm.tm_isdst ||
-				strcmp(abbr(&newtm), buf) != 0)) {
+				strcmp(abbr(&newtm), buf) != 0) {
 					newt = hunt(argv[i], t, newt);
-					newtmp = localtime(&newt);
-					if (newtmp != NULL) {
-						newtm = *newtmp;
-						(void) strncpy(buf,
-							abbr(&newtm),
-							(sizeof buf) - 1);
-					}
+					newtm = *localtime(&newt);
+					(void) strncpy(buf, abbr(&newtm),
+						(sizeof buf) - 1);
 			}
 			t = newt;
 			tm = newtm;
-			tmp = newtmp;
 		}
-		t = absolute_max_time;
+		/*
+		** Get highest value of t.
+		*/
+		t = ~((time_t) 0);
+		if (t < 0)		/* time_t is signed */
+			t &= ~hibit;
 		t -= SECSPERHOUR * HOURSPERDAY;
 		show(argv[i], t, TRUE);
 		t += SECSPERHOUR * HOURSPERDAY;
 		show(argv[i], t, TRUE);
 	}
 	if (fflush(stdout) || ferror(stdout)) {
-		(void) fprintf(stderr, "%s: ", progname);
-		(void) perror(_("Error writing to standard output"));
-		exit(EXIT_FAILURE);
+		(void) fprintf(stderr, "%s: ", argv[0]);
+		(void) perror(_("Error writing standard output"));
+		(void) exit(EXIT_FAILURE);
 	}
 	exit(EXIT_SUCCESS);
-	/* If exit fails to exit... */
-	return EXIT_FAILURE;
-}
-
-static void
-setabsolutes()
-{
-	if (0.5 == (time_t) 0.5) {
-		/*
-		** time_t is floating.
-		*/
-		if (sizeof (time_t) == sizeof (float)) {
-			absolute_min_time = (time_t) -FLT_MAX;
-			absolute_max_time = (time_t) FLT_MAX;
-		} else if (sizeof (time_t) == sizeof (double)) {
-			absolute_min_time = (time_t) -DBL_MAX;
-			absolute_max_time = (time_t) DBL_MAX;
-		} else {
-			(void) fprintf(stderr,
-_("%s: use of -v on system with floating time_t other than float or double\n"),
-				progname);
-			exit(EXIT_FAILURE);
-		}
-	} else if (0 > (time_t) -1) {
-		/*
-		** time_t is signed.  Assume overflow wraps around.
-		*/
-		time_t t = 0;
-		time_t t1 = 1;
-
-		while (t < t1) {
-			t = t1;
-			t1 = 2 * t1 + 1;
-		}
-		  
-		absolute_max_time = t;
-		t = -t;
-		absolute_min_time = t - 1;
-		if (t < absolute_min_time)
-			absolute_min_time = t;
-	} else {
-		/*
-		** time_t is unsigned.
-		*/
-		absolute_min_time = 0;
-		absolute_max_time = absolute_min_time - 1;
-	}
-}
 
-static time_t
-yeartot(y)
-const long	y;
-{
-	register long	myy;
-	register long	seconds;
-	register time_t	t;
-
-	myy = EPOCH_YEAR;
-	t = 0;
-	while (myy != y) {
-		if (myy < y) {
-			seconds = isleap(myy) ? SECSPERLYEAR : SECSPERNYEAR;
-			++myy;
-			if (t > absolute_max_time - seconds) {
-				t = absolute_max_time;
-				break;
-			}
-			t += seconds;
-		} else {
-			--myy;
-			seconds = isleap(myy) ? SECSPERLYEAR : SECSPERNYEAR;
-			if (t < absolute_min_time + seconds) {
-				t = absolute_min_time;
-				break;
-			}
-			t -= seconds;
-		}
-	}
-	return t;
+	/* gcc -Wall pacifier */
+	for ( ; ; )
+		continue;
 }
 
 static time_t
-hunt(char *name, time_t lot, time_t hit)
+hunt(name, lot, hit)
+char *	name;
+time_t	lot;
+time_t	hit;
 {
-	time_t			t;
-	long			diff;
-	struct tm		lotm;
-	register struct tm *	lotmp;
-	struct tm		tm;
-	register struct tm *	tmp;
-	char			loab[MAX_STRING_LENGTH];
-
-	lotmp = my_localtime(&lot);
-	if (lotmp != NULL) {
-		lotm = *lotmp;
-		(void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
-	}
-	for ( ; ; ) {
-		diff = (long) (hit - lot);
-		if (diff < 2)
-			break;
-		t = lot;
-		t += diff / 2;
+	time_t		t;
+	struct tm	lotm;
+	struct tm	tm;
+	static char	loab[MAX_STRING_LENGTH];
+
+	lotm = *localtime(&lot);
+	(void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1);
+	while ((hit - lot) >= 2) {
+		t = lot / 2 + hit / 2;
 		if (t <= lot)
 			++t;
 		else if (t >= hit)
 			--t;
-		tmp = my_localtime(&t);
-		if (tmp != NULL)
-			tm = *tmp;
-		if ((lotmp == NULL || tmp == NULL) ? (lotmp == tmp) :
-			(delta(&tm, &lotm) == (t - lot) &&
+		tm = *localtime(&t);
+		if (delta(&tm, &lotm) == (t - lot) &&
 			tm.tm_isdst == lotm.tm_isdst &&
-			strcmp(abbr(&tm), loab) == 0)) {
+			strcmp(abbr(&tm), loab) == 0) {
 				lot = t;
 				lotm = tm;
-				lotmp = tmp;
 		} else	hit = t;
 	}
 	show(name, lot, TRUE);
@@ -514,7 +306,7 @@ hunt(char *name, time_t lot, time_t hit)
 }
 
 /*
-** Thanks to Paul Eggert for logic used in delta.
+** Thanks to Paul Eggert (eggert@twinsun.com) for logic used in delta.
 */
 
 static long
@@ -522,14 +314,14 @@ delta(newp, oldp)
 struct tm *	newp;
 struct tm *	oldp;
 {
-	register long	result;
-	register int	tmy;
+	long	result;
+	int	tmy;
 
 	if (newp->tm_year < oldp->tm_year)
 		return -delta(oldp, newp);
 	result = 0;
 	for (tmy = oldp->tm_year; tmy < newp->tm_year; ++tmy)
-		result += DAYSPERNYEAR + isleap_sum(tmy, TM_YEAR_BASE);
+		result += DAYSPERNYEAR + isleap(tmy + (long) TM_YEAR_BASE);
 	result += newp->tm_yday - oldp->tm_yday;
 	result *= HOURSPERDAY;
 	result += newp->tm_hour - oldp->tm_hour;
@@ -541,36 +333,29 @@ struct tm *	oldp;
 }
 
 static void
-show(char *zone, time_t t, int v)
+show(zone, t, v)
+char *	zone;
+time_t	t;
+int	v;
 {
-	register struct tm *	tmp;
+	struct tm *	tmp;
 
 	(void) printf("%-*s  ", (int) longest, zone);
 	if (v) {
-		tmp = gmtime(&t);
-		if (tmp == NULL) {
-			(void) printf(tformat(), t);
-		} else {
-			dumptime(tmp);
-			(void) printf(" UTC");
-		}
-		(void) printf(" = ");
+		dumptime(gmtime(&t));
+		(void) printf(" UTC = ");
 	}
-	tmp = my_localtime(&t);
+	tmp = localtime(&t);
 	dumptime(tmp);
-	if (tmp != NULL) {
-		if (*abbr(tmp) != '\0')
-			(void) printf(" %s", abbr(tmp));
-		if (v) {
-			(void) printf(" isdst=%d", tmp->tm_isdst);
+	if (*abbr(tmp) != '\0')
+		(void) printf(" %s", abbr(tmp));
+	if (v) {
+		(void) printf(" isdst=%d", tmp->tm_isdst);
 #ifdef TM_GMTOFF
-			(void) printf(" gmtoff=%ld", tmp->TM_GMTOFF);
+		(void) printf(" gmtoff=%ld", tmp->TM_GMTOFF);
 #endif /* defined TM_GMTOFF */
-		}
 	}
 	(void) printf("\n");
-	if (tmp != NULL && *abbr(tmp) != '\0')
-		abbrok(abbr(tmp), zone);
 }
 
 static char *
@@ -586,33 +371,6 @@ struct tm *	tmp;
 	return (result == NULL) ? &nada : result;
 }
 
-/*
-** The code below can fail on certain theoretical systems;
-** it works on all known real-world systems as of 2004-12-30.
-*/
-
-static const char *
-tformat()
-{
-	if (0.5 == (time_t) 0.5) {	/* floating */
-		if (sizeof (time_t) > sizeof (double))
-			return "%Lg";
-		return "%g";
-	}
-	if (0 > (time_t) -1) {		/* signed */
-		if (sizeof (time_t) > sizeof (long))
-			return "%lld";
-		if (sizeof (time_t) > sizeof (int))
-			return "%ld";
-		return "%d";
-	}
-	if (sizeof (time_t) > sizeof (unsigned long))
-		return "%llu";
-	if (sizeof (time_t) > sizeof (unsigned int))
-		return "%lu";
-	return "%u";
-}
-
 static void
 dumptime(timeptr)
 register const struct tm *	timeptr;
@@ -626,13 +384,7 @@ register const struct tm *	timeptr;
 	};
 	register const char *	wn;
 	register const char *	mn;
-	register int		lead;
-	register int		trail;
 
-	if (timeptr == NULL) {
-		(void) printf("NULL");
-		return;
-	}
 	/*
 	** The packaged versions of localtime and gmtime never put out-of-range
 	** values in tm_wday or tm_mon, but since this code might be compiled
@@ -646,23 +398,9 @@ register const struct tm *	timeptr;
 		(int) (sizeof mon_name / sizeof mon_name[0]))
 			mn = "???";
 	else		mn = mon_name[timeptr->tm_mon];
-	(void) printf("%.3s %.3s%3d %.2d:%.2d:%.2d ",
+	(void) printf("%.3s %.3s%3d %.2d:%.2d:%.2d %ld",
 		wn, mn,
 		timeptr->tm_mday, timeptr->tm_hour,
-		timeptr->tm_min, timeptr->tm_sec);
-#define DIVISOR	10
-	trail = timeptr->tm_year % DIVISOR + TM_YEAR_BASE % DIVISOR;
-	lead = timeptr->tm_year / DIVISOR + TM_YEAR_BASE / DIVISOR +
-		trail / DIVISOR;
-	trail %= DIVISOR;
-	if (trail < 0 && lead > 0) {
-		trail += DIVISOR;
-		--lead;
-	} else if (lead < 0 && trail > 0) {
-		trail -= DIVISOR;
-		++lead;
-	}
-	if (lead == 0)
-		(void) printf("%d", trail);
-	else	(void) printf("%d%d", lead, ((trail < 0) ? -trail : trail));
+		timeptr->tm_min, timeptr->tm_sec,
+		timeptr->tm_year + (long) TM_YEAR_BASE);
 }
diff --git a/timezone/zic.c b/timezone/zic.c
index f7393ea7ba..9bb8662e55 100644
--- a/timezone/zic.c
+++ b/timezone/zic.c
@@ -1,22 +1,9 @@
-/*
-** This file is in the public domain, so clarified as of
-** 2006-07-17 by Arthur David Olson.
-*/
-
-static char	elsieid[] = "@(#)zic.c	8.7";
+static char	elsieid[] = "@(#)zic.c	7.116";
 
 #include "private.h"
 #include "locale.h"
 #include "tzfile.h"
 
-#define	ZIC_VERSION	'2'
-
-typedef int_fast64_t	zic_t;
-
-#ifndef ZIC_MAX_ABBR_LEN_WO_WARN
-#define ZIC_MAX_ABBR_LEN_WO_WARN	6
-#endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
-
 #if HAVE_SYS_STAT_H
 #include "sys/stat.h"
 #endif
@@ -28,7 +15,7 @@ typedef int_fast64_t	zic_t;
 
 /*
 ** On some ancient hosts, predicates like `isspace(C)' are defined
-** only if isascii(C) || C == EOF. Modern hosts obey the C Standard,
+** only if isascii(C) || C == EOF.  Modern hosts obey the C Standard,
 ** which says they are defined only if C == ((unsigned char) C) || C == EOF.
 ** Neither the C Standard nor Posix require that `isascii' exist.
 ** For portability, we check both ancient and modern requirements.
@@ -39,11 +26,6 @@ typedef int_fast64_t	zic_t;
 #define isascii(x) 1
 #endif
 
-#define OFFSET_STRLEN_MAXIMUM	(7 + INT_STRLEN_MAXIMUM(long))
-#define RULE_STRLEN_MAXIMUM	8	/* "Mdd.dd.d" */
-
-#define end(cp)	(strchr((cp), '\0'))
-
 struct rule {
 	const char *	r_filename;
 	int		r_linenum;
@@ -52,8 +34,6 @@ struct rule {
 	int		r_loyear;	/* for example, 1986 */
 	int		r_hiyear;	/* for example, 1986 */
 	const char *	r_yrtype;
-	int		r_lowasnum;
-	int		r_hiwasnum;
 
 	int		r_month;	/* 0..11 */
 
@@ -70,7 +50,7 @@ struct rule {
 	const char *	r_abbrvar;	/* variable part of abbreviation */
 
 	int		r_todo;		/* a rule to do (used in outzone) */
-	zic_t		r_temp;		/* used in outzone */
+	time_t		r_temp;		/* used in outzone */
 };
 
 /*
@@ -96,7 +76,7 @@ struct zone {
 	int		z_nrules;
 
 	struct rule	z_untilrule;
-	zic_t		z_untiltime;
+	time_t		z_untiltime;
 };
 
 extern int	getopt P((int argc, char * const argv[],
@@ -105,18 +85,17 @@ extern int	link P((const char * fromname, const char * toname));
 extern char *	optarg;
 extern int	optind;
 
-static void	addtt P((zic_t starttime, int type));
+static void	addtt P((time_t starttime, int type));
 static int	addtype P((long gmtoff, const char * abbr, int isdst,
 				int ttisstd, int ttisgmt));
-static void	leapadd P((zic_t t, int positive, int rolling, int count));
+static void	leapadd P((time_t t, int positive, int rolling, int count));
 static void	adjleap P((void));
 static void	associate P((void));
 static int	ciequal P((const char * ap, const char * bp));
 static void	convert P((long val, char * buf));
-static void	convert64 P((zic_t val, char * buf));
 static void	dolink P((const char * fromfile, const char * tofile));
 static void	doabbr P((char * abbr, const char * format,
-			const char * letters, int isdst, int doquotes));
+			const char * letters, int isdst));
 static void	eat P((const char * name, int num));
 static void	eats P((const char * name, int num,
 			const char * rname, int rnum));
@@ -132,7 +111,6 @@ static void	inrule P((char ** fields, int nfields));
 static int	inzcont P((char ** fields, int nfields));
 static int	inzone P((char ** fields, int nfields));
 static int	inzsub P((char ** fields, int nfields, int iscont));
-static int	is32 P((zic_t x));
 static int	itsabbr P((const char * abbr, const char * word));
 static int	itsdir P((const char * name));
 static int	lowerit P((int c));
@@ -142,42 +120,33 @@ static void	newabbr P((const char * abbr));
 static long	oadd P((long t1, long t2));
 static void	outzone P((const struct zone * zp, int ntzones));
 static void	puttzcode P((long code, FILE * fp));
-static void	puttzcode64 P((zic_t code, FILE * fp));
 static int	rcomp P((const void * leftp, const void * rightp));
-static zic_t	rpytime P((const struct rule * rp, int wantedy));
+static time_t	rpytime P((const struct rule * rp, int wantedy));
 static void	rulesub P((struct rule * rp,
 			const char * loyearp, const char * hiyearp,
 			const char * typep, const char * monthp,
 			const char * dayp, const char * timep));
-static int 	stringoffset P((char * result, long offset));
-static int	stringrule P((char * result, const struct rule * rp,
-			long dstoff, long gmtoff));
-static void 	stringzone P((char * result,
-			const struct zone * zp, int ntzones));
 static void	setboundaries P((void));
-static zic_t	tadd P((zic_t t1, long t2));
+static time_t	tadd P((time_t t1, long t2));
 static void	usage P((void));
-static void	writezone P((const char * name, const char * string));
+static void	writezone P((const char * name));
 static int	yearistype P((int year, const char * type));
 
-#if !HAVE_STRERROR
+#if !(HAVE_STRERROR - 0)
 static char *	strerror P((int));
-#endif /* !HAVE_STRERROR */
+#endif /* !(HAVE_STRERROR - 0) */
 
 static int		charcnt;
 static int		errors;
 static const char *	filename;
 static int		leapcnt;
-static int		leapseen;
-static int		leapminyear;
-static int		leapmaxyear;
 static int		linenum;
-static int		max_abbrvar_len;
-static int		max_format_len;
-static zic_t		max_time;
+static time_t		max_time;
 static int		max_year;
-static zic_t		min_time;
+static int		max_year_representable;
+static time_t		min_time;
 static int		min_year;
+static int		min_year_representable;
 static int		noise;
 static const char *	rfilename;
 static int		rlinenum;
@@ -365,7 +334,7 @@ static const int	len_years[2] = {
 };
 
 static struct attype {
-	zic_t		at;
+	time_t		at;
 	unsigned char	type;
 }			attypes[TZ_MAX_TIMES];
 static long		gmtoffs[TZ_MAX_TYPES];
@@ -374,7 +343,7 @@ static unsigned char	abbrinds[TZ_MAX_TYPES];
 static char		ttisstds[TZ_MAX_TYPES];
 static char		ttisgmts[TZ_MAX_TYPES];
 static char		chars[TZ_MAX_CHARS];
-static zic_t		trans[TZ_MAX_LEAPS];
+static time_t		trans[TZ_MAX_LEAPS];
 static long		corr[TZ_MAX_LEAPS];
 static char		roll[TZ_MAX_LEAPS];
 
@@ -391,7 +360,7 @@ char * const	ptr;
 
 		(void) fprintf(stderr, _("%s: Memory exhausted: %s\n"),
 			progname, e);
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	return ptr;
 }
@@ -405,7 +374,7 @@ char * const	ptr;
 ** Error handling.
 */
 
-#if !HAVE_STRERROR
+#if !(HAVE_STRERROR - 0)
 static char *
 strerror(errnum)
 int	errnum;
@@ -416,7 +385,7 @@ int	errnum;
 	return (errnum > 0 && errnum <= sys_nerr) ?
 		sys_errlist[errnum] : _("Unknown system error");
 }
-#endif /* !HAVE_STRERROR */
+#endif /* !(HAVE_STRERROR - 0) */
 
 static void
 eats(name, num, rname, rnum)
@@ -473,11 +442,9 @@ const char * const	string;
 static void
 usage P((void))
 {
-	(void) fprintf(stderr, _("%s: usage is %s \
-[ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
-\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
+	(void) fprintf(stderr, _("%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
 		progname, progname);
-	exit(EXIT_FAILURE);
+	(void) exit(EXIT_FAILURE);
 }
 
 static const char *	psxrules;
@@ -485,6 +452,7 @@ static const char *	lcltime;
 static const char *	directory;
 static const char *	leapsec;
 static const char *	yitcommand;
+static int		sflag = FALSE;
 
 int
 main(argc, argv)
@@ -498,23 +466,19 @@ char *	argv[];
 #ifdef unix
 	(void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH));
 #endif /* defined unix */
-#if HAVE_GETTEXT
-	(void) setlocale(LC_ALL, "");
+#if HAVE_GETTEXT - 0
+	(void) setlocale(LC_CTYPE, "");
+	(void) setlocale(LC_MESSAGES, "");
 #ifdef TZ_DOMAINDIR
 	(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
 #endif /* defined TEXTDOMAINDIR */
 	(void) textdomain(TZ_DOMAIN);
-#endif /* HAVE_GETTEXT */
+#endif /* HAVE_GETTEXT - 0 */
 	progname = argv[0];
-	if (TYPE_BIT(zic_t) < 64) {
-		(void) fprintf(stderr, "%s: %s\n", progname,
-			_("wild compilation-time specification of zic_t"));
-		exit(EXIT_FAILURE);
-	}
 	for (i = 1; i < argc; ++i)
 		if (strcmp(argv[i], "--version") == 0) {
 			(void) printf("%s\n", elsieid);
-			exit(EXIT_SUCCESS);
+			(void) exit(EXIT_SUCCESS);
 		}
 	while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
 		switch (c) {
@@ -527,7 +491,7 @@ char *	argv[];
 					(void) fprintf(stderr,
 _("%s: More than one -d option specified\n"),
 						progname);
-					exit(EXIT_FAILURE);
+					(void) exit(EXIT_FAILURE);
 				}
 				break;
 			case 'l':
@@ -537,7 +501,7 @@ _("%s: More than one -d option specified\n"),
 					(void) fprintf(stderr,
 _("%s: More than one -l option specified\n"),
 						progname);
-					exit(EXIT_FAILURE);
+					(void) exit(EXIT_FAILURE);
 				}
 				break;
 			case 'p':
@@ -547,7 +511,7 @@ _("%s: More than one -l option specified\n"),
 					(void) fprintf(stderr,
 _("%s: More than one -p option specified\n"),
 						progname);
-					exit(EXIT_FAILURE);
+					(void) exit(EXIT_FAILURE);
 				}
 				break;
 			case 'y':
@@ -557,7 +521,7 @@ _("%s: More than one -p option specified\n"),
 					(void) fprintf(stderr,
 _("%s: More than one -y option specified\n"),
 						progname);
-					exit(EXIT_FAILURE);
+					(void) exit(EXIT_FAILURE);
 				}
 				break;
 			case 'L':
@@ -567,14 +531,14 @@ _("%s: More than one -y option specified\n"),
 					(void) fprintf(stderr,
 _("%s: More than one -L option specified\n"),
 						progname);
-					exit(EXIT_FAILURE);
+					(void) exit(EXIT_FAILURE);
 				}
 				break;
 			case 'v':
 				noise = TRUE;
 				break;
 			case 's':
-				(void) printf("%s: -s ignored\n", progname);
+				sflag = TRUE;
 				break;
 		}
 	if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
@@ -594,7 +558,7 @@ _("%s: More than one -L option specified\n"),
 	for (i = optind; i < argc; ++i)
 		infile(argv[i]);
 	if (errors)
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	associate();
 	for (i = 0; i < nzones; i = j) {
 		/*
@@ -610,11 +574,6 @@ _("%s: More than one -L option specified\n"),
 	for (i = 0; i < nlinks; ++i) {
 		eat(links[i].l_filename, links[i].l_linenum);
 		dolink(links[i].l_from, links[i].l_to);
-		if (noise)
-			for (j = 0; j < nlinks; ++j)
-				if (strcmp(links[i].l_to,
-					links[j].l_from) == 0)
-						warning(_("link to link"));
 	}
 	if (lcltime != NULL) {
 		eat("command line", 1);
@@ -659,54 +618,85 @@ const char * const	tofile;
 		int	result;
 
 		if (mkdirs(toname) != 0)
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 
 		result = link(fromname, toname);
-#if HAVE_SYMLINK
+#if (HAVE_SYMLINK - 0)
 		if (result != 0 &&
-			access(fromname, F_OK) == 0 &&
-			!itsdir(fromname)) {
-				const char *s = tofile;
-				register char * symlinkcontents = NULL;
-
-				while ((s = strchr(s+1, '/')) != NULL)
-					symlinkcontents =
-						ecatalloc(symlinkcontents,
-						"../");
-				symlinkcontents =
-					ecatalloc(symlinkcontents,
-					fromname);
-				result = symlink(symlinkcontents,
-					toname);
-				if (result == 0)
+		    access(fromname, F_OK) == 0 &&
+		    !itsdir(fromname)) {
+		        const char *s = tofile;
+		        register char * symlinkcontents = NULL;
+		        while ((s = strchr(s+1, '/')) != NULL)
+			        symlinkcontents = ecatalloc(symlinkcontents, "../");
+			symlinkcontents = ecatalloc(symlinkcontents, fromname);
+
+			result = unlink(toname);
+			if (result != 0 && errno != ENOENT) {
+				const char *e = strerror(errno);
+
+				(void) fprintf(stderr,
+					       _("%s: Can't unlink  %s: %s\n"),
+					       progname, toname, e);
+				(void) exit(EXIT_FAILURE);
+			}
+
+			result = symlink(symlinkcontents, toname);
+			if (result == 0)
 warning(_("hard link failed, symbolic link used"));
-				ifree(symlinkcontents);
+			ifree(symlinkcontents);
 		}
-#endif /* HAVE_SYMLINK */
+#endif
 		if (result != 0) {
 			const char *e = strerror(errno);
 
 			(void) fprintf(stderr,
 				_("%s: Can't link from %s to %s: %s\n"),
 				progname, fromname, toname, e);
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 		}
 	}
 	ifree(fromname);
 	ifree(toname);
 }
 
-#define TIME_T_BITS_IN_FILE	64
+#ifndef INT_MAX
+#define INT_MAX	((int) (((unsigned)~0)>>1))
+#endif /* !defined INT_MAX */
+
+#ifndef INT_MIN
+#define INT_MIN	((int) ~(((unsigned)~0)>>1))
+#endif /* !defined INT_MIN */
+
+/*
+** The tz file format currently allows at most 32-bit quantities.
+** This restriction should be removed before signed 32-bit values
+** wrap around in 2038, but unfortunately this will require a
+** change to the tz file format.
+*/
+
+#define MAX_BITS_IN_FILE	32
+#define TIME_T_BITS_IN_FILE	((TYPE_BIT(time_t) < MAX_BITS_IN_FILE) ? TYPE_BIT(time_t) : MAX_BITS_IN_FILE)
 
 static void
 setboundaries P((void))
 {
-	register int	i;
-
-	min_time = -1;
-	for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
-		min_time *= 2;
-	max_time = -(min_time + 1);
+	if (TYPE_SIGNED(time_t)) {
+		min_time = ~ (time_t) 0;
+		min_time <<= TIME_T_BITS_IN_FILE - 1;
+		max_time = ~ (time_t) 0 - min_time;
+		if (sflag)
+			min_time = 0;
+	} else {
+		min_time = 0;
+		max_time = 2 - sflag;
+		max_time <<= TIME_T_BITS_IN_FILE - 1;
+		--max_time;
+	}
+	min_year = TM_YEAR_BASE + gmtime(&min_time)->tm_year;
+	max_year = TM_YEAR_BASE + gmtime(&max_time)->tm_year;
+	min_year_representable = min_year;
+	max_year_representable = max_year;
 }
 
 static int
@@ -803,7 +793,7 @@ associate P((void))
 			*/
 			eat(zp->z_filename, zp->z_linenum);
 			zp->z_stdoff = gethms(zp->z_rule, _("unruly zone"),
-				TRUE);
+					      TRUE);
 			/*
 			** Note, though, that if there's no rule,
 			** a '%s' in the format is a bad thing.
@@ -813,7 +803,7 @@ associate P((void))
 		}
 	}
 	if (errors)
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 }
 
 static void
@@ -837,7 +827,7 @@ const char *	name;
 
 		(void) fprintf(stderr, _("%s: Can't open %s: %s\n"),
 			progname, name, e);
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	wantcont = FALSE;
 	for (num = 1; ; ++num) {
@@ -847,7 +837,7 @@ const char *	name;
 		cp = strchr(buf, '\n');
 		if (cp == NULL) {
 			error(_("line too long"));
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 		}
 		*cp = '\0';
 		fields = getfields(buf);
@@ -891,7 +881,7 @@ _("%s: Leap line in non leap seconds file %s\n"),
 					(void) fprintf(stderr,
 _("%s: panic: Invalid l_value %d\n"),
 						progname, lp->l_value);
-					exit(EXIT_FAILURE);
+					(void) exit(EXIT_FAILURE);
 			}
 		}
 		ifree((char *) fields);
@@ -899,14 +889,14 @@ _("%s: panic: Invalid l_value %d\n"),
 	if (ferror(fp)) {
 		(void) fprintf(stderr, _("%s: Error reading %s\n"),
 			progname, filename);
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	if (fp != stdin && fclose(fp)) {
 		const char *e = strerror(errno);
 
 		(void) fprintf(stderr, _("%s: Error closing %s: %s\n"),
 			progname, filename, e);
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	if (wantcont)
 		error(_("expected continuation line not found"));
@@ -981,8 +971,6 @@ const int		nfields;
 		fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
 	r.r_name = ecpyalloc(fields[RF_NAME]);
 	r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
-	if (max_abbrvar_len < strlen(r.r_abbrvar))
-		max_abbrvar_len = strlen(r.r_abbrvar);
 	rules = (struct rule *) (void *) erealloc((char *) rules,
 		(int) ((nrules + 1) * sizeof *rules));
 	rules[nrules++] = r;
@@ -1088,8 +1076,6 @@ const int		iscont;
 	}
 	z.z_rule = ecpyalloc(fields[i_rule]);
 	z.z_format = ecpyalloc(fields[i_format]);
-	if (max_format_len < strlen(z.z_format))
-		max_format_len = strlen(z.z_format);
 	hasuntil = nfields > i_untilyear;
 	if (hasuntil) {
 		z.z_untilrule.r_filename = filename;
@@ -1110,9 +1096,7 @@ const int		iscont;
 			zones[nzones - 1].z_untiltime > min_time &&
 			zones[nzones - 1].z_untiltime < max_time &&
 			zones[nzones - 1].z_untiltime >= z.z_untiltime) {
-				error(_(
-"Zone continuation line end time is not after end time of previous line"
-					));
+				error(_("Zone continuation line end time is not after end time of previous line"));
 				return FALSE;
 		}
 	}
@@ -1136,7 +1120,7 @@ const int		nfields;
 	register int			i, j;
 	int				year, month, day;
 	long				dayoff, tod;
-	zic_t				t;
+	time_t				t;
 
 	if (nfields != LEAP_FIELDS) {
 		error(_("wrong number of fields on Leap line"));
@@ -1145,17 +1129,12 @@ const int		nfields;
 	dayoff = 0;
 	cp = fields[LP_YEAR];
 	if (sscanf(cp, scheck(cp, "%d"), &year) != 1) {
-		/*
-		** Leapin' Lizards!
-		*/
-		error(_("invalid leaping year"));
-		return;
+			/*
+			 * Leapin' Lizards!
+			 */
+			error(_("invalid leaping year"));
+			return;
 	}
-	if (!leapseen || leapmaxyear < year)
-		leapmaxyear = year;
-	if (!leapseen || leapminyear > year)
-		leapminyear = year;
-	leapseen = TRUE;
 	j = EPOCH_YEAR;
 	while (j != year) {
 		if (year > j) {
@@ -1185,7 +1164,7 @@ const int		nfields;
 			return;
 	}
 	dayoff = oadd(dayoff, eitol(day - 1));
-	if (dayoff < 0 && !TYPE_SIGNED(zic_t)) {
+	if (dayoff < 0 && !TYPE_SIGNED(time_t)) {
 		error(_("time before zero"));
 		return;
 	}
@@ -1197,7 +1176,7 @@ const int		nfields;
 		error(_("time too large"));
 		return;
 	}
-	t = (zic_t) dayoff * SECSPERDAY;
+	t = (time_t) dayoff * SECSPERDAY;
 	tod = gethms(fields[LP_TIME], _("invalid time of day"), FALSE);
 	cp = fields[LP_CORR];
 	{
@@ -1221,9 +1200,7 @@ const int		nfields;
 			return;
 		}
 		if ((lp = byword(fields[LP_ROLL], leap_types)) == NULL) {
-			error(_(
-				"illegal Rolling/Stationary field on Leap line"
-				));
+			error(_("illegal Rolling/Stationary field on Leap line"));
 			return;
 		}
 		leapadd(tadd(t, tod), positive, lp->l_value, count);
@@ -1310,8 +1287,7 @@ const char * const		timep;
 	*/
 	cp = loyearp;
 	lp = byword(cp, begin_years);
-	rp->r_lowasnum = lp == NULL;
-	if (!rp->r_lowasnum) switch ((int) lp->l_value) {
+	if (lp != NULL) switch ((int) lp->l_value) {
 		case YR_MINIMUM:
 			rp->r_loyear = INT_MIN;
 			break;
@@ -1322,15 +1298,18 @@ const char * const		timep;
 			(void) fprintf(stderr,
 				_("%s: panic: Invalid l_value %d\n"),
 				progname, lp->l_value);
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 	} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
 		error(_("invalid starting year"));
 		return;
+	} else if (noise) {
+		if (rp->r_loyear < min_year_representable)
+			warning(_("starting year too low to be represented"));
+		else if (rp->r_loyear > max_year_representable)
+			warning(_("starting year too high to be represented"));
 	}
 	cp = hiyearp;
-	lp = byword(cp, end_years);
-	rp->r_hiwasnum = lp == NULL;
-	if (!rp->r_hiwasnum) switch ((int) lp->l_value) {
+	if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
 		case YR_MINIMUM:
 			rp->r_hiyear = INT_MIN;
 			break;
@@ -1344,10 +1323,15 @@ const char * const		timep;
 			(void) fprintf(stderr,
 				_("%s: panic: Invalid l_value %d\n"),
 				progname, lp->l_value);
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 	} else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
 		error(_("invalid ending year"));
 		return;
+	} else if (noise) {
+		if (rp->r_loyear < min_year_representable)
+			warning(_("ending year too low to be represented"));
+		else if (rp->r_loyear > max_year_representable)
+			warning(_("ending year too high to be represented"));
 	}
 	if (rp->r_loyear > rp->r_hiyear) {
 		error(_("starting year greater than ending year"));
@@ -1362,6 +1346,8 @@ const char * const		timep;
 		}
 		rp->r_yrtype = ecpyalloc(typep);
 	}
+	if (rp->r_loyear < min_year && rp->r_loyear > 0)
+		min_year = rp->r_loyear;
 	/*
 	** Day work.
 	** Accept things such as:
@@ -1415,25 +1401,13 @@ const long	val;
 char * const	buf;
 {
 	register int	i;
-	register int	shift;
+	register long	shift;
 
 	for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
 		buf[i] = val >> shift;
 }
 
 static void
-convert64(val, buf)
-const zic_t	val;
-char * const	buf;
-{
-	register int	i;
-	register int	shift;
-
-	for (i = 0, shift = 56; i < 8; ++i, shift -= 8)
-		buf[i] = val >> shift;
-}
-
-static void
 puttzcode(val, fp)
 const long	val;
 FILE * const	fp;
@@ -1444,50 +1418,28 @@ FILE * const	fp;
 	(void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
 }
 
-static void
-puttzcode64(val, fp)
-const zic_t	val;
-FILE * const	fp;
-{
-	char	buf[8];
-
-	convert64(val, buf);
-	(void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
-}
-
 static int
 atcomp(avp, bvp)
-const void *	avp;
-const void *	bvp;
+void *	avp;
+void *	bvp;
 {
-	const zic_t	a = ((const struct attype *) avp)->at;
-	const zic_t	b = ((const struct attype *) bvp)->at;
-
-	return (a < b) ? -1 : (a > b);
-}
-
-static int
-is32(x)
-const zic_t	x;
-{
-	return INT32_MIN <= x && x <= INT32_MAX;
+	if (((struct attype *) avp)->at < ((struct attype *) bvp)->at)
+		return -1;
+	else if (((struct attype *) avp)->at > ((struct attype *) bvp)->at)
+		return 1;
+	else	return 0;
 }
 
 static void
-writezone(name, string)
+writezone(name)
 const char * const	name;
-const char * const	string;
 {
-	register FILE *			fp;
-	register int			i, j;
-	register int			leapcnt32, leapi32;
-	register int			timecnt32, timei32;
-	register int			pass;
-	static char *			fullname;
-	static const struct tzhead	tzh0;
-	static struct tzhead		tzh;
-	zic_t				ats[TZ_MAX_TIMES];
-	unsigned char			types[TZ_MAX_TIMES];
+	register FILE *		fp;
+	register int		i, j;
+	static char *		fullname;
+	static struct tzhead	tzh;
+	time_t			ats[TZ_MAX_TIMES];
+	unsigned char		types[TZ_MAX_TIMES];
 
 	/*
 	** Sort.
@@ -1510,13 +1462,14 @@ const char * const	string;
 			while (fromi < timecnt && attypes[fromi].type == 0)
 				++fromi;	/* handled by default rule */
 		for ( ; fromi < timecnt; ++fromi) {
-			if (toi != 0 && ((attypes[fromi].at +
-				gmtoffs[attypes[toi - 1].type]) <=
-				(attypes[toi - 1].at + gmtoffs[toi == 1 ? 0
-				: attypes[toi - 2].type]))) {
-					attypes[toi - 1].type =
-						attypes[fromi].type;
-					continue;
+			if (toi != 0
+			    && ((attypes[fromi].at
+				 + gmtoffs[attypes[toi - 1].type])
+				<= (attypes[toi - 1].at
+				    + gmtoffs[toi == 1 ? 0
+					      : attypes[toi - 2].type]))) {
+				attypes[toi - 1].type = attypes[fromi].type;
+				continue;
 			}
 			if (toi == 0 ||
 				attypes[toi - 1].type != attypes[fromi].type)
@@ -1531,36 +1484,6 @@ const char * const	string;
 		ats[i] = attypes[i].at;
 		types[i] = attypes[i].type;
 	}
-	/*
-	** Correct for leap seconds.
-	*/
-	for (i = 0; i < timecnt; ++i) {
-		j = leapcnt;
-		while (--j >= 0)
-			if (ats[i] > trans[j] - corr[j]) {
-				ats[i] = tadd(ats[i], corr[j]);
-				break;
-			}
-	}
-	/*
-	** Figure out 32-bit-limited starts and counts.
-	*/
-	timecnt32 = timecnt;
-	timei32 = 0;
-	leapcnt32 = leapcnt;
-	leapi32 = 0;
-	while (timecnt32 > 0 && !is32(ats[timecnt32 - 1]))
-		--timecnt32;
-	while (timecnt32 > 0 && !is32(ats[timei32])) {
-		--timecnt32;
-		++timei32;
-	}
-	while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1]))
-		--leapcnt32;
-	while (leapcnt32 > 0 && !is32(trans[leapi32])) {
-		--leapcnt32;
-		++leapi32;
-	}
 	fullname = erealloc(fullname,
 		(int) (strlen(directory) + 1 + strlen(name) + 1));
 	(void) sprintf(fullname, "%s/%s", directory, name);
@@ -1572,388 +1495,102 @@ const char * const	string;
 
 		(void) fprintf(stderr, _("%s: Can't remove %s: %s\n"),
 			progname, fullname, e);
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	if ((fp = fopen(fullname, "wb")) == NULL) {
 		if (mkdirs(fullname) != 0)
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 		if ((fp = fopen(fullname, "wb")) == NULL) {
 			const char *e = strerror(errno);
 
 			(void) fprintf(stderr, _("%s: Can't create %s: %s\n"),
 				progname, fullname, e);
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 		}
 	}
-	for (pass = 1; pass <= 2; ++pass) {
-		register int	thistimei, thistimecnt;
-		register int	thisleapi, thisleapcnt;
-		register int	thistimelim, thisleaplim;
-		int		writetype[TZ_MAX_TIMES];
-		int		typemap[TZ_MAX_TYPES];
-		register int	thistypecnt;
-		char		thischars[TZ_MAX_CHARS];
-		char		thischarcnt;
-		int 		indmap[TZ_MAX_CHARS];
-
-		if (pass == 1) {
-			thistimei = timei32;
-			thistimecnt = timecnt32;
-			thisleapi = leapi32;
-			thisleapcnt = leapcnt32;
-		} else {
-			thistimei = 0;
-			thistimecnt = timecnt;
-			thisleapi = 0;
-			thisleapcnt = leapcnt;
-		}
-		thistimelim = thistimei + thistimecnt;
-		thisleaplim = thisleapi + thisleapcnt;
-		for (i = 0; i < typecnt; ++i)
-			writetype[i] = thistimecnt == timecnt;
-		if (thistimecnt == 0) {
-			/*
-			** No transition times fall in the current
-			** (32- or 64-bit) window.
-			*/
-			if (typecnt != 0)
-				writetype[typecnt - 1] = TRUE;
-		} else {
-			for (i = thistimei - 1; i < thistimelim; ++i)
-				if (i >= 0)
-					writetype[types[i]] = TRUE;
-			/*
-			** For America/Godthab and Antarctica/Palmer
-			*/
-			if (thistimei == 0)
-				writetype[0] = TRUE;
-		}
-		thistypecnt = 0;
-		for (i = 0; i < typecnt; ++i)
-			typemap[i] = writetype[i] ?  thistypecnt++ : -1;
-		for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
-			indmap[i] = -1;
-		thischarcnt = 0;
-		for (i = 0; i < typecnt; ++i) {
-			register char *	thisabbr;
-
-			if (!writetype[i])
-				continue;
-			if (indmap[abbrinds[i]] >= 0)
-				continue;
-			thisabbr = &chars[abbrinds[i]];
-			for (j = 0; j < thischarcnt; ++j)
-				if (strcmp(&thischars[j], thisabbr) == 0)
-					break;
-			if (j == thischarcnt) {
-				(void) strcpy(&thischars[(int) thischarcnt],
-					thisabbr);
-				thischarcnt += strlen(thisabbr) + 1;
-			}
-			indmap[abbrinds[i]] = j;
-		}
-#define DO(field)	(void) fwrite((void *) tzh.field, \
-				(size_t) sizeof tzh.field, (size_t) 1, fp)
-		tzh = tzh0;
-		(void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
-		tzh.tzh_version[0] = ZIC_VERSION;
-		convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt);
-		convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt);
-		convert(eitol(thisleapcnt), tzh.tzh_leapcnt);
-		convert(eitol(thistimecnt), tzh.tzh_timecnt);
-		convert(eitol(thistypecnt), tzh.tzh_typecnt);
-		convert(eitol(thischarcnt), tzh.tzh_charcnt);
-		DO(tzh_magic);
-		DO(tzh_version);
-		DO(tzh_reserved);
-		DO(tzh_ttisgmtcnt);
-		DO(tzh_ttisstdcnt);
-		DO(tzh_leapcnt);
-		DO(tzh_timecnt);
-		DO(tzh_typecnt);
-		DO(tzh_charcnt);
+	convert(eitol(typecnt), tzh.tzh_ttisgmtcnt);
+	convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
+	convert(eitol(leapcnt), tzh.tzh_leapcnt);
+	convert(eitol(timecnt), tzh.tzh_timecnt);
+	convert(eitol(typecnt), tzh.tzh_typecnt);
+	convert(eitol(charcnt), tzh.tzh_charcnt);
+	(void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
+#define DO(field)	(void) fwrite((void *) tzh.field, (size_t) sizeof tzh.field, (size_t) 1, fp)
+	DO(tzh_magic);
+	DO(tzh_reserved);
+	DO(tzh_ttisgmtcnt);
+	DO(tzh_ttisstdcnt);
+	DO(tzh_leapcnt);
+	DO(tzh_timecnt);
+	DO(tzh_typecnt);
+	DO(tzh_charcnt);
 #undef DO
-		for (i = thistimei; i < thistimelim; ++i)
-			if (pass == 1)
-				puttzcode((long) ats[i], fp);
-			else	puttzcode64(ats[i], fp);
-		for (i = thistimei; i < thistimelim; ++i) {
-			unsigned char	uc;
-
-			uc = typemap[types[i]];
-			(void) fwrite((void *) &uc,
-				(size_t) sizeof uc,
-				(size_t) 1,
-				fp);
-		}
-		for (i = 0; i < typecnt; ++i)
-			if (writetype[i]) {
-				puttzcode(gmtoffs[i], fp);
-				(void) putc(isdsts[i], fp);
-				(void) putc((unsigned char) indmap[abbrinds[i]], fp);
+	for (i = 0; i < timecnt; ++i) {
+		j = leapcnt;
+		while (--j >= 0)
+			if (ats[i] >= trans[j]) {
+				ats[i] = tadd(ats[i], corr[j]);
+				break;
 			}
-		if (thischarcnt != 0)
-			(void) fwrite((void *) thischars,
-				(size_t) sizeof thischars[0],
-				(size_t) thischarcnt, fp);
-		for (i = thisleapi; i < thisleaplim; ++i) {
-			register zic_t	todo;
-
-			if (roll[i]) {
-				if (timecnt == 0 || trans[i] < ats[0]) {
-					j = 0;
-					while (isdsts[j])
-						if (++j >= typecnt) {
-							j = 0;
-							break;
-						}
-				} else {
-					j = 1;
-					while (j < timecnt &&
-						trans[i] >= ats[j])
-							++j;
-					j = types[j - 1];
-				}
-				todo = tadd(trans[i], -gmtoffs[j]);
-			} else	todo = trans[i];
-			if (pass == 1)
-				puttzcode((long) todo, fp);
-			else	puttzcode64(todo, fp);
-			puttzcode(corr[i], fp);
-		}
-		for (i = 0; i < typecnt; ++i)
-			if (writetype[i])
-				(void) putc(ttisstds[i], fp);
-		for (i = 0; i < typecnt; ++i)
-			if (writetype[i])
-				(void) putc(ttisgmts[i], fp);
-	}
-	(void) fprintf(fp, "\n%s\n", string);
+		puttzcode((long) ats[i], fp);
+	}
+	if (timecnt > 0)
+		(void) fwrite((void *) types, (size_t) sizeof types[0],
+			(size_t) timecnt, fp);
+	for (i = 0; i < typecnt; ++i) {
+		puttzcode((long) gmtoffs[i], fp);
+		(void) putc(isdsts[i], fp);
+		(void) putc(abbrinds[i], fp);
+	}
+	if (charcnt != 0)
+		(void) fwrite((void *) chars, (size_t) sizeof chars[0],
+			(size_t) charcnt, fp);
+	for (i = 0; i < leapcnt; ++i) {
+		if (roll[i]) {
+			if (timecnt == 0 || trans[i] < ats[0]) {
+				j = 0;
+				while (isdsts[j])
+					if (++j >= typecnt) {
+						j = 0;
+						break;
+					}
+			} else {
+				j = 1;
+				while (j < timecnt && trans[i] >= ats[j])
+					++j;
+				j = types[j - 1];
+			}
+			puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
+		} else	puttzcode((long) trans[i], fp);
+		puttzcode((long) corr[i], fp);
+	}
+	for (i = 0; i < typecnt; ++i)
+		(void) putc(ttisstds[i], fp);
+	for (i = 0; i < typecnt; ++i)
+		(void) putc(ttisgmts[i], fp);
 	if (ferror(fp) || fclose(fp)) {
 		(void) fprintf(stderr, _("%s: Error writing %s\n"),
 			progname, fullname);
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 }
 
 static void
-doabbr(abbr, format, letters, isdst, doquotes)
+doabbr(abbr, format, letters, isdst)
 char * const		abbr;
 const char * const	format;
 const char * const	letters;
 const int		isdst;
-const int		doquotes;
 {
-	register char *	cp;
-	register char *	slashp;
-	register int	len;
-
-	slashp = strchr(format, '/');
-	if (slashp == NULL) {
+	if (strchr(format, '/') == NULL) {
 		if (letters == NULL)
 			(void) strcpy(abbr, format);
 		else	(void) sprintf(abbr, format, letters);
-	} else if (isdst) {
-		(void) strcpy(abbr, slashp + 1);
-	} else {
-		if (slashp > format)
-			(void) strncpy(abbr, format,
-				(unsigned) (slashp - format));
-		abbr[slashp - format] = '\0';
-	}
-	if (!doquotes)
-		return;
-	for (cp = abbr; *cp != '\0'; ++cp)
-		if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", *cp) == NULL &&
-			strchr("abcdefghijklmnopqrstuvwxyz", *cp) == NULL)
-				break;
-	len = strlen(abbr);
-	if (len > 0 && *cp == '\0')
-		return;
-	abbr[len + 2] = '\0';
-	abbr[len + 1] = '>';
-	for ( ; len > 0; --len)
-		abbr[len] = abbr[len - 1];
-	abbr[0] = '<';
-}
-
-static void
-updateminmax(x)
-const int	x;
-{
-	if (min_year > x)
-		min_year = x;
-	if (max_year < x)
-		max_year = x;
-}
-
-static int
-stringoffset(result, offset)
-char *	result;
-long	offset;
-{
-	register int	hours;
-	register int	minutes;
-	register int	seconds;
-
-	result[0] = '\0';
-	if (offset < 0) {
-		(void) strcpy(result, "-");
-		offset = -offset;
-	}
-	seconds = offset % SECSPERMIN;
-	offset /= SECSPERMIN;
-	minutes = offset % MINSPERHOUR;
-	offset /= MINSPERHOUR;
-	hours = offset;
-	if (hours >= HOURSPERDAY) {
-		result[0] = '\0';
-		return -1;
-	}
-	(void) sprintf(end(result), "%d", hours);
-	if (minutes != 0 || seconds != 0) {
-		(void) sprintf(end(result), ":%02d", minutes);
-		if (seconds != 0)
-			(void) sprintf(end(result), ":%02d", seconds);
-	}
-	return 0;
-}
-
-static int
-stringrule(result, rp, dstoff, gmtoff)
-char *				result;
-const struct rule * const	rp;
-const long			dstoff;
-const long			gmtoff;
-{
-	register long	tod;
-
-	result = end(result);
-	if (rp->r_dycode == DC_DOM) {
-		register int	month, total;
-
-		if (rp->r_dayofmonth == 29 && rp->r_month == TM_FEBRUARY)
-			return -1;
-		total = 0;
-		for (month = 0; month < rp->r_month; ++month)
-			total += len_months[0][month];
-		(void) sprintf(result, "J%d", total + rp->r_dayofmonth);
-	} else {
-		register int	week;
-
-		if (rp->r_dycode == DC_DOWGEQ) {
-			week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
-			if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
-				return -1;
-		} else if (rp->r_dycode == DC_DOWLEQ) {
-			if (rp->r_dayofmonth == len_months[1][rp->r_month])
-				week = 5;
-			else {
-				week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
-				if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
-					return -1;
-			}
-		} else	return -1;	/* "cannot happen" */
-		(void) sprintf(result, "M%d.%d.%d",
-			rp->r_month + 1, week, rp->r_wday);
-	}
-	tod = rp->r_tod;
-	if (rp->r_todisgmt)
-		tod += gmtoff;
-	if (rp->r_todisstd && rp->r_stdoff == 0)
-		tod += dstoff;
-	if (tod < 0) {
-		result[0] = '\0';
-		return -1;
-	}
-	if (tod != 2 * SECSPERMIN * MINSPERHOUR) {
-		(void) strcat(result, "/");
-		if (stringoffset(end(result), tod) != 0)
-			return -1;
-	}
-	return 0;
-}
-
-static void
-stringzone(result, zpfirst, zonecount)
-char *				result;
-const struct zone * const	zpfirst;
-const int			zonecount;
-{
-	register const struct zone *	zp;
-	register struct rule *		rp;
-	register struct rule *		stdrp;
-	register struct rule *		dstrp;
-	register int			i;
-	register const char *		abbrvar;
-
-	result[0] = '\0';
-	zp = zpfirst + zonecount - 1;
-	stdrp = dstrp = NULL;
-	for (i = 0; i < zp->z_nrules; ++i) {
-		rp = &zp->z_rules[i];
-		if (rp->r_hiwasnum || rp->r_hiyear != INT_MAX)
-			continue;
-		if (rp->r_yrtype != NULL)
-			continue;
-		if (rp->r_stdoff == 0) {
-			if (stdrp == NULL)
-				stdrp = rp;
-			else	return;
-		} else {
-			if (dstrp == NULL)
-				dstrp = rp;
-			else	return;
-		}
-	}
-	if (stdrp == NULL && dstrp == NULL) {
-		/*
-		** There are no rules running through "max".
-		** Let's find the latest rule.
-		*/
-		for (i = 0; i < zp->z_nrules; ++i) {
-			rp = &zp->z_rules[i];
-			if (stdrp == NULL || rp->r_hiyear > stdrp->r_hiyear ||
-				(rp->r_hiyear == stdrp->r_hiyear &&
-				rp->r_month > stdrp->r_month))
-					stdrp = rp;
-		}
-		if (stdrp != NULL && stdrp->r_stdoff != 0)
-			return;	/* We end up in DST (a POSIX no-no). */
-		/*
-		** Horrid special case: if year is 2037,
-		** presume this is a zone handled on a year-by-year basis;
-		** do not try to apply a rule to the zone.
-		*/
-		if (stdrp != NULL && stdrp->r_hiyear == 2037)
-			return;
-	}
-	if (stdrp == NULL && zp->z_nrules != 0)
-		return;
-	abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
-	doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
-	if (stringoffset(end(result), -zp->z_gmtoff) != 0) {
-		result[0] = '\0';
-		return;
-	}
-	if (dstrp == NULL)
-		return;
-	doabbr(end(result), zp->z_format, dstrp->r_abbrvar, TRUE, TRUE);
-	if (dstrp->r_stdoff != SECSPERMIN * MINSPERHOUR)
-		if (stringoffset(end(result),
-			-(zp->z_gmtoff + dstrp->r_stdoff)) != 0) {
-				result[0] = '\0';
-				return;
-		}
-	(void) strcat(result, ",");
-	if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
-		result[0] = '\0';
-		return;
-	}
-	(void) strcat(result, ",");
-	if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
-		result[0] = '\0';
-		return;
+	} else if (isdst)
+		(void) strcpy(abbr, strchr(format, '/') + 1);
+	else {
+		(void) strcpy(abbr, format);
+		*strchr(abbr, '/') = '\0';
 	}
 }
 
@@ -1966,7 +1603,7 @@ const int			zonecount;
 	register struct rule *		rp;
 	register int			i, j;
 	register int			usestart, useuntil;
-	register zic_t			starttime, untiltime;
+	register time_t			starttime, untiltime;
 	register long			gmtoff;
 	register long			stdoff;
 	register int			year;
@@ -1974,17 +1611,8 @@ const int			zonecount;
 	register int			startttisstd;
 	register int			startttisgmt;
 	register int			type;
-	register char *			startbuf;
-	register char *			ab;
-	register char *			envvar;
-	register int			max_abbr_len;
-	register int			max_envvar_len;
-
-	max_abbr_len = 2 + max_format_len + max_abbrvar_len;
-	max_envvar_len = 2 * max_abbr_len + 5 * 9;
-	startbuf = emalloc(max_abbr_len + 1);
-	ab = emalloc(max_abbr_len + 1);
-	envvar = emalloc(max_envvar_len + 1);
+	char				startbuf[BUFSIZ];
+
 	INITIALIZE(untiltime);
 	INITIALIZE(starttime);
 	/*
@@ -1994,53 +1622,11 @@ const int			zonecount;
 	typecnt = 0;
 	charcnt = 0;
 	/*
-	** Thanks to Earl Chew
+	** Thanks to Earl Chew (earl@dnd.icp.nec.com.au)
 	** for noting the need to unconditionally initialize startttisstd.
 	*/
 	startttisstd = FALSE;
 	startttisgmt = FALSE;
-	min_year = max_year = EPOCH_YEAR;
-	if (leapseen) {
-		updateminmax(leapminyear);
-		updateminmax(leapmaxyear);
-	}
-	for (i = 0; i < zonecount; ++i) {
-		zp = &zpfirst[i];
-		updateminmax(zp->z_untilrule.r_loyear);
-		for (j = 0; j < zp->z_nrules; ++j) {
-			rp = &zp->z_rules[j];
-			if (rp->r_lowasnum)
-				updateminmax(rp->r_loyear);
-			if (rp->r_hiwasnum)
-				updateminmax(rp->r_hiyear);
-		}
-	}
-	/*
-	** Generate lots of data if a rule can't cover all future times.
-	*/
-	stringzone(envvar, zpfirst, zonecount);
-	if (noise && envvar[0] == '\0') {
-		register char *	wp;
-
-wp = ecpyalloc(_("no POSIX environment variable for zone"));
-		wp = ecatalloc(wp, " ");
-		wp = ecatalloc(wp, zpfirst->z_name); 
-		warning(wp);
-		ifree(wp);
-	}
-	if (envvar[0] == '\0') {
-		if (min_year >= INT_MIN + YEARSPERREPEAT)
-			min_year -= YEARSPERREPEAT;
-		else	min_year = INT_MIN;
-		if (max_year <= INT_MAX - YEARSPERREPEAT)
-			max_year += YEARSPERREPEAT;
-		else	max_year = INT_MAX;
-	}
-	/*
-	** For the benefit of older systems, generate data through 2037.
-	*/
-	if (max_year < 2037)
-		max_year = 2037;
 	for (i = 0; i < zonecount; ++i) {
 		/*
 		** A guess that may well be corrected later.
@@ -2058,7 +1644,7 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
 		if (zp->z_nrules == 0) {
 			stdoff = zp->z_stdoff;
 			doabbr(startbuf, zp->z_format,
-				(char *) NULL, stdoff != 0, FALSE);
+				(char *) NULL, stdoff != 0);
 			type = addtype(oadd(zp->z_gmtoff, stdoff),
 				startbuf, stdoff != 0, startttisstd,
 				startttisgmt);
@@ -2086,8 +1672,9 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
 			}
 			for ( ; ; ) {
 				register int	k;
-				register zic_t	jtime, ktime;
+				register time_t	jtime, ktime;
 				register long	offset;
+				char		buf[BUFSIZ];
 
 				INITIALIZE(ktime);
 				if (useuntil) {
@@ -2143,27 +1730,23 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
 							stdoff);
 						doabbr(startbuf, zp->z_format,
 							rp->r_abbrvar,
-							rp->r_stdoff != 0,
-							FALSE);
+							rp->r_stdoff != 0);
 						continue;
 					}
 					if (*startbuf == '\0' &&
-						startoff == oadd(zp->z_gmtoff,
-						stdoff)) {
-							doabbr(startbuf,
-								zp->z_format,
-								rp->r_abbrvar,
-								rp->r_stdoff !=
-								0,
-								FALSE);
+					    startoff == oadd(zp->z_gmtoff,
+					    stdoff)) {
+						doabbr(startbuf, zp->z_format,
+							rp->r_abbrvar,
+							rp->r_stdoff != 0);
 					}
 				}
 				eats(zp->z_filename, zp->z_linenum,
 					rp->r_filename, rp->r_linenum);
-				doabbr(ab, zp->z_format, rp->r_abbrvar,
-					rp->r_stdoff != 0, FALSE);
+				doabbr(buf, zp->z_format, rp->r_abbrvar,
+					rp->r_stdoff != 0);
 				offset = oadd(zp->z_gmtoff, rp->r_stdoff);
-				type = addtype(offset, ab, rp->r_stdoff != 0,
+				type = addtype(offset, buf, rp->r_stdoff != 0,
 					rp->r_todisstd, rp->r_todisgmt);
 				addtt(ktime, type);
 			}
@@ -2196,15 +1779,12 @@ error(_("can't determine time zone abbreviation to use just after until time"));
 				starttime = tadd(starttime, -gmtoff);
 		}
 	}
-	writezone(zpfirst->z_name, envvar);
-	ifree(startbuf);
-	ifree(ab);
-	ifree(envvar);
+	writezone(zpfirst->z_name);
 }
 
 static void
 addtt(starttime, type)
-const zic_t	starttime;
+const time_t	starttime;
 int		type;
 {
 	if (starttime <= min_time ||
@@ -2223,7 +1803,7 @@ int		type;
 	}
 	if (timecnt >= TZ_MAX_TIMES) {
 		error(_("too many transitions?!"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	attypes[timecnt].at = starttime;
 	attypes[timecnt].type = type;
@@ -2242,15 +1822,15 @@ const int		ttisgmt;
 
 	if (isdst != TRUE && isdst != FALSE) {
 		error(_("internal error - addtype called with bad isdst"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	if (ttisstd != TRUE && ttisstd != FALSE) {
 		error(_("internal error - addtype called with bad ttisstd"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	if (ttisgmt != TRUE && ttisgmt != FALSE) {
 		error(_("internal error - addtype called with bad ttisgmt"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	/*
 	** See if there's already an entry for this zone type.
@@ -2269,7 +1849,7 @@ const int		ttisgmt;
 	*/
 	if (typecnt >= TZ_MAX_TYPES) {
 		error(_("too many local time types"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	gmtoffs[i] = gmtoff;
 	isdsts[i] = isdst;
@@ -2288,7 +1868,7 @@ const int		ttisgmt;
 
 static void
 leapadd(t, positive, rolling, count)
-const zic_t	t;
+const time_t	t;
 const int	positive;
 const int	rolling;
 int		count;
@@ -2297,13 +1877,13 @@ int		count;
 
 	if (leapcnt + (positive ? count : 1) > TZ_MAX_LEAPS) {
 		error(_("too many leap seconds"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	for (i = 0; i < leapcnt; ++i)
 		if (t <= trans[i]) {
 			if (t == trans[i]) {
 				error(_("repeated leap second moment"));
-				exit(EXIT_FAILURE);
+				(void) exit(EXIT_FAILURE);
 			}
 			break;
 		}
@@ -2358,7 +1938,7 @@ const char * const	type;
 	(void) fprintf(stderr, _("%s: command was '%s', result was %d\n"),
 		progname, buf, result);
 	for ( ; ; )
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 }
 
 static int
@@ -2439,9 +2019,8 @@ register char *	cp;
 		emalloc((int) ((strlen(cp) + 1) * sizeof *array));
 	nsubs = 0;
 	for ( ; ; ) {
-		while (isascii((unsigned char) *cp) &&
-			isspace((unsigned char) *cp))
-				++cp;
+		while (isascii(*cp) && isspace((unsigned char) *cp))
+			++cp;
 		if (*cp == '\0' || *cp == '#')
 			break;
 		array[nsubs++] = dp = cp;
@@ -2451,9 +2030,7 @@ register char *	cp;
 			else while ((*dp = *cp++) != '"')
 				if (*dp != '\0')
 					++dp;
-				else	error(_(
-						"Odd number of quotation marks"
-						));
+				else	error(_("Odd number of quotation marks"));
 		} while (*cp != '\0' && *cp != '#' &&
 			(!isascii(*cp) || !isspace((unsigned char) *cp)));
 		if (isascii(*cp) && isspace((unsigned char) *cp))
@@ -2474,17 +2051,17 @@ const long	t2;
 	t = t1 + t2;
 	if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
 		error(_("time overflow"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	return t;
 }
 
-static zic_t
+static time_t
 tadd(t1, t2)
-const zic_t	t1;
+const time_t	t1;
 const long	t2;
 {
-	register zic_t	t;
+	register time_t	t;
 
 	if (t1 == max_time && t2 > 0)
 		return max_time;
@@ -2493,7 +2070,7 @@ const long	t2;
 	t = t1 + t2;
 	if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
 		error(_("time overflow"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	return t;
 }
@@ -2503,14 +2080,14 @@ const long	t2;
 ** 1970, 00:00 LOCAL time - in that year that the rule refers to.
 */
 
-static zic_t
+static time_t
 rpytime(rp, wantedy)
 register const struct rule * const	rp;
 register const int			wantedy;
 {
 	register int	y, m, i;
 	register long	dayoff;			/* with a nod to Margaret O. */
-	register zic_t	t;
+	register time_t	t;
 
 	if (wantedy == INT_MIN)
 		return min_time;
@@ -2540,7 +2117,7 @@ register const int			wantedy;
 			--i;
 		else {
 			error(_("use of 2/29 in non leap-year"));
-			exit(EXIT_FAILURE);
+			(void) exit(EXIT_FAILURE);
 		}
 	}
 	--i;
@@ -2574,15 +2151,18 @@ register const int			wantedy;
 			}
 		if (i < 0 || i >= len_months[isleap(y)][m]) {
 			if (noise)
-				warning(_("rule goes past start/end of month--\
-will not work with pre-2004 versions of zic"));
+				warning(_("rule goes past start/end of month--will not work with pre-2004 versions of zic"));
 		}
 	}
+	if (dayoff < 0 && !TYPE_SIGNED(time_t))
+		return min_time;
 	if (dayoff < min_time / SECSPERDAY)
 		return min_time;
 	if (dayoff > max_time / SECSPERDAY)
 		return max_time;
-	t = (zic_t) dayoff * SECSPERDAY;
+	t = (time_t) dayoff * SECSPERDAY;
+	if (t > 0 && max_time - t < rp->r_tod)
+		return max_time;
 	return tadd(t, rp->r_tod);
 }
 
@@ -2592,48 +2172,10 @@ const char * const	string;
 {
 	register int	i;
 
-	if (strcmp(string, GRANDPARENTED) != 0) {
-		register const char *	cp;
-		register char *		wp;
-
-		/*
-		** Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics
-		** optionally followed by a + or - and a number from 1 to 14.
-		*/
-		cp = string;
-		wp = NULL;
-		while (isascii((unsigned char) *cp) &&
-			isalpha((unsigned char) *cp))
-				++cp;
-		if (cp - string == 0)
-wp = _("time zone abbreviation lacks alphabetic at start");
-		if (noise && cp - string > 3)
-wp = _("time zone abbreviation has more than 3 alphabetics");
-		if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN)
-wp = _("time zone abbreviation has too many alphabetics");
-		if (wp == NULL && (*cp == '+' || *cp == '-')) {
-			++cp;
-			if (isascii((unsigned char) *cp) &&
-				isdigit((unsigned char) *cp))
-					if (*cp++ == '1' &&
-						*cp >= '0' && *cp <= '4')
-							++cp;
-		}
-		if (*cp != '\0')
-wp = _("time zone abbreviation differs from POSIX standard");
-		if (wp != NULL) {
-			wp = ecpyalloc(wp);
-			wp = ecatalloc(wp, " (");
-			wp = ecatalloc(wp, string);
-			wp = ecatalloc(wp, ")");
-			warning(wp);
-			ifree(wp);
-		}
-	}
 	i = strlen(string) + 1;
 	if (charcnt + i > TZ_MAX_CHARS) {
 		error(_("too many, or too long, time zone abbreviations"));
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	(void) strcpy(&chars[charcnt], string);
 	charcnt += eitol(i);
@@ -2697,7 +2239,7 @@ const int	i;
 		(void) fprintf(stderr,
 			_("%s: %d did not sign extend correctly\n"),
 			progname, i);
-		exit(EXIT_FAILURE);
+		(void) exit(EXIT_FAILURE);
 	}
 	return l;
 }
diff --git a/timezone/zone.tab b/timezone/zone.tab
index 09cdf6940a..e3c8e39e1e 100644
--- a/timezone/zone.tab
+++ b/timezone/zone.tab
@@ -1,8 +1,8 @@
-# @(#)zone.tab	8.1
+# @(#)zone.tab	1.30
 #
 # TZ zone descriptions
 #
-# From Paul Eggert (1996-08-05):
+# From Paul Eggert <eggert@twinsun.com> (1996-08-05):
 #
 # This file contains a table with the following columns:
 # 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
@@ -45,17 +45,17 @@ AR	-3436-05827	America/Argentina/Buenos_Aires	Buenos Aires (BA, CF)
 AR	-3124-06411	America/Argentina/Cordoba	most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF, SL)
 AR	-2411-06518	America/Argentina/Jujuy	Jujuy (JY)
 AR	-3124-06411	America/Argentina/Tucuman	Tucuman (TM)
-AR	-2828-06547	America/Argentina/Catamarca	Catamarca (CT), Chubut (CH)
+AR	-2828-06547	America/Argentina/Catamarca	Catamarca (CT)
 AR	-2926-06651	America/Argentina/La_Rioja	La Rioja (LR)
 AR	-3132-06831	America/Argentina/San_Juan	San Juan (SJ)
 AR	-3253-06849	America/Argentina/Mendoza	Mendoza (MZ)
+AR	-4552-06730	America/Argentina/ComodRivadavia	Chubut (CH)
 AR	-5138-06913	America/Argentina/Rio_Gallegos	Santa Cruz (SC)
 AR	-5448-06818	America/Argentina/Ushuaia	Tierra del Fuego (TF)
 AS	-1416-17042	Pacific/Pago_Pago
 AT	+4813+01620	Europe/Vienna
 AU	-3133+15905	Australia/Lord_Howe	Lord Howe Island
-AU	-4253+14719	Australia/Hobart	Tasmania - most locations
-AU	-3956+14352	Australia/Currie	Tasmania - King Island
+AU	-4253+14719	Australia/Hobart	Tasmania
 AU	-3749+14458	Australia/Melbourne	Victoria
 AU	-3352+15113	Australia/Sydney	New South Wales - most locations
 AU	-3157+14127	Australia/Broken_Hill	New South Wales - Yancowinna
@@ -100,18 +100,16 @@ BW	-2545+02555	Africa/Gaborone
 BY	+5354+02734	Europe/Minsk
 BZ	+1730-08812	America/Belize
 CA	+4734-05243	America/St_Johns	Newfoundland Island
-CA	+4439-06336	America/Halifax	Atlantic Time - Nova Scotia (most places), W Labrador, E Quebec & PEI
+CA	+4439-06336	America/Halifax	Atlantic Time - Nova Scotia (most places), NB, W Labrador, E Quebec & PEI
 CA	+4612-05957	America/Glace_Bay	Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
-CA	+4606-06447	America/Moncton	Atlantic Time - New Brunswick
 CA	+5320-06025	America/Goose_Bay	Atlantic Time - E Labrador
 CA	+4531-07334	America/Montreal	Eastern Time - Quebec - most locations
 CA	+4339-07923	America/Toronto	Eastern Time - Ontario - most locations
 CA	+4901-08816	America/Nipigon	Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
 CA	+4823-08915	America/Thunder_Bay	Eastern Time - Thunder Bay, Ontario
-CA	+6608-06544	America/Pangnirtung	Eastern Time - Pangnirtung, Nunavut
-CA	+6344-06828	America/Iqaluit	Eastern Time - east Nunavut
-CA	+6408-08310	America/Coral_Harbour	Eastern Standard Time - Southampton Island
-CA	+6245-09210	America/Rankin_Inlet	Central Time - central Nunavut
+CA	+6608-06544	America/Pangnirtung	Eastern Standard Time - Pangnirtung, Nunavut
+CA	+6344-06828	America/Iqaluit	Eastern Standard Time - east Nunavut
+CA	+6245-09210	America/Rankin_Inlet	Eastern Standard Time - central Nunavut
 CA	+4953-09709	America/Winnipeg	Central Time - Manitoba & west Ontario
 CA	+4843-09429	America/Rainy_River	Central Time - Rainy River & Fort Frances, Ontario
 CA	+6903-10505	America/Cambridge_Bay	Central Time - west Nunavut
@@ -167,13 +165,15 @@ ET	+0902+03842	Africa/Addis_Ababa
 FI	+6010+02458	Europe/Helsinki
 FJ	-1808+17825	Pacific/Fiji
 FK	-5142-05751	Atlantic/Stanley
-FM	+0725+15147	Pacific/Truk	Truk (Chuuk) and Yap
+FM	+0931+13808	Pacific/Yap	Yap
+FM	+0725+15147	Pacific/Truk	Truk (Chuuk)
 FM	+0658+15813	Pacific/Ponape	Ponape (Pohnpei)
 FM	+0519+16259	Pacific/Kosrae	Kosrae
 FO	+6201-00646	Atlantic/Faeroe
 FR	+4852+00220	Europe/Paris
 GA	+0023+00927	Africa/Libreville
-GB	+512830-0001845	Europe/London
+GB	+512830-0001845	Europe/London	Great Britain
+GB	+5435-00555	Europe/Belfast	Northern Ireland
 GD	+1203-06145	America/Grenada
 GE	+4143+04449	Asia/Tbilisi
 GF	+0456-05220	America/Cayenne
@@ -248,7 +248,8 @@ MG	-1855+04731	Indian/Antananarivo
 MH	+0709+17112	Pacific/Majuro	most locations
 MH	+0905+16720	Pacific/Kwajalein	Kwajalein
 MK	+4159+02126	Europe/Skopje
-ML	+1239-00800	Africa/Bamako
+ML	+1239-00800	Africa/Bamako	southwest Mali
+ML	+1446-00301	Africa/Timbuktu	northeast Mali
 MM	+1647+09610	Asia/Rangoon
 MN	+4755+10653	Asia/Ulaanbaatar	most locations
 MN	+4801+09139	Asia/Hovd	Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
@@ -369,16 +370,14 @@ UM	+2813-17722	Pacific/Midway	Midway Islands
 UM	+1917+16637	Pacific/Wake	Wake Island
 US	+404251-0740023	America/New_York	Eastern Time
 US	+421953-0830245	America/Detroit	Eastern Time - Michigan - most locations
-US	+381515-0854534	America/Kentucky/Louisville	Eastern Time - Kentucky - Louisville area
+US	+381515-0854534	America/Louisville	Eastern Time - Kentucky - Louisville area
 US	+364947-0845057	America/Kentucky/Monticello	Eastern Time - Kentucky - Wayne County
-US	+394606-0860929	America/Indiana/Indianapolis	Eastern Time - Indiana - most locations
-US	+382232-0862041	America/Indiana/Marengo	Eastern Time - Indiana - Crawford County
-US	+411745-0863730	America/Indiana/Knox	Eastern Time - Indiana - Starke County
-US	+384452-0850402	America/Indiana/Vevay	Eastern Time - Indiana - Switzerland County
+US	+394606-0860929	America/Indianapolis	Eastern Standard Time - Indiana - most locations
+US	+382232-0862041	America/Indiana/Marengo	Eastern Standard Time - Indiana - Crawford County
+US	+411745-0863730	America/Indiana/Knox	Eastern Standard Time - Indiana - Starke County
+US	+384452-0850402	America/Indiana/Vevay	Eastern Standard Time - Indiana - Switzerland County
 US	+415100-0873900	America/Chicago	Central Time
-US	+384038-0873143	America/Indiana/Vincennes	Central Time - Indiana - Daviess, Dubois, Knox, Martin, Perry & Pulaski
-US	+382931-0871643	America/Indiana/Petersburg	Central Time - Indiana - Pike County
-US	+450628-0873651	America/Menominee	Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
+US	+450628-0873651	America/Menominee	Central Time - Michigan - Wisconsin border
 US	+470659-1011757	America/North_Dakota/Center	Central Time - North Dakota - Oliver County
 US	+394421-1045903	America/Denver	Mountain Time
 US	+433649-1161209	America/Boise	Mountain Time - south Idaho & east Oregon