element is the value of the property,
+ // instead of the contents of the element, which instead provide a
+ // human presentable version of the value."
+ value = element.getAttribute("title");
+ if (StringUtils.isBlank(value))
+ throw new ParserException("Abbr element '" + className + "' requires a non-empty title", -1);
+ if (LOG.isDebugEnabled())
+ LOG.debug("Setting value '" + value + "' from title attribute");
+ } else if (isHeaderElement(elementName)) {
+ // try title first. if that's not set, fall back to text content.
+ value = element.getAttribute("title");
+ if (!StringUtils.isBlank(value)) {
+ if (LOG.isDebugEnabled())
+ LOG.debug("Setting value '" + value + "' from title attribute");
+ } else {
+ value = getTextContent(element);
+ if (LOG.isDebugEnabled())
+ LOG.debug("Setting value '" + value + "' from text content");
+ }
+ } else if (elementName.equals("a") && isUrlProperty(propName)) {
+ value = element.getAttribute("href");
+ if (StringUtils.isBlank(value))
+ throw new ParserException("A element '" + className + "' requires a non-empty href", -1);
+ if (LOG.isDebugEnabled())
+ LOG.debug("Setting value '" + value + "' from href attribute");
+ } else if (elementName.equals("img")) {
+ if (isUrlProperty(propName)) {
+ value = element.getAttribute("src");
+ if (StringUtils.isBlank(value))
+ throw new ParserException("Img element '" + className + "' requires a non-empty src", -1);
+ if (LOG.isDebugEnabled())
+ LOG.debug("Setting value '" + value + "' from src attribute");
+ } else {
+ value = element.getAttribute("alt");
+ if (StringUtils.isBlank(value))
+ throw new ParserException("Img element '" + className + "' requires a non-empty alt", -1);
+ if (LOG.isDebugEnabled())
+ LOG.debug("Setting value '" + value + "' from alt attribute");
+ }
+ } else {
+ value = getTextContent(element);
+ if (!StringUtils.isBlank(value)) {
+ if (LOG.isDebugEnabled())
+ LOG.debug("Setting value '" + value + "' from text content");
+ }
+ }
+
+ if (StringUtils.isBlank(value)) {
+ if (LOG.isDebugEnabled())
+ LOG.debug("Skipping property with empty value");
+ return;
+ }
+
+ handler.startProperty(propName);
+
+ // if it's a date property, we have to convert from the
+ // hCalendar-formatted date (RFC 3339) to an iCalendar-formatted date
+ if (isDateProperty(propName)) {
+ try {
+ Date date = icalDate(value);
+ value = date.toString();
+
+ if (!(date instanceof DateTime))
+ try {
+ handler.parameter(Parameter.VALUE, Value.DATE.getValue());
+ } catch (Exception e) {
+ }
+ } catch (ParseException e) {
+ throw new ParserException("Malformed date value for element '" + className + "'", -1, e);
+ }
+ }
+
+ if (isTextProperty(propName)) {
+ String lang = element.getAttributeNS(XMLConstants.XML_NS_URI, "lang");
+ if (!StringUtils.isBlank(lang))
+ try {
+ handler.parameter(Parameter.LANGUAGE, lang);
+ } catch (Exception e) {
+ }
+ }
+
+ // XXX: other parameters?
+
+ try {
+ handler.propertyValue(value);
+ } catch (URISyntaxException e) {
+ throw new ParserException("Malformed URI value for element '" + className + "'", -1, e);
+ } catch (ParseException e) {
+ throw new ParserException("Malformed value for element '" + className + "'", -1, e);
+ } catch (IOException e) {
+ throw new CalendarException(e);
+ }
+
+ handler.endProperty(propName);
+ }
+
+ // "The basic format of hCalendar is to use iCalendar object/property
+ // names in lower-case for class names ..."
+ /*
+ * private static String _icalName(Element element) { return element.getAttribute("class").toUpperCase(); }
+ */
+
+ private static String className(String propName) {
+ return propName.toLowerCase();
+ }
+
+ private static boolean isHeaderElement(String name) {
+ return (name.equals("h1") || name.equals("h2") || name.equals("h3")
+ || name.equals("h4") || name.equals("h5") || name
+ .equals("h6"));
+ }
+
+ private static boolean isDateProperty(String name) {
+ return (name.equals(Property.DTSTART) || name.equals(Property.DTEND) || name.equals(Property.DTSTAMP) || name
+ .equals(Property.LAST_MODIFIED));
+ }
+
+ private static boolean isUrlProperty(String name) {
+ return (name.equals(Property.URL));
+ }
+
+ private static boolean isTextProperty(String name) {
+ return (name.equals(Property.SUMMARY) || name.equals(Property.LOCATION) || name.equals(Property.CATEGORIES)
+ || name.equals(Property.DESCRIPTION) || name.equals(Property.ATTENDEE)
+ || name.equals(Property.CONTACT) || name
+ .equals(Property.ORGANIZER));
+ }
+
+ private static Date icalDate(String original) throws ParseException {
+ // in the real world, some generators use iCalendar formatted
+ // dates and date-times, so try parsing those formats first before
+ // going to RFC 3339 formats
+
+ if (original.indexOf('T') == -1) {
+ // date-only
+ try {
+ // for some reason Date's pattern matches yyyy-MM-dd, so
+ // don't check it if we find -
+ if (original.indexOf('-') == -1)
+ return new Date(original);
+ } catch (Exception e) {
+ }
+ return new Date(HCAL_DATE_FORMAT.parse(original));
+ }
+
+ try {
+ return new DateTime(original);
+ } catch (Exception e) {
+ }
+
+ // the date-time value can represent its time zone in a few different
+ // ways. we have to normalize those to match our pattern.
+
+ String normalized = null;
+
+ if (LOG.isDebugEnabled())
+ LOG.debug("normalizing date-time " + original);
+
+ // 2002-10-09T19:00:00Z
+ if (original.charAt(original.length() - 1) == 'Z') {
+ normalized = original.replaceAll("Z", "GMT-00:00");
+ }
+ // 2002-10-10T00:00:00+05:00
+ else if (original.indexOf("GMT") == -1
+ && (original.charAt(original.length() - 6) == '+' || original.charAt(original.length() - 6) == '-')) {
+ String tzId = "GMT" + original.substring(original.length() - 6);
+ normalized = original.substring(0, original.length() - 6) + tzId;
+ } else {
+ // 2002-10-10T00:00:00GMT+05:00
+ normalized = original;
+ }
+
+ DateTime dt = new DateTime(HCAL_DATE_TIME_FORMAT.parse(normalized));
+
+ // hCalendar does not specify a representation for timezone ids
+ // or any other sort of timezone information. the best it does is
+ // give us a timezone offset that we can use to convert the local
+ // time to UTC. furthermore, it has no representation for floating
+ // date-times. therefore, all dates are converted to UTC.
+
+ dt.setUtc(true);
+
+ return dt;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/data/HCalendarParserFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/data/HCalendarParserFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.data;
+
+/**
+ * A parser factory for the hCal microformat.
+ *
+ *
+ * $Id$
+ *
+ * Created on 18/11/2007
+ *
+ *
+ * @author fortuna
+ *
+ */
+public class HCalendarParserFactory extends CalendarParserFactory {
+
+ /**
+ * {@inheritDoc}
+ */
+ public CalendarParser createParser() {
+ return new HCalendarParser();
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/data/ParserException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/data/ParserException.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,88 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.data;
+
+import java.text.MessageFormat;
+
+/**
+ *
+ * $Id$ [Apr 5, 2004]
+ *
+ *
+ * An exception thrown when an error occurs in parsing iCalendar data.
+ * @author Ben Fortuna
+ */
+public class ParserException extends Exception {
+
+ private static final long serialVersionUID = 6116644246112002214L;
+
+ private static final String ERROR_MESSAGE_PATTERN = "Error at line {0}:";
+
+ private int lineNo;
+
+ /**
+ * @param lineNo line number where parsing error ocurred
+ */
+ public ParserException(final int lineNo) {
+ this.lineNo = lineNo;
+ }
+
+ /**
+ * Constructor with message.
+ * @param message a descriptive message for the exception
+ * @param lineNo line number where parsing error ocurred
+ */
+ public ParserException(final String message, final int lineNo) {
+ super(MessageFormat.format(ERROR_MESSAGE_PATTERN, new Object[] { new Integer(lineNo)}) + message);
+ this.lineNo = lineNo;
+ }
+
+ /**
+ * Constructor with message and cause.
+ * @param message a descriptive message for the exception
+ * @param lineNo line number where parsing error ocurred
+ * @param cause a throwable that is the cause of this exception
+ */
+ public ParserException(final String message, final int lineNo,
+ final Throwable cause) {
+
+ super(MessageFormat.format(ERROR_MESSAGE_PATTERN, new Object[] { new Integer(lineNo)}) + message, cause);
+ this.lineNo = lineNo;
+ }
+
+ /**
+ * @return the lineNo
+ */
+ public final int getLineNo() {
+ return lineNo;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/data/UnfoldingReader.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/data/UnfoldingReader.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,239 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.data;
+
+import java.io.IOException;
+import java.io.PushbackReader;
+import java.io.Reader;
+import java.util.Arrays;
+
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *
+ * $Id$ [06-Apr-2004]
+ *
+ *
+ * A reader which performs iCalendar unfolding as it reads. Note that unfolding rules may be "relaxed" to allow
+ * unfolding of non-conformant *.ics files. By specifying the system property "ical4j.unfolding.relaxed=true" iCalendar
+ * files created with Mozilla Calendar/Sunbird may be correctly unfolded.
+ *
+ * To wrap this reader with a {@link java.io.BufferedReader} you must ensure you specify an identical buffer size
+ * to that used in the {@link java.io.BufferedReader}.
+ *
+ * @author Ben Fortuna
+ */
+public class UnfoldingReader extends PushbackReader {
+
+ private Log log = LogFactory.getLog(UnfoldingReader.class);
+
+ /**
+ * The pattern used to identify a fold in an iCalendar data stream.
+ */
+ private static final char[] DEFAULT_FOLD_PATTERN_1 = { '\r', '\n', ' ' };
+
+ /**
+ * The pattern used to identify a fold in Microsoft Outlook 2007.
+ */
+ private static final char[] DEFAULT_FOLD_PATTERN_2 = { '\r', '\n', '\t' };
+
+ /**
+ * The pattern used to identify a fold in Mozilla Calendar/Sunbird and KOrganizer.
+ */
+ private static final char[] RELAXED_FOLD_PATTERN_1 = { '\n', ' ' };
+
+ /**
+ * The pattern used to identify a fold in Microsoft Outlook 2007.
+ */
+ private static final char[] RELAXED_FOLD_PATTERN_2 = { '\n', '\t' };
+
+ private char[][] patterns;
+
+ private char[][] buffers;
+
+ private int linesUnfolded;
+
+ private int maxPatternLength = 0;
+
+ /**
+ * Creates a new unfolding reader instance. Relaxed unfolding flag is read from system property.
+ * @param in the reader to unfold from
+ */
+ public UnfoldingReader(final Reader in) {
+ this(in, DEFAULT_FOLD_PATTERN_1.length, CompatibilityHints
+ .isHintEnabled(CompatibilityHints.KEY_RELAXED_UNFOLDING));
+ }
+
+ /**
+ * @param in reader source for data
+ * @param size the buffer size
+ */
+ public UnfoldingReader(final Reader in, int size) {
+ this(in, size, CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_UNFOLDING));
+ }
+
+ /**
+ * @param in reader source for data
+ * @param relaxed indicates whether relaxed unfolding is enabled
+ */
+ public UnfoldingReader(final Reader in, boolean relaxed) {
+ this(in, DEFAULT_FOLD_PATTERN_1.length, relaxed);
+ }
+
+ /**
+ * Creates a new unfolding reader instance.
+ * @param in a reader to read from
+ * @param size the buffer size
+ * @param relaxed specifies whether unfolding is relaxed
+ */
+ public UnfoldingReader(final Reader in, int size, final boolean relaxed) {
+ super(in, size);
+ if (relaxed) {
+ patterns = new char[4][];
+ patterns[0] = DEFAULT_FOLD_PATTERN_1;
+ patterns[1] = DEFAULT_FOLD_PATTERN_2;
+ patterns[2] = RELAXED_FOLD_PATTERN_1;
+ patterns[3] = RELAXED_FOLD_PATTERN_2;
+ }
+ else {
+ patterns = new char[2][];
+ patterns[0] = DEFAULT_FOLD_PATTERN_1;
+ patterns[1] = DEFAULT_FOLD_PATTERN_2;
+ }
+ buffers = new char[patterns.length][];
+ for (int i = 0; i < patterns.length; i++) {
+ buffers[i] = new char[patterns[i].length];
+ maxPatternLength = Math.max(maxPatternLength, patterns[i].length);
+ }
+ }
+
+ /**
+ * @return number of lines unfolded so far while reading
+ */
+ public final int getLinesUnfolded() {
+ return linesUnfolded;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int read() throws IOException {
+ final int c = super.read();
+ boolean doUnfold = false;
+ for (int i = 0; i < patterns.length; i++) {
+ if (c == patterns[i][0]) {
+ doUnfold = true;
+ break;
+ }
+ }
+ if (!doUnfold) {
+ return c;
+ }
+ else {
+ unread(c);
+ }
+
+ unfold();
+
+ return super.read();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int read(final char[] cbuf, final int off, final int len) throws IOException {
+ final int read = super.read(cbuf, off, len);
+ boolean doUnfold = false;
+ for (int i = 0; i < patterns.length; i++) {
+ if (read > 0 && cbuf[0] == patterns[i][0]) {
+ doUnfold = true;
+ break;
+ }
+ else {
+ for (int j = 0; j < read; j++) {
+ if (cbuf[j] == patterns[i][0]) {
+ unread(cbuf, j, read - j);
+ return j;
+ }
+ }
+ }
+ }
+ if (!doUnfold) {
+ return read;
+ }
+ else {
+ unread(cbuf, off, read);
+ }
+
+ unfold();
+
+ return super.read(cbuf, off, maxPatternLength);
+ }
+
+ private void unfold() throws IOException {
+ // need to loop since one line fold might be directly followed by another
+ boolean didUnfold;
+ do {
+ didUnfold = false;
+
+ for (int i = 0; i < buffers.length; i++) {
+ int read = 0;
+ while (read < buffers[i].length) {
+ final int partialRead = super.read(buffers[i], read, buffers[i].length - read);
+ if (partialRead < 0) {
+ break;
+ }
+ read += partialRead;
+ }
+ if (read > 0) {
+ if (!Arrays.equals(patterns[i], buffers[i])) {
+ unread(buffers[i], 0, read);
+ }
+ else {
+ if (log.isTraceEnabled()) {
+ log.trace("Unfolding...");
+ }
+ linesUnfolded++;
+ didUnfold = true;
+ }
+ }
+// else {
+// return read;
+// }
+ }
+ }
+ while (didUnfold);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/filter/AbstractDateRule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/filter/AbstractDateRule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,54 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.filter;
+
+import java.util.Date;
+
+/**
+ * @author fortuna
+ *
+ */
+public abstract class AbstractDateRule implements Rule {
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean match(Object o) {
+ return match((Date) o);
+ }
+
+ /**
+ * @param date the date to check
+ * @return true if the date matches rule requirements, otherwise false
+ */
+ protected abstract boolean match(Date date);
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/filter/ComponentRule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/filter/ComponentRule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.filter;
+
+import net.fortuna.ical4j.model.Component;
+
+/**
+ * $Id$
+ *
+ * Created on 2/02/2006
+ *
+ * An abstract rule implementation serving as the base class for component matching rule implementations.
+ * @author Ben Fortuna
+ */
+public abstract class ComponentRule implements Rule {
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean match(final Object o) {
+ return match((Component) o);
+ }
+
+ /**
+ * @param component a component to match on
+ * @return true if the component matches the rule, otherwise false
+ */
+ public abstract boolean match(Component component);
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/filter/DateInRangeRule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/filter/DateInRangeRule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.filter;
+
+import java.util.Date;
+
+import net.fortuna.ical4j.model.DateRange;
+
+/**
+ * @author fortuna
+ *
+ */
+public class DateInRangeRule extends AbstractDateRule {
+
+ private final DateRange range;
+
+ private final int inclusiveMask;
+
+ /**
+ * @param range the range to check
+ * @param inclusiveMask indicates inclusiveness of start and end of the range
+ */
+ public DateInRangeRule(DateRange range, int inclusiveMask) {
+ this.range = range;
+ this.inclusiveMask = inclusiveMask;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected boolean match(Date date) {
+ return range.includes(date, inclusiveMask);
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/filter/Filter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/filter/Filter.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.filter;
+
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * $Id$
+ *
+ * Created: Feb 1, 2006
+ *
+ * Performs collection filtering based on a set of rules. A filter may dictate whether at least one rule or all rules
+ * are matched.
+ *
+ * NOTE: Implementation of filter rules has changed in recent releases to fix behaviour. Please ensure you update
+ * your code to use explicit constructors.
+ *
+ * @author Ben Fortuna
+ */
+public class Filter {
+
+ /**
+ * Indicates that any rule may be matched to include an object in the filtered collection.
+ */
+ public static final int MATCH_ANY = 1;
+
+ /**
+ * Indicates that all rules must be matched to include an object in the filtered collection.
+ */
+ public static final int MATCH_ALL = 2;
+
+ private List rules;
+
+ private int type;
+
+ /**
+ * Constructor.
+ * @param rule a rule that defines this filter
+ * @deprecated Prior implementations of this class did not work as advertised, so
+ * to avoid confusion please use constructors that explicitly specify the desired behaviour
+ */
+ public Filter(final Rule rule) {
+ this(new Rule[] { rule }, MATCH_ANY);
+ }
+
+ /**
+ * Constructor.
+ * @param rules an array of rules that define this filter
+ * @param type the type of matching to apply
+ * @see Filter#MATCH_ALL
+ * @see Filter#MATCH_ANY
+ */
+ public Filter(final Rule[] rules, final int type) {
+ this.rules = Arrays.asList(rules);
+ this.type = type;
+ }
+
+ /**
+ * Filter the given collection into a new collection.
+ * @param c a collection to filter
+ * @return a filtered collection
+ */
+ public final Collection filter(final Collection c) {
+ if (getRules() != null && getRules().length > 0) {
+ // attempt to use the same concrete collection type
+ // as is passed in..
+ Collection filtered;
+ try {
+ filtered = (Collection) c.getClass().newInstance();
+ }
+ catch (Exception e) {
+ filtered = new ArrayList();
+ }
+
+ if (type == MATCH_ALL) {
+ filtered.addAll(matchAll(c));
+ }
+ else {
+ filtered.addAll(matchAny(c));
+ }
+ return filtered;
+ }
+ return c;
+ }
+
+ private List matchAll(Collection c) {
+ List list = new ArrayList(c);
+ List temp = new ArrayList();
+ for (int n = 0; n < getRules().length; n++) {
+ for (final Iterator i = list.iterator(); i.hasNext();) {
+ final Object o = i.next();
+ if (getRules()[n].match(o)) {
+ temp.add(o);
+ }
+ }
+ list = temp;
+ temp = new ArrayList();
+ }
+ return list;
+ }
+
+ private List matchAny(Collection c) {
+ final List matches = new ArrayList();
+ for (Iterator i = c.iterator(); i.hasNext();) {
+ final Object o = i.next();
+ for (int n = 0; n < getRules().length; n++) {
+ if (getRules()[n].match(o)) {
+ matches.add(o);
+ break;
+ }
+ }
+ }
+ return matches;
+ }
+
+ /**
+ * Returns a filtered subset of the specified array.
+ * @param objects an array to filter
+ * @return a filtered array
+ */
+ public final Object[] filter(final Object[] objects) {
+ final Collection filtered = filter(Arrays.asList(objects));
+ try {
+ return filtered.toArray((Object[]) Array.newInstance(objects
+ .getClass(), filtered.size()));
+ }
+ catch (ArrayStoreException ase) {
+ Log log = LogFactory.getLog(Filter.class);
+ log.warn("Error converting to array - using default approach", ase);
+ }
+ return filtered.toArray();
+ }
+
+ /**
+ * @return Returns the rules.
+ */
+ public final Rule[] getRules() {
+ return (Rule[]) rules.toArray(new Rule[rules.size()]);
+ }
+
+ /**
+ * @param rules The rules to set.
+ */
+ public final void setRules(final Rule[] rules) {
+ this.rules = Arrays.asList(rules);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/filter/HasPropertyRule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/filter/HasPropertyRule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.filter;
+
+import java.util.Iterator;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+
+/**
+ * $Id$
+ *
+ * Created on 5/02/2006
+ *
+ * A rule that matches any component containing the specified property. Note that this rule ignores any parameters
+ * matching only on the value of the property.
+ * @author Ben Fortuna
+ */
+public class HasPropertyRule extends ComponentRule {
+
+ private Property property;
+
+ private boolean matchEquals;
+
+ /**
+ * Constructs a new instance with the specified property. Ignores any parameters matching only on the value of the
+ * property.
+ * @param property a property instance to check for
+ */
+ public HasPropertyRule(final Property property) {
+ this(property, false);
+ }
+
+ /**
+ * Constructs a new instance with the specified property.
+ * @param property the property to match
+ * @param matchEquals if true, matches must contain an identical property (as indicated by
+ * Property.equals()
+ */
+ public HasPropertyRule(final Property property, final boolean matchEquals) {
+ this.property = property;
+ this.matchEquals = matchEquals;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean match(final Component component) {
+ boolean match = false;
+ final PropertyList properties = component.getProperties(property.getName());
+ for (final Iterator i = properties.iterator(); i.hasNext();) {
+ final Property p = (Property) i.next();
+ if (matchEquals && property.equals(p)) {
+ match = true;
+ }
+ else if (property.getValue().equals(p.getValue())) {
+ match = true;
+ }
+ }
+ return match;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/filter/PeriodRule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/filter/PeriodRule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.filter;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.Period;
+import net.fortuna.ical4j.model.PeriodList;
+
+/**
+ * $Id$
+ *
+ * Created on 2/02/2006
+ *
+ * A rule that matches any component that occurs in the specified time period.
+ * @author Ben Fortuna
+ */
+public class PeriodRule extends ComponentRule {
+
+ private Period period;
+
+ /**
+ * Constructs a new instance using the specified period.
+ * @param period a period instance to match on
+ */
+ public PeriodRule(final Period period) {
+ this.period = period;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean match(final Component component) {
+
+ /*
+ DtStart start = (DtStart) component.getProperty(Property.DTSTART);
+ DtEnd end = (DtEnd) component.getProperty(Property.DTEND);
+ Duration duration = (Duration) component.getProperty(Property.DURATION);
+
+ if (start == null) {
+ return false;
+ }
+
+ // detect events that consume no time..
+ if (end == null && duration == null) {
+ if (period.includes(start.getDate(), Period.INCLUSIVE_START)) {
+ return true;
+ }
+ }
+ */
+
+// try {
+ final PeriodList recurrenceSet = component.calculateRecurrenceSet(period);
+ return (!recurrenceSet.isEmpty());
+// }
+// catch (ValidationException ve) {
+// log.error("Invalid component data", ve);
+// return false;
+// }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/filter/Rule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/filter/Rule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.filter;
+
+/**
+ * $Id$
+ *
+ * Created: Feb 1, 2006
+ *
+ * Implementors dictate whether a given object is classified as a "match" for the enclosing filter.
+ * @author Ben Fortuna
+ */
+public interface Rule {
+
+ /**
+ * Indicates whether the specified object passes the conditions required to match this rule.
+ * @param o an object to match
+ * @return boolean indicated if the specified object matches this rule
+ */
+ boolean match(Object o);
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/AbstractContentFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/AbstractContentFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,98 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+/**
+ * $Id$
+ *
+ * Created on 28/01/2007
+ *
+ * Abstract implementation of a content factory.
+ * @author Ben Fortuna
+ */
+public abstract class AbstractContentFactory {
+
+ /**
+ * Map of delegate factories.
+ */
+ private final Map defaultFactories;
+
+ private final Map extendedFactories;
+
+ /**
+ * Default constructor.
+ */
+ public AbstractContentFactory() {
+ defaultFactories = new HashMap();
+ extendedFactories = new HashMap();
+ }
+
+ /**
+ * Register a standard content factory.
+ */
+ protected final void registerDefaultFactory(String key, Object factory) {
+ defaultFactories.put(key, factory);
+ }
+
+ /**
+ * Register a non-standard content factory.
+ */
+ protected final void registerExtendedFactory(String key, Object factory) {
+ extendedFactories.put(key, factory);
+ }
+
+ /**
+ * @param key a factory key
+ * @return a factory associated with the specified key, giving preference to
+ * standard factories
+ */
+ protected final Object getFactory(String key) {
+ Object factory = defaultFactories.get(key);
+ if (factory == null) {
+ factory = extendedFactories.get(key);
+ }
+ return factory;
+ }
+
+ /**
+ * @return true if non-standard names are allowed, otherwise false
+ */
+ protected boolean allowIllegalNames() {
+ return CompatibilityHints
+ .isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/AddressList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/AddressList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,147 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * $Id$ [23-Apr-2004]
+ *
+ * Defines a list of iCalendar addresses.
+ * @author Ben Fortuna
+ */
+public class AddressList implements Serializable {
+
+ private static final long serialVersionUID = 81383256078213569L;
+
+ private List addresses;
+
+ /**
+ * Default constructor.
+ */
+ public AddressList() {
+ addresses = new CopyOnWriteArrayList();
+ }
+
+ /**
+ * Parses the specified string representation to create a list of addresses.
+ * @param aValue a string representation of a list of addresses
+ * @throws URISyntaxException where the specified string is not a valid representation
+ */
+ public AddressList(final String aValue) throws URISyntaxException {
+ addresses = new CopyOnWriteArrayList();
+ final StringTokenizer t = new StringTokenizer(aValue, ",");
+ while (t.hasMoreTokens()) {
+
+ try {
+ addresses.add(new URI(Uris.encode(Strings
+ .unquote(t.nextToken()))));
+ }
+ catch (URISyntaxException use) {
+ // ignore invalid addresses if relaxed parsing is enabled..
+ if (!CompatibilityHints.isHintEnabled(
+ CompatibilityHints.KEY_RELAXED_PARSING)) {
+
+ throw use;
+ }
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ for (final Iterator i = addresses.iterator(); i.hasNext();) {
+ b.append(Strings.quote(Uris.decode(Strings.valueOf(i.next()))));
+ if (i.hasNext()) {
+ b.append(',');
+ }
+ }
+ return b.toString();
+ }
+
+ /**
+ * Add an address to the list.
+ * @param address the address to add
+ * @return true
+ * @see List#add(java.lang.Object)
+ */
+ public final boolean add(final URI address) {
+ return addresses.add(address);
+ }
+
+ /**
+ * @return boolean indicates if the list is empty
+ * @see List#isEmpty()
+ */
+ public final boolean isEmpty() {
+ return addresses.isEmpty();
+ }
+
+ /**
+ * @return an iterator
+ * @see List#iterator()
+ */
+ public final Iterator iterator() {
+ return addresses.iterator();
+ }
+
+ /**
+ * Remove an address from the list.
+ * @param address the address to remove
+ * @return true if the list contained the specified address
+ * @see List#remove(java.lang.Object)
+ */
+ public final boolean remove(final URI address) {
+ return addresses.remove(address);
+ }
+
+ /**
+ * @return the number of addresses in the list
+ * @see List#size()
+ */
+ public final int size() {
+ return addresses.size();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Calendar.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Calendar.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,555 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.Iterator;
+
+import net.fortuna.ical4j.model.component.CalendarComponent;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.Version;
+import net.fortuna.ical4j.model.property.XProperty;
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.ComponentValidator;
+import net.fortuna.ical4j.util.PropertyValidator;
+import net.fortuna.ical4j.util.Strings;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar calendar.
+ *
+ *
+ * 4.6 Calendar Components
+ *
+ * The body of the iCalendar object consists of a sequence of calendar
+ * properties and one or more calendar components. The calendar
+ * properties are attributes that apply to the calendar as a whole. The
+ * calendar components are collections of properties that express a
+ * particular calendar semantic. For example, the calendar component can
+ * specify an event, a to-do, a journal entry, time zone information, or
+ * free/busy time information, or an alarm.
+ *
+ * The body of the iCalendar object is defined by the following
+ * notation:
+ *
+ * icalbody = calprops component
+ *
+ * calprops = 2*(
+ *
+ * ; 'prodid' and 'version' are both REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * prodid /version /
+ *
+ * ; 'calscale' and 'method' are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * calscale /
+ * method /
+ *
+ * x-prop
+ *
+ * )
+ *
+ * component = 1*(eventc / todoc / journalc / freebusyc /
+ * / timezonec / iana-comp / x-comp)
+ *
+ * iana-comp = "BEGIN" ":" iana-token CRLF
+ *
+ * 1*contentline
+ *
+ * "END" ":" iana-token CRLF
+ *
+ * x-comp = "BEGIN" ":" x-name CRLF
+ *
+ * 1*contentline
+ *
+ * "END" ":" x-name CRLF
+ *
+ *
+ * Example 1 - Creating a new calendar:
+ *
+ *
+ * Calendar calendar = new Calendar();
+ * calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
+ * calendar.getProperties().add(Version.VERSION_2_0);
+ * calendar.getProperties().add(CalScale.GREGORIAN);
+ *
+ * // Add events, etc..
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Calendar implements Serializable {
+
+ private static final long serialVersionUID = -1654118204678581940L;
+
+ /**
+ * Begin token.
+ */
+ public static final String BEGIN = "BEGIN";
+
+ /**
+ * Calendar token.
+ */
+ public static final String VCALENDAR = "VCALENDAR";
+
+ /**
+ * End token.
+ */
+ public static final String END = "END";
+
+ private PropertyList properties;
+
+ private ComponentList components;
+
+ /**
+ * Default constructor.
+ */
+ public Calendar() {
+ this(new PropertyList(), new ComponentList());
+ }
+
+ /**
+ * Constructs a new calendar with no properties and the specified components.
+ * @param components a list of components to add to the calendar
+ */
+ public Calendar(final ComponentList components) {
+ this(new PropertyList(), components);
+ }
+
+ /**
+ * Constructor.
+ * @param p a list of properties
+ * @param c a list of components
+ */
+ public Calendar(final PropertyList p, final ComponentList c) {
+ this.properties = p;
+ this.components = c;
+ }
+
+ /**
+ * Creates a deep copy of the specified calendar.
+ * @param c the calendar to copy
+ * @throws IOException where an error occurs reading calendar data
+ * @throws ParseException where calendar parsing fails
+ * @throws URISyntaxException where an invalid URI string is encountered
+ */
+ public Calendar(Calendar c) throws ParseException, IOException,
+ URISyntaxException {
+
+ this(new PropertyList(c.getProperties()), new ComponentList(c
+ .getComponents()));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer buffer = new StringBuffer();
+ buffer.append(BEGIN);
+ buffer.append(':');
+ buffer.append(VCALENDAR);
+ buffer.append(Strings.LINE_SEPARATOR);
+ buffer.append(getProperties());
+ buffer.append(getComponents());
+ buffer.append(END);
+ buffer.append(':');
+ buffer.append(VCALENDAR);
+ buffer.append(Strings.LINE_SEPARATOR);
+
+ return buffer.toString();
+ }
+
+ /**
+ * @return Returns the components.
+ */
+ public final ComponentList getComponents() {
+ return components;
+ }
+
+ /**
+ * Convenience method for retrieving a list of named components.
+ * @param name name of components to retrieve
+ * @return a component list containing only components with the specified name
+ */
+ public final ComponentList getComponents(final String name) {
+ return getComponents().getComponents(name);
+ }
+
+ /**
+ * Convenience method for retrieving a named component.
+ * @param name name of the component to retrieve
+ * @return the first matching component in the component list with the specified name
+ */
+ public final Component getComponent(final String name) {
+ return getComponents().getComponent(name);
+ }
+
+ /**
+ * @return Returns the properties.
+ */
+ public final PropertyList getProperties() {
+ return properties;
+ }
+
+ /**
+ * Convenience method for retrieving a list of named properties.
+ * @param name name of properties to retrieve
+ * @return a property list containing only properties with the specified name
+ */
+ public final PropertyList getProperties(final String name) {
+ return getProperties().getProperties(name);
+ }
+
+ /**
+ * Convenience method for retrieving a named property.
+ * @param name name of the property to retrieve
+ * @return the first matching property in the property list with the specified name
+ */
+ public final Property getProperty(final String name) {
+ return getProperties().getProperty(name);
+ }
+
+ /**
+ * Perform validation on the calendar, its properties and its components in its current state.
+ * @throws ValidationException where the calendar is not in a valid state
+ */
+ public final void validate() throws ValidationException {
+ validate(true);
+ }
+
+ /**
+ * Perform validation on the calendar in its current state.
+ * @param recurse indicates whether to validate the calendar's properties and components
+ * @throws ValidationException where the calendar is not in a valid state
+ */
+ public void validate(final boolean recurse) throws ValidationException {
+ // 'prodid' and 'version' are both REQUIRED,
+ // but MUST NOT occur more than once
+ PropertyValidator.getInstance().assertOne(Property.PRODID, properties);
+ PropertyValidator.getInstance().assertOne(Property.VERSION, properties);
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ // require VERSION:2.0 for RFC2445..
+ if (!Version.VERSION_2_0.equals(getProperty(Property.VERSION))) {
+ throw new ValidationException("Unsupported Version: " + getProperty(Property.VERSION).getValue());
+ }
+ }
+
+ // 'calscale' and 'method' are optional,
+ // but MUST NOT occur more than once
+ PropertyValidator.getInstance().assertOneOrLess(Property.CALSCALE,
+ properties);
+ PropertyValidator.getInstance().assertOneOrLess(Property.METHOD,
+ properties);
+
+ // must contain at least one component
+ if (getComponents().isEmpty()) {
+ throw new ValidationException(
+ "Calendar must contain at least one component");
+ }
+
+ // validate properties..
+ for (final Iterator i = getProperties().iterator(); i.hasNext();) {
+ final Property property = (Property) i.next();
+
+ if (!(property instanceof XProperty)
+ && !property.isCalendarProperty()) {
+ throw new ValidationException("Invalid property: "
+ + property.getName());
+ }
+ }
+
+ // validate components..
+ for (final Iterator i = getComponents().iterator(); i.hasNext();) {
+ final Component component = (Component) i.next();
+ if (!(component instanceof CalendarComponent)) {
+ throw new ValidationException("Not a valid calendar component: " + component.getName());
+ }
+ }
+
+// if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ // validate method..
+ final Method method = (Method) getProperty(Property.METHOD);
+ if (Method.PUBLISH.equals(method)) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ }
+ else if (getComponent(Component.VFREEBUSY) != null) {
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTIMEZONE, getComponents());
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+// ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ }
+ else if (getComponent(Component.VJOURNAL) != null) {
+// ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+// ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ }
+ else if (Method.REQUEST.equals(getProperty(Property.METHOD))) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ else if (getComponent(Component.VFREEBUSY) != null) {
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTIMEZONE, getComponents());
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+// ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ }
+ }
+ else if (Method.REPLY.equals(getProperty(Property.METHOD))) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertOneOrLess(Component.VTIMEZONE, getComponents());
+
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ else if (getComponent(Component.VFREEBUSY) != null) {
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTIMEZONE, getComponents());
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+ ComponentValidator.assertOneOrLess(Component.VTIMEZONE, getComponents());
+
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+// ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ }
+ }
+ else if (Method.ADD.equals(getProperty(Property.METHOD))) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ }
+ else if (getComponent(Component.VJOURNAL) != null) {
+ ComponentValidator.assertOneOrLess(Component.VTIMEZONE, getComponents());
+
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+// ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ }
+ else if (Method.CANCEL.equals(getProperty(Property.METHOD))) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+ ComponentValidator.assertOneOrLess(Component.VTIMEZONE, getComponents());
+
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ }
+ else if (getComponent(Component.VJOURNAL) != null) {
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+// ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ }
+ else if (Method.REFRESH.equals(getProperty(Property.METHOD))) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTIMEZONE, getComponents());
+ }
+ }
+ else if (Method.COUNTER.equals(getProperty(Property.METHOD))) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+ ComponentValidator.assertOneOrLess(Component.VTIMEZONE, getComponents());
+
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ }
+ }
+ else if (Method.DECLINE_COUNTER.equals(getProperty(Property.METHOD))) {
+ if (getComponent(Component.VEVENT) != null) {
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ ComponentValidator.assertNone(Component.VTODO, getComponents());
+ ComponentValidator.assertNone(Component.VTIMEZONE, getComponents());
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ }
+ else if (getComponent(Component.VTODO) != null) {
+ ComponentValidator.assertNone(Component.VALARM, getComponents());
+ ComponentValidator.assertNone(Component.VFREEBUSY, getComponents());
+// ComponentValidator.assertNone(Component.VEVENT, getComponents());
+ ComponentValidator.assertNone(Component.VJOURNAL, getComponents());
+ }
+ }
+// }
+
+ // perform ITIP validation on components..
+ if (method != null) {
+ for (final Iterator i = getComponents().iterator(); i.hasNext();) {
+ final CalendarComponent component = (CalendarComponent) i.next();
+ component.validate(method);
+ }
+ }
+
+ if (recurse) {
+ validateProperties();
+ validateComponents();
+ }
+ }
+
+ /**
+ * Invoke validation on the calendar properties in its current state.
+ * @throws ValidationException where any of the calendar properties is not in a valid state
+ */
+ private void validateProperties() throws ValidationException {
+ for (final Iterator i = getProperties().iterator(); i.hasNext();) {
+ final Property property = (Property) i.next();
+ property.validate();
+ }
+ }
+
+ /**
+ * Invoke validation on the calendar components in its current state.
+ * @throws ValidationException where any of the calendar components is not in a valid state
+ */
+ private void validateComponents() throws ValidationException {
+ for (final Iterator i = getComponents().iterator(); i.hasNext();) {
+ final Component component = (Component) i.next();
+ component.validate();
+ }
+ }
+
+ /**
+ * Returns the mandatory prodid property.
+ * @return the PRODID property, or null if property doesn't exist
+ */
+ public final ProdId getProductId() {
+ return (ProdId) getProperty(Property.PRODID);
+ }
+
+ /**
+ * Returns the mandatory version property.
+ * @return the VERSION property, or null if property doesn't exist
+ */
+ public final Version getVersion() {
+ return (Version) getProperty(Property.VERSION);
+ }
+
+ /**
+ * Returns the optional calscale property.
+ * @return the CALSCALE property, or null if property doesn't exist
+ */
+ public final CalScale getCalendarScale() {
+ return (CalScale) getProperty(Property.CALSCALE);
+ }
+
+ /**
+ * Returns the optional method property.
+ * @return the METHOD property, or null if property doesn't exist
+ */
+ public final Method getMethod() {
+ return (Method) getProperty(Property.METHOD);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean equals(final Object arg0) {
+ if (arg0 instanceof Calendar) {
+ final Calendar calendar = (Calendar) arg0;
+ return new EqualsBuilder().append(getProperties(), calendar.getProperties())
+ .append(getComponents(), calendar.getComponents()).isEquals();
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int hashCode() {
+ return new HashCodeBuilder().append(getProperties()).append(
+ getComponents()).toHashCode();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/CalendarDateFormatFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/CalendarDateFormatFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,420 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.text.FieldPosition;
+import java.text.NumberFormat;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * $Id$ [06-Apr-2004]
+ *
+ * Creates DateFormat objects optimized for common iCalendar date patterns.
+ *
+ * @author Dave Nault dnault@laszlosystems.com
+ * @see #getInstance(String)
+ */
+public final class CalendarDateFormatFactory {
+ private static final Log LOG = LogFactory.getLog(CalendarDateFormatFactory.class);
+
+ private static final String DATETIME_PATTERN = "yyyyMMdd'T'HHmmss";
+ private static final String DATETIME_UTC_PATTERN = "yyyyMMdd'T'HHmmss'Z'";
+ private static final String DATE_PATTERN = "yyyyMMdd";
+ private static final String TIME_PATTERN = "HHmmss";
+ private static final String TIME_UTC_PATTERN = "HHmmss'Z'";
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private CalendarDateFormatFactory() {
+ }
+
+ /**
+ * Returns DateFormat objects optimized for common iCalendar date patterns. The DateFormats are *not* thread safe.
+ * Attempts to get or set the Calendar or NumberFormat of an optimized DateFormat will result in an
+ * UnsupportedOperation exception being thrown.
+ *
+ * @param pattern
+ * a SimpleDateFormat-compatible pattern
+ * @return an optimized DateFormat instance if possible, otherwise a normal SimpleDateFormat instance
+ */
+ public static java.text.DateFormat getInstance(String pattern) {
+ java.text.DateFormat instance = null;
+
+ // if (true) {
+ // return new SimpleDateFormat(pattern);
+ // }
+
+ if (pattern.equals(DATETIME_PATTERN) || pattern.equals(DATETIME_UTC_PATTERN)) {
+ instance = new DateTimeFormat(pattern);
+ }
+ else if (pattern.equals(DATE_PATTERN)) {
+ instance = new DateFormat(pattern);
+ }
+ else if (pattern.equals(TIME_PATTERN) || pattern.equals(TIME_UTC_PATTERN)) {
+ instance = new TimeFormat(pattern);
+ }
+ else {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("unexpected date format pattern: " + pattern);
+ }
+
+ instance = new SimpleDateFormat(pattern);
+ }
+ return instance;
+ }
+
+ private abstract static class CalendarDateFormat extends java.text.DateFormat {
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4191402739860280205L;
+
+ private static final java.util.TimeZone DEFAULT_TIME_ZONE = TimeZone.getDefault();
+
+ private final String pattern;
+
+ private boolean lenient = true;
+
+ private java.util.TimeZone timeZone = DEFAULT_TIME_ZONE;
+
+ public CalendarDateFormat(String pattern) {
+ this.pattern = pattern;
+ }
+
+ public java.util.TimeZone getTimeZone() {
+ return this.timeZone;
+ }
+
+ public void setTimeZone(java.util.TimeZone tz) {
+ this.timeZone = tz;
+ }
+
+ public void setLenient(boolean lenient) {
+ this.lenient = lenient;
+ }
+
+ public boolean isLenient() {
+ return lenient;
+ }
+
+ public java.util.Calendar getCalendar() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setCalendar(java.util.Calendar c) {
+ throw new UnsupportedOperationException();
+ }
+
+ public NumberFormat getNumberFormat() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setNumberFormat(NumberFormat n) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object clone() {
+ // don't call super.clone()
+ final CalendarDateFormat f = (CalendarDateFormat) CalendarDateFormatFactory.getInstance(pattern);
+ f.setTimeZone(getTimeZone());
+ f.setLenient(isLenient());
+ return f;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ if (!super.equals(o)) {
+ return false;
+ }
+
+ final CalendarDateFormat that = (CalendarDateFormat) o;
+
+ if (lenient != that.lenient) {
+ return false;
+ }
+ if (!pattern.equals(that.pattern)) {
+ return false;
+ }
+ if (!timeZone.equals(that.timeZone)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + pattern.hashCode();
+ result = 31 * result + (lenient ? 1 : 0);
+ result = 31 * result + timeZone.hashCode();
+ return result;
+ }
+ }
+
+ /**
+ * A custom date-time formatter.
+ * Parses and formats these patterns:
+ *
+ *
+ * yyyyMMdd'T'HHmmss
+ * yyyyMMdd'T'HHmmss'Z'
+ *
+ */
+ private static class DateTimeFormat extends CalendarDateFormat {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 3005824302269636122L;
+
+ final boolean patternEndsWithZ;
+
+ public DateTimeFormat(String pattern) {
+ super(pattern);
+ patternEndsWithZ = pattern.endsWith("'Z'");
+ }
+
+ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+ final java.util.Calendar cal = new GregorianCalendar(getTimeZone());
+ cal.setTimeInMillis(date.getTime());
+
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.YEAR), 4);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.MONTH) + 1, 2);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.DAY_OF_MONTH), 2);
+ toAppendTo.append("T");
+
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.HOUR_OF_DAY), 2);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.MINUTE), 2);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.SECOND), 2);
+
+ if (patternEndsWithZ) {
+ toAppendTo.append("Z");
+ }
+
+ return toAppendTo;
+ }
+
+ public Date parse(String source, ParsePosition pos) {
+ // if lenient ignore superfluous input..
+ if (patternEndsWithZ) {
+ if (source.length() > DATETIME_UTC_PATTERN.length() && !isLenient()) {
+ pos.setErrorIndex(DATETIME_UTC_PATTERN.length());
+ return null;
+ }
+ } else if (source.length() > DATETIME_PATTERN.length() && !isLenient()) {
+ pos.setErrorIndex(DATETIME_PATTERN.length());
+ return null;
+ }
+
+ try {
+ if (source.charAt(8) != 'T') {
+ pos.setErrorIndex(8);
+ return null;
+ }
+ if (patternEndsWithZ && source.charAt(15) != 'Z') {
+ pos.setErrorIndex(15);
+ return null;
+ }
+
+ final int year = Integer.parseInt(source.substring(0, 4));
+ final int month = Integer.parseInt(source.substring(4, 6)) - 1;
+ final int day = Integer.parseInt(source.substring(6, 8));
+ final int hour = Integer.parseInt(source.substring(9, 11));
+ final int minute = Integer.parseInt(source.substring(11, 13));
+ final int second = Integer.parseInt(source.substring(13, 15));
+
+ final Date d = makeCalendar(isLenient(), getTimeZone(),
+ year, month, day, hour, minute, second).getTime();
+ pos.setIndex(15);
+ return d;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Custom date formatter.
+ * Parses and formats this pattern:
+ *
+ *
+ * yyyyMMdd
+ *
+ */
+ private static class DateFormat extends CalendarDateFormat {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -7626077667268431779L;
+
+ public DateFormat(String pattern) {
+ super(pattern);
+ }
+
+ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+ final java.util.Calendar cal = java.util.Calendar.getInstance(getTimeZone());
+ cal.setTimeInMillis(date.getTime());
+
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.YEAR), 4);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.MONTH) + 1, 2);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.DAY_OF_MONTH), 2);
+
+ return toAppendTo;
+ }
+
+ public Date parse(String source, ParsePosition pos) {
+ // if lenient ignore superfluous input..
+ if (source.length() > DATE_PATTERN.length() && !isLenient()) {
+ pos.setErrorIndex(DATE_PATTERN.length());
+ return null;
+ }
+
+ try {
+ final int year = Integer.parseInt(source.substring(0, 4));
+ final int month = Integer.parseInt(source.substring(4, 6)) - 1;
+ final int day = Integer.parseInt(source.substring(6, 8));
+
+ final Date d = makeCalendar(isLenient(), getTimeZone(), year, month, day).getTime();
+ pos.setIndex(8);
+ return d;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Custom time formatter.
+ * Parses and formats these patterns:
+ *
+ *
+ * HHmmss
+ * HHmmss'Z'
+ *
+ */
+ private static class TimeFormat extends CalendarDateFormat {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1367114409994225425L;
+
+ final boolean patternEndsWithZ;
+
+ public TimeFormat(String pattern) {
+ super(pattern);
+ patternEndsWithZ = pattern.endsWith("'Z'");
+ }
+
+ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+ final java.util.Calendar cal = new GregorianCalendar(getTimeZone());
+ cal.setTimeInMillis(date.getTime());
+
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.HOUR_OF_DAY), 2);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.MINUTE), 2);
+ appendPadded(toAppendTo, cal.get(GregorianCalendar.SECOND), 2);
+
+ if (patternEndsWithZ) {
+ toAppendTo.append("Z");
+ }
+
+ return toAppendTo;
+ }
+
+ public Date parse(String source, ParsePosition pos) {
+ // if lenient ignore superfluous input..
+ if (patternEndsWithZ) {
+ if (source.length() > TIME_UTC_PATTERN.length() && !isLenient()) {
+ pos.setErrorIndex(TIME_UTC_PATTERN.length());
+ return null;
+ }
+ } else if (source.length() > TIME_PATTERN.length() && !isLenient()) {
+ pos.setErrorIndex(TIME_PATTERN.length());
+ return null;
+ }
+
+ try {
+ if (patternEndsWithZ && source.charAt(6) != 'Z') {
+ pos.setErrorIndex(6);
+ return null;
+ }
+
+ final int hour = Integer.parseInt(source.substring(0, 2));
+ final int minute = Integer.parseInt(source.substring(2, 4));
+ final int second = Integer.parseInt(source.substring(4, 6));
+
+ final Date d = makeCalendar(isLenient(), getTimeZone(), 1970, 0, 1, hour, minute, second).getTime();
+ pos.setIndex(6);
+ return d;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+ }
+
+ private static java.util.Calendar makeCalendar(boolean lenient, java.util.TimeZone timeZone, int year,
+ int zeroBasedMonth, int day, int hour, int minutes, int seconds) {
+ final java.util.Calendar cal = new GregorianCalendar(timeZone);
+ cal.setLenient(lenient);
+ cal.set(year, zeroBasedMonth, day, hour, minutes, seconds);
+ cal.set(java.util.Calendar.MILLISECOND, 0);
+ return cal;
+ }
+
+ private static java.util.Calendar makeCalendar(boolean lenient, TimeZone timeZone, int year, int month, int day) {
+ return makeCalendar(lenient, timeZone, year, month, day, 0, 0, 0);
+ }
+
+ private static void appendPadded(StringBuffer toAppendTo, int value, int fieldWidth) {
+ final String s = Integer.toString(value);
+ final int max = fieldWidth - s.length();
+ for (int i = 0; i < max; i++) {
+ toAppendTo.append("0");
+ }
+ toAppendTo.append(s);
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/CalendarException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/CalendarException.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+/**
+ * @author fortuna
+ *
+ */
+public class CalendarException extends RuntimeException {
+
+ private static final long serialVersionUID = 3994967097251100771L;
+
+ /**
+ * @param message an exception detail message
+ */
+ public CalendarException(String message) {
+ super(message);
+ }
+
+ /**
+ * @param cause the cause exception
+ */
+ public CalendarException(Throwable cause) {
+ super(cause);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Component.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Component.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,415 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.Iterator;
+
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.property.DateProperty;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.Duration;
+import net.fortuna.ical4j.model.property.ExDate;
+import net.fortuna.ical4j.model.property.ExRule;
+import net.fortuna.ical4j.model.property.RDate;
+import net.fortuna.ical4j.model.property.RRule;
+import net.fortuna.ical4j.util.Strings;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar component. Subclasses of this class provide additional validation and typed values for specific
+ * iCalendar components.
+ * @author Ben Fortuna
+ */
+public abstract class Component implements Serializable {
+
+ private static final long serialVersionUID = 4943193483665822201L;
+
+ /**
+ * Component start token.
+ */
+ public static final String BEGIN = "BEGIN";
+
+ /**
+ * Component end token.
+ */
+ public static final String END = "END";
+
+ /**
+ * Component token.
+ */
+ public static final String VEVENT = "VEVENT";
+
+ /**
+ * Component token.
+ */
+ public static final String VTODO = "VTODO";
+
+ /**
+ * Component token.
+ */
+ public static final String VJOURNAL = "VJOURNAL";
+
+ /**
+ * Component token.
+ */
+ public static final String VFREEBUSY = "VFREEBUSY";
+
+ /**
+ * Component token.
+ */
+ public static final String VTIMEZONE = "VTIMEZONE";
+
+ /**
+ * Component token.
+ */
+ public static final String VALARM = "VALARM";
+
+ /**
+ * Component token.
+ */
+ public static final String VAVAILABILITY = "VAVAILABILITY";
+
+ /**
+ * Component token.
+ */
+ public static final String VVENUE = "VVENUE";
+
+ /**
+ * Component token.
+ */
+ public static final String AVAILABLE = "AVAILABLE";
+
+ /**
+ * Prefix for non-standard components.
+ */
+ public static final String EXPERIMENTAL_PREFIX = "X-";
+
+ private String name;
+
+ private PropertyList properties;
+
+ /**
+ * Constructs a new component containing no properties.
+ * @param s a component name
+ */
+ protected Component(final String s) {
+ this(s, new PropertyList());
+ }
+
+ /**
+ * Constructor made protected to enforce the use of ComponentFactory
for component instantiation.
+ * @param s component name
+ * @param p a list of properties
+ */
+ protected Component(final String s, final PropertyList p) {
+ this.name = s;
+ this.properties = p;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toString() {
+ final StringBuffer buffer = new StringBuffer();
+ buffer.append(BEGIN);
+ buffer.append(':');
+ buffer.append(getName());
+ buffer.append(Strings.LINE_SEPARATOR);
+ buffer.append(getProperties());
+ buffer.append(END);
+ buffer.append(':');
+ buffer.append(getName());
+ buffer.append(Strings.LINE_SEPARATOR);
+
+ return buffer.toString();
+ }
+
+ /**
+ * @return Returns the name.
+ */
+ public final String getName() {
+ return name;
+ }
+
+ /**
+ * @return Returns the properties.
+ */
+ public final PropertyList getProperties() {
+ return properties;
+ }
+
+ /**
+ * Convenience method for retrieving a list of named properties.
+ * @param name name of properties to retrieve
+ * @return a property list containing only properties with the specified name
+ */
+ public final PropertyList getProperties(final String name) {
+ return getProperties().getProperties(name);
+ }
+
+ /**
+ * Convenience method for retrieving a named property.
+ * @param name name of the property to retrieve
+ * @return the first matching property in the property list with the specified name
+ */
+ public final Property getProperty(final String name) {
+ return getProperties().getProperty(name);
+ }
+
+ /**
+ * Perform validation on a component and its properties.
+ * @throws ValidationException where the component is not in a valid state
+ */
+ public final void validate() throws ValidationException {
+ validate(true);
+ }
+
+ /**
+ * Perform validation on a component.
+ * @param recurse indicates whether to validate the component's properties
+ * @throws ValidationException where the component is not in a valid state
+ */
+ public abstract void validate(final boolean recurse)
+ throws ValidationException;
+
+ /**
+ * Invoke validation on the component properties in its current state.
+ * @throws ValidationException where any of the component properties is not in a valid state
+ */
+ protected final void validateProperties() throws ValidationException {
+ for (final Iterator i = getProperties().iterator(); i.hasNext();) {
+ final Property property = (Property) i.next();
+ property.validate();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object arg0) {
+ if (arg0 instanceof Component) {
+ final Component c = (Component) arg0;
+ return new EqualsBuilder().append(getName(), c.getName())
+ .append(getProperties(), c.getProperties()).isEquals();
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return new HashCodeBuilder().append(getName()).append(getProperties())
+ .toHashCode();
+ }
+
+ /**
+ * Create a (deep) copy of this component.
+ * @return the component copy
+ * @throws IOException where an error occurs reading the component data
+ * @throws ParseException where parsing component data fails
+ * @throws URISyntaxException where component data contains an invalid URI
+ */
+ public Component copy() throws ParseException, IOException,
+ URISyntaxException {
+
+ // Deep copy properties..
+ final PropertyList newprops = new PropertyList(getProperties());
+
+ return ComponentFactory.getInstance().createComponent(getName(),
+ newprops);
+ }
+
+ /**
+ * Calculates the recurrence set for this component using the specified period.
+ * The recurrence set is derived from a combination of the component start date,
+ * recurrence rules and dates, and exception rules and dates. Note that component
+ * transparency and anniversary-style dates do not affect the resulting
+ * intersection.
+ * If an explicit DURATION is not specified, the effective duration of each
+ * returned period is derived from the DTSTART and DTEND or DUE properties.
+ * If the component has no DURATION, DTEND or DUE, the effective duration is set
+ * to PT0S
+ * @param period a range to calculate recurrences for
+ * @return a list of periods
+ */
+ public final PeriodList calculateRecurrenceSet(final Period period) {
+
+// validate();
+
+ final PeriodList recurrenceSet = new PeriodList();
+
+ final DtStart start = (DtStart) getProperty(Property.DTSTART);
+ DateProperty end = (DateProperty) getProperty(Property.DTEND);
+ if (end == null) {
+ end = (DateProperty) getProperty(Property.DUE);
+ }
+ Duration duration = (Duration) getProperty(Property.DURATION);
+
+ // if no start date specified return empty list..
+ if (start == null) {
+ return recurrenceSet;
+ }
+
+ final Value startValue = (Value) start.getParameter(Parameter.VALUE);
+
+ // initialise timezone..
+// if (startValue == null || Value.DATE_TIME.equals(startValue)) {
+ if (start.isUtc()) {
+ recurrenceSet.setUtc(true);
+ }
+ else if (start.getDate() instanceof DateTime) {
+ recurrenceSet.setTimeZone(((DateTime) start.getDate()).getTimeZone());
+ }
+
+ // if an explicit event duration is not specified, derive a value for recurring
+ // periods from the end date..
+ Dur rDuration;
+ // if no end or duration specified, end date equals start date..
+ if (end == null && duration == null) {
+ rDuration = new Dur(start.getDate(), start.getDate());
+ }
+ else if (duration == null) {
+ rDuration = new Dur(start.getDate(), end.getDate());
+ }
+ else {
+ rDuration = duration.getDuration();
+ }
+
+ // add recurrence dates..
+ for (final Iterator i = getProperties(Property.RDATE).iterator(); i.hasNext();) {
+ final RDate rdate = (RDate) i.next();
+ final Value rdateValue = (Value) rdate.getParameter(Parameter.VALUE);
+ if (Value.PERIOD.equals(rdateValue)) {
+ for (final Iterator j = rdate.getPeriods().iterator(); j.hasNext();) {
+ final Period rdatePeriod = (Period) j.next();
+ if (period.intersects(rdatePeriod)) {
+ recurrenceSet.add(rdatePeriod);
+ }
+ }
+ }
+ else if (Value.DATE_TIME.equals(rdateValue)) {
+ for (final Iterator j = rdate.getDates().iterator(); j.hasNext();) {
+ final DateTime rdateTime = (DateTime) j.next();
+ if (period.includes(rdateTime)) {
+ recurrenceSet.add(new Period(rdateTime, rDuration));
+ }
+ }
+ }
+ else {
+ for (final Iterator j = rdate.getDates().iterator(); j.hasNext();) {
+ final Date rdateDate = (Date) j.next();
+ if (period.includes(rdateDate)) {
+ recurrenceSet.add(new Period(new DateTime(rdateDate), rDuration));
+ }
+ }
+ }
+ }
+
+ // allow for recurrence rules that start prior to the specified period
+ // but still intersect with it..
+ final DateTime startMinusDuration = new DateTime(period.getStart());
+ startMinusDuration.setTime(rDuration.negate().getTime(
+ period.getStart()).getTime());
+
+ // add recurrence rules..
+ for (final Iterator i = getProperties(Property.RRULE).iterator(); i.hasNext();) {
+ final RRule rrule = (RRule) i.next();
+ final DateList rruleDates = rrule.getRecur().getDates(start.getDate(),
+ new Period(startMinusDuration, period.getEnd()), startValue);
+ for (final Iterator j = rruleDates.iterator(); j.hasNext();) {
+ final Date rruleDate = (Date) j.next();
+ recurrenceSet.add(new Period(new DateTime(rruleDate), rDuration));
+ }
+ }
+
+ // add initial instance if intersection with the specified period..
+ Period startPeriod = null;
+ if (end != null) {
+ startPeriod = new Period(new DateTime(start.getDate()),
+ new DateTime(end.getDate()));
+ }
+ else {
+ /*
+ * PeS: Anniversary type has no DTEND nor DUR, define DUR
+ * locally, otherwise we get NPE
+ */
+ if (duration == null) {
+ duration = new Duration(rDuration);
+ }
+
+ startPeriod = new Period(new DateTime(start.getDate()),
+ duration.getDuration());
+ }
+ if (period.intersects(startPeriod)) {
+ recurrenceSet.add(startPeriod);
+ }
+
+ // subtract exception dates..
+ for (final Iterator i = getProperties(Property.EXDATE).iterator(); i.hasNext();) {
+ final ExDate exdate = (ExDate) i.next();
+ for (final Iterator j = recurrenceSet.iterator(); j.hasNext();) {
+ final Period recurrence = (Period) j.next();
+ // for DATE-TIME instances check for DATE-based exclusions also..
+ if (exdate.getDates().contains(recurrence.getStart())
+ || exdate.getDates().contains(new Date(recurrence.getStart()))) {
+ j.remove();
+ }
+ }
+ }
+
+ // subtract exception rules..
+ for (final Iterator i = getProperties(Property.EXRULE).iterator(); i.hasNext();) {
+ final ExRule exrule = (ExRule) i.next();
+ final DateList exruleDates = exrule.getRecur().getDates(start.getDate(),
+ period, startValue);
+ for (final Iterator j = recurrenceSet.iterator(); j.hasNext();) {
+ final Period recurrence = (Period) j.next();
+ // for DATE-TIME instances check for DATE-based exclusions also..
+ if (exruleDates.contains(recurrence.getStart())
+ || exruleDates.contains(new Date(recurrence.getStart()))) {
+ j.remove();
+ }
+ }
+ }
+
+ return recurrenceSet;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ComponentFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ComponentFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,178 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import net.fortuna.ical4j.model.component.Available;
+import net.fortuna.ical4j.model.component.Daylight;
+import net.fortuna.ical4j.model.component.Observance;
+import net.fortuna.ical4j.model.component.Standard;
+import net.fortuna.ical4j.model.component.VAlarm;
+import net.fortuna.ical4j.model.component.VAvailability;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.component.VFreeBusy;
+import net.fortuna.ical4j.model.component.VJournal;
+import net.fortuna.ical4j.model.component.VTimeZone;
+import net.fortuna.ical4j.model.component.VToDo;
+import net.fortuna.ical4j.model.component.VVenue;
+import net.fortuna.ical4j.model.component.XComponent;
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+/**
+ * $Id$ [05-Apr-2004]
+ *
+ * A factory for creating iCalendar components. Note that if relaxed parsing is enabled (via specifying the system
+ * property: icalj.parsing.relaxed=true) illegal component names are allowed.
+ * @author Ben Fortuna
+ */
+public final class ComponentFactory {
+
+ private static ComponentFactory instance = new ComponentFactory();
+
+ /**
+ * Constructor made private to prevent instantiation.
+ */
+ private ComponentFactory() {
+ }
+
+ /**
+ * @return Returns the instance.
+ */
+ public static ComponentFactory getInstance() {
+ return instance;
+ }
+
+ /**
+ * @param name a component name
+ * @return a new component instance of the specified type
+ */
+ public Component createComponent(final String name) {
+ return createComponent(name, new PropertyList());
+ }
+
+ /**
+ * Creates a component.
+ * @param name name of the component
+ * @param properties a list of component properties
+ * @return a component
+ */
+ public Component createComponent(final String name, final PropertyList properties) {
+ Component component = null;
+ if (Component.VALARM.equals(name)) {
+ component = new VAlarm(properties);
+ }
+ else if (Component.VEVENT.equals(name)) {
+ component = new VEvent(properties);
+ }
+ else if (Component.VFREEBUSY.equals(name)) {
+ component = new VFreeBusy(properties);
+ }
+ else if (Component.VJOURNAL.equals(name)) {
+ component = new VJournal(properties);
+ }
+ else if (Component.VTODO.equals(name)) {
+ component = new VToDo(properties);
+ }
+ else if (Observance.STANDARD.equals(name)) {
+ component = new Standard(properties);
+ }
+ else if (Observance.DAYLIGHT.equals(name)) {
+ component = new Daylight(properties);
+ }
+ else if (Component.VTIMEZONE.equals(name)) {
+ component = new VTimeZone(properties);
+ }
+ else if (Component.VVENUE.equals(name)) {
+ component = new VVenue(properties);
+ }
+ else if (Component.VAVAILABILITY.equals(name)) {
+ component = new VAvailability(properties);
+ }
+ else if (Component.AVAILABLE.equals(name)) {
+ component = new Available(properties);
+ }
+ else if (isExperimentalName(name)) {
+ component = new XComponent(name, properties);
+ }
+ else if (allowIllegalNames()) {
+ component = new XComponent(name, properties);
+ }
+ else {
+ throw new IllegalArgumentException("Illegal component [" + name
+ + "]");
+ }
+ return component;
+ }
+
+ /**
+ * Creates a component which contains sub-components. Currently the only such component is VTIMEZONE.
+ * @param name name of the component
+ * @param properties a list of component properties
+ * @param components a list of sub-components (namely standard/daylight timezones)
+ * @return a component
+ */
+ public Component createComponent(final String name, final PropertyList properties,
+ final ComponentList components) {
+
+ if (components != null) {
+ Component component = null;
+ if (Component.VTIMEZONE.equals(name)) {
+ component = new VTimeZone(properties, components);
+ }
+ else if (Component.VEVENT.equals(name)) {
+ component = new VEvent(properties, components);
+ }
+ else {
+ throw new IllegalArgumentException("Illegal component [" + name
+ + "]");
+ }
+ return component;
+ }
+ return createComponent(name, properties);
+ }
+
+ /**
+ * @param name
+ * @return
+ */
+ private boolean isExperimentalName(final String name) {
+ return name.startsWith(Component.EXPERIMENTAL_PREFIX)
+ && name.length() > Component.EXPERIMENTAL_PREFIX.length();
+ }
+
+ /**
+ * @return true if non-standard names are allowed, otherwise false
+ */
+ protected boolean allowIllegalNames() {
+ return CompatibilityHints
+ .isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ComponentList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ComponentList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,186 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines a list of iCalendar components.
+ * @author Ben Fortuna
+ */
+public class ComponentList extends ArrayList implements Serializable {
+
+ private static final long serialVersionUID = 7308557606558767449L;
+
+ /**
+ * Default constructor.
+ */
+ public ComponentList() {
+ }
+
+ /**
+ * Creates a new instance with the specified initial capacity.
+ * @param initialCapacity the initial capacity of the list
+ */
+ public ComponentList(final int initialCapacity) {
+ super(initialCapacity);
+ }
+
+ /**
+ * Creates a deep copy of the specified component list.
+ * @param components a component list to copy
+ * @throws IOException where an error occurs reading component data
+ * @throws ParseException where component data cannot be parsed
+ * @throws URISyntaxException where component data contains an invalid URI
+ */
+ public ComponentList(ComponentList components) throws ParseException,
+ IOException, URISyntaxException {
+
+ for (final Iterator i = components.iterator(); i.hasNext();) {
+ final Component c = (Component) i.next();
+ add(c.copy());
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer buffer = new StringBuffer();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ buffer.append(i.next().toString());
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Returns the first component of specified name.
+ * @param aName name of component to return
+ * @return a component or null if no matching component found
+ */
+ public final Component getComponent(final String aName) {
+ for (final Iterator i = iterator(); i.hasNext();) {
+ final Component c = (Component) i.next();
+ if (c.getName().equals(aName)) {
+ return c;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns a list containing all components with specified name.
+ * @param name name of components to return
+ * @return a list of components with the matching name
+ */
+ public final ComponentList getComponents(final String name) {
+ final ComponentList components = new ComponentList();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ final Component c = (Component) i.next();
+ if (c.getName().equals(name)) {
+ components.add(c);
+ }
+ }
+ return components;
+ }
+
+ /**
+ * Add a component to the list.
+ * @param component the component to add
+ * @return true
+ * @see List#add(java.lang.Object)
+ */
+ public final boolean add(final Component component) {
+ return add((Object) component);
+ }
+
+ /**
+ * Overrides superclass to throw an IllegalArgumentException
where argument is not a
+ * net.fortuna.ical4j.model.Component
.
+ * @param component a component to add
+ * @return true if the object was added, otherwise false
+ * @see List#add(E)
+ */
+ public final boolean add(final Object component) {
+ if (!(component instanceof Component)) {
+ throw new IllegalArgumentException("Argument not a "
+ + Component.class.getName());
+ }
+ return super.add(component);
+ }
+
+ /**
+ * @return boolean indicates if the list is empty
+ * @see List#isEmpty()
+ */
+ // public final boolean isEmpty() {
+ // return components.isEmpty();
+ // }
+ /**
+ * @return an iterator
+ * @see List#iterator()
+ */
+ // public final Iterator iterator() {
+ // return components.iterator();
+ // }
+ /**
+ * Remove a component from the list.
+ * @param component the component to remove
+ * @return true if the list contained the specified component
+ * @see List#remove(java.lang.Object)
+ */
+ public final boolean remove(final Component component) {
+ return remove((Object) component);
+ }
+
+ /**
+ * @return the number of components in the list
+ * @see List#size()
+ */
+ // public final int size() {
+ // return components.size();
+ // }
+ /**
+ * Provides a list containing all components contained in this component list.
+ * @return a list
+ */
+ // public final List toList() {
+ // return new ArrayList(components);
+ // }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ConstraintViolationException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ConstraintViolationException.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+/**
+ * $Id$
+ *
+ * Created on 02/03/2008
+ *
+ * Indicates the violation of a constraint imposed by a relevant specification.
+ * @author Ben
+ *
+ */
+public class ConstraintViolationException extends Exception {
+
+ private static final long serialVersionUID = 6728653187698888940L;
+
+ /**
+ * Default constructor.
+ */
+ public ConstraintViolationException() {
+ }
+
+ /**
+ * @param message an error message
+ */
+ public ConstraintViolationException(String message) {
+ super(message);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Content.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Content.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+
+/**
+ * $Id$
+ *
+ * Created: 12/10/2004
+ *
+ * Base class for calendar content in the form of
+ * properties and parameters.
+ *
+ * @author Ben Fortuna
+ */
+public abstract class Content implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -2892694760294583989L;
+
+ /**
+ * @return the cotent name
+ */
+ public abstract String getName();
+
+ /**
+ * @return the content value
+ */
+ public abstract String getValue();
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Date.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Date.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.text.ParseException;
+import java.util.TimeZone;
+
+import net.fortuna.ical4j.util.Dates;
+import net.fortuna.ical4j.util.TimeZones;
+
+
+/**
+ * $Id$
+ *
+ * Created on 26/06/2005
+ *
+ * Base class for all representations of time values in RFC2445.
+ *
+ *
+ * 4.3.4 Date
+ *
+ * Value Name: DATE
+ *
+ * Purpose: This value type is used to identify values that contain a
+ * calendar date.
+ *
+ * Formal Definition: The value type is defined by the following
+ * notation:
+ *
+ * date = date-value
+ *
+ * date-value = date-fullyear date-month date-mday
+ * date-fullyear = 4DIGIT
+ * date-month = 2DIGIT ;01-12
+ * date-mday = 2DIGIT ;01-28, 01-29, 01-30, 01-31
+ * ;based on month/year
+ *
+ * Description: If the property permits, multiple "date" values are
+ * specified as a COMMA character (US-ASCII decimal 44) separated list
+ * of values. The format for the value type is expressed as the [ISO
+ * 8601] complete representation, basic format for a calendar date. The
+ * textual format specifies a four-digit year, two-digit month, and
+ * two-digit day of the month. There are no separator characters between
+ * the year, month and day component text.
+ *
+ * No additional content value encoding (i.e., BACKSLASH character
+ * encoding) is defined for this value type.
+ *
+ * Example: The following represents July 14, 1997:
+ *
+ * 19970714
+ *
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Date extends Iso8601 {
+
+ private static final long serialVersionUID = 7136072363141363141L;
+
+ private static final String PATTERN = "yyyyMMdd";
+
+ /**
+ * Default constructor.
+ */
+ public Date() {
+ super(PATTERN, Dates.PRECISION_DAY, TimeZones.getDateTimeZone());
+ }
+
+ /**
+ * Creates a new date instance with the specified precision. This
+ * constructor is only intended for use by sub-classes.
+ * @param precision the date precision
+ * @param tz the timezone
+ * @see Dates#PRECISION_DAY
+ * @see Dates#PRECISION_SECOND
+ */
+ protected Date(final int precision, TimeZone tz) {
+ super(PATTERN, precision, tz);
+ }
+
+ /**
+ * @param time a date value in milliseconds
+ */
+ public Date(final long time) {
+ super(time, PATTERN, Dates.PRECISION_DAY, TimeZones.getDateTimeZone());
+ }
+
+ /**
+ * Creates a new date instance with the specified precision. This
+ * constructor is only intended for use by sub-classes.
+ * @param time a date value in milliseconds
+ * @param precision the date precision
+ * @param tz the timezone
+ * @see Dates#PRECISION_DAY
+ * @see Dates#PRECISION_SECOND
+ */
+ protected Date(final long time, final int precision, TimeZone tz) {
+ super(time, PATTERN, precision, tz);
+ }
+
+ /**
+ * @param date a date value
+ */
+ public Date(final java.util.Date date) {
+// this();
+ this(date.getTime(), Dates.PRECISION_DAY, TimeZones.getDateTimeZone());
+// setTime(date.getTime());
+ }
+
+ /**
+ * @param value a string representation of a date
+ * @throws ParseException where the specified string is not a valid date
+ */
+ public Date(final String value) throws ParseException {
+ this();
+ setTime(getFormat().parse(value).getTime());
+ }
+
+ /**
+ * @param value a string representation of a date
+ * @param pattern a date pattern to apply when parsing
+ * @throws ParseException where the specified string is not a valid date
+ */
+ public Date(String value, String pattern) throws ParseException {
+ super(pattern, Dates.PRECISION_DAY, TimeZones.getDateTimeZone());
+ setTime(getFormat().parse(value).getTime());
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/DateList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/DateList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,409 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.StringTokenizer;
+
+import net.fortuna.ical4j.model.parameter.Value;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [23-Apr-2004]
+ *
+ * Defines a list of iCalendar dates. If no value type is specified a list
+ * defaults to DATE-TIME instances.
+ * @author Ben Fortuna
+ */
+public class DateList implements List, Serializable {
+
+ private static final long serialVersionUID = -3700862452550012357L;
+
+ private final Value type;
+
+ private final List dates;
+
+ private TimeZone timeZone;
+
+ private boolean utc;
+
+ /**
+ * Default constructor.
+ */
+ public DateList() {
+ this(false);
+ }
+
+ public DateList(final boolean unmodifiable) {
+
+ this.type = Value.DATE_TIME;
+ if (unmodifiable) {
+ dates = Collections.EMPTY_LIST;
+ }
+ else {
+ dates = new ArrayList();
+ }
+ }
+
+ /**
+ * @param aType the type of dates contained by the instance
+ */
+ public DateList(final Value aType) {
+ this(aType, null);
+ }
+
+ /**
+ * Default constructor.
+ *
+ * @param aType
+ * specifies the type of dates (either date or date-time)
+ * @param timezone the timezone to apply to dates contained by the instance
+ */
+ public DateList(final Value aType, final TimeZone timezone) {
+ if (aType == null) {
+ this.type = Value.DATE_TIME;
+ } else {
+ this.type = aType;
+ }
+ this.timeZone = timezone;
+ dates = new ArrayList();
+ }
+
+ /**
+ * @param aValue a string representation of a date list
+ * @param aType the date types contained in the instance
+ * @throws ParseException where the specified string is not a valid date list
+ */
+ public DateList(final String aValue, final Value aType) throws ParseException {
+ this(aValue, aType, null);
+ }
+
+ /**
+ * Parses the specified string representation to create a list of dates.
+ *
+ * @param aValue
+ * a string representation of a list of dates
+ * @param aType
+ * specifies the type of dates (either date or date-time)
+ * @param timezone the timezone to apply to contained dates
+ * @throws ParseException
+ * if an invalid date representation exists in the date list
+ * string
+ */
+ public DateList(final String aValue, final Value aType, final TimeZone timezone)
+ throws ParseException {
+
+ this(aType, timezone);
+ final StringTokenizer t = new StringTokenizer(aValue, ",");
+ while (t.hasMoreTokens()) {
+ if (Value.DATE.equals(type)) {
+ add((Object) new Date(t.nextToken()));
+ }
+ else {
+ add((Object) new DateTime(t.nextToken(), timezone));
+ }
+ }
+ }
+
+ /**
+ * Constructs a new date list of the specified type containing
+ * the dates in the specified list.
+ * @param list a list of dates to include in the new list
+ * @param type the type of the new list
+ */
+ public DateList(final DateList list, final Value type) {
+ if (!Value.DATE.equals(type) && !Value.DATE_TIME.equals(type)) {
+ throw new IllegalArgumentException(
+ "Type must be either DATE or DATE-TIME");
+ }
+
+ this.type = type;
+ dates = new ArrayList();
+
+ if (Value.DATE.equals(type)) {
+ for (final Iterator i = list.iterator(); i.hasNext();) {
+ add(new Date((Date) i.next()));
+ }
+ }
+ else {
+ for (final Iterator i = list.iterator(); i.hasNext();) {
+ add(new DateTime((Date) i.next()));
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ /*
+ * if (type != null && Value.DATE.equals(type)) {
+ * b.append(DateFormat.getInstance().format((Date) i.next())); }
+ * else { b.append(DateTimeFormat.getInstance().format((Date)
+ * i.next(), isUtc())); }
+ */
+ b.append(i.next());
+ if (i.hasNext()) {
+ b.append(',');
+ }
+ }
+ return b.toString();
+ }
+
+ /**
+ * Add a date to the list. The date will be updated to reflect the
+ * timezone of this list.
+ * @param date the date to add
+ * @return true
+ * @see List#add(java.lang.Object)
+ */
+ public final boolean add(final Date date) {
+ if (date instanceof DateTime) {
+ if (isUtc()) {
+ ((DateTime) date).setUtc(true);
+ }
+ else {
+ ((DateTime) date).setTimeZone(getTimeZone());
+ }
+ }
+ else if (!Value.DATE.equals(getType())) {
+ final DateTime dateTime = new DateTime(date);
+ dateTime.setTimeZone(getTimeZone());
+ return add((Object) dateTime);
+ }
+ return add((Object) date);
+ }
+
+ /**
+ * Overrides superclass to throw an IllegalArgumentException
+ * Where argument is not a net.fortuna.ical4j.model.Date
.
+ * @param date the date to add
+ * @return true if the object was added, otherwise false
+ * @see List#add(E)
+ */
+ public final boolean add(final Object date) {
+ if (!(date instanceof Date)) {
+ throw new IllegalArgumentException("Argument not a " + Date.class.getName());
+ }
+ return dates.add(date);
+ }
+
+ /**
+ * Remove a date from the list.
+ *
+ * @param date
+ * the date to remove
+ * @return true if the list contained the specified date
+ * @see List#remove(java.lang.Object)
+ */
+ public final boolean remove(final Date date) {
+ return remove((Object) date);
+ }
+
+ /**
+ * Returns the VALUE parameter specifying the type of dates (ie. date or
+ * date-time) stored in this date list.
+ *
+ * @return Returns a Value parameter.
+ */
+ public final Value getType() {
+ return type;
+ }
+
+ /**
+ * Indicates whether this list is in local or UTC format. This property will
+ * have no affect if the type of the list is not DATE-TIME.
+ *
+ * @return Returns true if in UTC format, otherwise false.
+ */
+ public final boolean isUtc() {
+ return utc;
+ }
+
+ /**
+ * Sets whether this list is in UTC or local time format.
+ *
+ * @param utc
+ * The utc to set.
+ */
+ public final void setUtc(final boolean utc) {
+ if (!Value.DATE.equals(type)) {
+ for (final Iterator i = iterator(); i.hasNext();) {
+ ((DateTime) i.next()).setUtc(utc);
+ }
+ }
+ this.timeZone = null;
+ this.utc = utc;
+ }
+
+ /**
+ * Applies the specified timezone to all dates in the list.
+ * All dates added to this list will also have this timezone
+ * applied.
+ * @param timeZone a timezone to apply to contained dates
+ */
+ public final void setTimeZone(final TimeZone timeZone) {
+ if (!Value.DATE.equals(type)) {
+ for (final Iterator i = iterator(); i.hasNext();) {
+ ((DateTime) i.next()).setTimeZone(timeZone);
+ }
+ }
+ this.timeZone = timeZone;
+ this.utc = false;
+ }
+
+ /**
+ * @return Returns the timeZone.
+ */
+ public final TimeZone getTimeZone() {
+ return timeZone;
+ }
+
+ public final void add(int arg0, Object arg1) {
+ dates.add(arg0, arg1);
+ }
+
+ public final boolean addAll(Collection arg0) {
+ return dates.addAll(arg0);
+ }
+
+ public final boolean addAll(int arg0, Collection arg1) {
+ return dates.addAll(arg0, arg1);
+ }
+
+ public final void clear() {
+ dates.clear();
+ }
+
+ public final boolean contains(Object o) {
+ return dates.contains(o);
+ }
+
+ public final boolean containsAll(Collection arg0) {
+ return dates.containsAll(arg0);
+ }
+
+ public final Object get(int index) {
+ return dates.get(index);
+ }
+
+ public final int indexOf(Object o) {
+ return dates.indexOf(o);
+ }
+
+ public final boolean isEmpty() {
+ return dates.isEmpty();
+ }
+
+ public final Iterator iterator() {
+ return dates.iterator();
+ }
+
+ public final int lastIndexOf(Object o) {
+ return dates.lastIndexOf(o);
+ }
+
+ public final ListIterator listIterator() {
+ return dates.listIterator();
+ }
+
+ public final ListIterator listIterator(int index) {
+ return dates.listIterator(index);
+ }
+
+ public final Object remove(int index) {
+ return dates.remove(index);
+ }
+
+ public final boolean remove(Object o) {
+ return dates.remove(o);
+ }
+
+ public final boolean removeAll(Collection arg0) {
+ return dates.removeAll(arg0);
+ }
+
+ public final boolean retainAll(Collection arg0) {
+ return dates.retainAll(arg0);
+ }
+
+ public final Object set(int arg0, Object arg1) {
+ return dates.set(arg0, arg1);
+ }
+
+ public final int size() {
+ return dates.size();
+ }
+
+ public final List subList(int fromIndex, int toIndex) {
+ return dates.subList(fromIndex, toIndex);
+ }
+
+ public final Object[] toArray() {
+ return dates.toArray();
+ }
+
+ public final Object[] toArray(Object[] arg0) {
+ return dates.toArray(arg0);
+ }
+
+ public final boolean equals(Object obj) {
+ if (!getClass().isAssignableFrom(obj.getClass())) {
+ return false;
+ }
+ final DateList rhs = (DateList) obj;
+ return new EqualsBuilder().append(dates, rhs.dates)
+ .append(type, rhs.type)
+ .append(timeZone, rhs.timeZone)
+ .append(utc, utc)
+ .isEquals();
+ }
+
+ public final int hashCode() {
+ return new HashCodeBuilder().append(dates)
+ .append(type)
+ .append(timeZone)
+ .append(utc)
+ .toHashCode();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/DateRange.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/DateRange.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,203 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author fortuna
+ *
+ */
+public class DateRange implements Serializable {
+
+ private static final long serialVersionUID = -7303846680559287286L;
+
+ /**
+ * A flag indicating whether to include the start of the period in test functions.
+ */
+ public static final int INCLUSIVE_START = 1;
+
+ /**
+ * A flag indicating whether to include the end of the period in test functions.
+ */
+ public static final int INCLUSIVE_END = 2;
+
+ private final Date rangeStart;
+
+ private final Date rangeEnd;
+
+ /**
+ * @param start the start of the range
+ * @param end the end of the range
+ */
+ public DateRange(Date start, Date end) {
+ if (start == null) {
+ throw new IllegalArgumentException("Range start is null");
+ }
+ if (end == null) {
+ throw new IllegalArgumentException("Range end is null");
+ }
+ if (end.before(start)) {
+ throw new IllegalArgumentException("Range start must be before range end");
+ }
+ this.rangeStart = start;
+ this.rangeEnd = end;
+ }
+
+ /**
+ * @return the rangeStart
+ */
+ public Date getRangeStart() {
+ return rangeStart;
+ }
+
+ /**
+ * @return the rangeEnd
+ */
+ public Date getRangeEnd() {
+ return rangeEnd;
+ }
+
+ /**
+ * Determines if the specified date occurs within this period (inclusive of
+ * period start and end).
+ * @param date a date to test for inclusion
+ * @return true if the specified date occurs within the current period
+ *
+ */
+ public final boolean includes(final Date date) {
+ return includes(date, INCLUSIVE_START | INCLUSIVE_END);
+ }
+
+ /**
+ * Decides whether a date falls within this period.
+ * @param date the date to be tested
+ * @param inclusiveMask specifies whether period start and end are included
+ * in the calculation
+ * @return true if the date is in the period, false otherwise
+ * @see Period#INCLUSIVE_START
+ * @see Period#INCLUSIVE_END
+ */
+ public final boolean includes(final Date date, final int inclusiveMask) {
+ boolean includes = true;
+ if ((inclusiveMask & INCLUSIVE_START) > 0) {
+ includes = includes && !rangeStart.after(date);
+ }
+ else {
+ includes = includes && rangeStart.before(date);
+ }
+ if ((inclusiveMask & INCLUSIVE_END) > 0) {
+ includes = includes && !rangeEnd.before(date);
+ }
+ else {
+ includes = includes && rangeEnd.after(date);
+ }
+ return includes;
+ }
+
+ /**
+ * Decides whether this period is completed before the given period starts.
+ *
+ * @param range
+ * a period that may or may not start after this period ends
+ * @return true if the specified period starts after this periods ends,
+ * otherwise false
+ */
+ public final boolean before(final DateRange range) {
+ return (rangeEnd.before(range.getRangeStart()));
+ }
+
+ /**
+ * Decides whether this period starts after the given period ends.
+ *
+ * @param range
+ * a period that may or may not end before this period starts
+ * @return true if the specified period end before this periods starts,
+ * otherwise false
+ */
+ public final boolean after(final DateRange range) {
+ return (rangeStart.after(range.getRangeEnd()));
+ }
+
+ /**
+ * Decides whether this period intersects with another one.
+ *
+ * @param range
+ * a possible intersecting period
+ * @return true if the specified period intersects this one, false
+ * otherwise.
+ */
+ public final boolean intersects(final DateRange range) {
+ boolean intersects = false;
+ // Test for our start date in period
+ // (Exclude if it is the end date of test range)
+ if (range.includes(rangeStart) && !range.getRangeEnd().equals(rangeStart)) {
+ intersects = true;
+ }
+ // Test for test range's start date in our range
+ // (Exclude if it is the end date of our range)
+ else if (includes(range.getRangeStart())
+ && !rangeEnd.equals(range.getRangeStart())) {
+ intersects = true;
+ }
+ return intersects;
+ }
+
+ /**
+ * Decides whether these periods are serial without a gap.
+ * @param range a period to test for adjacency
+ * @return true if one period immediately follows the other, false otherwise
+ */
+ public final boolean adjacent(final DateRange range) {
+ boolean adjacent = false;
+ if (rangeStart.equals(range.getRangeEnd())) {
+ adjacent = true;
+ } else if (rangeEnd.equals(range.getRangeStart())) {
+ adjacent = true;
+ }
+ return adjacent;
+ }
+
+ /**
+ * Decides whether the given period is completely contained within this one.
+ *
+ * @param range
+ * the period that may be contained by this one
+ * @return true if this period covers all the dates of the specified period,
+ * otherwise false
+ */
+ public final boolean contains(final DateRange range) {
+ // Test for period's start and end dates in our range
+ return (includes(range.getRangeStart()) && includes(range.getRangeEnd()));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/DateTime.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/DateTime.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,509 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.Dates;
+import net.fortuna.ical4j.util.TimeZones;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$
+ *
+ * Created on 26/06/2005
+ *
+ * Represents a time of day on a specific date.
+ *
+ *
+ * 4.3.5 Date-Time
+ *
+ * Value Name: DATE-TIME
+ *
+ * Purpose: This value type is used to identify values that specify a
+ * precise calendar date and time of day.
+ *
+ * Formal Definition: The value type is defined by the following
+ * notation:
+ *
+ * date-time = date "T" time ;As specified in the date and time
+ * ;value definitions
+ *
+ * Description: If the property permits, multiple "date-time" values are
+ * specified as a COMMA character (US-ASCII decimal 44) separated list
+ * of values. No additional content value encoding (i.e., BACKSLASH
+ * character encoding) is defined for this value type.
+ *
+ * The "DATE-TIME" data type is used to identify values that contain a
+ * precise calendar date and time of day. The format is based on the
+ * [ISO 8601] complete representation, basic format for a calendar date
+ * and time of day. The text format is a concatenation of the "date",
+ * followed by the LATIN CAPITAL LETTER T character (US-ASCII decimal
+ * 84) time designator, followed by the "time" format.
+ *
+ * The "DATE-TIME" data type expresses time values in three forms:
+ *
+ * The form of date and time with UTC offset MUST NOT be used. For
+ * example, the following is not valid for a date-time value:
+ *
+ * DTSTART:19980119T230000-0800 ;Invalid time format
+ *
+ * FORM #1: DATE WITH LOCAL TIME
+ *
+ * The date with local time form is simply a date-time value that does
+ * not contain the UTC designator nor does it reference a time zone. For
+ * example, the following represents Janurary 18, 1998, at 11 PM:
+ *
+ * DTSTART:19980118T230000
+ *
+ * Date-time values of this type are said to be "floating" and are not
+ * bound to any time zone in particular. They are used to represent the
+ * same hour, minute, and second value regardless of which time zone is
+ * currently being observed. For example, an event can be defined that
+ * indicates that an individual will be busy from 11:00 AM to 1:00 PM
+ * every day, no matter which time zone the person is in. In these
+ * cases, a local time can be specified. The recipient of an iCalendar
+ * object with a property value consisting of a local time, without any
+ * relative time zone information, SHOULD interpret the value as being
+ * fixed to whatever time zone the ATTENDEE is in at any given moment.
+ * This means that two ATTENDEEs, in different time zones, receiving the
+ * same event definition as a floating time, may be participating in the
+ * event at different actual times. Floating time SHOULD only be used
+ * where that is the reasonable behavior.
+ *
+ * In most cases, a fixed time is desired. To properly communicate a
+ * fixed time in a property value, either UTC time or local time with
+ * time zone reference MUST be specified.
+ *
+ * The use of local time in a DATE-TIME value without the TZID property
+ * parameter is to be interpreted as floating time, regardless of the
+ * existence of "VTIMEZONE" calendar components in the iCalendar object.
+ *
+ * FORM #2: DATE WITH UTC TIME
+ *
+ * The date with UTC time, or absolute time, is identified by a LATIN
+ * CAPITAL LETTER Z suffix character (US-ASCII decimal 90), the UTC
+ * designator, appended to the time value. For example, the following
+ * represents January 19, 1998, at 0700 UTC:
+ *
+ * DTSTART:19980119T070000Z
+ *
+ * The TZID property parameter MUST NOT be applied to DATE-TIME
+ * properties whose time values are specified in UTC.
+ *
+ * FORM #3: DATE WITH LOCAL TIME AND TIME ZONE REFERENCE
+ *
+ * The date and local time with reference to time zone information is
+ * identified by the use the TZID property parameter to reference the
+ * appropriate time zone definition. TZID is discussed in detail in the
+ * section on Time Zone. For example, the following represents 2 AM in
+ * New York on Janurary 19, 1998:
+ *
+ * DTSTART;TZID=US-Eastern:19980119T020000
+ *
+ * Example: The following represents July 14, 1997, at 1:30 PM in New
+ * York City in each of the three time formats, using the "DTSTART"
+ * property.
+ *
+ * DTSTART:19970714T133000 ;Local time
+ * DTSTART:19970714T173000Z ;UTC time
+ * DTSTART;TZID=US-Eastern:19970714T133000 ;Local time and time
+ * ; zone reference
+ *
+ * A time value MUST ONLY specify 60 seconds when specifying the
+ * periodic "leap second" in the time value. For example:
+ *
+ * COMPLETED:19970630T235960Z
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class DateTime extends Date {
+
+ private static final long serialVersionUID = -6407231357919440387L;
+
+ private static final String DEFAULT_PATTERN = "yyyyMMdd'T'HHmmss";
+
+ private static final String UTC_PATTERN = "yyyyMMdd'T'HHmmss'Z'";
+
+ private static final String RELAXED_PATTERN = "yyyyMMdd";
+
+ /**
+ * Used for parsing times in a UTC date-time representation.
+ */
+ private static final DateFormatCache UTC_FORMAT;
+ static {
+ final DateFormat format = new SimpleDateFormat(UTC_PATTERN);
+ format.setTimeZone(TimeZones.getUtcTimeZone());
+ format.setLenient(false);
+
+ UTC_FORMAT = new DateFormatCache(format);
+ }
+
+ /**
+ * Used for parsing times in a local date-time representation.
+ */
+ private static final DateFormatCache DEFAULT_FORMAT;
+ static {
+ final DateFormat format = new SimpleDateFormat(DEFAULT_PATTERN);
+ format.setLenient(false);
+ DEFAULT_FORMAT = new DateFormatCache(format);
+ }
+
+ private static final DateFormatCache LENIENT_DEFAULT_FORMAT;
+ static {
+ final DateFormat format = new SimpleDateFormat(DEFAULT_PATTERN);
+ LENIENT_DEFAULT_FORMAT = new DateFormatCache(format);
+ }
+
+ private static final DateFormatCache RELAXED_FORMAT;
+ static {
+ final DateFormat format = new SimpleDateFormat(RELAXED_PATTERN);
+ format.setLenient(false);
+ RELAXED_FORMAT = new DateFormatCache(format);
+ }
+
+ private Time time;
+
+ private TimeZone timezone;
+
+ /**
+ * Default constructor.
+ */
+ public DateTime() {
+ super(Dates.PRECISION_SECOND, java.util.TimeZone.getDefault());
+ this.time = new Time(getTime(), getFormat().getTimeZone());
+ }
+
+ /**
+ * @param utc
+ * indicates if the date is in UTC time
+ */
+ public DateTime(final boolean utc) {
+ this();
+ setUtc(utc);
+ }
+
+ /**
+ * @param time
+ * a date-time value in milliseconds
+ */
+ public DateTime(final long time) {
+ super(time, Dates.PRECISION_SECOND, java.util.TimeZone.getDefault());
+ this.time = new Time(time, getFormat().getTimeZone());
+ }
+
+ /**
+ * @param date
+ * a date-time value
+ */
+ public DateTime(final java.util.Date date) {
+ super(date.getTime(), Dates.PRECISION_SECOND, java.util.TimeZone.getDefault());
+ this.time = new Time(date.getTime(), getFormat().getTimeZone());
+ // copy timezone information if applicable..
+ if (date instanceof DateTime) {
+ final DateTime dateTime = (DateTime) date;
+ if (dateTime.isUtc()) {
+ setUtc(true);
+ } else {
+ setTimeZone(dateTime.getTimeZone());
+ }
+ }
+ }
+
+ /**
+ * Constructs a new DateTime instance from parsing the specified string
+ * representation in the default (local) timezone.
+ *
+ * @param value
+ * a string representation of a date-time
+ * @throws ParseException
+ * where the specified string is not a valid date-time
+ */
+ public DateTime(final String value) throws ParseException {
+ this(value, null);
+ /*
+ * long time = 0; try { synchronized (UTC_FORMAT) { time =
+ * UTC_FORMAT.parse(value).getTime(); } setUtc(true); } catch
+ * (ParseException pe) { synchronized (DEFAULT_FORMAT) {
+ * DEFAULT_FORMAT.setTimeZone(getFormat().getTimeZone()); time =
+ * DEFAULT_FORMAT.parse(value).getTime(); } this.time = new Time(time,
+ * getFormat().getTimeZone()); } setTime(time);
+ */
+ }
+
+ /**
+ * Creates a new date-time instance from the specified value in the given
+ * timezone. If a timezone is not specified, the default timezone (as
+ * returned by {@link java.util.TimeZone#getDefault()}) is used.
+ *
+ * @param value
+ * a string representation of a date-time
+ * @param timezone
+ * the timezone for the date-time instance
+ * @throws ParseException
+ * where the specified string is not a valid date-time
+ */
+ public DateTime(final String value, final TimeZone timezone)
+ throws ParseException {
+ // setting the time to 0 since we are going to reset it anyway
+ super(0, Dates.PRECISION_SECOND, timezone != null ? timezone
+ : java.util.TimeZone.getDefault());
+ this.time = new Time(getTime(), getFormat().getTimeZone());
+
+ try {
+ if (value.endsWith("Z")) {
+ setTime(value, (DateFormat) UTC_FORMAT.get(), null);
+ setUtc(true);
+ } else {
+ if (timezone != null) {
+ setTime(value, (DateFormat) DEFAULT_FORMAT.get(), timezone);
+ } else {
+ // Use lenient parsing for floating times. This is to
+ // overcome
+ // the problem of parsing VTimeZone dates that specify dates
+ // that the strict parser does not accept.
+ setTime(value, (DateFormat) LENIENT_DEFAULT_FORMAT.get(),
+ getFormat().getTimeZone());
+ }
+ setTimeZone(timezone);
+ }
+ } catch (ParseException pe) {
+ if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) {
+
+ setTime(value, (DateFormat) RELAXED_FORMAT.get(), timezone);
+ setTimeZone(timezone);
+ } else {
+ throw pe;
+ }
+ }
+ }
+
+ /**
+ * @param value
+ * a string representation of a date-time
+ * @param pattern
+ * a pattern to apply when parsing the date-time value
+ * @param timezone
+ * the timezone for the date-time instance
+ * @throws ParseException
+ * where the specified string is not a valid date-time
+ */
+ public DateTime(String value, String pattern, TimeZone timezone)
+ throws ParseException {
+ // setting the time to 0 since we are going to reset it anyway
+ super(0, Dates.PRECISION_SECOND, timezone != null ? timezone
+ : java.util.TimeZone.getDefault());
+ this.time = new Time(getTime(), getFormat().getTimeZone());
+
+ final DateFormat format = CalendarDateFormatFactory
+ .getInstance(pattern);
+ setTime(value, format, timezone);
+ }
+
+ /**
+ * @param value
+ * a string representation of a date-time
+ * @param pattern
+ * a pattern to apply when parsing the date-time value
+ * @param utc
+ * indicates whether the date-time is in UTC time
+ * @throws ParseException
+ * where the specified string is not a valid date-time
+ */
+ public DateTime(String value, String pattern, boolean utc)
+ throws ParseException {
+ // setting the time to 0 since we are going to reset it anyway
+ this(0);
+ final DateFormat format = CalendarDateFormatFactory
+ .getInstance(pattern);
+ if (utc) {
+ setTime(value, format,
+ ((DateFormat) UTC_FORMAT.get()).getTimeZone());
+ } else {
+ setTime(value, format, null);
+ }
+ setUtc(utc);
+ }
+
+ /**
+ * Internal set of time by parsing value string.
+ *
+ * @param value
+ * @param format
+ * a {@code DateFormat}, protected by the use of a ThreadLocal.
+ * @param tz
+ * @throws ParseException
+ */
+ private void setTime(final String value, final DateFormat format,
+ final java.util.TimeZone tz) throws ParseException {
+
+ if (tz != null) {
+ format.setTimeZone(tz);
+ }
+ setTime(format.parse(value).getTime());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setTime(final long time) {
+ super.setTime(time);
+ // need to check for null time due to Android java.util.Date(long)
+ // constructor
+ // calling this method..
+ if (this.time != null) {
+ this.time.setTime(time);
+ }
+ }
+
+ /**
+ * @return Returns the utc.
+ */
+ public final boolean isUtc() {
+ return time.isUtc();
+ }
+
+ /**
+ * Updates this date-time to display in UTC time if the argument is true.
+ * Otherwise, resets to the default timezone.
+ *
+ * @param utc
+ * The utc to set.
+ */
+ public final void setUtc(final boolean utc) {
+ // reset the timezone associated with this instance..
+ this.timezone = null;
+ if (utc) {
+ getFormat().setTimeZone(TimeZones.getUtcTimeZone());
+ } else {
+ resetTimeZone();
+ }
+ time = new Time(time, getFormat().getTimeZone(), utc);
+ }
+
+ /**
+ * Sets the timezone associated with this date-time instance. If the
+ * specified timezone is null, it will reset to the default timezone. If the
+ * date-time instance is utc, it will turn into either a floating (no
+ * timezone) date-time, or a date-time with a timezone.
+ *
+ * @param timezone
+ * a timezone to apply to the instance
+ */
+ public final void setTimeZone(final TimeZone timezone) {
+ this.timezone = timezone;
+ if (timezone != null) {
+ getFormat().setTimeZone(timezone);
+ } else {
+ resetTimeZone();
+ }
+ time = new Time(time, getFormat().getTimeZone(), false);
+ }
+
+ /**
+ * Reset the timezone to default.
+ */
+ private void resetTimeZone() {
+ // use GMT timezone to avoid daylight savings rules affecting floating
+ // time values..
+ getFormat().setTimeZone(TimeZone.getDefault());
+ // getFormat().setTimeZone(TimeZone.getTimeZone(TimeZones.GMT_ID));
+ }
+
+ /**
+ * Returns the current timezone associated with this date-time value.
+ *
+ * @return a Java timezone
+ */
+ public final TimeZone getTimeZone() {
+ return timezone;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer(super.toString());
+ b.append('T');
+ b.append(time.toString());
+ return b.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object arg0) {
+ // TODO: what about compareTo, before, after, etc.?
+
+ if (arg0 instanceof DateTime) {
+ return new EqualsBuilder().append(time, ((DateTime) arg0).time)
+ .isEquals();
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return super.hashCode();
+ }
+
+ private static class DateFormatCache {
+
+ private final Map threadMap = new WeakHashMap();
+
+ private final DateFormat templateFormat;
+
+ private DateFormatCache(DateFormat dateFormat) {
+ this.templateFormat = dateFormat;
+ }
+
+ public DateFormat get() {
+ DateFormat dateFormat = (DateFormat) threadMap.get(Thread
+ .currentThread());
+ if (dateFormat == null) {
+ dateFormat = (DateFormat) templateFormat.clone();
+ threadMap.put(Thread.currentThread(), dateFormat);
+ }
+ return dateFormat;
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/DefaultTimeZoneRegistryFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/DefaultTimeZoneRegistryFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+/**
+ * $Id$
+ *
+ * Created on 18/09/2005
+ *
+ * Default factory implementation for timezone registries.
+ * @author Ben Fortuna
+ */
+public class DefaultTimeZoneRegistryFactory extends TimeZoneRegistryFactory {
+
+ /**
+ * {@inheritDoc}
+ */
+ public TimeZoneRegistry createRegistry() {
+ return new TimeZoneRegistryImpl();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Dur.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Dur.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,528 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.StringTokenizer;
+import net.fortuna.ical4j.util.Dates;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$
+ *
+ * Created on 20/06/2005
+ *
+ * Represents a duration of time in iCalendar. Note that according to RFC2445 durations represented in weeks are
+ * mutually exclusive of other duration fields.
+ *
+ *
+ * 4.3.6 Duration
+ *
+ * Value Name: DURATION
+ *
+ * Purpose: This value type is used to identify properties that contain
+ * a duration of time.
+ *
+ * Formal Definition: The value type is defined by the following
+ * notation:
+ *
+ * dur-value = (["+"] / "-") "P" (dur-date / dur-time / dur-week)
+ *
+ * dur-date = dur-day [dur-time]
+ * dur-time = "T" (dur-hour / dur-minute / dur-second)
+ * dur-week = 1*DIGIT "W"
+ * dur-hour = 1*DIGIT "H" [dur-minute]
+ * dur-minute = 1*DIGIT "M" [dur-second]
+ * dur-second = 1*DIGIT "S"
+ * dur-day = 1*DIGIT "D"
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Dur implements Comparable, Serializable {
+
+ private static final long serialVersionUID = 5013232281547134583L;
+
+ private static final int DAYS_PER_WEEK = 7;
+
+ private static final int SECONDS_PER_MINUTE = 60;
+
+ private static final int MINUTES_PER_HOUR = 60;
+
+ private static final int HOURS_PER_DAY = 24;
+
+ private static final int DAYS_PER_YEAR = 365;
+
+ private boolean negative;
+
+ private int weeks;
+
+ private int days;
+
+ private int hours;
+
+ private int minutes;
+
+ private int seconds;
+
+ /**
+ * Constructs a new duration instance from a string representation.
+ * @param value a string representation of a duration
+ */
+ public Dur(final String value) {
+ negative = false;
+ weeks = 0;
+ days = 0;
+ hours = 0;
+ minutes = 0;
+ seconds = 0;
+
+ String token = null;
+ String prevToken = null;
+
+ final StringTokenizer t = new StringTokenizer(value, "+-PWDTHMS", true);
+ while (t.hasMoreTokens()) {
+ prevToken = token;
+ token = t.nextToken();
+
+ if ("+".equals(token)) {
+ negative = false;
+ }
+ else if ("-".equals(token)) {
+ negative = true;
+ }
+ else if ("P".equals(token)) {
+ // does nothing..
+ }
+ else if ("W".equals(token)) {
+ weeks = Integer.parseInt(prevToken);
+ }
+ else if ("D".equals(token)) {
+ days = Integer.parseInt(prevToken);
+ }
+ else if ("T".equals(token)) {
+ // does nothing..
+ }
+ else if ("H".equals(token)) {
+ hours = Integer.parseInt(prevToken);
+ }
+ else if ("M".equals(token)) {
+ minutes = Integer.parseInt(prevToken);
+ }
+ else if ("S".equals(token)) {
+ seconds = Integer.parseInt(prevToken);
+ }
+ }
+ }
+
+ /**
+ * Constructs a new duration from the specified weeks.
+ * @param weeks a duration in weeks.
+ */
+ public Dur(final int weeks) {
+ this.weeks = Math.abs(weeks);
+ this.days = 0;
+ this.hours = 0;
+ this.minutes = 0;
+ this.seconds = 0;
+ this.negative = weeks < 0;
+ }
+
+ /**
+ * Constructs a new duration from the specified arguments.
+ * @param days duration in days
+ * @param hours duration in hours
+ * @param minutes duration in minutes
+ * @param seconds duration in seconds
+ */
+ public Dur(final int days, final int hours, final int minutes,
+ final int seconds) {
+
+ if (!(days >= 0 && hours >= 0 && minutes >= 0 && seconds >= 0)
+ && !(days <= 0 && hours <= 0 && minutes <= 0 && seconds <= 0)) {
+
+ throw new IllegalArgumentException("Invalid duration representation");
+ }
+
+ this.weeks = 0;
+ this.days = Math.abs(days);
+ this.hours = Math.abs(hours);
+ this.minutes = Math.abs(minutes);
+ this.seconds = Math.abs(seconds);
+
+ this.negative = days < 0 || hours < 0 || minutes < 0 || seconds < 0;
+ }
+
+ /**
+ * Constructs a new duration representing the time between the two specified dates. The end date may precede the
+ * start date in order to represent a negative duration.
+ * @param date1 the first date of the duration
+ * @param date2 the second date of the duration
+ */
+ public Dur(final Date date1, final Date date2) {
+
+ Date start = null;
+ Date end = null;
+
+ // Negative range? (start occurs after end)
+ negative = date1.compareTo(date2) > 0;
+ if (negative) {
+ // Swap the dates (which eliminates the need to bother with
+ // negative after this!)
+ start = date2;
+ end = date1;
+ }
+ else {
+ start = date1;
+ end = date2;
+ }
+
+ final Calendar startCal;
+ if (start instanceof net.fortuna.ical4j.model.Date) {
+ startCal = Dates.getCalendarInstance((net.fortuna.ical4j.model.Date)start);
+ } else {
+ startCal = Calendar.getInstance();
+ }
+ startCal.setTime(start);
+ final Calendar endCal = Calendar.getInstance(startCal.getTimeZone());
+ endCal.setTime(end);
+
+ // Init our duration interval (which is in units that evolve as we
+ // compute, below)
+ int dur = 0;
+
+ // Count days to get to the right year (loop in the very rare chance
+ // that a leap year causes us to come up short)
+ int nYears = endCal.get(Calendar.YEAR) - startCal.get(Calendar.YEAR);
+ while (nYears > 0) {
+ startCal.add(Calendar.DATE, DAYS_PER_YEAR * nYears);
+ dur += DAYS_PER_YEAR * nYears;
+ nYears = endCal.get(Calendar.YEAR) - startCal.get(Calendar.YEAR);
+ }
+
+ // Count days to get to the right day
+ dur += endCal.get(Calendar.DAY_OF_YEAR)
+ - startCal.get(Calendar.DAY_OF_YEAR);
+
+ // Count hours to get to right hour
+ dur *= HOURS_PER_DAY; // days -> hours
+ dur += endCal.get(Calendar.HOUR_OF_DAY)
+ - startCal.get(Calendar.HOUR_OF_DAY);
+
+ // ... to the right minute
+ dur *= MINUTES_PER_HOUR; // hours -> minutes
+ dur += endCal.get(Calendar.MINUTE) - startCal.get(Calendar.MINUTE);
+
+ // ... and second
+ dur *= SECONDS_PER_MINUTE; // minutes -> seconds
+ dur += endCal.get(Calendar.SECOND) - startCal.get(Calendar.SECOND);
+
+ // Now unwind our units
+ seconds = dur % SECONDS_PER_MINUTE;
+ dur = dur / SECONDS_PER_MINUTE; // seconds -> minutes (drop remainder seconds)
+ minutes = dur % MINUTES_PER_HOUR;
+ dur /= MINUTES_PER_HOUR; // minutes -> hours (drop remainder minutes)
+ hours = dur % HOURS_PER_DAY;
+ dur /= HOURS_PER_DAY; // hours -> days (drop remainder hours)
+ days = dur;
+ weeks = 0;
+
+ // Special case for week-only representation
+ if (seconds == 0 && minutes == 0 && hours == 0
+ && (days % DAYS_PER_WEEK) == 0) {
+ weeks = days / DAYS_PER_WEEK;
+ days = 0;
+ }
+ }
+
+ /**
+ * Returns a date representing the end of this duration from the specified start date.
+ * @param start the date to start the duration
+ * @return the end of the duration as a date
+ */
+ public final Date getTime(final Date start) {
+ final Calendar cal;
+ if (start instanceof net.fortuna.ical4j.model.Date) {
+ cal = Dates.getCalendarInstance((net.fortuna.ical4j.model.Date)start);
+ } else {
+ cal = Calendar.getInstance();
+ }
+
+ cal.setTime(start);
+ if (isNegative()) {
+ cal.add(Calendar.WEEK_OF_YEAR, -weeks);
+ cal.add(Calendar.DAY_OF_WEEK, -days);
+ cal.add(Calendar.HOUR_OF_DAY, -hours);
+ cal.add(Calendar.MINUTE, -minutes);
+ cal.add(Calendar.SECOND, -seconds);
+ }
+ else {
+ cal.add(Calendar.WEEK_OF_YEAR, weeks);
+ cal.add(Calendar.DAY_OF_WEEK, days);
+ cal.add(Calendar.HOUR_OF_DAY, hours);
+ cal.add(Calendar.MINUTE, minutes);
+ cal.add(Calendar.SECOND, seconds);
+ }
+ return cal.getTime();
+ }
+
+ /**
+ * Provides a negation of this instance.
+ * @return a Dur instance that represents a negation of this instance
+ */
+ public final Dur negate() {
+ final Dur negated = new Dur(days, hours, minutes, seconds);
+ negated.weeks = weeks;
+ negated.negative = !negative;
+ return negated;
+ }
+
+ /**
+ * Add two durations. Durations may only be added if they are both positive
+ * or both negative durations.
+ * @param duration the duration to add to this duration
+ * @return a new instance representing the sum of the two durations.
+ */
+ public final Dur add(final Dur duration) {
+ if ((!isNegative() && duration.isNegative())
+ || (isNegative() && !duration.isNegative())) {
+
+ throw new IllegalArgumentException(
+ "Cannot add a negative and a positive duration");
+ }
+
+ Dur sum = null;
+ if (weeks > 0 && duration.weeks > 0) {
+ sum = new Dur(weeks + duration.weeks);
+ }
+ else {
+ int daySum = (weeks > 0) ? weeks * DAYS_PER_WEEK + days : days;
+ int hourSum = hours;
+ int minuteSum = minutes;
+ int secondSum = seconds;
+
+ if ((secondSum + duration.seconds) / SECONDS_PER_MINUTE > 0) {
+ minuteSum += (secondSum + duration.seconds) / SECONDS_PER_MINUTE;
+ secondSum = (secondSum + duration.seconds) % SECONDS_PER_MINUTE;
+ }
+ else {
+ secondSum += duration.seconds;
+ }
+
+ if ((minuteSum + duration.minutes) / MINUTES_PER_HOUR > 0) {
+ hourSum += (minuteSum + duration.minutes) / MINUTES_PER_HOUR;
+ minuteSum = (minuteSum + duration.minutes) % MINUTES_PER_HOUR;
+ }
+ else {
+ minuteSum += duration.minutes;
+ }
+
+ if ((hourSum + duration.hours) / HOURS_PER_DAY > 0) {
+ daySum += (hourSum + duration.hours) / HOURS_PER_DAY;
+ hourSum = (hourSum + duration.hours) % HOURS_PER_DAY;
+ }
+ else {
+ hourSum += duration.hours;
+ }
+
+ daySum += (duration.weeks > 0) ? duration.weeks * DAYS_PER_WEEK
+ + duration.days : duration.days;
+
+ sum = new Dur(daySum, hourSum, minuteSum, secondSum);
+ }
+ sum.negative = negative;
+ return sum;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ if (negative) {
+ b.append('-');
+ }
+ b.append('P');
+ if (weeks > 0) {
+ b.append(weeks);
+ b.append('W');
+ }
+ else {
+ if (days > 0) {
+ b.append(days);
+ b.append('D');
+ }
+ if (hours > 0 || minutes > 0 || seconds > 0) {
+ b.append('T');
+ if (hours > 0) {
+ b.append(hours);
+ b.append('H');
+ }
+ if (minutes > 0) {
+ b.append(minutes);
+ b.append('M');
+ }
+ if (seconds > 0) {
+ b.append(seconds);
+ b.append('S');
+ }
+ }
+ // handle case of zero length duration
+ if ((hours + minutes + seconds + days + weeks) == 0) {
+ b.append("T0S");
+ }
+ }
+ return b.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int compareTo(final Object arg0) {
+ return compareTo((Dur) arg0);
+ }
+
+ /**
+ * Compares this duration with another, acording to their length.
+ * @param arg0 another duration instance
+ * @return a postive value if this duration is longer, zero if the duration
+ * lengths are equal, otherwise a negative value
+ */
+ public final int compareTo(final Dur arg0) {
+ int result;
+ if (isNegative() != arg0.isNegative()) {
+ // return Boolean.valueOf(isNegative()).compareTo(Boolean.valueOf(arg0.isNegative()));
+ // for pre-java 1.5 compatibility..
+ if (isNegative()) {
+ return Integer.MIN_VALUE;
+ }
+ else {
+ return Integer.MAX_VALUE;
+ }
+ }
+ else if (getWeeks() != arg0.getWeeks()) {
+ result = getWeeks() - arg0.getWeeks();
+ }
+ else if (getDays() != arg0.getDays()) {
+ result = getDays() - arg0.getDays();
+ }
+ else if (getHours() != arg0.getHours()) {
+ result = getHours() - arg0.getHours();
+ }
+ else if (getMinutes() != arg0.getMinutes()) {
+ result = getMinutes() - arg0.getMinutes();
+ }
+ else {
+ result = getSeconds() - arg0.getSeconds();
+ }
+ // invert sense of all tests if both durations are negative
+ if (isNegative()) {
+ return -result;
+ }
+ else {
+ return result;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object obj) {
+ if (obj instanceof Dur) {
+ return ((Dur) obj).compareTo(this) == 0;
+ }
+ return super.equals(obj);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return new HashCodeBuilder().append(weeks).append(days).append(
+ hours).append(minutes).append(seconds).append(negative).toHashCode();
+ }
+
+ /**
+ * @return Returns the days.
+ */
+ public final int getDays() {
+ return days;
+ }
+
+ /**
+ * @return Returns the hours.
+ */
+ public final int getHours() {
+ return hours;
+ }
+
+ /**
+ * @return Returns the minutes.
+ */
+ public final int getMinutes() {
+ return minutes;
+ }
+
+ /**
+ * @return Returns the negative.
+ */
+ public final boolean isNegative() {
+ return negative;
+ }
+
+ /**
+ * @return Returns the seconds.
+ */
+ public final int getSeconds() {
+ return seconds;
+ }
+
+ /**
+ * @return Returns the weeks.
+ */
+ public final int getWeeks() {
+ return weeks;
+ }
+
+ /**
+ * @param stream
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ private void readObject(final java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Escapable.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Escapable.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+/**
+ * $Id$
+ *
+ * Created on 26/06/2005
+ *
+ * Implementors by definition require their string value to be converted to/from an escaped form when converting to/from
+ * and iCalendar representation.
+ * @author Ben Fortuna
+ */
+public interface Escapable {
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/IndexedComponentList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/IndexedComponentList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,105 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * $Id$
+ *
+ * Created on 4/02/2006
+ *
+ * Provides indexing of components on a specific property.
+ * @author Ben Fortuna
+ */
+public class IndexedComponentList {
+
+ private static final ComponentList EMPTY_LIST = new ComponentList();
+
+ private Map index;
+
+ /**
+ * Creates a new instance indexed on properties with the specified name.
+ * @param list a list of components
+ * @param propertyName the name of the properties to index on
+ */
+ public IndexedComponentList(final ComponentList list, final String propertyName) {
+ final Map indexedComponents = new HashMap();
+ for (final Iterator i = list.iterator(); i.hasNext();) {
+ final Component component = (Component) i.next();
+ for (final Iterator j = component.getProperties(propertyName).iterator(); j.hasNext();) {
+ final Property property = (Property) j.next();
+ ComponentList components = (ComponentList) indexedComponents.get(property.getValue());
+ if (components == null) {
+ components = new ComponentList();
+ indexedComponents.put(property.getValue(), components);
+ }
+ components.add(component);
+ }
+ }
+ this.index = Collections.unmodifiableMap(indexedComponents);
+ }
+
+ /**
+ * Returns a list of components containing a property with the
+ * specified value.
+ * @param propertyValue the value of the property contained in the
+ * returned components
+ * @return a component list
+ */
+ public ComponentList getComponents(final String propertyValue) {
+ ComponentList components = (ComponentList) index.get(propertyValue);
+ if (components == null) {
+ components = EMPTY_LIST;
+ }
+ return components;
+ }
+
+ /**
+ * Returns the first component containing a property with the specified
+ * value.
+ * @param propertyValue the value of the property identified in the returned
+ * component
+ * @return a component or null if no component is found containing a property
+ * with the specified value
+ */
+ public Component getComponent(final String propertyValue) {
+ final ComponentList components = getComponents(propertyValue);
+ if (!components.isEmpty()) {
+ return (Component) components.iterator().next();
+ }
+ return null;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/IndexedPropertyList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/IndexedPropertyList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,105 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * $Id$
+ *
+ * Created on 4/02/2006
+ *
+ * Provides indexing of properties on a specific parameter.
+ * @author Ben Fortuna
+ */
+public class IndexedPropertyList {
+
+ private static final PropertyList EMPTY_LIST = new PropertyList();
+
+ private Map index;
+
+ /**
+ * Creates a new instance indexed on the parameters with the specified name.
+ * @param list a list of properties
+ * @param parameterName the name of parameters on which to index
+ */
+ public IndexedPropertyList(final PropertyList list, final String parameterName) {
+ final Map indexedProperties = new HashMap();
+ for (final Iterator i = list.iterator(); i.hasNext();) {
+ final Property property = (Property) i.next();
+ for (final Iterator j = property.getParameters(parameterName).iterator(); j.hasNext();) {
+ final Parameter parameter = (Parameter) j.next();
+ PropertyList properties = (PropertyList) indexedProperties.get(parameter.getValue());
+ if (properties == null) {
+ properties = new PropertyList();
+ indexedProperties.put(parameter.getValue(), properties);
+ }
+ properties.add(property);
+ }
+ }
+ this.index = Collections.unmodifiableMap(indexedProperties);
+ }
+
+ /**
+ * Returns a list of properties containing a parameter with the
+ * specified value.
+ * @param paramValue the value of the parameter contained in the
+ * returned properties
+ * @return a property list
+ */
+ public PropertyList getProperties(final String paramValue) {
+ PropertyList properties = (PropertyList) index.get(paramValue);
+ if (properties == null) {
+ properties = EMPTY_LIST;
+ }
+ return properties;
+ }
+
+ /**
+ * Returns the first property containing a parameter with the specified
+ * value.
+ * @param paramValue the value of the parameter identified in the returned
+ * property
+ * @return a property or null if no property is found containing a parameter
+ * with the specified value
+ */
+ public Property getProperty(final String paramValue) {
+ final PropertyList properties = getProperties(paramValue);
+ if (!properties.isEmpty()) {
+ return (Property) properties.iterator().next();
+ }
+ return null;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Iso8601.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Iso8601.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,155 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.text.DateFormat;
+import java.util.Date;
+
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.Dates;
+import net.fortuna.ical4j.util.TimeZones;
+
+/**
+ * $Id$
+ *
+ * Created on 30/06/2005
+ *
+ * Base class for date and time representations as defined
+ * by the ISO 8601 standard. Sub-classes must ensure that either the correct
+ * precision is used in constructor arguments, or that Object.equals()
+ * is overridden to ensure equality checking is consistent with the type.
+ * @author Ben Fortuna
+ */
+public abstract class Iso8601 extends Date {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -4290728005713946811L;
+
+ private DateFormat format;
+
+ private DateFormat gmtFormat;
+
+ private int precision;
+
+ /**
+ * @param time a time value in milliseconds
+ * @param pattern the formatting pattern to apply
+ * @param precision the precision to apply
+ * @param tz the timezone for the instance
+ * @see Dates#PRECISION_DAY
+ * @see Dates#PRECISION_SECOND
+ */
+ public Iso8601(final long time, final String pattern, final int precision, java.util.TimeZone tz) {
+ super(Dates.round(time, precision, tz)); //, TimeZone.getTimeZone(TimeZones.GMT_ID)));
+// format = new SimpleDateFormat(pattern);
+ format = CalendarDateFormatFactory.getInstance(pattern);
+ format.setTimeZone(tz);
+ format.setLenient(CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING));
+ // use GMT timezone to avoid daylight savings rules affecting floating
+ // time values..
+// gmtFormat = new SimpleDateFormat(pattern);
+// gmtFormat.setTimeZone(TimeZone.getTimeZone(TimeZones.GMT_ID));
+ this.precision = precision;
+ }
+
+ /**
+ * @param pattern the formatting pattern to apply
+ * @param precision the precision to apply
+ * @param tz the timezone for the instance
+ * @see Dates#PRECISION_DAY
+ * @see Dates#PRECISION_SECOND
+ */
+ public Iso8601(final String pattern, final int precision, java.util.TimeZone tz) {
+ this(Dates.getCurrentTimeRounded(), pattern, precision, tz);
+ }
+
+ /**
+ * @param time a time value as a date
+ * @param pattern the formatting pattern to apply
+ * @param precision the precision to apply
+ * @param tz the timezone for the instance
+ * @see Dates#PRECISION_DAY
+ * @see Dates#PRECISION_SECOND
+ */
+ public Iso8601(final Date time, final String pattern, final int precision, java.util.TimeZone tz) {
+ this(time.getTime(), pattern, precision, tz);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String toString() {
+ // if time is floating avoid daylight saving rules when generating
+ // string representation of date..
+ if (!(format.getTimeZone() instanceof TimeZone)) {
+ if (gmtFormat == null) {
+ gmtFormat = (DateFormat) format.clone();
+ gmtFormat.setTimeZone(TimeZone.getTimeZone(TimeZones.GMT_ID));
+ }
+ if (format.getTimeZone().inDaylightTime(this)
+ && format.getTimeZone().inDaylightTime(new Date(getTime() - 1))) {
+
+ return gmtFormat.format(new Date(getTime()
+ + format.getTimeZone().getRawOffset()
+ + format.getTimeZone().getDSTSavings()));
+// return format.format(new Date(getTime() - format.getTimeZone().getDSTSavings()));
+ }
+// return gmtFormat.format(new Date(getTime() + format.getTimeZone().getOffset(getTime())));
+ return gmtFormat.format(new Date(getTime() + format.getTimeZone().getRawOffset()));
+ }
+ return format.format(this);
+ }
+
+ /**
+ * @return Returns the format.
+ */
+ protected final DateFormat getFormat() {
+ return format;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setTime(final long time) {
+ // need to check for null format due to Android java.util.Date(long) constructor
+ // calling this method..
+ if (format != null) {
+ super.setTime(Dates.round(time, precision, format.getTimeZone()));
+ }
+ else {
+ // XXX: what do we do here??
+ super.setTime(time);
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/LocationTypeList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/LocationTypeList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * $Id LocationTypeList.java $ [23-Apr-2004]
+ *
+ * Defines a list of iCalendar location types.
+ *
+ * @author Ben Fortuna
+ */
+public class LocationTypeList implements Serializable {
+
+ private static final long serialVersionUID = -9181735547604179160L;
+
+ private List locationTypes;
+
+ /**
+ * Default constructor.
+ */
+ public LocationTypeList() {
+ locationTypes = new CopyOnWriteArrayList();
+ }
+
+ /**
+ * Parses the specified string representation to create a list of categories.
+ *
+ * @param aValue
+ * a string representation of a list of categories
+ */
+ public LocationTypeList(final String aValue) {
+ locationTypes = new CopyOnWriteArrayList();
+
+ final StringTokenizer t = new StringTokenizer(aValue, ",");
+ while (t.hasMoreTokens()) {
+ locationTypes.add(t.nextToken());
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ for (final Iterator i = locationTypes.iterator(); i.hasNext();) {
+ b.append(i.next());
+ if (i.hasNext()) {
+ b.append(',');
+ }
+ }
+ return b.toString();
+ }
+
+ /**
+ * Add a location type to the list.
+ *
+ * @param locationType the location type to add
+ * @return true if the object is added successfully
+ * @see List#add(java.lang.Object)
+ */
+ public final boolean add(final String locationType) {
+ return locationTypes.add(locationType);
+ }
+
+ /**
+ * @return boolean indicates if the list is empty
+ * @see List#isEmpty()
+ */
+ public final boolean isEmpty() {
+ return locationTypes.isEmpty();
+ }
+
+ /**
+ * @return an iterator
+ * @see List#iterator()
+ */
+ public final Iterator iterator() {
+ return locationTypes.iterator();
+ }
+
+ /**
+ * Remove a locationType from the list.
+ *
+ * @param locationType the location type to remove
+ * @return true if the list contained the specified category
+ * @see List#remove(java.lang.Object)
+ */
+ public final boolean remove(final String locationType) {
+ return locationTypes.remove(locationType);
+ }
+
+ /**
+ * @return the number of categories in the list
+ * @see List#size()
+ */
+ public final int size() {
+ return locationTypes.size();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/NumberList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/NumberList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import net.fortuna.ical4j.util.Numbers;
+
+/**
+ * $Id$ [29-May-2004]
+ *
+ * Defines a list of numbers.
+ *
+ * @author Ben Fortuna
+ */
+public class NumberList extends ArrayList implements Serializable {
+
+ private static final long serialVersionUID = -1667481795613729889L;
+
+ private final int minValue;
+
+ private final int maxValue;
+
+ private final boolean allowsNegativeValues;
+
+ /**
+ * Default constructor.
+ */
+ public NumberList() {
+ this(Integer.MIN_VALUE, Integer.MAX_VALUE, true);
+ }
+
+ /**
+ * Constructor with limits.
+ * @param minValue the minimum allowable value
+ * @param maxValue the maximum allowable value
+ * @param allowsNegativeValues indicates whether negative values are allowed
+ */
+ public NumberList(int minValue, int maxValue, boolean allowsNegativeValues) {
+ this.minValue = minValue;
+ this.maxValue = maxValue;
+ this.allowsNegativeValues = allowsNegativeValues;
+ }
+
+ /**
+ * Constructor.
+ * @param aString a string representation of a number list
+ */
+ public NumberList(final String aString) {
+ this(aString, Integer.MIN_VALUE, Integer.MAX_VALUE, true);
+ }
+
+ /**
+ * @param aString a string representation of a number list
+ * @param minValue the minimum allowable value
+ * @param maxValue the maximum allowable value
+ * @param allowsNegativeValues indicates whether negative values are allowed
+ */
+ public NumberList(final String aString, int minValue, int maxValue, boolean allowsNegativeValues) {
+ this(minValue, maxValue, allowsNegativeValues);
+ final StringTokenizer t = new StringTokenizer(aString, ",");
+ while (t.hasMoreTokens()) {
+ final int value = Numbers.parseInt(t.nextToken());
+ add(new Integer(value));
+ }
+ }
+
+ /**
+ * @param aNumber a number to add to the list
+ * @return true if the number was added, otherwise false
+ */
+ public final boolean add(final Integer aNumber) {
+ int abs = aNumber.intValue();
+ if ((abs >> 31 | -abs >>> 31) < 0) {
+ if (!allowsNegativeValues) {
+ throw new IllegalArgumentException("Negative value not allowed: " + aNumber);
+ }
+ abs = Math.abs(abs);
+ }
+ if (abs < minValue || abs > maxValue) {
+ throw new IllegalArgumentException(
+ "Value not in range [" + minValue + ".." + maxValue + "]: " + aNumber);
+ }
+ return add((Object) aNumber);
+ }
+
+ /**
+ * Overrides superclass to throw an IllegalArgumentException
+ * where argument is not a java.lang.Integer
.
+ * @param arg0 an object to add
+ * @return true if the object was added, otherwise false
+ * @see List#add(E)
+ */
+ public final boolean add(final Object arg0) {
+ if (!(arg0 instanceof Integer)) {
+ throw new IllegalArgumentException("Argument not a " + Integer.class.getName());
+ }
+ return super.add(arg0);
+ }
+
+ /**
+ * @param aNumber a number to remove from the list
+ * @return true if the number was removed, otherwise false
+ */
+ public final boolean remove(final Integer aNumber) {
+ return remove((Object) aNumber);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ b.append(i.next());
+ if (i.hasNext()) {
+ b.append(',');
+ }
+ }
+ return b.toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Parameter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Parameter.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,264 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.util.Strings;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * Defines an iCalendar parameter. Subclasses of this class provide additional validation and typed values for specific
+ * iCalendar parameters.
+ *
+ * Note that subclasses must provide a reference to the factory used to create the
+ * parameter to support parameter cloning (copy). If no factory is specified an
+ * {@link UnsupportedOperationException} will be thrown by the {@link #copy()} method.
+ *
+ * @author Ben Fortuna
+ *
+ * $Id$ [Apr 5, 2004]
+ */
+public abstract class Parameter extends Content {
+
+ private static final long serialVersionUID = -2058497904769713528L;
+
+ /**
+ * Region abbreviation.
+ */
+ public static final String ABBREV = "ABBREV";
+
+ /**
+ * Alternate text representation.
+ */
+ public static final String ALTREP = "ALTREP";
+
+ /**
+ * Common name.
+ */
+ public static final String CN = "CN";
+
+ /**
+ * Calendar user type.
+ */
+ public static final String CUTYPE = "CUTYPE";
+
+ /**
+ * Delegator.
+ */
+ public static final String DELEGATED_FROM = "DELEGATED-FROM";
+
+ /**
+ * Delegatee.
+ */
+ public static final String DELEGATED_TO = "DELEGATED-TO";
+
+ /**
+ * Directory entry.
+ */
+ public static final String DIR = "DIR";
+
+ /**
+ * Inline encoding.
+ */
+ public static final String ENCODING = "ENCODING";
+
+ /**
+ * Format type.
+ */
+ public static final String FMTTYPE = "FMTTYPE";
+
+ /**
+ * Free/busy time type.
+ */
+ public static final String FBTYPE = "FBTYPE";
+
+ /**
+ * Language for text.
+ */
+ public static final String LANGUAGE = "LANGUAGE";
+
+ /**
+ * Group or list membership.
+ */
+ public static final String MEMBER = "MEMBER";
+
+ /**
+ * Participation status.
+ */
+ public static final String PARTSTAT = "PARTSTAT";
+
+ /**
+ * Recurrence identifier range.
+ */
+ public static final String RANGE = "RANGE";
+
+ /**
+ * Alarm trigger relationship.
+ */
+ public static final String RELATED = "RELATED";
+
+ /**
+ * Relationship type.
+ */
+ public static final String RELTYPE = "RELTYPE";
+
+ /**
+ * Participation role.
+ */
+ public static final String ROLE = "ROLE";
+
+ /**
+ * RSVP expectation.
+ */
+ public static final String RSVP = "RSVP";
+
+ /**
+ * Schedule agent.
+ */
+ public static final String SCHEDULE_AGENT = "SCHEDULE-AGENT";
+
+ /**
+ * Schedule status.
+ */
+ public static final String SCHEDULE_STATUS = "SCHEDULE-STATUS";
+
+ /**
+ * Sent by.
+ */
+ public static final String SENT_BY = "SENT-BY";
+
+ /**
+ * Type.
+ */
+ public static final String TYPE = "TYPE";
+
+ /**
+ * Reference to time zone object.
+ */
+ public static final String TZID = "TZID";
+
+ /**
+ * Property value data type.
+ */
+ public static final String VALUE = "VALUE";
+
+ /**
+ * Reference to vvenue component.
+ */
+ public static final String VVENUE = "VVENUE";
+
+ /**
+ * Prefix to all experimental parameters.
+ */
+ public static final String EXPERIMENTAL_PREFIX = "X-";
+
+ private String name;
+
+ private final ParameterFactory factory;
+
+ /**
+ * @param aName the parameter identifier
+ * @param factory the factory used to create the parameter
+ */
+ public Parameter(final String aName, ParameterFactory factory) {
+ this.name = aName;
+ this.factory = factory;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ b.append(getName());
+ b.append('=');
+ if (isQuotable()) {
+ b.append(Strings.quote(Strings.valueOf(getValue())));
+ }
+ else {
+ b.append(Strings.valueOf(getValue()));
+ }
+ return b.toString();
+ }
+
+ /**
+ * Indicates whether the current parameter value should be quoted.
+ * @return true if the value should be quoted, otherwise false
+ */
+ protected boolean isQuotable() {
+ return Strings.PARAM_QUOTE_PATTERN.matcher(Strings.valueOf(getValue()))
+ .find();
+ }
+
+ /**
+ * @return Returns the name.
+ */
+ public final String getName() {
+ return name;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean equals(final Object arg0) {
+ if (arg0 instanceof Parameter) {
+ final Parameter p = (Parameter) arg0;
+ return new EqualsBuilder().append(getName(), p.getName())
+ .append(getValue(), p.getValue()).isEquals();
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int hashCode() {
+ // as parameter name is case-insensitive generate hash for uppercase..
+ return new HashCodeBuilder().append(getName().toUpperCase()).append(
+ getValue()).toHashCode();
+ }
+
+ /**
+ * Deep copy of parameter.
+ * @return new parameter
+ * @throws URISyntaxException where an invalid URI is encountered
+ */
+ public Parameter copy() throws URISyntaxException {
+ if (factory == null) {
+ throw new UnsupportedOperationException("No factory specified");
+ }
+ return factory.createParameter(getName(), getValue());
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ParameterFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ParameterFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/*
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.net.URISyntaxException;
+
+
+/**
+ * Implementors provide parameter creation services.
+ *
+ * Note that implementations must be {@link Serializable} to support referencing
+ * from {@link Parameter} instances.
+ *
+ * @author Ben Fortuna
+ *
+ * $Id$ [05-Apr-2004]
+ *
+ * Created on 14/06/2005
+ *
+ */
+public interface ParameterFactory extends Serializable {
+
+ /**
+ * Returns a parameter instance of the appropriate type with the specified value.
+ * @param name a parameter names that identifies the parameter type
+ * @param value a value to assign to the returned parameter
+ * @return a parameter instance, or null if this factory is unable to create an
+ * appropriate parameter
+ * @throws URISyntaxException where an invalid URI is encountered
+ */
+ Parameter createParameter(String name, String value) throws URISyntaxException;
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ParameterFactoryImpl.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ParameterFactoryImpl.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,524 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.parameter.Abbrev;
+import net.fortuna.ical4j.model.parameter.AltRep;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.CuType;
+import net.fortuna.ical4j.model.parameter.DelegatedFrom;
+import net.fortuna.ical4j.model.parameter.DelegatedTo;
+import net.fortuna.ical4j.model.parameter.Dir;
+import net.fortuna.ical4j.model.parameter.Encoding;
+import net.fortuna.ical4j.model.parameter.FbType;
+import net.fortuna.ical4j.model.parameter.FmtType;
+import net.fortuna.ical4j.model.parameter.Language;
+import net.fortuna.ical4j.model.parameter.Member;
+import net.fortuna.ical4j.model.parameter.PartStat;
+import net.fortuna.ical4j.model.parameter.Range;
+import net.fortuna.ical4j.model.parameter.RelType;
+import net.fortuna.ical4j.model.parameter.Related;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.parameter.Rsvp;
+import net.fortuna.ical4j.model.parameter.ScheduleAgent;
+import net.fortuna.ical4j.model.parameter.ScheduleStatus;
+import net.fortuna.ical4j.model.parameter.SentBy;
+import net.fortuna.ical4j.model.parameter.Type;
+import net.fortuna.ical4j.model.parameter.TzId;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.parameter.Vvenue;
+import net.fortuna.ical4j.model.parameter.XParameter;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * A factory for creating iCalendar parameters.
+ *
+ * $Id $
+ *
+ * [05-Apr-2004]
+ *
+ * @author Ben Fortuna
+ */
+public class ParameterFactoryImpl extends AbstractContentFactory implements ParameterFactory {
+
+ private static final long serialVersionUID = -4034423507432249165L;
+
+ private static ParameterFactoryImpl instance = new ParameterFactoryImpl();
+
+ protected ParameterFactoryImpl() {
+ registerDefaultFactory(Parameter.ABBREV, new AbbrevFactory());
+ registerDefaultFactory(Parameter.ALTREP, new AltRepFactory());
+ registerDefaultFactory(Parameter.CN, new CnFactory());
+ registerDefaultFactory(Parameter.CUTYPE, new CuTypeFactory());
+ registerDefaultFactory(Parameter.DELEGATED_FROM, new DelegatedFromFactory());
+ registerDefaultFactory(Parameter.DELEGATED_TO, new DelegatedToFactory());
+ registerDefaultFactory(Parameter.DIR, new DirFactory());
+ registerDefaultFactory(Parameter.ENCODING, new EncodingFactory());
+ registerDefaultFactory(Parameter.FMTTYPE, new FmtTypeFactory());
+ registerDefaultFactory(Parameter.FBTYPE, new FbTypeFactory());
+ registerDefaultFactory(Parameter.LANGUAGE, new LanguageFactory());
+ registerDefaultFactory(Parameter.MEMBER, new MemberFactory());
+ registerDefaultFactory(Parameter.PARTSTAT, new PartStatFactory());
+ registerDefaultFactory(Parameter.RANGE, new RangeFactory());
+ registerDefaultFactory(Parameter.RELATED, new RelatedFactory());
+ registerDefaultFactory(Parameter.RELTYPE, new RelTypeFactory());
+ registerDefaultFactory(Parameter.ROLE, new RoleFactory());
+ registerDefaultFactory(Parameter.RSVP, new RsvpFactory());
+ registerDefaultFactory(Parameter.SCHEDULE_AGENT, new ScheduleAgentFactory());
+ registerDefaultFactory(Parameter.SCHEDULE_STATUS, new ScheduleStatusFactory());
+ registerDefaultFactory(Parameter.SENT_BY, new SentByFactory());
+ registerDefaultFactory(Parameter.TYPE, new TypeFactory());
+ registerDefaultFactory(Parameter.TZID, new TzIdFactory());
+ registerDefaultFactory(Parameter.VALUE, new ValueFactory());
+ registerDefaultFactory(Parameter.VVENUE, new VvenueFactory());
+ }
+
+ /**
+ * @return Returns the instance.
+ */
+ public static ParameterFactoryImpl getInstance() {
+ return instance;
+ }
+
+ /**
+ * Creates a parameter.
+ * @param name name of the parameter
+ * @param value a parameter value
+ * @return a component
+ * @throws URISyntaxException thrown when the specified string is not a valid representation of a URI for selected
+ * parameters
+ */
+ public Parameter createParameter(final String name, final String value)
+ throws URISyntaxException {
+ final ParameterFactory factory = (ParameterFactory) getFactory(name);
+ Parameter parameter = null;
+ if (factory != null) {
+ parameter = factory.createParameter(name, value);
+ }
+ else if (isExperimentalName(name)) {
+ parameter = new XParameter(name, value);
+ }
+ else if (allowIllegalNames()) {
+ parameter = new XParameter(name, value);
+ }
+ else {
+ throw new IllegalArgumentException("Invalid parameter name: "
+ + name);
+ }
+ return parameter;
+ }
+
+ /**
+ * @param name
+ * @return
+ */
+ private boolean isExperimentalName(final String name) {
+ return name.startsWith(Parameter.EXPERIMENTAL_PREFIX)
+ && name.length() > Parameter.EXPERIMENTAL_PREFIX.length();
+ }
+
+ private static class AbbrevFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name, final String value) throws URISyntaxException {
+ return new Abbrev(value);
+ }
+ }
+
+ private static class AltRepFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name, final String value) throws URISyntaxException {
+ return new AltRep(value);
+ }
+ }
+
+ private static class CnFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new Cn(value);
+ }
+ }
+
+ private static class CuTypeFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name, final String value) throws URISyntaxException {
+ CuType parameter = new CuType(value);
+ if (CuType.INDIVIDUAL.equals(parameter)) {
+ parameter = CuType.INDIVIDUAL;
+ }
+ else if (CuType.GROUP.equals(parameter)) {
+ parameter = CuType.GROUP;
+ }
+ else if (CuType.RESOURCE.equals(parameter)) {
+ parameter = CuType.RESOURCE;
+ }
+ else if (CuType.ROOM.equals(parameter)) {
+ parameter = CuType.ROOM;
+ }
+ else if (CuType.UNKNOWN.equals(parameter)) {
+ parameter = CuType.UNKNOWN;
+ }
+ return parameter;
+ }
+ }
+
+ private static class DelegatedFromFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new DelegatedFrom(value);
+ }
+ }
+
+ private static class DelegatedToFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new DelegatedTo(value);
+ }
+ }
+
+ private static class DirFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new Dir(value);
+ }
+ }
+
+ private static class EncodingFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ Encoding parameter = new Encoding(value);
+ if (Encoding.EIGHT_BIT.equals(parameter)) {
+ parameter = Encoding.EIGHT_BIT;
+ }
+ else if (Encoding.BASE64.equals(parameter)) {
+ parameter = Encoding.BASE64;
+ }
+ return parameter;
+ }
+ }
+
+ private static class FmtTypeFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new FmtType(value);
+ }
+ }
+
+ private static class FbTypeFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ FbType parameter = new FbType(value);
+ if (FbType.FREE.equals(parameter)) {
+ parameter = FbType.FREE;
+ }
+ else if (FbType.BUSY.equals(parameter)) {
+ parameter = FbType.BUSY;
+ }
+ else if (FbType.BUSY_TENTATIVE.equals(parameter)) {
+ parameter = FbType.BUSY_TENTATIVE;
+ }
+ else if (FbType.BUSY_UNAVAILABLE.equals(parameter)) {
+ parameter = FbType.BUSY_UNAVAILABLE;
+ }
+ return parameter;
+ }
+ }
+
+ private static class LanguageFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new Language(value);
+ }
+ }
+
+ private static class MemberFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new Member(value);
+ }
+ }
+
+ private static class PartStatFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ PartStat parameter = new PartStat(value);
+ if (PartStat.NEEDS_ACTION.equals(parameter)) {
+ parameter = PartStat.NEEDS_ACTION;
+ }
+ else if (PartStat.ACCEPTED.equals(parameter)) {
+ parameter = PartStat.ACCEPTED;
+ }
+ else if (PartStat.DECLINED.equals(parameter)) {
+ parameter = PartStat.DECLINED;
+ }
+ else if (PartStat.TENTATIVE.equals(parameter)) {
+ parameter = PartStat.TENTATIVE;
+ }
+ else if (PartStat.DELEGATED.equals(parameter)) {
+ parameter = PartStat.DELEGATED;
+ }
+ else if (PartStat.COMPLETED.equals(parameter)) {
+ parameter = PartStat.COMPLETED;
+ }
+ else if (PartStat.IN_PROCESS.equals(parameter)) {
+ parameter = PartStat.IN_PROCESS;
+ }
+ return parameter;
+ }
+ }
+
+ private static class RangeFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ Range parameter = new Range(value);
+ if (Range.THISANDFUTURE.equals(parameter)) {
+ parameter = Range.THISANDFUTURE;
+ }
+ else if (Range.THISANDPRIOR.equals(parameter)) {
+ parameter = Range.THISANDPRIOR;
+ }
+ return parameter;
+ }
+ }
+
+ private static class RelatedFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ Related parameter = new Related(value);
+ if (Related.START.equals(parameter)) {
+ parameter = Related.START;
+ }
+ else if (Related.END.equals(parameter)) {
+ parameter = Related.END;
+ }
+ return parameter;
+ }
+ }
+
+ private static class RelTypeFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ RelType parameter = new RelType(value);
+ if (RelType.PARENT.equals(parameter)) {
+ parameter = RelType.PARENT;
+ }
+ else if (RelType.CHILD.equals(parameter)) {
+ parameter = RelType.CHILD;
+ }
+ if (RelType.SIBLING.equals(parameter)) {
+ parameter = RelType.SIBLING;
+ }
+ return parameter;
+ }
+ }
+
+ private static class RoleFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ Role parameter = new Role(value);
+ if (Role.CHAIR.equals(parameter)) {
+ parameter = Role.CHAIR;
+ }
+ else if (Role.REQ_PARTICIPANT.equals(parameter)) {
+ parameter = Role.REQ_PARTICIPANT;
+ }
+ else if (Role.OPT_PARTICIPANT.equals(parameter)) {
+ parameter = Role.OPT_PARTICIPANT;
+ }
+ else if (Role.NON_PARTICIPANT.equals(parameter)) {
+ parameter = Role.NON_PARTICIPANT;
+ }
+ return parameter;
+ }
+ }
+
+ private static class RsvpFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ Rsvp parameter = new Rsvp(value);
+ if (Rsvp.TRUE.equals(parameter)) {
+ parameter = Rsvp.TRUE;
+ }
+ else if (Rsvp.FALSE.equals(parameter)) {
+ parameter = Rsvp.FALSE;
+ }
+ return parameter;
+ }
+ }
+
+ private static class ScheduleAgentFactory implements ParameterFactory {
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ final ScheduleAgent parameter = new ScheduleAgent(value);
+ if (ScheduleAgent.SERVER.equals(parameter)) {
+ return ScheduleAgent.SERVER;
+ }
+ else if (ScheduleAgent.CLIENT.equals(parameter)) {
+ return ScheduleAgent.CLIENT;
+ }
+ else if (ScheduleAgent.NONE.equals(parameter)) {
+ return ScheduleAgent.NONE;
+ }
+ return parameter;
+ }
+ }
+
+ private static class ScheduleStatusFactory implements ParameterFactory {
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new ScheduleStatus(value);
+ }
+ }
+
+ private static class SentByFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new SentBy(value);
+ }
+ }
+
+ private static class VvenueFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name, final String value)
+ throws URISyntaxException {
+ return new Vvenue(value);
+ }
+ }
+
+ private static class TypeFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new Type(value);
+ }
+ }
+
+ private static class TzIdFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ return new TzId(Strings.unescape(value));
+ }
+ }
+
+ private static class ValueFactory implements ParameterFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Parameter createParameter(final String name,
+ final String value) throws URISyntaxException {
+ Value parameter = new Value(value);
+ if (Value.BINARY.equals(parameter)) {
+ parameter = Value.BINARY;
+ }
+ else if (Value.BOOLEAN.equals(parameter)) {
+ parameter = Value.BOOLEAN;
+ }
+ else if (Value.CAL_ADDRESS.equals(parameter)) {
+ parameter = Value.CAL_ADDRESS;
+ }
+ else if (Value.DATE.equals(parameter)) {
+ parameter = Value.DATE;
+ }
+ else if (Value.DATE_TIME.equals(parameter)) {
+ parameter = Value.DATE_TIME;
+ }
+ else if (Value.DURATION.equals(parameter)) {
+ parameter = Value.DURATION;
+ }
+ else if (Value.FLOAT.equals(parameter)) {
+ parameter = Value.FLOAT;
+ }
+ else if (Value.INTEGER.equals(parameter)) {
+ parameter = Value.INTEGER;
+ }
+ else if (Value.PERIOD.equals(parameter)) {
+ parameter = Value.PERIOD;
+ }
+ else if (Value.RECUR.equals(parameter)) {
+ parameter = Value.RECUR;
+ }
+ else if (Value.TEXT.equals(parameter)) {
+ parameter = Value.TEXT;
+ }
+ else if (Value.TIME.equals(parameter)) {
+ parameter = Value.TIME;
+ }
+ else if (Value.URI.equals(parameter)) {
+ parameter = Value.URI;
+ }
+ else if (Value.UTC_OFFSET.equals(parameter)) {
+ parameter = Value.UTC_OFFSET;
+ }
+ return parameter;
+ }
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ParameterFactoryRegistry.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ParameterFactoryRegistry.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+/**
+ * @author fortuna
+ *
+ */
+public final class ParameterFactoryRegistry extends ParameterFactoryImpl {
+
+ private static final long serialVersionUID = -3372324894953715583L;
+
+ /**
+ * @param name a non-standard parameter name
+ * @param factory a factory for the non-standard parameter
+ */
+ public void register(String name, ParameterFactory factory) {
+ registerExtendedFactory(name, factory);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ParameterList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ParameterList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,232 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines a list of iCalendar parameters. A parameter list may be specified as unmodifiable at instantiation - useful
+ * for constant properties that you don't want modified.
+ * @author Ben Fortuna
+ */
+public class ParameterList implements Serializable {
+
+ private static final long serialVersionUID = -1913059830016450169L;
+
+ private final List parameters;
+
+ /**
+ * Default constructor. Creates a modifiable parameter list.
+ */
+ public ParameterList() {
+ this(false);
+ }
+
+ /**
+ * Constructor.
+ * @param unmodifiable indicates whether the list should be mutable
+ */
+ public ParameterList(final boolean unmodifiable) {
+ if (unmodifiable) {
+ parameters = Collections.unmodifiableList(new ArrayList());
+ }
+ else {
+ parameters = new CopyOnWriteArrayList();
+ }
+ }
+
+ /**
+ * Creates a deep copy of the specified parameter list. That is, copies of all parameters in the specified list are
+ * added to this list.
+ * @param list a parameter list to copy parameters from
+ * @param unmodifiable indicates whether the list should be mutable
+ * @throws URISyntaxException where a parameter in the list specifies an invalid URI value
+ */
+ public ParameterList(final ParameterList list, final boolean unmodifiable)
+ throws URISyntaxException {
+
+ final List parameterList = new CopyOnWriteArrayList();
+ for (final Iterator i = list.iterator(); i.hasNext();) {
+ final Parameter parameter = (Parameter) i.next();
+ parameterList.add(parameter.copy());
+ }
+ if (unmodifiable) {
+ parameters = Collections.unmodifiableList(parameterList);
+ }
+ else {
+ parameters = parameterList;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer buffer = new StringBuffer();
+ for (final Iterator i = parameters.iterator(); i.hasNext();) {
+ buffer.append(';');
+ buffer.append(i.next().toString());
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Returns the first parameter with the specified name.
+ * @param aName name of the parameter
+ * @return the first matching parameter or null if no matching parameters
+ */
+ public final Parameter getParameter(final String aName) {
+ for (final Iterator i = parameters.iterator(); i.hasNext();) {
+ final Parameter p = (Parameter) i.next();
+ if (aName.equalsIgnoreCase(p.getName())) {
+ return p;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns a list of parameters with the specified name.
+ * @param name name of parameters to return
+ * @return a parameter list
+ */
+ public final ParameterList getParameters(final String name) {
+ final ParameterList list = new ParameterList();
+ for (final Iterator i = parameters.iterator(); i.hasNext();) {
+ final Parameter p = (Parameter) i.next();
+ if (p.getName().equalsIgnoreCase(name)) {
+ list.add(p);
+ }
+ }
+ return list;
+ }
+
+ /**
+ * Add a parameter to the list. Note that this method will not remove existing parameters of the same type. To
+ * achieve this use {
+ * @link ParameterList#replace(Parameter) }
+ * @param parameter the parameter to add
+ * @return true
+ * @see List#add(java.lang.Object)
+ */
+ public final boolean add(final Parameter parameter) {
+ if (parameter == null) {
+ throw new IllegalArgumentException("Trying to add null Parameter");
+ }
+ return parameters.add(parameter);
+ }
+
+ /**
+ * Replace any parameters of the same type with the one specified.
+ * @param parameter parameter to add to this list in place of all others with the same name
+ * @return true if successfully added to this list
+ */
+ public final boolean replace(final Parameter parameter) {
+ for (final Iterator i = getParameters(parameter.getName()).iterator(); i.hasNext();) {
+ remove((Parameter) i.next());
+ }
+ return add(parameter);
+ }
+
+ /**
+ * @return boolean indicates if the list is empty
+ * @see List#isEmpty()
+ */
+ public final boolean isEmpty() {
+ return parameters.isEmpty();
+ }
+
+ /**
+ * @return an iterator
+ * @see List#iterator()
+ */
+ public final Iterator iterator() {
+ return parameters.iterator();
+ }
+
+ /**
+ * Remove a parameter from the list.
+ * @param parameter the parameter to remove
+ * @return true if the list contained the specified parameter
+ * @see List#remove(java.lang.Object)
+ */
+ public final boolean remove(final Parameter parameter) {
+ return parameters.remove(parameter);
+ }
+
+ /**
+ * Remove all parameters with the specified name.
+ * @param paramName the name of parameters to remove
+ */
+ public final void removeAll(final String paramName) {
+ final ParameterList params = getParameters(paramName);
+ parameters.removeAll(params.parameters);
+ }
+
+ /**
+ * @return the number of parameters in the list
+ * @see List#size()
+ */
+ public final int size() {
+ return parameters.size();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean equals(final Object arg0) {
+ if (arg0 instanceof ParameterList) {
+ final ParameterList p = (ParameterList) arg0;
+ return ObjectUtils.equals(parameters, p.parameters);
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int hashCode() {
+ return new HashCodeBuilder().append(parameters).toHashCode();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Period.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Period.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,371 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.text.ParseException;
+import java.util.Date;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [Apr 14, 2004]
+ *
+ * Defines a period of time. A period may be specified as either a start date
+ * and end date, or a start date and duration. NOTE: End dates and durations are
+ * implicitly derived when not explicitly specified. This means that you cannot
+ * rely on the returned values from the getters to deduce whether a period has
+ * an explicit end date or duration.
+ *
+ * @author Ben Fortuna
+ */
+public class Period extends DateRange implements Comparable {
+
+ private static final long serialVersionUID = 7321090422911676490L;
+
+ private Dur duration;
+
+ /**
+ * Constructor.
+ *
+ * @param aValue
+ * a string representation of a period
+ * @throws ParseException
+ * where the specified string is not a valid representation
+ */
+ public Period(final String aValue) throws ParseException {
+ super(parseStartDate(aValue), parseEndDate(aValue, true));
+
+ // period may end in either a date-time or a duration..
+ try {
+ parseEndDate(aValue, false);
+ }
+ catch (ParseException pe) {
+ // duration = DurationFormat.getInstance().parse(aValue);
+ duration = parseDuration(aValue);
+ }
+ normalise();
+ }
+
+ /**
+ * Constructs a new period with the specied start and end date.
+ *
+ * @param start
+ * the start date of the period
+ * @param end
+ * the end date of the period
+ */
+ public Period(final DateTime start, final DateTime end) {
+ super(start, end);
+ normalise();
+ }
+
+ /**
+ * Constructs a new period with the specified start date and duration.
+ *
+ * @param start
+ * the start date of the period
+ * @param duration
+ * the duration of the period
+ */
+ public Period(final DateTime start, final Dur duration) {
+ super(start, new DateTime(duration.getTime(start)));
+ this.duration = duration;
+ normalise();
+ }
+
+ private static DateTime parseStartDate(String value) throws ParseException {
+ return new DateTime(value.substring(0, value.indexOf('/')));
+ }
+
+ private static DateTime parseEndDate(String value, boolean resolve) throws ParseException {
+ DateTime end = null;
+ try {
+ end = new DateTime(value.substring(value.indexOf('/') + 1));
+ }
+ catch (ParseException e) {
+ if (resolve) {
+ final Dur duration = parseDuration(value);
+ end = new DateTime(duration.getTime(parseStartDate(value)));
+ }
+ else {
+ throw e;
+ }
+ }
+ return end;
+ }
+
+ private static Dur parseDuration(String value) {
+ return new Dur(value.substring(value.indexOf('/') + 1));
+ }
+
+ private void normalise() {
+ // ensure the end timezone is the same as the start..
+ if (getStart().isUtc()) {
+ getEnd().setUtc(true);
+ }
+ else {
+ getEnd().setTimeZone(getStart().getTimeZone());
+ }
+ }
+
+ /**
+ * Returns the duration of this period. If an explicit duration is not
+ * specified, the duration is derived from the end date.
+ *
+ * @return the duration of this period in milliseconds.
+ */
+ public final Dur getDuration() {
+ if (duration == null) {
+ return new Dur(getStart(), getEnd());
+ }
+ return duration;
+ }
+
+ /**
+ * Returns the end date of this period. If an explicit end date is not
+ * specified, the end date is derived from the duration.
+ *
+ * @return the end date of this period.
+ */
+ public final DateTime getEnd() {
+ return (DateTime) getRangeEnd();
+ }
+
+ /**
+ * @return Returns the start.
+ */
+ public final DateTime getStart() {
+ return (DateTime) getRangeStart();
+ }
+
+ /**
+ * @param date a date to test for inclusion
+ * @param inclusive indicates if the start and end of the period are included in the test
+ * @return true if the specified date occurs within the current period
+ * @deprecated use {@link Period#includes(Date, int)} instead.
+ */
+ public final boolean includes(final Date date, final boolean inclusive) {
+ if (inclusive) {
+ return includes(date, INCLUSIVE_START | INCLUSIVE_END);
+ }
+ else {
+ return includes(date, 0);
+ }
+ }
+
+ /**
+ * Creates a period that encompasses both this period and another one. If
+ * the other period is null, return a copy of this period. NOTE: Resulting
+ * periods are specified by explicitly setting a start date and end date
+ * (i.e. durations are implied).
+ *
+ * @param period
+ * the period to add to this one
+ * @return a period
+ */
+ public final Period add(final Period period) {
+ DateTime newPeriodStart = null;
+ DateTime newPeriodEnd = null;
+
+ if (period == null) {
+ newPeriodStart = getStart();
+ newPeriodEnd = getEnd();
+ }
+ else {
+ if (getStart().before(period.getStart())) {
+ newPeriodStart = getStart();
+ }
+ else {
+ newPeriodStart = period.getStart();
+ }
+ if (getEnd().after(period.getEnd())) {
+ newPeriodEnd = getEnd();
+ }
+ else {
+ newPeriodEnd = period.getEnd();
+ }
+ }
+
+ return new Period(newPeriodStart, newPeriodEnd);
+ }
+
+ /**
+ * Creates a set of periods resulting from the subtraction of the specified
+ * period from this one. If the specified period is completely contained
+ * in this period, the resulting list will contain two periods. Otherwise
+ * it will contain one. If the specified period does not interest this period
+ * a list containing this period is returned. If this period is completely
+ * contained within the specified period an empty period list is returned.
+ * @param period a period to subtract from this one
+ * @return a list containing zero, one or two periods.
+ */
+ public final PeriodList subtract(final Period period) {
+ final PeriodList result = new PeriodList();
+
+ if (period.contains(this)) {
+ return result;
+ }
+ else if (!period.intersects(this)) {
+ result.add(this);
+ return result;
+ }
+
+ DateTime newPeriodStart;
+ DateTime newPeriodEnd;
+ if (!period.getStart().after(getStart())) {
+ newPeriodStart = period.getEnd();
+ newPeriodEnd = getEnd();
+ }
+ else if (!period.getEnd().before(getEnd())) {
+ newPeriodStart = getStart();
+ newPeriodEnd = period.getStart();
+ }
+ else {
+ // subtraction consumed by this period..
+ // initialise and add head period..
+ newPeriodStart = getStart();
+ newPeriodEnd = period.getStart();
+ result.add(new Period(newPeriodStart, newPeriodEnd));
+ // initialise tail period..
+ newPeriodStart = period.getEnd();
+ newPeriodEnd = getEnd();
+ }
+ result.add(new Period(newPeriodStart, newPeriodEnd));
+ return result;
+ }
+
+ /**
+ * An empty period is one that consumes no time.
+ * @return true if this period consumes no time, otherwise false
+ */
+ public final boolean isEmpty() {
+ return getStart().equals(getEnd());
+ }
+
+ /**
+ * Updates the start and (possible) end times of this period to reflect
+ * the specified UTC timezone status.
+ * @param utc indicates whether the period is in UTC time
+ */
+ public void setUtc(final boolean utc) {
+ getStart().setUtc(utc);
+ getEnd().setUtc(utc);
+ }
+
+ /**
+ * Updates the start and (possible) end times of this period to reflect
+ * the specified timezone status.
+ * @param timezone a timezone for the period
+ */
+ public final void setTimeZone(final TimeZone timezone) {
+ getStart().setUtc(false);
+ getStart().setTimeZone(timezone);
+ getEnd().setUtc(false);
+ getEnd().setTimeZone(timezone);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ b.append(getStart());
+ b.append('/');
+ if (duration == null) {
+ b.append(getEnd());
+ }
+ else {
+ // b.append(DurationFormat.getInstance().format(duration));
+ b.append(duration);
+ }
+ return b.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int compareTo(final Object arg0) {
+ return compareTo((Period) arg0);
+ }
+
+ /**
+ * Compares the specified period with this period.
+ *
+ * @param arg0 a period to compare with this one
+ * @return a postive value if this period is greater, negative if the other is
+ * greater, or zero if they are equal
+ */
+ public final int compareTo(final Period arg0) {
+ // Throws documented exception if type is wrong or parameter is null
+ if (arg0 == null) {
+ throw new ClassCastException("Cannot compare this object to null");
+ }
+ final int startCompare = getStart().compareTo(arg0.getStart());
+ if (startCompare != 0) {
+ return startCompare;
+ }
+ // start dates are equal, compare end dates..
+ else if (duration == null) {
+ final int endCompare = getEnd().compareTo(arg0.getEnd());
+ if (endCompare != 0) {
+ return endCompare;
+ }
+ }
+ // ..or durations
+ return getDuration().compareTo(arg0.getDuration());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (!(o instanceof Period)) {
+ return false;
+ }
+
+ final Period period = (Period) o;
+ return new EqualsBuilder().append(getStart(), period.getStart())
+ .append(getEnd(), period.getEnd()).isEquals();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int hashCode() {
+ return new HashCodeBuilder().append(getStart())
+ .append((duration == null) ? (Object) getEnd() : duration).toHashCode();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/PeriodList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/PeriodList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,436 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.text.ParseException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [23-Apr-2004]
+ *
+ * Defines a list of iCalendar periods. NOTE: By implementing the
+ * java.util.SortedSet
interface period lists will always be
+ * sorted according to natural ordering.
+ *
+ * @author Ben Fortuna
+ */
+public class PeriodList implements Set, Serializable {
+
+ private static final long serialVersionUID = -2317587285790834492L;
+
+ private final Set periods;
+
+ private TimeZone timezone;
+
+ private boolean utc;
+
+ private final boolean unmodifiable;
+
+ /**
+ * Default constructor.
+ */
+ public PeriodList() {
+ this(true);
+ }
+
+ /**
+ * @param utc indicates whether the period list is in UTC time
+ */
+ public PeriodList(boolean utc) {
+ this(utc, false);
+ }
+
+ /**
+ * @param utc indicates whether the period list is in UTC time
+ */
+ public PeriodList(boolean utc, final boolean unmodifiable) {
+ this.utc = utc;
+ this.unmodifiable = unmodifiable;
+ if (unmodifiable) {
+ periods = Collections.EMPTY_SET;
+ }
+ else {
+ periods = new TreeSet();
+ }
+ }
+
+ /**
+ * Parses the specified string representation to create a list of periods.
+ *
+ * @param aValue
+ * a string representation of a list of periods
+ * @throws ParseException
+ * thrown when an invalid string representation of a period list
+ * is specified
+ */
+ public PeriodList(final String aValue) throws ParseException {
+ this();
+ final StringTokenizer t = new StringTokenizer(aValue, ",");
+ while (t.hasMoreTokens()) {
+ add((Object) new Period(t.nextToken()));
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ b.append(i.next().toString());
+ if (i.hasNext()) {
+ b.append(',');
+ }
+ }
+ return b.toString();
+ }
+
+ /**
+ * Add a period to the list.
+ *
+ * @param period
+ * the period to add
+ * @return true
+ * @see java.util.List#add(java.lang.Object)
+ */
+ public final boolean add(final Period period) {
+ if (isUtc()) {
+ period.setUtc(true);
+ }
+ else {
+ period.setTimeZone(timezone);
+ }
+ return add((Object) period);
+ }
+
+ /**
+ * Overrides superclass to throw an IllegalArgumentException
+ * where argument is not a net.fortuna.ical4j.model.Period
.
+ * @param period a period to add to the list
+ * @return true if the period was added, otherwise false
+ * @see java.util.List#add(E)
+ */
+ public final boolean add(final Object period) {
+ if (!(period instanceof Period)) {
+ throw new IllegalArgumentException("Argument not a "
+ + Period.class.getName());
+ }
+ return periods.add(period);
+ }
+
+ /**
+ * Remove a period from the list.
+ *
+ * @param period
+ * the period to remove
+ * @return true if the list contained the specified period
+ * @see java.util.List#remove(java.lang.Object)
+ */
+ public final boolean remove(final Period period) {
+ return remove((Object) period);
+ }
+
+ /**
+ * Returns a normalised version of this period list. Normalisation includes
+ * combining overlapping periods, removing periods contained by other
+ * periods, combining adjacent periods, and removing periods that consume
+ * no time. NOTE: If the period list is
+ * already normalised then this period list is returned.
+ *
+ * @return a period list
+ */
+ public final PeriodList normalise() {
+ Period prevPeriod = null;
+ Period period = null;
+ final PeriodList newList = new PeriodList(isUtc());
+ if (timezone != null) {
+ newList.setTimeZone(timezone);
+ }
+ boolean normalised = false;
+ for (final Iterator i = iterator(); i.hasNext();) {
+ period = (Period) i.next();
+ if (period.isEmpty()) {
+ period = prevPeriod;
+ normalised = true;
+ }
+ else if (prevPeriod != null) {
+ // ignore periods contained by other periods..
+ if (prevPeriod.contains(period)) {
+ period = prevPeriod;
+ normalised = true;
+ }
+ // combine intersecting periods..
+ else if (prevPeriod.intersects(period)) {
+ period = prevPeriod.add(period);
+ normalised = true;
+ }
+ // combine adjacent periods..
+ else if (prevPeriod.adjacent(period)) {
+ period = prevPeriod.add(period);
+ normalised = true;
+ }
+ else {
+ // if current period is recognised as distinct
+ // from previous period, add the previous period
+ // to the list..
+ newList.add(prevPeriod);
+ }
+ }
+ prevPeriod = period;
+ }
+ // remember to add the last period to the list..
+ if (prevPeriod != null) {
+ newList.add(prevPeriod);
+ }
+ // only return new list if normalisation
+ // has ocurred..
+ if (normalised) {
+ return newList;
+ }
+ else {
+ return this;
+ }
+ }
+
+ /**
+ * A convenience method that combines all the periods in the specified list to
+ * this list. The result returned is a new PeriodList instance, except where
+ * no periods are specified in the arguments. In such cases this instance is returned.
+ *
+ * Normalisation is also performed automatically after all periods have been added.
+ *
+ * @param periods a list of periods to add
+ * @return a period list instance
+ */
+ public final PeriodList add(final PeriodList periods) {
+ if (periods != null) {
+ final PeriodList newList = new PeriodList();
+ newList.addAll(this);
+ for (final Iterator i = periods.iterator(); i.hasNext();) {
+ newList.add((Period) i.next());
+ }
+ return newList.normalise();
+ }
+ return this;
+ }
+
+ /**
+ * Subtracts the intersection of this list with the specified list of
+ * periods from this list and returns the results as a new period list. If
+ * no intersection is identified this list is returned.
+ *
+ * @param subtractions
+ * a list of periods to subtract from this list
+ * @return a period list
+ */
+ public final PeriodList subtract(final PeriodList subtractions) {
+ if (subtractions == null || subtractions.isEmpty()) {
+ return this;
+ }
+
+ PeriodList result = this;
+ PeriodList tmpResult = new PeriodList();
+
+ for (final Iterator i = subtractions.iterator(); i.hasNext();) {
+ final Period subtraction = (Period) i.next();
+ for (final Iterator j = result.iterator(); j.hasNext();) {
+ final Period period = (Period) j.next();
+ tmpResult.addAll(period.subtract(subtraction));
+ }
+ result = tmpResult;
+ tmpResult = new PeriodList();
+ }
+
+ return result;
+ }
+
+ public final boolean isUnmodifiable() {
+ return unmodifiable;
+ }
+
+ /**
+ * Indicates whether this list is in local or UTC format.
+ * @return Returns true if in UTC format, otherwise false.
+ */
+ public final boolean isUtc() {
+ return utc;
+ }
+
+ /**
+ * Sets whether this list is in UTC or local time format.
+ * @param utc The utc to set.
+ */
+ public final void setUtc(final boolean utc) {
+ for (final Iterator i = iterator(); i.hasNext();) {
+ final Period period = (Period) i.next();
+ period.setUtc(utc);
+ }
+ this.timezone = null;
+ this.utc = utc;
+ }
+
+ /**
+ * Applies the specified timezone to all dates in the list.
+ * All dates added to this list will also have this timezone
+ * applied.
+ * @param timeZone the timezone for the period list
+ */
+ public final void setTimeZone(final TimeZone timeZone) {
+ for (final Iterator i = iterator(); i.hasNext();) {
+ final Period period = (Period) i.next();
+ period.setTimeZone(timeZone);
+ }
+ this.timezone = timeZone;
+ this.utc = false;
+ }
+
+ /**
+ * @return Returns the timeZone.
+ */
+ public final TimeZone getTimeZone() {
+ return timezone;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean addAll(Collection arg0) {
+ for (Iterator i = arg0.iterator(); i.hasNext();) {
+ add(i.next());
+ }
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void clear() {
+ periods.clear();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean contains(Object o) {
+ return periods.contains(o);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean containsAll(Collection arg0) {
+ return periods.containsAll(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean isEmpty() {
+ return periods.isEmpty();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final Iterator iterator() {
+ return periods.iterator();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean remove(Object o) {
+ return periods.remove(o);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean removeAll(Collection arg0) {
+ return periods.removeAll(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean retainAll(Collection arg0) {
+ return periods.retainAll(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int size() {
+ return periods.size();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final Object[] toArray() {
+ return periods.toArray();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final Object[] toArray(Object[] arg0) {
+ return periods.toArray(arg0);
+ }
+
+ public final boolean equals(Object obj) {
+ if (!getClass().isAssignableFrom(obj.getClass())) {
+ return false;
+ }
+ final PeriodList rhs = (PeriodList) obj;
+ return new EqualsBuilder().append(periods, rhs.periods)
+ .append(timezone, rhs.timezone)
+ .append(utc, utc)
+ .isEquals();
+ }
+
+ public final int hashCode() {
+ return new HashCodeBuilder().append(periods)
+ .append(timezone)
+ .append(utc)
+ .toHashCode();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Property.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Property.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,537 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.property.XProperty;
+
+import net.fortuna.ical4j.util.Strings;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * Defines an iCalendar property. Subclasses of this class provide additional validation and typed values for specific
+ * iCalendar properties.
+ *
+ * Note that subclasses must provide a reference to the factory used to create the
+ * property to support property cloning (copy). If no factory is specified an
+ * {@link UnsupportedOperationException} will be thrown by the {@link #copy()} method.
+ *
+ * @author Ben Fortuna
+ *
+ * $Id$ [Apr 5, 2004]
+ */
+public abstract class Property extends Content {
+
+ private static final long serialVersionUID = 7048785558435608687L;
+
+ // iCalendar properties..
+
+ /**
+ * Product identifier property name.
+ */
+ public static final String PRODID = "PRODID";
+
+ /**
+ * iCalendar version property name.
+ */
+ public static final String VERSION = "VERSION";
+
+ /**
+ * Calendar scale property name.
+ */
+ public static final String CALSCALE = "CALSCALE";
+
+ /**
+ * iTIP method property name.
+ */
+ public static final String METHOD = "METHOD";
+
+ // Component properties..
+
+ /**
+ * Busy type property name.
+ */
+ public static final String BUSYTYPE = "BUSYTYPE";
+
+ /**
+ * Classifier property name.
+ */
+ public static final String CLASS = "CLASS";
+
+ /**
+ * Creation date property name.
+ */
+ public static final String CREATED = "CREATED";
+
+ /**
+ * Description property name.
+ */
+ public static final String DESCRIPTION = "DESCRIPTION";
+
+ /**
+ * Start date property name.
+ */
+ public static final String DTSTART = "DTSTART";
+
+ /**
+ * Geographic location property name.
+ */
+ public static final String GEO = "GEO";
+
+ /**
+ * Last modified date property name.
+ */
+ public static final String LAST_MODIFIED = "LAST-MODIFIED";
+
+ /**
+ * Location property name.
+ */
+ public static final String LOCATION = "LOCATION";
+
+ /**
+ * Organiser property name.
+ */
+ public static final String ORGANIZER = "ORGANIZER";
+
+ /**
+ * Percentage complete property name.
+ */
+ public static final String PERCENT_COMPLETE = "PERCENT-COMPLETE";
+
+ /**
+ * Prority property name.
+ */
+ public static final String PRIORITY = "PRIORITY";
+
+ /**
+ * Date-stamp property name.
+ */
+ public static final String DTSTAMP = "DTSTAMP";
+
+ /**
+ * Sequence property name.
+ */
+ public static final String SEQUENCE = "SEQUENCE";
+
+ /**
+ * Status property name.
+ */
+ public static final String STATUS = "STATUS";
+
+ /**
+ * Summary property name.
+ */
+ public static final String SUMMARY = "SUMMARY";
+
+ /**
+ * Transparency property name.
+ */
+ public static final String TRANSP = "TRANSP";
+
+ /**
+ * Unique identifier property name.
+ */
+ public static final String UID = "UID";
+
+ /**
+ * Uniform resource locator property name.
+ */
+ public static final String URL = "URL";
+
+ /**
+ * Recurrence identifier property name.
+ */
+ public static final String RECURRENCE_ID = "RECURRENCE-ID";
+
+ /**
+ * Completed date property name.
+ */
+ public static final String COMPLETED = "COMPLETED";
+
+ /**
+ * Due date property name.
+ */
+ public static final String DUE = "DUE";
+
+ /**
+ * Free/busy property name.
+ */
+ public static final String FREEBUSY = "FREEBUSY";
+
+ /**
+ * Timezone identifier property name.
+ */
+ public static final String TZID = "TZID";
+
+ /**
+ * Timezone name property name.
+ */
+ public static final String TZNAME = "TZNAME";
+
+ /**
+ * Prior timezone offset property name.
+ */
+ public static final String TZOFFSETFROM = "TZOFFSETFROM";
+
+ /**
+ * New timezone offset property name.
+ */
+ public static final String TZOFFSETTO = "TZOFFSETTO";
+
+ /**
+ * URL for timezone definition property name.
+ */
+ public static final String TZURL = "TZURL";
+
+ /**
+ * Alarm action property name.
+ */
+ public static final String ACTION = "ACTION";
+
+ /**
+ * Repeat rule property name.
+ */
+ public static final String REPEAT = "REPEAT";
+
+ /**
+ * Alarm trigger property name.
+ */
+ public static final String TRIGGER = "TRIGGER";
+
+ /**
+ * Request status property name.
+ */
+ public static final String REQUEST_STATUS = "REQUEST-STATUS";
+
+ /**
+ * End date property name.
+ */
+ public static final String DTEND = "DTEND";
+
+ /**
+ * Duration property name.
+ */
+ public static final String DURATION = "DURATION";
+
+ /**
+ * Attachment property name.
+ */
+ public static final String ATTACH = "ATTACH";
+
+ /**
+ * Attendee property name.
+ */
+ public static final String ATTENDEE = "ATTENDEE";
+
+ /**
+ * Categories property name.
+ */
+ public static final String CATEGORIES = "CATEGORIES";
+
+ /**
+ * Comment property name.
+ */
+ public static final String COMMENT = "COMMENT";
+
+ /**
+ * Contact property name.
+ */
+ public static final String CONTACT = "CONTACT";
+
+ /**
+ * Exclusion date property name.
+ */
+ public static final String EXDATE = "EXDATE";
+
+ /**
+ * Exclusion rule property name.
+ */
+ public static final String EXRULE = "EXRULE";
+
+ /**
+ * Relationship property name.
+ */
+ public static final String RELATED_TO = "RELATED-TO";
+
+ /**
+ * Resources property name.
+ */
+ public static final String RESOURCES = "RESOURCES";
+
+ /**
+ * Recurrence date property name.
+ */
+ public static final String RDATE = "RDATE";
+
+ /**
+ * Recurrence rule property name.
+ */
+ public static final String RRULE = "RRULE";
+
+ /**
+ * Prefix for non-standard properties.
+ */
+ public static final String EXPERIMENTAL_PREFIX = "X-";
+
+ /**
+ * VVENUE country property name.
+ */
+ public static final String COUNTRY = "COUNTRY";
+
+ /**
+ * VVENUE extended address property name.
+ */
+ public static final String EXTENDED_ADDRESS = "EXTENDED-ADDRESS";
+
+ /**
+ * VVENUE locality property name.
+ */
+ public static final String LOCALITY = "LOCALITY";
+
+ /**
+ * VVENUE location type property name.
+ */
+ public static final String LOCATION_TYPE = "LOCATION-TYPE";
+
+ /**
+ * VVENUE name property name.
+ */
+ public static final String NAME = "NAME";
+
+ /**
+ * VVENUE postal code property name.
+ */
+ public static final String POSTALCODE = "POSTAL-CODE";
+
+ /**
+ * VVENUE region property name.
+ */
+ public static final String REGION = "REGION";
+
+ /**
+ * VVENUE street address property name.
+ */
+ public static final String STREET_ADDRESS = "STREET-ADDRESS";
+
+ /**
+ * VVENUE telephone property name.
+ */
+ public static final String TEL = "TEL";
+
+ private String name;
+
+ private ParameterList parameters;
+
+ private final PropertyFactory factory;
+
+ /**
+ * Constructor.
+ * @param aName property name
+ * @param factory the factory used to create the property instance
+ */
+ protected Property(final String aName, PropertyFactory factory) {
+ this(aName, new ParameterList(), factory);
+ }
+
+ /**
+ * Constructor made protected to enforce the use of PropertyFactory
for property instantiation.
+ * @param aName property name
+ * @param aList a list of parameters
+ */
+// protected Property(final String aName, final ParameterList aList) {
+// this(aName, aList, PropertyFactoryImpl.getInstance());
+// }
+
+ /**
+ * @param aName a property identifier
+ * @param aList a list of initial parameters
+ * @param factory the factory used to create the property instance
+ */
+ protected Property(final String aName, final ParameterList aList, PropertyFactory factory) {
+ this.name = aName;
+ this.parameters = aList;
+ this.factory = factory;
+ }
+
+ /**
+ * Creates a deep copy of the specified property. That is, the name, parameter list, and value are duplicated from
+ * the specified property. This constructor should only be called from sub-classes to ensure type integrity is
+ * maintained.
+ * @param property a property to copy
+ * @throws URISyntaxException where the specified property contains an invalid URI value
+ * @throws ParseException where the specified property has invalid data
+ * @throws IOException where an error occurs reading data from the specified property
+ * @deprecated Use {@link #copy()} instead
+ */
+ protected Property(final Property property) throws IOException,
+ URISyntaxException, ParseException {
+ this(property.getName(), new ParameterList(property.getParameters(), false),
+ property.factory);
+ setValue(property.getValue());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer buffer = new StringBuffer();
+ buffer.append(getName());
+ if (getParameters() != null) {
+ buffer.append(getParameters());
+ }
+ buffer.append(':');
+ boolean needsEscape = false;
+ if (this instanceof XProperty) {
+ Value valParam = (Value)getParameter(Parameter.VALUE);
+ if (valParam == null || valParam.equals(Value.TEXT)) {
+ needsEscape = true;
+ }
+ } else if (this instanceof Escapable) {
+ needsEscape = true;
+ }
+ if (needsEscape) {
+ buffer.append(Strings.escape(Strings.valueOf(getValue())));
+ }
+ else {
+ buffer.append(Strings.valueOf(getValue()));
+ }
+ buffer.append(Strings.LINE_SEPARATOR);
+
+ return buffer.toString();
+ }
+
+ /**
+ * Indicates whether this property is a calendar property.
+ * @return boolean
+ */
+ public boolean isCalendarProperty() {
+
+ return PRODID.equalsIgnoreCase(getName())
+ || VERSION.equalsIgnoreCase(getName())
+ || CALSCALE.equalsIgnoreCase(getName())
+ || METHOD.equalsIgnoreCase(getName());
+ }
+
+ /**
+ * @return Returns the name.
+ */
+ public final String getName() {
+ return name;
+ }
+
+ /**
+ * @return Returns the parameters.
+ */
+ public final ParameterList getParameters() {
+ return parameters;
+ }
+
+ /**
+ * Convenience method for retrieving a list of named parameters.
+ * @param name name of parameters to retrieve
+ * @return a parameter list containing only parameters with the specified name
+ */
+ public final ParameterList getParameters(final String name) {
+ return getParameters().getParameters(name);
+ }
+
+ /**
+ * Convenience method for retrieving a single parameter.
+ * @param name name of the parameter to retrieve
+ * @return the first parameter from the parameter list with the specified name
+ */
+ public final Parameter getParameter(final String name) {
+ return getParameters().getParameter(name);
+ }
+
+ /**
+ * Sets the current value of the property.
+ * @param aValue a string representation of the property value
+ * @throws IOException possibly thrown by setting the value of certain properties
+ * @throws URISyntaxException possibly thrown by setting the value of certain properties
+ * @throws ParseException possibly thrown by setting the value of certain properties
+ */
+ public abstract void setValue(String aValue) throws IOException,
+ URISyntaxException, ParseException;
+
+ /**
+ * Perform validation on a property.
+ * @throws ValidationException where the property is not in a valid state
+ */
+ public abstract void validate() throws ValidationException;
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean equals(final Object arg0) {
+ if (arg0 instanceof Property) {
+ final Property p = (Property) arg0;
+ if (getName().equals(p.getName())) {
+ return new EqualsBuilder().append(getValue(), p.getValue())
+ .append(getParameters(), p.getParameters()).isEquals();
+ } else {
+ return false;
+ }
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ // as property name is case-insensitive generate hash for uppercase..
+ return new HashCodeBuilder().append(getName().toUpperCase()).append(
+ getValue()).append(getParameters()).toHashCode();
+ }
+
+ /**
+ * Create a (deep) copy of this property.
+ * @return the copy of the property
+ * @throws IOException where an error occurs reading property data
+ * @throws URISyntaxException where the property contains an invalid URI value
+ * @throws ParseException where the property contains an invalid date value
+ */
+ public Property copy() throws IOException, URISyntaxException, ParseException {
+ if (factory == null) {
+ throw new UnsupportedOperationException("No factory specified");
+ }
+ // Deep copy parameter list..
+ final ParameterList params = new ParameterList(getParameters(), false);
+ return factory.createProperty(getName(), params, getValue());
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/PropertyFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/PropertyFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+
+/**
+ * A factory for creating iCalendar properties.
+ *
+ * @author Ben Fortuna
+ *
+ * Note that implementations must be {@link Serializable} to support referencing
+ * from {@link Property} instances.
+ *
+ * $Id$
+ *
+ * Created on 16/06/2005
+ */
+public interface PropertyFactory extends Serializable {
+
+ /**
+ * @param name a property name
+ * @return a new instance of the specified property
+ */
+ Property createProperty(String name);
+
+ /**
+ * @param name a property name
+ * @param parameters a list of property parameters
+ * @param value a property value
+ * @return a new instance of the specified property
+ * @throws IOException where an unexpected error occurs reading data
+ * @throws URISyntaxException where data contains an invalid URI
+ * @throws ParseException where data is unable to be parsed correctly
+ */
+ Property createProperty(String name, ParameterList parameters, String value) throws IOException,
+ URISyntaxException, ParseException;
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/PropertyFactoryImpl.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/PropertyFactoryImpl.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,1017 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.property.Action;
+import net.fortuna.ical4j.model.property.Attach;
+import net.fortuna.ical4j.model.property.Attendee;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Categories;
+import net.fortuna.ical4j.model.property.Clazz;
+import net.fortuna.ical4j.model.property.Comment;
+import net.fortuna.ical4j.model.property.Completed;
+import net.fortuna.ical4j.model.property.Contact;
+import net.fortuna.ical4j.model.property.Country;
+import net.fortuna.ical4j.model.property.Created;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.DtEnd;
+import net.fortuna.ical4j.model.property.DtStamp;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.Due;
+import net.fortuna.ical4j.model.property.Duration;
+import net.fortuna.ical4j.model.property.ExDate;
+import net.fortuna.ical4j.model.property.ExRule;
+import net.fortuna.ical4j.model.property.ExtendedAddress;
+import net.fortuna.ical4j.model.property.FreeBusy;
+import net.fortuna.ical4j.model.property.Geo;
+import net.fortuna.ical4j.model.property.LastModified;
+import net.fortuna.ical4j.model.property.Locality;
+import net.fortuna.ical4j.model.property.Location;
+import net.fortuna.ical4j.model.property.LocationType;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Name;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.PercentComplete;
+import net.fortuna.ical4j.model.property.Postalcode;
+import net.fortuna.ical4j.model.property.Priority;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.RDate;
+import net.fortuna.ical4j.model.property.RRule;
+import net.fortuna.ical4j.model.property.RecurrenceId;
+import net.fortuna.ical4j.model.property.Region;
+import net.fortuna.ical4j.model.property.RelatedTo;
+import net.fortuna.ical4j.model.property.Repeat;
+import net.fortuna.ical4j.model.property.RequestStatus;
+import net.fortuna.ical4j.model.property.Resources;
+import net.fortuna.ical4j.model.property.Sequence;
+import net.fortuna.ical4j.model.property.Status;
+import net.fortuna.ical4j.model.property.StreetAddress;
+import net.fortuna.ical4j.model.property.Summary;
+import net.fortuna.ical4j.model.property.Tel;
+import net.fortuna.ical4j.model.property.Transp;
+import net.fortuna.ical4j.model.property.Trigger;
+import net.fortuna.ical4j.model.property.TzId;
+import net.fortuna.ical4j.model.property.TzName;
+import net.fortuna.ical4j.model.property.TzOffsetFrom;
+import net.fortuna.ical4j.model.property.TzOffsetTo;
+import net.fortuna.ical4j.model.property.TzUrl;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Url;
+import net.fortuna.ical4j.model.property.Version;
+import net.fortuna.ical4j.model.property.XProperty;
+
+/**
+ * A factory for creating iCalendar properties. Note that if relaxed parsing is enabled (via specifying the system
+ * property: icalj.parsing.relaxed=true) illegal property names are allowed.
+ *
+ * @author Ben Fortuna
+ *
+ * $Id$ [05-Apr-2004]
+ */
+public class PropertyFactoryImpl extends AbstractContentFactory implements PropertyFactory {
+
+ private static final long serialVersionUID = -7174232004486979641L;
+
+ private static PropertyFactoryImpl instance = new PropertyFactoryImpl();
+
+ /**
+ * Constructor made private to prevent instantiation.
+ */
+ protected PropertyFactoryImpl() {
+ registerDefaultFactory(Property.ACTION, new ActionFactory());
+ registerDefaultFactory(Property.ATTACH, new AttachFactory());
+ registerDefaultFactory(Property.ATTENDEE, new AttendeeFactory());
+ registerDefaultFactory(Property.CALSCALE, new CalScaleFactory());
+ registerDefaultFactory(Property.CATEGORIES, new CategoriesFactory());
+ registerDefaultFactory(Property.CLASS, new ClazzFactory());
+ registerDefaultFactory(Property.COMMENT, new CommentFactory());
+ registerDefaultFactory(Property.COMPLETED, new CompletedFactory());
+ registerDefaultFactory(Property.CONTACT, new ContactFactory());
+ registerDefaultFactory(Property.COUNTRY, new CountryFactory());
+ registerDefaultFactory(Property.CREATED, new CreatedFactory());
+ registerDefaultFactory(Property.DESCRIPTION, new DescriptionFactory());
+ registerDefaultFactory(Property.DTEND, new DtEndFactory());
+ registerDefaultFactory(Property.DTSTAMP, new DtStampFactory());
+ registerDefaultFactory(Property.DTSTART, new DtStartFactory());
+ registerDefaultFactory(Property.DUE, new DueFactory());
+ registerDefaultFactory(Property.DURATION, new DurationFactory());
+ registerDefaultFactory(Property.EXDATE, new ExDateFactory());
+ registerDefaultFactory(Property.EXRULE, new ExRuleFactory());
+ registerDefaultFactory(Property.EXTENDED_ADDRESS, new ExtendedAddressFactory());
+ registerDefaultFactory(Property.FREEBUSY, new FreeBusyFactory());
+ registerDefaultFactory(Property.GEO, new GeoFactory());
+ registerDefaultFactory(Property.LAST_MODIFIED, new LastModifiedFactory());
+ registerDefaultFactory(Property.LOCALITY, new LocalityFactory());
+ registerDefaultFactory(Property.LOCATION, new LocationFactory());
+ registerDefaultFactory(Property.LOCATION_TYPE, new LocationTypeFactory());
+ registerDefaultFactory(Property.METHOD, new MethodFactory());
+ registerDefaultFactory(Property.NAME, new NameFactory());
+ registerDefaultFactory(Property.ORGANIZER, new OrganizerFactory());
+ registerDefaultFactory(Property.PERCENT_COMPLETE, new PercentCompleteFactory());
+ registerDefaultFactory(Property.POSTALCODE, new PostalcodeFactory());
+ registerDefaultFactory(Property.PRIORITY, new PriorityFactory());
+ registerDefaultFactory(Property.PRODID, new ProdIdFactory());
+ registerDefaultFactory(Property.RDATE, new RDateFactory());
+ registerDefaultFactory(Property.RECURRENCE_ID, new RecurrenceIdFactory());
+ registerDefaultFactory(Property.REGION, new RegionFactory());
+ registerDefaultFactory(Property.RELATED_TO, new RelatedToFactory());
+ registerDefaultFactory(Property.REPEAT, new RepeatFactory());
+ registerDefaultFactory(Property.REQUEST_STATUS, new RequestStatusFactory());
+ registerDefaultFactory(Property.RESOURCES, new ResourcesFactory());
+ registerDefaultFactory(Property.RRULE, new RRuleFactory());
+ registerDefaultFactory(Property.SEQUENCE, new SequenceFactory());
+ registerDefaultFactory(Property.STATUS, new StatusFactory());
+ registerDefaultFactory(Property.STREET_ADDRESS, new StreetAddressFactory());
+ registerDefaultFactory(Property.SUMMARY, new SummaryFactory());
+ registerDefaultFactory(Property.TEL, new TelFactory());
+ registerDefaultFactory(Property.TRANSP, new TranspFactory());
+ registerDefaultFactory(Property.TRIGGER, new TriggerFactory());
+ registerDefaultFactory(Property.TZID, new TzIdFactory());
+ registerDefaultFactory(Property.TZNAME, new TzNameFactory());
+ registerDefaultFactory(Property.TZOFFSETFROM, new TzOffsetFromFactory());
+ registerDefaultFactory(Property.TZOFFSETTO, new TzOffsetToFactory());
+ registerDefaultFactory(Property.TZURL, new TzUrlFactory());
+ registerDefaultFactory(Property.UID, new UidFactory());
+ registerDefaultFactory(Property.URL, new UrlFactory());
+ registerDefaultFactory(Property.VERSION, new VersionFactory());
+ }
+
+ private static class ActionFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Action(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Action();
+ }
+ }
+
+ private static class AttachFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Attach(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Attach();
+ }
+ }
+
+ private static class AttendeeFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Attendee(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Attendee();
+ }
+ }
+
+ private static class CalScaleFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new CalScale(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new CalScale();
+ }
+ }
+
+ private static class CategoriesFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Categories(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Categories();
+ }
+ }
+
+ private static class ClazzFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Clazz(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Clazz();
+ }
+ }
+
+ private static class CommentFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Comment(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Comment();
+ }
+ }
+
+ private static class CompletedFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Completed(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Completed();
+ }
+ }
+
+ private static class ContactFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Contact(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Contact();
+ }
+ }
+
+ private static class CountryFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Country(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Country();
+ }
+ }
+
+ private static class CreatedFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Created(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Created();
+ }
+ }
+
+ private static class DescriptionFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Description(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Description();
+ }
+ }
+
+ private static class DtEndFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new DtEnd(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new DtEnd();
+ }
+ }
+
+ private static class DtStampFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new DtStamp(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new DtStamp();
+ }
+ }
+
+ /**
+ * @return
+ */
+ private static class DtStartFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new DtStart(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new DtStart();
+ }
+ }
+
+ private static class DueFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Due(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Due();
+ }
+ }
+
+ private static class DurationFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Duration(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Duration();
+ }
+ }
+
+ private static class ExDateFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new ExDate(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new ExDate();
+ }
+ }
+
+ private static class ExRuleFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new ExRule(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new ExRule();
+ }
+ }
+
+ private static class ExtendedAddressFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new ExtendedAddress(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new ExtendedAddress();
+ }
+ }
+
+ private static class FreeBusyFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new FreeBusy(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new FreeBusy();
+ }
+ }
+
+ private static class GeoFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Geo(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Geo();
+ }
+ }
+
+ private static class LastModifiedFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new LastModified(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new LastModified();
+ }
+ }
+
+ private static class LocalityFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Locality(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Locality();
+ }
+ }
+
+ private static class LocationFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Location(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Location();
+ }
+ }
+
+ private static class LocationTypeFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new LocationType(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new LocationType();
+ }
+ }
+
+ private static class MethodFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Method(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Method();
+ }
+ }
+
+ private static class NameFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Name(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Name();
+ }
+ }
+
+ private static class OrganizerFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Organizer(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Organizer();
+ }
+ }
+
+ private static class PercentCompleteFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new PercentComplete(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new PercentComplete();
+ }
+ }
+
+ private static class PostalcodeFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Postalcode(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Postalcode();
+ }
+ }
+
+ private static class PriorityFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Priority(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Priority();
+ }
+ }
+
+ private static class ProdIdFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new ProdId(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new ProdId();
+ }
+ }
+
+ private static class RDateFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new RDate(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new RDate();
+ }
+ }
+
+ private static class RecurrenceIdFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new RecurrenceId(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new RecurrenceId();
+ }
+ }
+
+ private static class RegionFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Region(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Region();
+ }
+ }
+
+ private static class RelatedToFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new RelatedTo(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new RelatedTo();
+ }
+ }
+
+ private static class RepeatFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Repeat(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Repeat();
+ }
+ }
+
+ private static class RequestStatusFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new RequestStatus(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new RequestStatus();
+ }
+ }
+
+ private static class ResourcesFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Resources(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Resources();
+ }
+ }
+
+ private static class RRuleFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new RRule(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new RRule();
+ }
+ }
+
+ private static class SequenceFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Sequence(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Sequence();
+ }
+ }
+
+ private static class StatusFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Status(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Status();
+ }
+ }
+
+ private static class StreetAddressFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new StreetAddress(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new StreetAddress();
+ }
+ }
+
+ private static class SummaryFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Summary(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Summary();
+ }
+ }
+
+ private static class TelFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Tel(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Tel();
+ }
+ }
+
+ private static class TranspFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Transp(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Transp();
+ }
+ }
+
+ private static class TriggerFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Trigger(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Trigger();
+ }
+ }
+
+ private static class TzIdFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new TzId(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new TzId();
+ }
+ }
+
+ private static class TzNameFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new TzName(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new TzName();
+ }
+ }
+
+ private static class TzOffsetFromFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new TzOffsetFrom(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new TzOffsetFrom();
+ }
+ }
+
+ private static class TzOffsetToFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new TzOffsetTo(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new TzOffsetTo();
+ }
+ }
+
+ private static class TzUrlFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new TzUrl(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new TzUrl();
+ }
+ }
+
+ private static class UidFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Uid(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Uid();
+ }
+ }
+
+ private static class UrlFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Url(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Url();
+ }
+ }
+
+ private static class VersionFactory implements PropertyFactory {
+ private static final long serialVersionUID = 1L;
+
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+ return new Version(parameters, value);
+ }
+
+ public Property createProperty(final String name) {
+ return new Version();
+ }
+ }
+
+ /**
+ * @return Returns the instance.
+ */
+ public static PropertyFactoryImpl getInstance() {
+ return instance;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Property createProperty(final String name) {
+ final PropertyFactory factory = (PropertyFactory) getFactory(name);
+ if (factory != null) {
+ return factory.createProperty(name);
+ }
+ else if (isExperimentalName(name)) {
+ return new XProperty(name);
+ }
+ else if (allowIllegalNames()) {
+ return new XProperty(name);
+ }
+ else {
+ throw new IllegalArgumentException("Illegal property [" + name
+ + "]");
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Property createProperty(final String name,
+ final ParameterList parameters, final String value)
+ throws IOException, URISyntaxException, ParseException {
+
+ final PropertyFactory factory = (PropertyFactory) getFactory(name);
+ if (factory != null) {
+ return factory.createProperty(name, parameters, value);
+ }
+ else if (isExperimentalName(name)) {
+ return new XProperty(name, parameters, value);
+ }
+ else if (allowIllegalNames()) {
+ return new XProperty(name, parameters, value);
+ }
+ else {
+ throw new IllegalArgumentException("Illegal property [" + name
+ + "]");
+ }
+ }
+
+ /**
+ * @param name
+ * @return
+ */
+ private boolean isExperimentalName(final String name) {
+ return name.startsWith(Property.EXPERIMENTAL_PREFIX)
+ && name.length() > Property.EXPERIMENTAL_PREFIX.length();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/PropertyFactoryRegistry.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/PropertyFactoryRegistry.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+/**
+ * @author fortuna
+ *
+ */
+public final class PropertyFactoryRegistry extends PropertyFactoryImpl {
+
+ private static final long serialVersionUID = 3924903719847189199L;
+
+ /**
+ * @param name a non-standard property name
+ * @param factory a factory for the non-standard property
+ */
+ public void register(String name, PropertyFactory factory) {
+ registerExtendedFactory(name, factory);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/PropertyList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/PropertyList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,156 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines a list of iCalendar properties.
+ * @author Ben Fortuna
+ */
+public class PropertyList extends ArrayList implements Serializable {
+
+ private static final long serialVersionUID = -8875923766224921031L;
+
+ /**
+ * Default constructor.
+ */
+ public PropertyList() {
+ }
+
+ /**
+ * Creates a new instance with the specified initial capacity.
+ * @param initialCapacity the initial capacity of the list
+ */
+ public PropertyList(final int initialCapacity) {
+ super(initialCapacity);
+ }
+
+ /**
+ * Creates a deep copy of the specified property list.
+ * @param properties a property list
+ * @throws ParseException where property data cannot be parsed
+ * @throws IOException where property data cannot be read
+ * @throws URISyntaxException where a property contains an invalid URI
+ */
+ public PropertyList(PropertyList properties) throws ParseException, IOException, URISyntaxException {
+ super();
+ for (final Iterator i = properties.iterator(); i.hasNext();) {
+ final Property p = (Property) i.next();
+ add(p.copy());
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer buffer = new StringBuffer();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ buffer.append(i.next().toString());
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Returns the first property of specified name.
+ * @param aName name of property to return
+ * @return a property or null if no matching property found
+ */
+ public final Property getProperty(final String aName) {
+ for (final Iterator i = iterator(); i.hasNext();) {
+ final Property p = (Property) i.next();
+ if (p.getName().equalsIgnoreCase(aName)) {
+ return p;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns a list of properties with the specified name.
+ * @param name name of properties to return
+ * @return a property list
+ */
+ public final PropertyList getProperties(final String name) {
+ final PropertyList list = new PropertyList();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ final Property p = (Property) i.next();
+ if (p.getName().equalsIgnoreCase(name)) {
+ list.add(p);
+ }
+ }
+ return list;
+ }
+
+ /**
+ * Add a property to the list.
+ * @param property the property to add
+ * @return true
+ * @see java.util.List#add(java.lang.Object)
+ */
+ public final boolean add(final Property property) {
+ return add((Object) property);
+ }
+
+ /**
+ * Overrides superclass to throw an IllegalArgumentException
where argument is not a
+ * net.fortuna.ical4j.model.Property
.
+ * @param property a property to add
+ * @return true if the property is added, otherwise false
+ * @see java.util.List#add(E)
+ */
+ public final boolean add(final Object property) {
+ if (!(property instanceof Property)) {
+ throw new IllegalArgumentException("Argument not a "
+ + Property.class.getName());
+ }
+ return super.add(property);
+ }
+
+ /**
+ * Remove a property from the list.
+ * @param property the property to remove
+ * @return true if the list contained the specified property
+ * @see java.util.List#remove(java.lang.Object)
+ */
+ public final boolean remove(final Property property) {
+ return remove((Object) property);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Recur.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Recur.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,1246 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.text.ParseException;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.util.Configurator;
+import net.fortuna.ical4j.util.Dates;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a recurrence.
+ * @version 2.0
+ * @author Ben Fortuna
+ */
+public class Recur implements Serializable {
+
+ private static final long serialVersionUID = -7333226591784095142L;
+
+ private static final String FREQ = "FREQ";
+
+ private static final String UNTIL = "UNTIL";
+
+ private static final String COUNT = "COUNT";
+
+ private static final String INTERVAL = "INTERVAL";
+
+ private static final String BYSECOND = "BYSECOND";
+
+ private static final String BYMINUTE = "BYMINUTE";
+
+ private static final String BYHOUR = "BYHOUR";
+
+ private static final String BYDAY = "BYDAY";
+
+ private static final String BYMONTHDAY = "BYMONTHDAY";
+
+ private static final String BYYEARDAY = "BYYEARDAY";
+
+ private static final String BYWEEKNO = "BYWEEKNO";
+
+ private static final String BYMONTH = "BYMONTH";
+
+ private static final String BYSETPOS = "BYSETPOS";
+
+ private static final String WKST = "WKST";
+
+ /**
+ * Second frequency resolution.
+ */
+ public static final String SECONDLY = "SECONDLY";
+
+ /**
+ * Minute frequency resolution.
+ */
+ public static final String MINUTELY = "MINUTELY";
+
+ /**
+ * Hour frequency resolution.
+ */
+ public static final String HOURLY = "HOURLY";
+
+ /**
+ * Day frequency resolution.
+ */
+ public static final String DAILY = "DAILY";
+
+ /**
+ * Week frequency resolution.
+ */
+ public static final String WEEKLY = "WEEKLY";
+
+ /**
+ * Month frequency resolution.
+ */
+ public static final String MONTHLY = "MONTHLY";
+
+ /**
+ * Year frequency resolution.
+ */
+ public static final String YEARLY = "YEARLY";
+
+ /**
+ * When calculating dates matching this recur ({@code getDates()} or {@code getNextDate}),
+ * this property defines the maximum number of attempt to find a matching date by
+ * incrementing the seed.
+ * The default value is 1000. A value of -1 corresponds to no maximum.
+ */
+ public static final String KEY_MAX_INCREMENT_COUNT = "net.fortuna.ical4j.recur.maxincrementcount";
+
+ private static int maxIncrementCount;
+ static {
+ final String value = Configurator.getProperty(KEY_MAX_INCREMENT_COUNT);
+ if (value != null && value.length() > 0) {
+ maxIncrementCount = Integer.parseInt(value);
+ } else {
+ maxIncrementCount = 1000;
+ }
+ }
+
+ private transient Log log = LogFactory.getLog(Recur.class);
+
+ private String frequency;
+
+ private Date until;
+
+ private int count = -1;
+
+ private int interval = -1;
+
+ private NumberList secondList;
+
+ private NumberList minuteList;
+
+ private NumberList hourList;
+
+ private WeekDayList dayList;
+
+ private NumberList monthDayList;
+
+ private NumberList yearDayList;
+
+ private NumberList weekNoList;
+
+ private NumberList monthList;
+
+ private NumberList setPosList;
+
+ private String weekStartDay;
+
+ private Map experimentalValues = new HashMap();
+
+ // Calendar field we increment based on frequency.
+ private int calIncField;
+
+ /**
+ * Default constructor.
+ */
+ public Recur() {
+ }
+
+ /**
+ * Constructs a new instance from the specified string value.
+ * @param aValue a string representation of a recurrence.
+ * @throws ParseException thrown when the specified string contains an invalid representation of an UNTIL date value
+ */
+ public Recur(final String aValue) throws ParseException {
+ final StringTokenizer t = new StringTokenizer(aValue, ";=");
+ while (t.hasMoreTokens()) {
+ final String token = t.nextToken();
+ if (FREQ.equals(token)) {
+ frequency = nextToken(t, token);
+ }
+ else if (UNTIL.equals(token)) {
+ final String untilString = nextToken(t, token);
+ if (untilString != null && untilString.indexOf("T") >= 0) {
+ until = new DateTime(untilString);
+ // UNTIL must be specified in UTC time..
+ ((DateTime) until).setUtc(true);
+ }
+ else {
+ until = new Date(untilString);
+ }
+ }
+ else if (COUNT.equals(token)) {
+ count = Integer.parseInt(nextToken(t, token));
+ }
+ else if (INTERVAL.equals(token)) {
+ interval = Integer.parseInt(nextToken(t, token));
+ }
+ else if (BYSECOND.equals(token)) {
+ secondList = new NumberList(nextToken(t, token), 0, 59, false);
+ }
+ else if (BYMINUTE.equals(token)) {
+ minuteList = new NumberList(nextToken(t, token), 0, 59, false);
+ }
+ else if (BYHOUR.equals(token)) {
+ hourList = new NumberList(nextToken(t, token), 0, 23, false);
+ }
+ else if (BYDAY.equals(token)) {
+ dayList = new WeekDayList(nextToken(t, token));
+ }
+ else if (BYMONTHDAY.equals(token)) {
+ monthDayList = new NumberList(nextToken(t, token), 1, 31, true);
+ }
+ else if (BYYEARDAY.equals(token)) {
+ yearDayList = new NumberList(nextToken(t, token), 1, 366, true);
+ }
+ else if (BYWEEKNO.equals(token)) {
+ weekNoList = new NumberList(nextToken(t, token), 1, 53, true);
+ }
+ else if (BYMONTH.equals(token)) {
+ monthList = new NumberList(nextToken(t, token), 1, 12, false);
+ }
+ else if (BYSETPOS.equals(token)) {
+ setPosList = new NumberList(nextToken(t, token), 1, 366, true);
+ }
+ else if (WKST.equals(token)) {
+ weekStartDay = nextToken(t, token);
+ }
+ // assume experimental value..
+ else {
+ experimentalValues.put(token, nextToken(t, token));
+ }
+ }
+ validateFrequency();
+ }
+
+ private String nextToken(StringTokenizer t, String lastToken) {
+ try {
+ return t.nextToken();
+ }
+ catch (NoSuchElementException e) {
+ throw new IllegalArgumentException("Missing expected token, last token: " + lastToken);
+ }
+ }
+
+ /**
+ * @param frequency a recurrence frequency string
+ * @param until maximum recurrence date
+ */
+ public Recur(final String frequency, final Date until) {
+ this.frequency = frequency;
+ this.until = until;
+ validateFrequency();
+ }
+
+ /**
+ * @param frequency a recurrence frequency string
+ * @param count maximum recurrence count
+ */
+ public Recur(final String frequency, final int count) {
+ this.frequency = frequency;
+ this.count = count;
+ validateFrequency();
+ }
+
+ /**
+ * @return Returns the dayList.
+ */
+ public final WeekDayList getDayList() {
+ if (dayList == null) {
+ dayList = new WeekDayList();
+ }
+ return dayList;
+ }
+
+ /**
+ * @return Returns the hourList.
+ */
+ public final NumberList getHourList() {
+ if (hourList == null) {
+ hourList = new NumberList(0, 23, false);
+ }
+ return hourList;
+ }
+
+ /**
+ * @return Returns the minuteList.
+ */
+ public final NumberList getMinuteList() {
+ if (minuteList == null) {
+ minuteList = new NumberList(0, 59, false);
+ }
+ return minuteList;
+ }
+
+ /**
+ * @return Returns the monthDayList.
+ */
+ public final NumberList getMonthDayList() {
+ if (monthDayList == null) {
+ monthDayList = new NumberList(1, 31, true);
+ }
+ return monthDayList;
+ }
+
+ /**
+ * @return Returns the monthList.
+ */
+ public final NumberList getMonthList() {
+ if (monthList == null) {
+ monthList = new NumberList(1, 12, false);
+ }
+ return monthList;
+ }
+
+ /**
+ * @return Returns the secondList.
+ */
+ public final NumberList getSecondList() {
+ if (secondList == null) {
+ secondList = new NumberList(0, 59, false);
+ }
+ return secondList;
+ }
+
+ /**
+ * @return Returns the setPosList.
+ */
+ public final NumberList getSetPosList() {
+ if (setPosList == null) {
+ setPosList = new NumberList(1, 366, true);
+ }
+ return setPosList;
+ }
+
+ /**
+ * @return Returns the weekNoList.
+ */
+ public final NumberList getWeekNoList() {
+ if (weekNoList == null) {
+ weekNoList = new NumberList(1, 53, true);
+ }
+ return weekNoList;
+ }
+
+ /**
+ * @return Returns the yearDayList.
+ */
+ public final NumberList getYearDayList() {
+ if (yearDayList == null) {
+ yearDayList = new NumberList(1, 366, true);
+ }
+ return yearDayList;
+ }
+
+ /**
+ * @return Returns the count or -1 if the rule does not have a count.
+ */
+ public final int getCount() {
+ return count;
+ }
+
+ /**
+ * @return Returns the experimentalValues.
+ */
+ public final Map getExperimentalValues() {
+ return experimentalValues;
+ }
+
+ /**
+ * @return Returns the frequency.
+ */
+ public final String getFrequency() {
+ return frequency;
+ }
+
+ /**
+ * @return Returns the interval or -1 if the rule does not have an interval defined.
+ */
+ public final int getInterval() {
+ return interval;
+ }
+
+ /**
+ * @return Returns the until or null if there is none.
+ */
+ public final Date getUntil() {
+ return until;
+ }
+
+ /**
+ * @return Returns the weekStartDay or null if there is none.
+ */
+ public final String getWeekStartDay() {
+ return weekStartDay;
+ }
+
+ /**
+ * @param weekStartDay The weekStartDay to set.
+ */
+ public final void setWeekStartDay(final String weekStartDay) {
+ this.weekStartDay = weekStartDay;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ b.append(FREQ);
+ b.append('=');
+ b.append(frequency);
+ if (weekStartDay != null) {
+ b.append(';');
+ b.append(WKST);
+ b.append('=');
+ b.append(weekStartDay);
+ }
+ if (until != null) {
+ b.append(';');
+ b.append(UNTIL);
+ b.append('=');
+ // Note: date-time representations should always be in UTC time.
+ b.append(until);
+ }
+ if (count >= 1) {
+ b.append(';');
+ b.append(COUNT);
+ b.append('=');
+ b.append(count);
+ }
+ if (interval >= 1) {
+ b.append(';');
+ b.append(INTERVAL);
+ b.append('=');
+ b.append(interval);
+ }
+ if (!getMonthList().isEmpty()) {
+ b.append(';');
+ b.append(BYMONTH);
+ b.append('=');
+ b.append(monthList);
+ }
+ if (!getWeekNoList().isEmpty()) {
+ b.append(';');
+ b.append(BYWEEKNO);
+ b.append('=');
+ b.append(weekNoList);
+ }
+ if (!getYearDayList().isEmpty()) {
+ b.append(';');
+ b.append(BYYEARDAY);
+ b.append('=');
+ b.append(yearDayList);
+ }
+ if (!getMonthDayList().isEmpty()) {
+ b.append(';');
+ b.append(BYMONTHDAY);
+ b.append('=');
+ b.append(monthDayList);
+ }
+ if (!getDayList().isEmpty()) {
+ b.append(';');
+ b.append(BYDAY);
+ b.append('=');
+ b.append(dayList);
+ }
+ if (!getHourList().isEmpty()) {
+ b.append(';');
+ b.append(BYHOUR);
+ b.append('=');
+ b.append(hourList);
+ }
+ if (!getMinuteList().isEmpty()) {
+ b.append(';');
+ b.append(BYMINUTE);
+ b.append('=');
+ b.append(minuteList);
+ }
+ if (!getSecondList().isEmpty()) {
+ b.append(';');
+ b.append(BYSECOND);
+ b.append('=');
+ b.append(secondList);
+ }
+ if (!getSetPosList().isEmpty()) {
+ b.append(';');
+ b.append(BYSETPOS);
+ b.append('=');
+ b.append(setPosList);
+ }
+ return b.toString();
+ }
+
+ /**
+ * Returns a list of start dates in the specified period represented by this recur. Any date fields not specified by
+ * this recur are retained from the period start, and as such you should ensure the period start is initialised
+ * correctly.
+ * @param periodStart the start of the period
+ * @param periodEnd the end of the period
+ * @param value the type of dates to generate (i.e. date/date-time)
+ * @return a list of dates
+ */
+ public final DateList getDates(final Date periodStart,
+ final Date periodEnd, final Value value) {
+ return getDates(periodStart, periodStart, periodEnd, value, -1);
+ }
+
+ /**
+ * Convenience method for retrieving recurrences in a specified period.
+ * @param seed a seed date for generating recurrence instances
+ * @param period the period of returned recurrence dates
+ * @param value type of dates to generate
+ * @return a list of dates
+ */
+ public final DateList getDates(final Date seed, final Period period,
+ final Value value) {
+ return getDates(seed, period.getStart(), period.getEnd(), value, -1);
+ }
+
+ /**
+ * Returns a list of start dates in the specified period represented by this recur. This method includes a base date
+ * argument, which indicates the start of the fist occurrence of this recurrence. The base date is used to inject
+ * default values to return a set of dates in the correct format. For example, if the search start date (start) is
+ * Wed, Mar 23, 12:19PM, but the recurrence is Mon - Fri, 9:00AM - 5:00PM, the start dates returned should all be at
+ * 9:00AM, and not 12:19PM.
+ * @return a list of dates represented by this recur instance
+ * @param seed the start date of this Recurrence's first instance
+ * @param periodStart the start of the period
+ * @param periodEnd the end of the period
+ * @param value the type of dates to generate (i.e. date/date-time)
+ */
+ public final DateList getDates(final Date seed, final Date periodStart,
+ final Date periodEnd, final Value value) {
+ return getDates(seed, periodStart, periodEnd, value, -1);
+ }
+
+ /**
+ * Returns a list of start dates in the specified period represented by this recur. This method includes a base date
+ * argument, which indicates the start of the fist occurrence of this recurrence. The base date is used to inject
+ * default values to return a set of dates in the correct format. For example, if the search start date (start) is
+ * Wed, Mar 23, 12:19PM, but the recurrence is Mon - Fri, 9:00AM - 5:00PM, the start dates returned should all be at
+ * 9:00AM, and not 12:19PM.
+ * @return a list of dates represented by this recur instance
+ * @param seed the start date of this Recurrence's first instance
+ * @param periodStart the start of the period
+ * @param periodEnd the end of the period
+ * @param value the type of dates to generate (i.e. date/date-time)
+ * @param maxCount limits the number of instances returned. Up to one years
+ * worth extra may be returned. Less than 0 means no limit
+ */
+ public final DateList getDates(final Date seed, final Date periodStart,
+ final Date periodEnd, final Value value,
+ final int maxCount) {
+
+ final DateList dates = new DateList(value);
+ if (seed instanceof DateTime) {
+ if (((DateTime) seed).isUtc()) {
+ dates.setUtc(true);
+ }
+ else {
+ dates.setTimeZone(((DateTime) seed).getTimeZone());
+ }
+ }
+ final Calendar cal = Dates.getCalendarInstance(seed);
+ cal.setTime(seed);
+
+ // optimize the start time for selecting candidates
+ // (only applicable where a COUNT is not specified)
+ if (getCount() < 1) {
+ final Calendar seededCal = (Calendar) cal.clone();
+ while (seededCal.getTime().before(periodStart)) {
+ cal.setTime(seededCal.getTime());
+ increment(seededCal);
+ }
+ }
+
+ int invalidCandidateCount = 0;
+ int noCandidateIncrementCount = 0;
+ Date candidate = null;
+ while ((maxCount < 0) || (dates.size() < maxCount)) {
+ final Date candidateSeed = Dates.getInstance(cal.getTime(), value);
+
+ if (getUntil() != null && candidate != null
+ && candidate.after(getUntil())) {
+
+ break;
+ }
+ if (periodEnd != null && candidate != null
+ && candidate.after(periodEnd)) {
+
+ break;
+ }
+ if (getCount() >= 1
+ && (dates.size() + invalidCandidateCount) >= getCount()) {
+
+ break;
+ }
+
+// if (Value.DATE_TIME.equals(value)) {
+ if (candidateSeed instanceof DateTime) {
+ if (dates.isUtc()) {
+ ((DateTime) candidateSeed).setUtc(true);
+ }
+ else {
+ ((DateTime) candidateSeed).setTimeZone(dates.getTimeZone());
+ }
+ }
+
+ final DateList candidates = getCandidates(candidateSeed, value);
+ if (!candidates.isEmpty()) {
+ noCandidateIncrementCount = 0;
+ // sort candidates for identifying when UNTIL date is exceeded..
+ Collections.sort(candidates);
+ for (final Iterator i = candidates.iterator(); i.hasNext();) {
+ candidate = (Date) i.next();
+ // don't count candidates that occur before the seed date..
+ if (!candidate.before(seed)) {
+ // candidates exclusive of periodEnd..
+ if (candidate.before(periodStart)
+ || !candidate.before(periodEnd)) {
+ invalidCandidateCount++;
+ } else if (getCount() >= 1
+ && (dates.size() + invalidCandidateCount) >= getCount()) {
+ break;
+ } else if (!(getUntil() != null
+ && candidate.after(getUntil()))) {
+ dates.add(candidate);
+ }
+ }
+ }
+ } else {
+ noCandidateIncrementCount++;
+ if ((maxIncrementCount > 0) && (noCandidateIncrementCount > maxIncrementCount)) {
+ break;
+ }
+ }
+ increment(cal);
+ }
+ // sort final list..
+ Collections.sort(dates);
+ return dates;
+ }
+
+ /**
+ * Returns the the next date of this recurrence given a seed date
+ * and start date. The seed date indicates the start of the fist
+ * occurrence of this recurrence. The start date is the
+ * starting date to search for the next recurrence. Return null
+ * if there is no occurrence date after start date.
+ * @return the next date in the recurrence series after startDate
+ * @param seed the start date of this Recurrence's first instance
+ * @param startDate the date to start the search
+ */
+ public final Date getNextDate(final Date seed, final Date startDate) {
+
+ final Calendar cal = Dates.getCalendarInstance(seed);
+ cal.setTime(seed);
+
+ // optimize the start time for selecting candidates
+ // (only applicable where a COUNT is not specified)
+ if (getCount() < 1) {
+ final Calendar seededCal = (Calendar) cal.clone();
+ while (seededCal.getTime().before(startDate)) {
+ cal.setTime(seededCal.getTime());
+ increment(seededCal);
+ }
+ }
+
+ int invalidCandidateCount = 0;
+ int noCandidateIncrementCount = 0;
+ Date candidate = null;
+ final Value value = seed instanceof DateTime ? Value.DATE_TIME : Value.DATE;
+
+ while (true) {
+ final Date candidateSeed = Dates.getInstance(cal.getTime(), value);
+
+ if (getUntil() != null && candidate != null && candidate.after(getUntil())) {
+ break;
+ }
+
+ if (getCount() > 0 && invalidCandidateCount >= getCount()) {
+ break;
+ }
+
+ if (Value.DATE_TIME.equals(value)) {
+ if (((DateTime) seed).isUtc()) {
+ ((DateTime) candidateSeed).setUtc(true);
+ }
+ else {
+ ((DateTime) candidateSeed).setTimeZone(((DateTime) seed).getTimeZone());
+ }
+ }
+
+ final DateList candidates = getCandidates(candidateSeed, value);
+ if (!candidates.isEmpty()) {
+ noCandidateIncrementCount = 0;
+ // sort candidates for identifying when UNTIL date is exceeded..
+ Collections.sort(candidates);
+
+ for (final Iterator i = candidates.iterator(); i.hasNext();) {
+ candidate = (Date) i.next();
+ // don't count candidates that occur before the seed date..
+ if (!candidate.before(seed)) {
+ // Candidate must be after startDate because
+ // we want the NEXT occurrence
+ if (!candidate.after(startDate)) {
+ invalidCandidateCount++;
+ } else if (getCount() > 0
+ && invalidCandidateCount >= getCount()) {
+ break;
+ } else if (!(getUntil() != null
+ && candidate.after(getUntil()))) {
+ return candidate;
+ }
+ }
+ }
+ } else {
+ noCandidateIncrementCount++;
+ if ((maxIncrementCount > 0) && (noCandidateIncrementCount > maxIncrementCount)) {
+ break;
+ }
+ }
+ increment(cal);
+ }
+ return null;
+ }
+
+ /**
+ * Increments the specified calendar according to the frequency and interval specified in this recurrence rule.
+ * @param cal a java.util.Calendar to increment
+ */
+ private void increment(final Calendar cal) {
+ // initialise interval..
+ final int calInterval = (getInterval() >= 1) ? getInterval() : 1;
+ cal.add(calIncField, calInterval);
+ }
+
+ /**
+ * Returns a list of possible dates generated from the applicable BY* rules, using the specified date as a seed.
+ * @param date the seed date
+ * @param value the type of date list to return
+ * @return a DateList
+ */
+ private DateList getCandidates(final Date date, final Value value) {
+ DateList dates = new DateList(value);
+ if (date instanceof DateTime) {
+ if (((DateTime) date).isUtc()) {
+ dates.setUtc(true);
+ }
+ else {
+ dates.setTimeZone(((DateTime) date).getTimeZone());
+ }
+ }
+ dates.add(date);
+ dates = getMonthVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYMONTH processing: " + dates);
+ }
+ dates = getWeekNoVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYWEEKNO processing: " + dates);
+ }
+ dates = getYearDayVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYYEARDAY processing: " + dates);
+ }
+ dates = getMonthDayVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYMONTHDAY processing: " + dates);
+ }
+ dates = getDayVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYDAY processing: " + dates);
+ }
+ dates = getHourVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYHOUR processing: " + dates);
+ }
+ dates = getMinuteVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYMINUTE processing: " + dates);
+ }
+ dates = getSecondVariants(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after BYSECOND processing: " + dates);
+ }
+ dates = applySetPosRules(dates);
+ // debugging..
+ if (log.isDebugEnabled()) {
+ log.debug("Dates after SETPOS processing: " + dates);
+ }
+ return dates;
+ }
+
+ /**
+ * Applies BYSETPOS rules to dates
. Valid positions are from 1 to the size of the date list. Invalid
+ * positions are ignored.
+ * @param dates
+ */
+ private DateList applySetPosRules(final DateList dates) {
+ // return if no SETPOS rules specified..
+ if (getSetPosList().isEmpty()) {
+ return dates;
+ }
+ // sort the list before processing..
+ Collections.sort(dates);
+ final DateList setPosDates = getDateListInstance(dates);
+ final int size = dates.size();
+ for (final Iterator i = getSetPosList().iterator(); i.hasNext();) {
+ final Integer setPos = (Integer) i.next();
+ final int pos = setPos.intValue();
+ if (pos > 0 && pos <= size) {
+ setPosDates.add(dates.get(pos - 1));
+ }
+ else if (pos < 0 && pos >= -size) {
+ setPosDates.add(dates.get(size + pos));
+ }
+ }
+ return setPosDates;
+ }
+
+ /**
+ * Applies BYMONTH rules specified in this Recur instance to the specified date list. If no BYMONTH rules are
+ * specified the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getMonthVariants(final DateList dates) {
+ if (getMonthList().isEmpty()) {
+ return dates;
+ }
+ final DateList monthlyDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ for (final Iterator j = getMonthList().iterator(); j.hasNext();) {
+ final Integer month = (Integer) j.next();
+ // Java months are zero-based..
+// cal.set(Calendar.MONTH, month.intValue() - 1);
+ cal.roll(Calendar.MONTH, (month.intValue() - 1) - cal.get(Calendar.MONTH));
+ monthlyDates.add(Dates.getInstance(cal.getTime(), monthlyDates.getType()));
+ }
+ }
+ return monthlyDates;
+ }
+
+ /**
+ * Applies BYWEEKNO rules specified in this Recur instance to the specified date list. If no BYWEEKNO rules are
+ * specified the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getWeekNoVariants(final DateList dates) {
+ if (getWeekNoList().isEmpty()) {
+ return dates;
+ }
+ final DateList weekNoDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ for (final Iterator j = getWeekNoList().iterator(); j.hasNext();) {
+ final Integer weekNo = (Integer) j.next();
+ cal.set(Calendar.WEEK_OF_YEAR, Dates.getAbsWeekNo(cal.getTime(), weekNo.intValue()));
+ weekNoDates.add(Dates.getInstance(cal.getTime(), weekNoDates.getType()));
+ }
+ }
+ return weekNoDates;
+ }
+
+ /**
+ * Applies BYYEARDAY rules specified in this Recur instance to the specified date list. If no BYYEARDAY rules are
+ * specified the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getYearDayVariants(final DateList dates) {
+ if (getYearDayList().isEmpty()) {
+ return dates;
+ }
+ final DateList yearDayDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ for (final Iterator j = getYearDayList().iterator(); j.hasNext();) {
+ final Integer yearDay = (Integer) j.next();
+ cal.set(Calendar.DAY_OF_YEAR, Dates.getAbsYearDay(cal.getTime(), yearDay.intValue()));
+ yearDayDates.add(Dates.getInstance(cal.getTime(), yearDayDates.getType()));
+ }
+ }
+ return yearDayDates;
+ }
+
+ /**
+ * Applies BYMONTHDAY rules specified in this Recur instance to the specified date list. If no BYMONTHDAY rules are
+ * specified the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getMonthDayVariants(final DateList dates) {
+ if (getMonthDayList().isEmpty()) {
+ return dates;
+ }
+ final DateList monthDayDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setLenient(false);
+ cal.setTime(date);
+ for (final Iterator j = getMonthDayList().iterator(); j.hasNext();) {
+ final Integer monthDay = (Integer) j.next();
+ try {
+ cal.set(Calendar.DAY_OF_MONTH, Dates.getAbsMonthDay(cal.getTime(), monthDay.intValue()));
+ monthDayDates.add(Dates.getInstance(cal.getTime(), monthDayDates.getType()));
+ }
+ catch (IllegalArgumentException iae) {
+ if (log.isTraceEnabled()) {
+ log.trace("Invalid day of month: " + Dates.getAbsMonthDay(cal
+ .getTime(), monthDay.intValue()));
+ }
+ }
+ }
+ }
+ return monthDayDates;
+ }
+
+ /**
+ * Applies BYDAY rules specified in this Recur instance to the specified date list. If no BYDAY rules are specified
+ * the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getDayVariants(final DateList dates) {
+ if (getDayList().isEmpty()) {
+ return dates;
+ }
+ final DateList weekDayDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ for (final Iterator j = getDayList().iterator(); j.hasNext();) {
+ final WeekDay weekDay = (WeekDay) j.next();
+ // if BYYEARDAY or BYMONTHDAY is specified filter existing
+ // list..
+ if (!getYearDayList().isEmpty() || !getMonthDayList().isEmpty()) {
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ if (weekDay.equals(WeekDay.getWeekDay(cal))) {
+ weekDayDates.add(date);
+ }
+ }
+ else {
+ weekDayDates.addAll(getAbsWeekDays(date, dates.getType(), weekDay));
+ }
+ }
+ }
+ return weekDayDates;
+ }
+
+ /**
+ * Returns a list of applicable dates corresponding to the specified week day in accordance with the frequency
+ * specified by this recurrence rule.
+ * @param date
+ * @param weekDay
+ * @return
+ */
+ private List getAbsWeekDays(final Date date, final Value type, final WeekDay weekDay) {
+ final Calendar cal = Dates.getCalendarInstance(date);
+ // default week start is Monday per RFC5545
+ int calendarWeekStartDay = Calendar.MONDAY;
+ if (weekStartDay != null) {
+ calendarWeekStartDay = WeekDay.getCalendarDay(new WeekDay(weekStartDay));
+ }
+ cal.setFirstDayOfWeek(calendarWeekStartDay);
+ cal.setTime(date);
+
+ final DateList days = new DateList(type);
+ if (date instanceof DateTime) {
+ if (((DateTime) date).isUtc()) {
+ days.setUtc(true);
+ }
+ else {
+ days.setTimeZone(((DateTime) date).getTimeZone());
+ }
+ }
+ final int calDay = WeekDay.getCalendarDay(weekDay);
+ if (calDay == -1) {
+ // a matching weekday cannot be identified..
+ return days;
+ }
+ if (DAILY.equals(getFrequency())) {
+ if (cal.get(Calendar.DAY_OF_WEEK) == calDay) {
+ days.add(Dates.getInstance(cal.getTime(), type));
+ }
+ }
+ else if (WEEKLY.equals(getFrequency()) || !getWeekNoList().isEmpty()) {
+ final int weekNo = cal.get(Calendar.WEEK_OF_YEAR);
+ // construct a list of possible week days..
+ cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
+ while (cal.get(Calendar.DAY_OF_WEEK) != calDay) {
+ cal.add(Calendar.DAY_OF_WEEK, 1);
+ }
+// final int weekNo = cal.get(Calendar.WEEK_OF_YEAR);
+ if (cal.get(Calendar.WEEK_OF_YEAR) == weekNo) {
+ days.add(Dates.getInstance(cal.getTime(), type));
+// cal.add(Calendar.DAY_OF_WEEK, Dates.DAYS_PER_WEEK);
+ }
+ }
+ else if (MONTHLY.equals(getFrequency()) || !getMonthList().isEmpty()) {
+ final int month = cal.get(Calendar.MONTH);
+ // construct a list of possible month days..
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ while (cal.get(Calendar.DAY_OF_WEEK) != calDay) {
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ }
+ while (cal.get(Calendar.MONTH) == month) {
+ days.add(Dates.getInstance(cal.getTime(), type));
+ cal.add(Calendar.DAY_OF_MONTH, Dates.DAYS_PER_WEEK);
+ }
+ }
+ else if (YEARLY.equals(getFrequency())) {
+ final int year = cal.get(Calendar.YEAR);
+ // construct a list of possible year days..
+ cal.set(Calendar.DAY_OF_YEAR, 1);
+ while (cal.get(Calendar.DAY_OF_WEEK) != calDay) {
+ cal.add(Calendar.DAY_OF_YEAR, 1);
+ }
+ while (cal.get(Calendar.YEAR) == year) {
+ days.add(Dates.getInstance(cal.getTime(), type));
+ cal.add(Calendar.DAY_OF_YEAR, Dates.DAYS_PER_WEEK);
+ }
+ }
+ return getOffsetDates(days, weekDay.getOffset());
+ }
+
+ /**
+ * Returns a single-element sublist containing the element of list
at offset
. Valid
+ * offsets are from 1 to the size of the list. If an invalid offset is supplied, all elements from list
+ * are added to sublist
.
+ * @param list
+ * @param offset
+ * @param sublist
+ */
+ private List getOffsetDates(final DateList dates, final int offset) {
+ if (offset == 0) {
+ return dates;
+ }
+ final List offsetDates = getDateListInstance(dates);
+ final int size = dates.size();
+ if (offset < 0 && offset >= -size) {
+ offsetDates.add(dates.get(size + offset));
+ }
+ else if (offset > 0 && offset <= size) {
+ offsetDates.add(dates.get(offset - 1));
+ }
+ return offsetDates;
+ }
+
+ /**
+ * Applies BYHOUR rules specified in this Recur instance to the specified date list. If no BYHOUR rules are
+ * specified the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getHourVariants(final DateList dates) {
+ if (getHourList().isEmpty()) {
+ return dates;
+ }
+ final DateList hourlyDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ for (final Iterator j = getHourList().iterator(); j.hasNext();) {
+ final Integer hour = (Integer) j.next();
+ cal.set(Calendar.HOUR_OF_DAY, hour.intValue());
+ hourlyDates.add(Dates.getInstance(cal.getTime(), hourlyDates.getType()));
+ }
+ }
+ return hourlyDates;
+ }
+
+ /**
+ * Applies BYMINUTE rules specified in this Recur instance to the specified date list. If no BYMINUTE rules are
+ * specified the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getMinuteVariants(final DateList dates) {
+ if (getMinuteList().isEmpty()) {
+ return dates;
+ }
+ final DateList minutelyDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ for (final Iterator j = getMinuteList().iterator(); j.hasNext();) {
+ final Integer minute = (Integer) j.next();
+ cal.set(Calendar.MINUTE, minute.intValue());
+ minutelyDates.add(Dates.getInstance(cal.getTime(), minutelyDates.getType()));
+ }
+ }
+ return minutelyDates;
+ }
+
+ /**
+ * Applies BYSECOND rules specified in this Recur instance to the specified date list. If no BYSECOND rules are
+ * specified the date list is returned unmodified.
+ * @param dates
+ * @return
+ */
+ private DateList getSecondVariants(final DateList dates) {
+ if (getSecondList().isEmpty()) {
+ return dates;
+ }
+ final DateList secondlyDates = getDateListInstance(dates);
+ for (final Iterator i = dates.iterator(); i.hasNext();) {
+ final Date date = (Date) i.next();
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ for (final Iterator j = getSecondList().iterator(); j.hasNext();) {
+ final Integer second = (Integer) j.next();
+ cal.set(Calendar.SECOND, second.intValue());
+ secondlyDates.add(Dates.getInstance(cal.getTime(), secondlyDates.getType()));
+ }
+ }
+ return secondlyDates;
+ }
+
+ private void validateFrequency() {
+ if (frequency == null) {
+ throw new IllegalArgumentException(
+ "A recurrence rule MUST contain a FREQ rule part.");
+ }
+ if (SECONDLY.equals(getFrequency())) {
+ calIncField = Calendar.SECOND;
+ }
+ else if (MINUTELY.equals(getFrequency())) {
+ calIncField = Calendar.MINUTE;
+ }
+ else if (HOURLY.equals(getFrequency())) {
+ calIncField = Calendar.HOUR_OF_DAY;
+ }
+ else if (DAILY.equals(getFrequency())) {
+ calIncField = Calendar.DAY_OF_YEAR;
+ }
+ else if (WEEKLY.equals(getFrequency())) {
+ calIncField = Calendar.WEEK_OF_YEAR;
+ }
+ else if (MONTHLY.equals(getFrequency())) {
+ calIncField = Calendar.MONTH;
+ }
+ else if (YEARLY.equals(getFrequency())) {
+ calIncField = Calendar.YEAR;
+ }
+ else {
+ throw new IllegalArgumentException("Invalid FREQ rule part '"
+ + frequency + "' in recurrence rule");
+ }
+ }
+
+ /**
+ * @param count The count to set.
+ */
+ public final void setCount(final int count) {
+ this.count = count;
+ this.until = null;
+ }
+
+ /**
+ * @param frequency The frequency to set.
+ */
+ public final void setFrequency(final String frequency) {
+ this.frequency = frequency;
+ validateFrequency();
+ }
+
+ /**
+ * @param interval The interval to set.
+ */
+ public final void setInterval(final int interval) {
+ this.interval = interval;
+ }
+
+ /**
+ * @param until The until to set.
+ */
+ public final void setUntil(final Date until) {
+ this.until = until;
+ this.count = -1;
+ }
+
+ /**
+ * @param stream
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ private void readObject(final java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException {
+ stream.defaultReadObject();
+ log = LogFactory.getLog(Recur.class);
+ }
+
+ /**
+ * Instantiate a new datelist with the same type, timezone and utc settings
+ * as the origList.
+ * @param origList
+ * @return a new empty list.
+ */
+ private static final DateList getDateListInstance(final DateList origList) {
+ final DateList list = new DateList(origList.getType());
+ if (origList.isUtc()) {
+ list.setUtc(true);
+ } else {
+ list.setTimeZone(origList.getTimeZone());
+ }
+ return list;
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/TextList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/TextList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,155 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;
+
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [23-Apr-2004]
+ *
+ * Defines a list of iCalendar text elements.
+ * @author Ben Fortuna
+ */
+public class TextList implements Serializable {
+
+ private static final long serialVersionUID = -417427815871330636L;
+
+ private List texts;
+
+ /**
+ * Default constructor.
+ */
+ public TextList() {
+ texts = new CopyOnWriteArrayList();
+ }
+
+ /**
+ * Parses the specified string representation to create a list of categories.
+ * @param aValue a string representation of a list of categories
+ */
+ public TextList(final String aValue) {
+ texts = new CopyOnWriteArrayList();
+
+ // match commas preceded by even number of backslashes..
+ final Pattern pattern = Pattern.compile("([^\\\\](?:\\\\{2})),|([^\\\\]),");
+
+ final Matcher matcher = pattern.matcher(aValue);
+ String[] textValues = null;
+
+ if (matcher.find()) {
+ // HACK: add a marker (") for easy string splitting..
+ textValues = matcher.replaceAll("$1$2"").split(""");
+ }
+ else {
+ // no special cases, split on commas not preceded by backslash..
+ textValues = aValue.split("(?TimeZoneRegistry instance.
+ * Alternative factory implementations may be specified via the following
+ * system property:
+ * net.fortuna.ical4j.timezone.registry=<factory_class_name>
+ * @author Ben Fortuna
+ */
+public abstract class TimeZoneRegistryFactory {
+
+ /**
+ * The system property used to specify an alternate
+ * TimeZoneRegistryFactory
implementation.
+ */
+ public static final String KEY_FACTORY_CLASS = "net.fortuna.ical4j.timezone.registry";
+
+ private static TimeZoneRegistryFactory instance;
+ static {
+ try {
+ final Class factoryClass = Class.forName(Configurator.getProperty(KEY_FACTORY_CLASS));
+ instance = (TimeZoneRegistryFactory) factoryClass.newInstance();
+ }
+ catch (Exception e) {
+ instance = new DefaultTimeZoneRegistryFactory();
+ }
+ }
+
+ /**
+ * @return a shared factory instance
+ */
+ public static TimeZoneRegistryFactory getInstance() {
+ return instance;
+ }
+
+ /**
+ * Returns a new instance of the configured TimeZoneRegistry
.
+ * @return a timezone registry instance
+ */
+ public abstract TimeZoneRegistry createRegistry();
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/TimeZoneRegistryImpl.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/TimeZoneRegistryImpl.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import net.fortuna.ical4j.data.CalendarBuilder;
+import net.fortuna.ical4j.data.ParserException;
+import net.fortuna.ical4j.model.component.VTimeZone;
+import net.fortuna.ical4j.model.property.TzUrl;
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.Configurator;
+import net.fortuna.ical4j.util.ResourceLoader;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * $Id$
+ *
+ * Created on 18/09/2005
+ *
+ * The default implementation of a TimeZoneRegistry
. This implementation will search the classpath for
+ * applicable VTimeZone definitions used to back the provided TimeZone instances.
+ * @author Ben Fortuna
+ */
+public class TimeZoneRegistryImpl implements TimeZoneRegistry {
+
+ private static final String DEFAULT_RESOURCE_PREFIX = "zoneinfo/";
+
+ private static final Pattern TZ_ID_SUFFIX = Pattern.compile("(?<=/)[^/]*/[^/]*$");
+
+ private static final String UPDATE_ENABLED = "net.fortuna.ical4j.timezone.update.enabled";
+
+ private static final Map DEFAULT_TIMEZONES = new ConcurrentHashMap();
+
+ private static final Properties ALIASES = new Properties();
+ static {
+ try {
+ //ALIASES.load(ResourceLoader.getResourceAsStream("net/fortuna/ical4j/model/tz.alias"));
+ ALIASES.load(TimeZoneRegistryImpl.class.getResourceAsStream("tz.alias"));
+ }
+ catch (IOException ioe) {
+ LogFactory.getLog(TimeZoneRegistryImpl.class).warn(
+ "Error loading timezone aliases: " + ioe.getMessage());
+ }
+ }
+
+ private Map timezones;
+
+ private String resourcePrefix;
+
+ /**
+ * Default constructor.
+ */
+ public TimeZoneRegistryImpl() {
+ this(DEFAULT_RESOURCE_PREFIX);
+ }
+
+ /**
+ * Creates a new instance using the specified resource prefix.
+ * @param resourcePrefix a prefix prepended to classpath resource lookups for default timezones
+ */
+ public TimeZoneRegistryImpl(final String resourcePrefix) {
+ this.resourcePrefix = resourcePrefix;
+ timezones = new ConcurrentHashMap();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void register(final TimeZone timezone) {
+ // for now we only apply updates to included definitions by default..
+ register(timezone, false);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void register(final TimeZone timezone, boolean update) {
+ if (update) {
+ // load any available updates for the timezone..
+ timezones.put(timezone.getID(), new TimeZone(updateDefinition(timezone.getVTimeZone())));
+ }
+ else {
+ timezones.put(timezone.getID(), timezone);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void clear() {
+ timezones.clear();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final TimeZone getTimeZone(final String id) {
+ TimeZone timezone = (TimeZone) timezones.get(id);
+ if (timezone == null) {
+ timezone = (TimeZone) DEFAULT_TIMEZONES.get(id);
+ if (timezone == null) {
+ // if timezone not found with identifier, try loading an alias..
+ final String alias = ALIASES.getProperty(id);
+ if (alias != null) {
+ return getTimeZone(alias);
+ }
+ else {
+ synchronized (DEFAULT_TIMEZONES) {
+ // check again as it may be loaded now..
+ timezone = (TimeZone) DEFAULT_TIMEZONES.get(id);
+ if (timezone == null) {
+ try {
+ final VTimeZone vTimeZone = loadVTimeZone(id);
+ if (vTimeZone != null) {
+ // XXX: temporary kludge..
+ // ((TzId) vTimeZone.getProperties().getProperty(Property.TZID)).setValue(id);
+ timezone = new TimeZone(vTimeZone);
+ DEFAULT_TIMEZONES.put(timezone.getID(), timezone);
+ }
+ else if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) {
+ // strip global part of id and match on default tz..
+ Matcher matcher = TZ_ID_SUFFIX.matcher(id);
+ if (matcher.find()) {
+ return getTimeZone(matcher.group());
+ }
+ }
+ }
+ catch (Exception e) {
+ Log log = LogFactory.getLog(TimeZoneRegistryImpl.class);
+ log.warn("Error occurred loading VTimeZone", e);
+ }
+ }
+ }
+ }
+ }
+ }
+ return timezone;
+ }
+
+ /**
+ * Loads an existing VTimeZone from the classpath corresponding to the specified Java timezone.
+ */
+ private VTimeZone loadVTimeZone(final String id) throws IOException, ParserException {
+ //final URL resource = ResourceLoader.getResource(resourcePrefix + id + ".ics");
+ final URL resource = TimeZoneRegistryImpl.class.getClassLoader().getResource(resourcePrefix + id + ".ics");
+ if (resource != null) {
+ final CalendarBuilder builder = new CalendarBuilder();
+ final Calendar calendar = builder.build(resource.openStream());
+ final VTimeZone vTimeZone = (VTimeZone) calendar.getComponent(Component.VTIMEZONE);
+ // load any available updates for the timezone.. can be explicility disabled via configuration
+ if (!"false".equals(Configurator.getProperty(UPDATE_ENABLED))) {
+ return updateDefinition(vTimeZone);
+ }
+ return vTimeZone;
+ }
+ return null;
+ }
+
+ /**
+ * @param vTimeZone
+ * @return
+ */
+ private VTimeZone updateDefinition(VTimeZone vTimeZone) {
+ final TzUrl tzUrl = vTimeZone.getTimeZoneUrl();
+ if (tzUrl != null) {
+ try {
+ final CalendarBuilder builder = new CalendarBuilder();
+ final Calendar calendar = builder.build(tzUrl.getUri().toURL().openStream());
+ final VTimeZone updatedVTimeZone = (VTimeZone) calendar.getComponent(Component.VTIMEZONE);
+ if (updatedVTimeZone != null) {
+ return updatedVTimeZone;
+ }
+ }
+ catch (Exception e) {
+ Log log = LogFactory.getLog(TimeZoneRegistryImpl.class);
+ log.warn("Unable to retrieve updates for timezone: " + vTimeZone.getTimeZoneId().getValue(), e);
+ }
+ }
+ return vTimeZone;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/UtcOffset.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/UtcOffset.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,166 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+
+import net.fortuna.ical4j.util.Dates;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * $Id$
+ *
+ * Created on 26/06/2005
+ *
+ * Represents a timezone offset from UTC time.
+ *
+ * @author Ben Fortuna
+ */
+public class UtcOffset implements Serializable {
+
+ private static final long serialVersionUID = 5883111996721531728L;
+
+ private static final int HOUR_START_INDEX = 1;
+
+ private static final int HOUR_END_INDEX = 3;
+
+ private static final int MINUTE_START_INDEX = 3;
+
+ private static final int MINUTE_END_INDEX = 5;
+
+ private static final int SECOND_START_INDEX = 5;
+
+ private static final int SECOND_END_INDEX = 7;
+
+ private static final NumberFormat HOUR_FORMAT = new DecimalFormat("00");
+
+ private static final NumberFormat MINUTE_FORMAT = new DecimalFormat("00");
+
+ private static final NumberFormat SECOND_FORMAT = new DecimalFormat("00");
+
+ private long offset;
+
+ /**
+ * @param value a string representation of an offset
+ */
+ public UtcOffset(final String value) {
+
+ if (value.length() < MINUTE_END_INDEX) {
+ throw new IllegalArgumentException("Invalid UTC offset [" + value
+ + "] - must be of the form: (+/-)HHMM[SS]");
+ }
+
+ final boolean negative = value.charAt(0) == '-';
+
+ if (!negative && !(value.charAt(0) == '+')) {
+ throw new IllegalArgumentException("UTC offset value must be signed");
+ }
+
+ offset = 0;
+ offset += Integer.parseInt(value.substring(HOUR_START_INDEX,
+ HOUR_END_INDEX))
+ * Dates.MILLIS_PER_HOUR;
+ offset += Integer.parseInt(value.substring(MINUTE_START_INDEX,
+ MINUTE_END_INDEX))
+ * Dates.MILLIS_PER_MINUTE;
+ if (value.length() == SECOND_END_INDEX) {
+ offset += Integer.parseInt(value.substring(SECOND_START_INDEX,
+ SECOND_END_INDEX))
+ * Dates.MILLIS_PER_SECOND;
+ }
+ if (negative) {
+ offset = -offset;
+ }
+ }
+
+ /**
+ * @param offset an offset value in milliseconds
+ */
+ public UtcOffset(final long offset) {
+ this.offset = (long) Math.floor(offset / (double) Dates.MILLIS_PER_SECOND) * Dates.MILLIS_PER_SECOND;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ long remainder = Math.abs(offset);
+
+ if (offset < 0) {
+ b.append('-');
+ }
+ else {
+ b.append('+');
+ }
+ b.append(HOUR_FORMAT.format(remainder / Dates.MILLIS_PER_HOUR));
+
+ remainder = remainder % Dates.MILLIS_PER_HOUR;
+ b.append(MINUTE_FORMAT.format(remainder / Dates.MILLIS_PER_MINUTE));
+
+ remainder = remainder % Dates.MILLIS_PER_MINUTE;
+ if (remainder > 0) {
+ b.append(SECOND_FORMAT.format(remainder / Dates.MILLIS_PER_SECOND));
+ }
+ return b.toString();
+ }
+
+ /**
+ * @return Returns the offset.
+ */
+ public final long getOffset() {
+ return offset;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean equals(final Object arg0) {
+ if (arg0 instanceof UtcOffset) {
+ return getOffset() == ((UtcOffset) arg0).getOffset();
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int hashCode() {
+ return new HashCodeBuilder().append(getOffset()).toHashCode();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/ValidationException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/ValidationException.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.text.MessageFormat;
+
+/**
+ * $Id$ [23-Apr-2004]
+ *
+ * An exception thrown during validation.
+ *
+ * @author Ben Fortuna
+ */
+public class ValidationException extends Exception {
+
+ private static final long serialVersionUID = 309245291364742896L;
+
+ /**
+ * Default constructor.
+ */
+ public ValidationException() {
+ super();
+ }
+
+ /**
+ * Constructor with message.
+ * @param message a message
+ */
+ public ValidationException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Constructor with message pattern and arguments.
+ * @param message a message pattern
+ * @param args message arguments
+ */
+ public ValidationException(final String message, Object[] args) {
+ super(MessageFormat.format(message, args));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/Validator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/Validator.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,47 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+
+/**
+ * @author fortuna
+ *
+ */
+public interface Validator extends Serializable {
+
+ /**
+ * Validates the associated model against an applicable standard.
+ * @throws ValidationException where the model does not confirm to the applicable standard
+ */
+ void validate() throws ValidationException;
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/WeekDay.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/WeekDay.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,284 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.util.Calendar;
+
+import net.fortuna.ical4j.util.Numbers;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$
+ *
+ * Created: 19/12/2004
+ *
+ * Defines a day of the week with a possible offset related to
+ * a MONTHLY or YEARLY occurrence.
+ *
+ * @author Ben Fortuna
+ */
+public class WeekDay implements Serializable {
+
+ private static final long serialVersionUID = -4412000990022011469L;
+
+ /**
+ * Sunday.
+ */
+ public static final WeekDay SU = new WeekDay("SU", 0);
+
+ /**
+ * Monday.
+ */
+ public static final WeekDay MO = new WeekDay("MO", 0);
+
+ /**
+ * Tuesday.
+ */
+ public static final WeekDay TU = new WeekDay("TU", 0);
+
+ /**
+ * Wednesday.
+ */
+ public static final WeekDay WE = new WeekDay("WE", 0);
+
+ /**
+ * Thursday.
+ */
+ public static final WeekDay TH = new WeekDay("TH", 0);
+
+ /**
+ * Friday.
+ */
+ public static final WeekDay FR = new WeekDay("FR", 0);
+
+ /**
+ * Saturday.
+ */
+ public static final WeekDay SA = new WeekDay("SA", 0);
+
+ private String day;
+
+ private int offset;
+
+ /**
+ * @param value a string representation of a week day
+ */
+ public WeekDay(final String value) {
+ if (value.length() > 2) {
+ offset = Numbers.parseInt(value.substring(0, value.length() - 2));
+ }
+ else {
+ offset = 0;
+ }
+ day = value.substring(value.length() - 2);
+ validateDay();
+ }
+
+ /**
+ * @param day a string representation of a week day
+ * @param offset a month offset value
+ */
+ private WeekDay(final String day, final int offset) {
+ this.day = day;
+ this.offset = offset;
+ }
+
+ /**
+ * Constructs a new weekday instance based on the specified
+ * instance and offset.
+ * @param weekDay a week day template for the instance
+ * @param offset a month offset value
+ */
+ public WeekDay(final WeekDay weekDay, final int offset) {
+ this.day = weekDay.getDay();
+ this.offset = offset;
+ }
+
+ private void validateDay() {
+ if (!SU.day.equals(day)
+ && !MO.day.equals(day)
+ && !TU.day.equals(day)
+ && !WE.day.equals(day)
+ && !TH.day.equals(day)
+ && !FR.day.equals(day)
+ && !SA.day.equals(day)) {
+ throw new IllegalArgumentException("Invalid day: " + day);
+ }
+ }
+ /**
+ * @return Returns the day.
+ */
+ public final String getDay() {
+ return day;
+ }
+
+ /**
+ * @return Returns the offset.
+ */
+ public final int getOffset() {
+ return offset;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ if (getOffset() != 0) {
+ b.append(getOffset());
+ }
+ b.append(getDay());
+ return b.toString();
+ }
+
+ /**
+ * Returns a weekday representation of the specified calendar.
+ * @param cal a calendar (java.util)
+ * @return a weekday instance representing the specified calendar
+ */
+ public static final WeekDay getWeekDay(final Calendar cal) {
+ return new WeekDay(getDay(cal.get(Calendar.DAY_OF_WEEK)), 0);
+ }
+
+ /**
+ * Returns a weekday/offset representation of the specified calendar.
+ * @param cal a calendar (java.util)
+ * @return a weekday instance representing the specified calendar
+ */
+ public static final WeekDay getMonthlyOffset(final Calendar cal) {
+ return new WeekDay(getDay(cal.get(Calendar.DAY_OF_WEEK)), cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
+ }
+
+ /**
+ * Returns a weekday/negative offset representation of the specified calendar.
+ * @param cal a calendar (java.util)
+ * @return a weekday instance representing the specified calendar
+ */
+ public static final WeekDay getNegativeMonthlyOffset(final Calendar cal) {
+ return new WeekDay(getDay(cal.get(Calendar.DAY_OF_WEEK)), cal.get(Calendar.DAY_OF_WEEK_IN_MONTH) - 6);
+ }
+
+ /**
+ * Returns the corresponding day constant to the specified
+ * java.util.Calendar.DAY_OF_WEEK property.
+ * @param calDay a property value of java.util.Calendar.DAY_OF_WEEK
+ * @return a string, or null if an invalid DAY_OF_WEEK property is
+ * specified
+ */
+ public static WeekDay getDay(final int calDay) {
+ WeekDay day = null;
+ switch (calDay) {
+ case Calendar.SUNDAY:
+ day = SU;
+ break;
+ case Calendar.MONDAY:
+ day = MO;
+ break;
+ case Calendar.TUESDAY:
+ day = TU;
+ break;
+ case Calendar.WEDNESDAY:
+ day = WE;
+ break;
+ case Calendar.THURSDAY:
+ day = TH;
+ break;
+ case Calendar.FRIDAY:
+ day = FR;
+ break;
+ case Calendar.SATURDAY:
+ day = SA;
+ break;
+ default:
+ break;
+ }
+ return day;
+ }
+
+ /**
+ * Returns the corresponding java.util.Calendar.DAY_OF_WEEK
+ * constant for the specified WeekDay
.
+ * @param weekday a week day instance
+ * @return the corresponding java.util.Calendar
day
+ */
+ public static int getCalendarDay(final WeekDay weekday) {
+ int calendarDay = -1;
+ if (SU.getDay().equals(weekday.getDay())) {
+ calendarDay = Calendar.SUNDAY;
+ }
+ else if (MO.getDay().equals(weekday.getDay())) {
+ calendarDay = Calendar.MONDAY;
+ }
+ else if (TU.getDay().equals(weekday.getDay())) {
+ calendarDay = Calendar.TUESDAY;
+ }
+ else if (WE.getDay().equals(weekday.getDay())) {
+ calendarDay = Calendar.WEDNESDAY;
+ }
+ else if (TH.getDay().equals(weekday.getDay())) {
+ calendarDay = Calendar.THURSDAY;
+ }
+ else if (FR.getDay().equals(weekday.getDay())) {
+ calendarDay = Calendar.FRIDAY;
+ }
+ else if (SA.getDay().equals(weekday.getDay())) {
+ calendarDay = Calendar.SATURDAY;
+ }
+ return calendarDay;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final boolean equals(final Object arg0) {
+ if (arg0 == null) {
+ return false;
+ }
+ if (!(arg0 instanceof WeekDay)) {
+ return false;
+ }
+ final WeekDay wd = (WeekDay) arg0;
+ return ObjectUtils.equals(wd.getDay(), getDay())
+ && wd.getOffset() == getOffset();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final int hashCode() {
+ return new HashCodeBuilder().append(getDay())
+ .append(getOffset()).toHashCode();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/WeekDayList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/WeekDayList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+/**
+ * $Id$ [29-May-2004]
+ *
+ * Defines a list of days.
+ *
+ * @author Ben Fortuna
+ */
+public class WeekDayList extends ArrayList implements Serializable {
+
+ private static final long serialVersionUID = 1243262497035300445L;
+
+ /**
+ * Default constructor.
+ */
+ public WeekDayList() {
+ }
+
+ /**
+ * Creates a new instance with the specified initial capacity.
+ * @param initialCapacity the initial capacity of the list
+ */
+ public WeekDayList(final int initialCapacity) {
+ super(initialCapacity);
+ }
+
+ /**
+ * Constructor.
+ * @param aString a string representation of a day list
+ */
+ public WeekDayList(final String aString) {
+ final boolean outlookCompatibility =
+ CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_OUTLOOK_COMPATIBILITY);
+
+ final StringTokenizer t = new StringTokenizer(aString, ",");
+ while (t.hasMoreTokens()) {
+ if (outlookCompatibility) {
+ add(new WeekDay(t.nextToken().replaceAll(" ", "")));
+ }
+ else {
+ add(new WeekDay(t.nextToken()));
+ }
+ }
+ }
+
+ /**
+ * @param weekDay a day to add to the list
+ * @return true if the week day is added, otherwise false
+ */
+ public final boolean add(final WeekDay weekDay) {
+ return add((Object) weekDay);
+ }
+
+ /**
+ * Overrides superclass to throw an IllegalArgumentException
+ * where argument is not a net.fortuna.ical4j.model.WeekDay
.
+ * @param weekday a week day to add
+ * @return true if the week day is added, otherwise false
+ * @see List#add(E)
+ */
+ public final boolean add(final Object weekday) {
+ if (!(weekday instanceof WeekDay)) {
+ throw new IllegalArgumentException("Argument not a " + WeekDay.class.getName());
+ }
+ return super.add(weekday);
+ }
+
+ /**
+ * @param weekDay a day to remove from the list
+ * @return true if the week day is removed, otherwise false
+ */
+ public final boolean remove(final WeekDay weekDay) {
+ return remove((Object) weekDay);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ for (final Iterator i = iterator(); i.hasNext();) {
+ b.append(i.next());
+ if (i.hasNext()) {
+ b.append(',');
+ }
+ }
+ return b.toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/Available.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/Available.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,185 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.property.DtEnd;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.util.PropertyValidator;
+
+/**
+ * $Id$ [05-Apr-2004]
+ *
+ * Defines an iCalendar Available component.
+ *
+ *
+ *
+ * availablec = "BEGIN" ":" "AVAILABLE" CRLF
+ *
+ * availableprop
+ *
+ * "END" ":" "AVAILABLE" CRLF
+ *
+ availableprop = *(
+
+ ; the following are REQUIRED,
+ ; but MUST NOT occur more than once
+
+ dtstamp / dtstart / uid /
+
+ ; either a 'dtend' or a 'duration' is required
+ ; in a 'availableprop', but 'dtend' and
+ ; 'duration' MUST NOT occur in the same
+ ; 'availableprop', and each MUST NOT occur more
+ ; than once
+
+ dtend / duration /
+
+ ; the following are OPTIONAL,
+ ; but MUST NOT occur more than once
+
+ created / last-mod / recurid / rrule /
+ summary /
+
+ ; the following are OPTIONAL,
+ ; and MAY occur more than once
+
+ categories / comment / contact / exdate /
+ rdate / x-prop
+
+ )
+ *
+ *
+ * @author Ben Fortuna
+ * @author Mike Douglass
+ */
+public class Available extends Component {
+
+ private static final long serialVersionUID = -2494710612002978763L;
+
+ /**
+ * Default constructor.
+ */
+ public Available() {
+ super(AVAILABLE);
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public Available(final PropertyList properties) {
+ super(AVAILABLE, properties);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ /*
+ * ; dtstamp / dtstart / uid are required, but MUST NOT occur more than once /
+ */
+ PropertyValidator.getInstance().assertOne(Property.DTSTART,
+ getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP,
+ getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID,
+ getProperties());
+
+ /* If specified, the "DTSTART" and "DTEND" properties in
+ * "VAVAILABILITY" components and "AVAILABLE" sub-components MUST be
+ * "DATE-TIME" values specified as either date with UTC time or date
+ * with local time and a time zone reference.
+ */
+ final DtStart start = (DtStart) getProperty(Property.DTSTART);
+ if (Value.DATE.equals(start.getParameter(Parameter.VALUE))) {
+ throw new ValidationException("Property [" + Property.DTSTART
+ + "] must be a " + Value.DATE_TIME);
+ }
+
+ /*
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * created / last-mod / recurid / rrule /
+ * summary /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RRULE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY,
+ getProperties());
+
+ /*
+ ; either a 'dtend' or a 'duration' is required
+ ; in a 'availableprop', but 'dtend' and
+ ; 'duration' MUST NOT occur in the same
+ ; 'availableprop', and each MUST NOT occur more
+ ; than once
+ */
+ if (getProperty(Property.DTEND) != null) {
+ PropertyValidator.getInstance().assertOne(Property.DTEND,
+ getProperties());
+ /* Must be DATE_TIME */
+ final DtEnd end = (DtEnd) getProperty(Property.DTEND);
+ if (Value.DATE.equals(end.getParameter(Parameter.VALUE))) {
+ throw new ValidationException("Property [" + Property.DTEND
+ + "] must be a " + Value.DATE_TIME);
+ }
+ } else {
+ PropertyValidator.getInstance().assertOne(Property.DURATION,
+ getProperties());
+ }
+
+ /*
+ * ; the following are optional, ; and MAY occur more than once
+ * categories / comment / contact / exdate /
+ * rdate / x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/CalendarComponent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/CalendarComponent.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,177 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.property.Method;
+
+/**
+ * $Id$
+ *
+ * Created on 26/02/2006
+ *
+ * Base class for components that may be added to a calendar.
+ * @author Ben Fortuna
+ */
+public abstract class CalendarComponent extends Component {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -5832972592377720592L;
+
+ /**
+ * Validator instance that does nothing.
+ */
+ protected static final Validator EMPTY_VALIDATOR = new EmptyValidator();
+
+ /**
+ * @param name component name
+ */
+ public CalendarComponent(final String name) {
+ super(name);
+ }
+
+ /**
+ * @param name component name
+ * @param properties component properties
+ */
+ public CalendarComponent(final String name, final PropertyList properties) {
+ super(name, properties);
+ }
+
+ /**
+ * Performs method-specific ITIP validation.
+ * @param method the applicable method
+ * @throws ValidationException where the component does not comply with RFC2446
+ */
+ public final void validate(Method method) throws ValidationException {
+ final Validator validator = getValidator(method);
+ if (validator != null) {
+ validator.validate();
+ }
+ else {
+ throw new ValidationException("Unsupported method: " + method);
+ }
+ }
+
+ /**
+ * @param method a method to validate on
+ * @return a validator for the specified method or null if the method is not supported
+ */
+ protected abstract Validator getValidator(Method method);
+
+ /**
+ * Apply validation for METHOD=PUBLISH.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validatePublish() throws ValidationException {
+ validate(Method.PUBLISH);
+ }
+
+ /**
+ * Apply validation for METHOD=REQUEST.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validateRequest() throws ValidationException {
+ validate(Method.REQUEST);
+ }
+
+ /**
+ * Apply validation for METHOD=REPLY.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validateReply() throws ValidationException {
+ validate(Method.REPLY);
+ }
+
+ /**
+ * Apply validation for METHOD=ADD.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validateAdd() throws ValidationException {
+ validate(Method.ADD);
+ }
+
+ /**
+ * Apply validation for METHOD=CANCEL.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validateCancel() throws ValidationException {
+ validate(Method.CANCEL);
+ }
+
+ /**
+ * Apply validation for METHOD=REFRESH.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validateRefresh() throws ValidationException {
+ validate(Method.REFRESH);
+ }
+
+ /**
+ * Apply validation for METHOD=COUNTER.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validateCounter() throws ValidationException {
+ validate(Method.COUNTER);
+ }
+
+ /**
+ * Apply validation for METHOD=DECLINE-COUNTER.
+ * @throws ValidationException where the component does not comply with RFC2446
+ * @deprecated
+ */
+ public final void validateDeclineCounter() throws ValidationException {
+ validate(Method.DECLINE_COUNTER);
+ }
+
+ private static class EmptyValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ // TODO Auto-generated method stub
+
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/Daylight.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/Daylight.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import net.fortuna.ical4j.model.PropertyList;
+
+/**
+ * $Id$ [05-Apr-2004]
+ *
+ * Defines an iCalendar daylight savings timezone observance component.
+ *
+ *
+ *
+ * daylightc = "BEGIN" ":" "DAYLIGHT" CRLF
+ *
+ * tzprop
+ *
+ * "END" ":" "DAYLIGHT" CRLF
+ *
+ * tzprop = 3*(
+ *
+ * ; the following are each REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * dtstart / tzoffsetto / tzoffsetfrom /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * comment / rdate / rrule / tzname / x-prop
+ *
+ * )
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Daylight extends Observance {
+
+ private static final long serialVersionUID = -2494710612002978763L;
+
+ /**
+ * Default constructor.
+ */
+ public Daylight() {
+ super(DAYLIGHT);
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public Daylight(final PropertyList properties) {
+ super(DAYLIGHT, properties);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/Observance.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/Observance.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,334 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.DateList;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.RDate;
+import net.fortuna.ical4j.model.property.RRule;
+import net.fortuna.ical4j.model.property.TzOffsetFrom;
+import net.fortuna.ical4j.model.property.TzOffsetTo;
+import net.fortuna.ical4j.util.Dates;
+import net.fortuna.ical4j.util.PropertyValidator;
+import net.fortuna.ical4j.util.TimeZones;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * $Id$ [05-Apr-2004]
+ *
+ * Defines an iCalendar sub-component representing a timezone observance. Class made abstract such that only Standard
+ * and Daylight instances are valid.
+ * @author Ben Fortuna
+ */
+public abstract class Observance extends Component {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 2523330383042085994L;
+
+ /**
+ * one of 'standardc' or 'daylightc' MUST occur and each MAY occur more than once.
+ */
+ public static final String STANDARD = "STANDARD";
+
+ /**
+ * Token for daylight observance.
+ */
+ public static final String DAYLIGHT = "DAYLIGHT";
+
+ // TODO: clear cache when observance definition changes (??)
+ private long[] onsetsMillisec;
+ private DateTime[] onsetsDates;
+ private Map onsets = new TreeMap();
+ private Date initialOnset = null;
+
+ /**
+ * Used for parsing times in a UTC date-time representation.
+ */
+ private static final String UTC_PATTERN = "yyyyMMdd'T'HHmmss";
+ private static final DateFormat UTC_FORMAT = new SimpleDateFormat(
+ UTC_PATTERN);
+
+ static {
+ UTC_FORMAT.setTimeZone(TimeZones.getUtcTimeZone());
+ UTC_FORMAT.setLenient(false);
+ }
+
+ /* If this is set we have rrules. If we get a date after this rebuild onsets */
+ private Date onsetLimit;
+
+ /**
+ * Constructs a timezone observance with the specified name and no properties.
+ * @param name the name of this observance component
+ */
+ protected Observance(final String name) {
+ super(name);
+ }
+
+ /**
+ * Constructor protected to enforce use of sub-classes from this library.
+ * @param name the name of the time type
+ * @param properties a list of properties
+ */
+ protected Observance(final String name, final PropertyList properties) {
+ super(name, properties);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse) throws ValidationException {
+
+ // From "4.8.3.3 Time Zone Offset From":
+ // Conformance: This property MUST be specified in a "VTIMEZONE"
+ // calendar component.
+ PropertyValidator.getInstance().assertOne(Property.TZOFFSETFROM,
+ getProperties());
+
+ // From "4.8.3.4 Time Zone Offset To":
+ // Conformance: This property MUST be specified in a "VTIMEZONE"
+ // calendar component.
+ PropertyValidator.getInstance().assertOne(Property.TZOFFSETTO,
+ getProperties());
+
+ /*
+ * ; the following are each REQUIRED, ; but MUST NOT occur more than once dtstart / tzoffsetto / tzoffsetfrom /
+ */
+ PropertyValidator.getInstance().assertOne(Property.DTSTART,
+ getProperties());
+
+ /*
+ * ; the following are optional, ; and MAY occur more than once comment / rdate / rrule / tzname / x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * Returns the latest applicable onset of this observance for the specified date.
+ * @param date the latest date that an observance onset may occur
+ * @return the latest applicable observance date or null if there is no applicable observance onset for the
+ * specified date
+ */
+ public final Date getLatestOnset(final Date date) {
+
+ if (initialOnset == null) {
+ try {
+ initialOnset = applyOffsetFrom(calculateOnset(((DtStart) getProperty(Property.DTSTART)).getDate()));
+ } catch (ParseException e) {
+ Log log = LogFactory.getLog(Observance.class);
+ log.error("Unexpected error calculating initial onset", e);
+ // XXX: is this correct?
+ return null;
+ }
+ }
+
+ // observance not applicable if date is before the effective date of this observance..
+ if (date.before(initialOnset)) {
+ return null;
+ }
+
+ if ((onsetsMillisec != null) && (onsetLimit == null || date.before(onsetLimit))) {
+ return getCachedOnset(date);
+ }
+
+ Date onset = initialOnset;
+ Date initialOnsetUTC;
+ // get first onset without adding TZFROM as this may lead to a day boundary
+ // change which would be incompatible with BYDAY RRULES
+ // we will have to add the offset to all cacheable onsets
+ try {
+ initialOnsetUTC = calculateOnset(((DtStart) getProperty(Property.DTSTART)).getDate());
+ } catch (ParseException e) {
+ Log log = LogFactory.getLog(Observance.class);
+ log.error("Unexpected error calculating initial onset", e);
+ // XXX: is this correct?
+ return null;
+ }
+ // collect all onsets for the purposes of caching..
+ final DateList cacheableOnsets = new DateList();
+ cacheableOnsets.setUtc(true);
+ cacheableOnsets.add(initialOnset);
+
+ // check rdates for latest applicable onset..
+ final PropertyList rdates = getProperties(Property.RDATE);
+ for (final Iterator i = rdates.iterator(); i.hasNext();) {
+ final RDate rdate = (RDate) i.next();
+ for (final Iterator j = rdate.getDates().iterator(); j.hasNext();) {
+ try {
+ final DateTime rdateOnset = applyOffsetFrom(calculateOnset((Date) j.next()));
+ if (!rdateOnset.after(date) && rdateOnset.after(onset)) {
+ onset = rdateOnset;
+ }
+ /*
+ * else if (rdateOnset.after(date) && rdateOnset.after(onset) && (nextOnset == null ||
+ * rdateOnset.before(nextOnset))) { nextOnset = rdateOnset; }
+ */
+ cacheableOnsets.add(rdateOnset);
+ } catch (ParseException e) {
+ Log log = LogFactory.getLog(Observance.class);
+ log.error("Unexpected error calculating onset", e);
+ }
+ }
+ }
+
+ // check recurrence rules for latest applicable onset..
+ final PropertyList rrules = getProperties(Property.RRULE);
+ for (final Iterator i = rrules.iterator(); i.hasNext();) {
+ final RRule rrule = (RRule) i.next();
+ // include future onsets to determine onset period..
+ final Calendar cal = Dates.getCalendarInstance(date);
+ cal.setTime(date);
+ cal.add(Calendar.YEAR, 10);
+ onsetLimit = Dates.getInstance(cal.getTime(), Value.DATE_TIME);
+ final DateList recurrenceDates = rrule.getRecur().getDates(initialOnsetUTC,
+ onsetLimit, Value.DATE_TIME);
+ for (final Iterator j = recurrenceDates.iterator(); j.hasNext();) {
+ final DateTime rruleOnset = applyOffsetFrom((DateTime) j.next());
+ if (!rruleOnset.after(date) && rruleOnset.after(onset)) {
+ onset = rruleOnset;
+ }
+ /*
+ * else if (rruleOnset.after(date) && rruleOnset.after(onset) && (nextOnset == null ||
+ * rruleOnset.before(nextOnset))) { nextOnset = rruleOnset; }
+ */
+ cacheableOnsets.add(rruleOnset);
+ }
+ }
+
+ // cache onsets..
+ Collections.sort(cacheableOnsets);
+ DateTime cacheableOnset = null;
+ this.onsetsMillisec = new long[cacheableOnsets.size()];
+ this.onsetsDates = new DateTime[onsetsMillisec.length];
+
+ for (int i = 0; i < onsetsMillisec.length; i++) {
+ cacheableOnset = (DateTime)cacheableOnsets.get(i);
+ onsetsMillisec[i] = cacheableOnset.getTime();
+ onsetsDates[i] = cacheableOnset;
+ }
+
+ return onset;
+ }
+
+ /**
+ * Returns a cached onset for the specified date.
+ * @param date
+ * @return a cached onset date or null if no cached onset is applicable for the specified date
+ */
+ private DateTime getCachedOnset(final Date date) {
+ int index = Arrays.binarySearch(onsetsMillisec, date.getTime());
+ if (index >= 0) {
+ return onsetsDates[index];
+ } else {
+ int insertionIndex = -index -1;
+ return onsetsDates[insertionIndex -1];
+ }
+ }
+
+ /**
+ * Returns the mandatory dtstart property.
+ * @return the DTSTART property or null if not specified
+ */
+ public final DtStart getStartDate() {
+ return (DtStart) getProperty(Property.DTSTART);
+ }
+
+ /**
+ * Returns the mandatory tzoffsetfrom property.
+ * @return the TZOFFSETFROM property or null if not specified
+ */
+ public final TzOffsetFrom getOffsetFrom() {
+ return (TzOffsetFrom) getProperty(Property.TZOFFSETFROM);
+ }
+
+ /**
+ * Returns the mandatory tzoffsetto property.
+ * @return the TZOFFSETTO property or null if not specified
+ */
+ public final TzOffsetTo getOffsetTo() {
+ return (TzOffsetTo) getProperty(Property.TZOFFSETTO);
+ }
+
+// private Date calculateOnset(DateProperty dateProperty) {
+// return calculateOnset(dateProperty.getValue());
+// }
+//
+ private DateTime calculateOnset(Date date) throws ParseException {
+ return calculateOnset(date.toString());
+ }
+
+ private DateTime calculateOnset(String dateStr) throws ParseException {
+
+ // Translate local onset into UTC time by parsing local time
+ // as GMT and adjusting by TZOFFSETFROM if required
+ long utcOnset;
+
+ synchronized (UTC_FORMAT) {
+ utcOnset = UTC_FORMAT.parse(dateStr).getTime();
+ }
+
+ // return a UTC
+ DateTime onset = new DateTime(true);
+ onset.setTime(utcOnset);
+ return onset;
+ }
+
+ private DateTime applyOffsetFrom(DateTime orig) {
+ DateTime withOffset = new DateTime(true);
+ withOffset.setTime(orig.getTime() - getOffsetFrom().getOffset().getOffset());
+ return withOffset;
+ }
+}
\ No newline at end of file
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/Standard.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/Standard.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import net.fortuna.ical4j.model.PropertyList;
+
+/**
+ * $Id$ [05-Apr-2004]
+ *
+ * Defines an iCalendar standard timezone observance component.
+ *
+ *
+ *
+ * standardc = "BEGIN" ":" "STANDARD" CRLF
+ *
+ * tzprop
+ *
+ * "END" ":" "STANDARD" CRLF
+ *
+ * tzprop = 3*(
+ *
+ * ; the following are each REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * dtstart / tzoffsetto / tzoffsetfrom /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * comment / rdate / rrule / tzname / x-prop
+ *
+ * )
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Standard extends Observance {
+
+ private static final long serialVersionUID = -4750910013406451159L;
+
+ /**
+ * Default constructor.
+ */
+ public Standard() {
+ super(STANDARD);
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public Standard(final PropertyList properties) {
+ super(STANDARD, properties);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VAlarm.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VAlarm.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,468 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.property.Action;
+import net.fortuna.ical4j.model.property.Attach;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.Duration;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Repeat;
+import net.fortuna.ical4j.model.property.Summary;
+import net.fortuna.ical4j.model.property.Trigger;
+import net.fortuna.ical4j.util.PropertyValidator;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VALARM component.
+ *
+ *
+ * 4.6.6 Alarm Component
+ *
+ * Component Name: VALARM
+ *
+ * Purpose: Provide a grouping of component properties that define an
+ * alarm.
+ *
+ * Formal Definition: A "VALARM" calendar component is defined by the
+ * following notation:
+ *
+ * alarmc = "BEGIN" ":" "VALARM" CRLF
+ * (audioprop / dispprop / emailprop / procprop)
+ * "END" ":" "VALARM" CRLF
+ *
+ * audioprop = 2*(
+ *
+ * ; 'action' and 'trigger' are both REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * action / trigger /
+ *
+ * ; 'duration' and 'repeat' are both optional,
+ * ; and MUST NOT occur more than once each,
+ * ; but if one occurs, so MUST the other
+ *
+ * duration / repeat /
+ *
+ * ; the following is optional,
+ * ; but MUST NOT occur more than once
+ *
+ * attach /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * x-prop
+ *
+ * )
+ *
+ *
+ *
+ * dispprop = 3*(
+ *
+ * ; the following are all REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * action / description / trigger /
+ *
+ * ; 'duration' and 'repeat' are both optional,
+ * ; and MUST NOT occur more than once each,
+ * ; but if one occurs, so MUST the other
+ *
+ * duration / repeat /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * *x-prop
+ *
+ * )
+ *
+ *
+ *
+ * emailprop = 5*(
+ *
+ * ; the following are all REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * action / description / trigger / summary
+ *
+ * ; the following is REQUIRED,
+ * ; and MAY occur more than once
+ *
+ * attendee /
+ *
+ * ; 'duration' and 'repeat' are both optional,
+ * ; and MUST NOT occur more than once each,
+ * ; but if one occurs, so MUST the other
+ *
+ * duration / repeat /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * attach / x-prop
+ *
+ * )
+ *
+ *
+ *
+ * procprop = 3*(
+ *
+ * ; the following are all REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * action / attach / trigger /
+ *
+ * ; 'duration' and 'repeat' are both optional,
+ * ; and MUST NOT occur more than once each,
+ * ; but if one occurs, so MUST the other
+ *
+ * duration / repeat /
+ *
+ * ; 'description' is optional,
+ * ; and MUST NOT occur more than once
+ *
+ * description /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * x-prop
+ *
+ * )
+ *
+ *
+ * Example 1 - Creating an alarm to trigger at a specific time:
+ *
+ *
+ * java.util.Calendar cal = java.util.Calendar.getInstance();
+ * cal.set(java.util.Calendar.MONTH, java.util.Calendar.DECEMBER);
+ * cal.set(java.util.Calendar.DAY_OF_MONTH, 25);
+ *
+ * VAlarm christmas = new VAlarm(cal.getTime());
+ *
+ *
+ * Example 2 - Creating an alarm to trigger one (1) hour before the scheduled start of the parent event/the parent todo
+ * is due:
+ *
+ *
+ * VAlarm reminder = new VAlarm(new Dur(0, -1, 0, 0));
+ *
+ * // repeat reminder four (4) more times every fifteen (15) minutes..
+ * reminder.getProperties().add(new Repeat(4));
+ * reminder.getProperties().add(new Duration(new Dur(0, 0, 15, 0)));
+ *
+ * // display a message..
+ * reminder.getProperties().add(Action.DISPLAY);
+ * reminder.getProperties().add(new Description("Progress Meeting at 9:30am"));
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class VAlarm extends CalendarComponent {
+
+ private static final long serialVersionUID = -8193965477414653802L;
+
+ private final Map actionValidators = new HashMap();
+ {
+ actionValidators.put(Action.AUDIO, new AudioValidator());
+ actionValidators.put(Action.DISPLAY, new DisplayValidator());
+ actionValidators.put(Action.EMAIL, new EmailValidator());
+ actionValidators.put(Action.PROCEDURE, new ProcedureValidator());
+ }
+
+ private final Validator itipValidator = new ITIPValidator();
+
+ /**
+ * Default constructor.
+ */
+ public VAlarm() {
+ super(VALARM);
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public VAlarm(final PropertyList properties) {
+ super(VALARM, properties);
+ }
+
+ /**
+ * Constructs a new VALARM instance that will trigger at the specified time.
+ * @param trigger the time the alarm will trigger
+ */
+ public VAlarm(final DateTime trigger) {
+ this();
+ getProperties().add(new Trigger(trigger));
+ }
+
+ /**
+ * Constructs a new VALARM instance that will trigger at the specified time relative to the event/todo component.
+ * @param trigger a duration of time relative to the parent component that the alarm will trigger at
+ */
+ public VAlarm(final Dur trigger) {
+ this();
+ getProperties().add(new Trigger(trigger));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ /*
+ * ; 'action' and 'trigger' are both REQUIRED, ; but MUST NOT occur more than once action / trigger /
+ */
+ PropertyValidator.getInstance().assertOne(Property.ACTION, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.TRIGGER, getProperties());
+
+ /*
+ * ; 'duration' and 'repeat' are both optional, ; and MUST NOT occur more than once each, ; but if one occurs,
+ * so MUST the other duration / repeat /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.REPEAT, getProperties());
+
+ try {
+ PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REPEAT, getProperties());
+ }
+ catch (ValidationException ve) {
+ PropertyValidator.getInstance().assertOne(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.REPEAT, getProperties());
+ }
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once x-prop
+ */
+
+ final Validator actionValidator = (Validator) actionValidators.get(getAction());
+ if (actionValidator != null) {
+ actionValidator.validate();
+ }
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ return itipValidator;
+ }
+
+ private class AudioValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once attach /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.ATTACH, getProperties());
+ }
+ }
+
+ private class DisplayValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+ /*
+ * ; the following are all REQUIRED, ; but MUST NOT occur more than once action / description / trigger /
+ */
+ PropertyValidator.getInstance().assertOne(Property.DESCRIPTION, getProperties());
+ }
+ }
+
+ private class EmailValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+ /*
+ * ; the following are all REQUIRED,
+ * ; but MUST NOT occur more than once action / description / trigger / summary
+ * ; the following is REQUIRED,
+ * ; and MAY occur more than once attendee /
+ * ; 'duration' and 'repeat' are both optional,
+ * ; and MUST NOT occur more than once each,
+ * ; but if one occurs, so MUST the other duration / repeat /
+ * ; the following are optional,
+ * ; and MAY occur more than once attach / x-prop
+ */
+ PropertyValidator.getInstance().assertOne(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties());
+ }
+ }
+
+ private class ProcedureValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+ /*
+ * ; the following are all REQUIRED,
+ * ; but MUST NOT occur more than once action / attach / trigger /
+ * ; 'duration' and 'repeat' are both optional,
+ * ; and MUST NOT occur more than once each,
+ * ; but if one occurs, so MUST the other duration / repeat /
+ * ; 'description' is optional,
+ * ; and MUST NOT occur more than once description /
+ * ; the following is optional, ; and MAY occur more than once x-prop
+ */
+ PropertyValidator.getInstance().assertOne(Property.ATTACH, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ }
+ }
+
+ /**
+ * Common validation for all iTIP methods.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * VALARM 0+
+ * ACTION 1
+ * ATTACH 0+
+ * DESCRIPTION 0 or 1
+ * DURATION 0 or 1 if present REPEAT MUST be present
+ * REPEAT 0 or 1 if present DURATION MUST be present
+ * SUMMARY 0 or 1
+ * TRIGGER 1
+ * X-PROPERTY 0+
+ *
+ */
+ private class ITIPValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.ACTION, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.TRIGGER, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.REPEAT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties());
+ }
+ }
+
+ /**
+ * Returns the mandatory action property.
+ * @return the ACTION property or null if not specified
+ */
+ public final Action getAction() {
+ return (Action) getProperty(Property.ACTION);
+ }
+
+ /**
+ * Returns the mandatory trigger property.
+ * @return the TRIGGER property or null if not specified
+ */
+ public final Trigger getTrigger() {
+ return (Trigger) getProperty(Property.TRIGGER);
+ }
+
+ /**
+ * Returns the optional duration property.
+ * @return the DURATION property or null if not specified
+ */
+ public final Duration getDuration() {
+ return (Duration) getProperty(Property.DURATION);
+ }
+
+ /**
+ * Returns the optional repeat property.
+ * @return the REPEAT property or null if not specified
+ */
+ public final Repeat getRepeat() {
+ return (Repeat) getProperty(Property.REPEAT);
+ }
+
+ /**
+ * Returns the optional attachment property.
+ * @return the ATTACH property or null if not specified
+ */
+ public final Attach getAttachment() {
+ return (Attach) getProperty(Property.ATTACH);
+ }
+
+ /**
+ * Returns the optional description property.
+ * @return the DESCRIPTION property or null if not specified
+ */
+ public final Description getDescription() {
+ return (Description) getProperty(Property.DESCRIPTION);
+ }
+
+ /**
+ * Returns the optional summary property.
+ * @return the SUMMARY property or null if not specified
+ */
+ public final Summary getSummary() {
+ return (Summary) getProperty(Property.SUMMARY);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VAvailability.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VAvailability.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,260 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.util.Iterator;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.property.DtEnd;
+import net.fortuna.ical4j.model.property.DtStamp;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.util.PropertyValidator;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VAVAILABILITY component.
+ *
+ *
+ Component Name: VAVAILABILITY
+
+ Purpose: Provide a grouping of component properties that describe
+ the availability associated with a calendar user.
+
+ Format Definition: A "VAVAILABILITY" calendar component is defined
+ by the following notation:
+
+ availabilityc = "BEGIN" ":" "VAVAILABILITY" CRLF
+ availabilityprop *availablec
+ "END" ":" "VAVAILABILITY" CRLF
+
+ availabilityprop = *(
+
+ ; the following are REQUIRED,
+ ; but MUST NOT occur more than once
+
+ dtstamp / dtstart / uid
+
+ ; the following are OPTIONAL,
+ ; but MUST NOT occur more than once
+
+ busytype / created / last-mod /
+ organizer / seq / summary / url /
+
+ ; either 'dtend' or 'duration' may appear
+ ; in a 'availabilityprop', but 'dtend' and
+ ; 'duration' MUST NOT occur in the same
+ ; 'availabilityprop'
+
+ dtend / duration /
+
+ ; the following are OPTIONAL,
+ ; and MAY occur more than once
+
+ categories / comment / contact / x-prop
+
+ )
+
+ *
+ *
+ *
+ * @author Ben Fortuna
+ * @author Mike Douglass
+ */
+public class VAvailability extends CalendarComponent {
+
+ private static final long serialVersionUID = -3001603309266267258L;
+
+ private ComponentList available;
+
+ /**
+ * Default constructor.
+ */
+ public VAvailability() {
+ super(VAVAILABILITY);
+ this.available = new ComponentList();
+ getProperties().add(new DtStamp());
+ }
+
+ /**
+ * Constructs a new instance containing the specified properties.
+ * @param properties a list of properties
+ */
+ public VAvailability(final PropertyList properties) {
+ super(VAVAILABILITY, properties);
+ this.available = new ComponentList();
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ * @param available a list of available components
+ */
+ public VAvailability(final PropertyList properties, final ComponentList available) {
+ super(VEVENT, properties);
+ this.available = available;
+ }
+
+ /**
+ * Returns the list of available times.
+ * @return a component list
+ */
+ public final ComponentList getAvailable() {
+ return available;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ b.append(BEGIN);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ b.append(getProperties());
+ b.append(getAvailable());
+ b.append(END);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ return b.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ // validate that getAvailable() only contains Available components
+ final Iterator iterator = getAvailable().iterator();
+ while (iterator.hasNext()) {
+ final Component component = (Component) iterator.next();
+
+ if (!(component instanceof Available)) {
+ throw new ValidationException("Component ["
+ + component.getName() + "] may not occur in VAVAILABILITY");
+ }
+ }
+
+ /*
+ * ; dtstamp / dtstart / uid are required, but MUST NOT occur more than once /
+ */
+ PropertyValidator.getInstance().assertOne(Property.DTSTART,
+ getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP,
+ getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID,
+ getProperties());
+
+ /* If specified, the "DTSTART" and "DTEND" properties in
+ * "VAVAILABILITY" components and "AVAILABLE" sub-components MUST be
+ * "DATE-TIME" values specified as either date with UTC time or date
+ * with local time and a time zone reference.
+ */
+ final DtStart start = (DtStart) getProperty(Property.DTSTART);
+ if (Value.DATE.equals(start.getParameter(Parameter.VALUE))) {
+ throw new ValidationException("Property [" + Property.DTSTART
+ + "] must be a " + Value.DATE_TIME);
+ }
+
+ /*
+ * ; either 'dtend' or 'duration' may appear in ; a 'eventprop', but 'dtend' and 'duration' ; MUST NOT occur in
+ * the same 'eventprop' dtend / duration /
+ */
+ if (getProperty(Property.DTEND) != null) {
+ PropertyValidator.getInstance().assertOne(Property.DTEND,
+ getProperties());
+ /* Must be DATE_TIME */
+ final DtEnd end = (DtEnd) getProperty(Property.DTEND);
+ if (Value.DATE.equals(end.getParameter(Parameter.VALUE))) {
+ throw new ValidationException("Property [" + Property.DTEND
+ + "] must be a " + Value.DATE_TIME);
+ }
+
+ if (getProperty(Property.DURATION) != null) {
+ throw new ValidationException("Only one of Property [" + Property.DTEND
+ + "] or [" + Property.DURATION +
+ " must appear a VAVAILABILITY");
+ }
+ }
+
+ /*
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * busytype / created / last-mod /
+ * organizer / seq / summary / url /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.BUSYTYPE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.ORGANIZER,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL,
+ getProperties());
+
+ /*
+ * ; the following are optional, ; and MAY occur more than once
+ * categories / comment / contact / x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VEvent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VEvent.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,1520 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.Period;
+import net.fortuna.ical4j.model.PeriodList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.property.Clazz;
+import net.fortuna.ical4j.model.property.Created;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.DtEnd;
+import net.fortuna.ical4j.model.property.DtStamp;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.Duration;
+import net.fortuna.ical4j.model.property.Geo;
+import net.fortuna.ical4j.model.property.LastModified;
+import net.fortuna.ical4j.model.property.Location;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.Priority;
+import net.fortuna.ical4j.model.property.RecurrenceId;
+import net.fortuna.ical4j.model.property.Sequence;
+import net.fortuna.ical4j.model.property.Status;
+import net.fortuna.ical4j.model.property.Summary;
+import net.fortuna.ical4j.model.property.Transp;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Url;
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.ComponentValidator;
+import net.fortuna.ical4j.util.Dates;
+import net.fortuna.ical4j.util.PropertyValidator;
+import net.fortuna.ical4j.util.Strings;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VEVENT component.
+ *
+ *
+ * 4.6.1 Event Component
+ *
+ * Component Name: "VEVENT"
+ *
+ * Purpose: Provide a grouping of component properties that describe an
+ * event.
+ *
+ * Format Definition: A "VEVENT" calendar component is defined by the
+ * following notation:
+ *
+ * eventc = "BEGIN" ":" "VEVENT" CRLF
+ * eventprop *alarmc
+ * "END" ":" "VEVENT" CRLF
+ *
+ * eventprop = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * class / created / description / dtstart / geo /
+ * last-mod / location / organizer / priority /
+ * dtstamp / seq / status / summary / transp /
+ * uid / url / recurid /
+ *
+ * ; either 'dtend' or 'duration' may appear in
+ * ; a 'eventprop', but 'dtend' and 'duration'
+ * ; MUST NOT occur in the same 'eventprop'
+ *
+ * dtend / duration /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * attach / attendee / categories / comment /
+ * contact / exdate / exrule / rstatus / related /
+ * resources / rdate / rrule / x-prop
+ *
+ * )
+ *
+ *
+ * Example 1 - Creating a new all-day event:
+ *
+ *
+ * java.util.Calendar cal = java.util.Calendar.getInstance();
+ * cal.set(java.util.Calendar.MONTH, java.util.Calendar.DECEMBER);
+ * cal.set(java.util.Calendar.DAY_OF_MONTH, 25);
+ *
+ * VEvent christmas = new VEvent(cal.getTime(), "Christmas Day");
+ *
+ * // initialise as an all-day event..
+ * christmas.getProperties().getProperty(Property.DTSTART).getParameters().add(
+ * Value.DATE);
+ *
+ * // add timezone information..
+ * VTimeZone tz = VTimeZone.getDefault();
+ * TzId tzParam = new TzId(tz.getProperties().getProperty(Property.TZID)
+ * .getValue());
+ * christmas.getProperties().getProperty(Property.DTSTART).getParameters().add(
+ * tzParam);
+ *
+ *
+ * Example 2 - Creating an event of one (1) hour duration:
+ *
+ *
+ * java.util.Calendar cal = java.util.Calendar.getInstance();
+ * // tomorrow..
+ * cal.add(java.util.Calendar.DAY_OF_MONTH, 1);
+ * cal.set(java.util.Calendar.HOUR_OF_DAY, 9);
+ * cal.set(java.util.Calendar.MINUTE, 30);
+ *
+ * VEvent meeting = new VEvent(cal.getTime(), 1000 * 60 * 60, "Progress Meeting");
+ *
+ * // add timezone information..
+ * VTimeZone tz = VTimeZone.getDefault();
+ * TzId tzParam = new TzId(tz.getProperties().getProperty(Property.TZID)
+ * .getValue());
+ * meeting.getProperties().getProperty(Property.DTSTART).getParameters().add(
+ * tzParam);
+ *
+ *
+ * Example 3 - Retrieve a list of periods representing a recurring event in a specified range:
+ *
+ *
+ * Calendar weekday9AM = Calendar.getInstance();
+ * weekday9AM.set(2005, Calendar.MARCH, 7, 9, 0, 0);
+ * weekday9AM.set(Calendar.MILLISECOND, 0);
+ *
+ * Calendar weekday5PM = Calendar.getInstance();
+ * weekday5PM.set(2005, Calendar.MARCH, 7, 17, 0, 0);
+ * weekday5PM.set(Calendar.MILLISECOND, 0);
+ *
+ * // Do the recurrence until December 31st.
+ * Calendar untilCal = Calendar.getInstance();
+ * untilCal.set(2005, Calendar.DECEMBER, 31);
+ * untilCal.set(Calendar.MILLISECOND, 0);
+ *
+ * // 9:00AM to 5:00PM Rule
+ * Recur recur = new Recur(Recur.WEEKLY, untilCal.getTime());
+ * recur.getDayList().add(WeekDay.MO);
+ * recur.getDayList().add(WeekDay.TU);
+ * recur.getDayList().add(WeekDay.WE);
+ * recur.getDayList().add(WeekDay.TH);
+ * recur.getDayList().add(WeekDay.FR);
+ * recur.setInterval(3);
+ * recur.setWeekStartDay(WeekDay.MO.getDay());
+ * RRule rrule = new RRule(recur);
+ *
+ * Summary summary = new Summary("TEST EVENTS THAT HAPPEN 9-5 MON-FRI");
+ *
+ * weekdayNineToFiveEvents = new VEvent();
+ * weekdayNineToFiveEvents.getProperties().add(rrule);
+ * weekdayNineToFiveEvents.getProperties().add(summary);
+ * weekdayNineToFiveEvents.getProperties().add(new DtStart(weekday9AM.getTime()));
+ * weekdayNineToFiveEvents.getProperties().add(new DtEnd(weekday5PM.getTime()));
+ *
+ * // Test Start 04/01/2005, End One month later.
+ * // Query Calendar Start and End Dates.
+ * Calendar queryStartDate = Calendar.getInstance();
+ * queryStartDate.set(2005, Calendar.APRIL, 1, 14, 47, 0);
+ * queryStartDate.set(Calendar.MILLISECOND, 0);
+ * Calendar queryEndDate = Calendar.getInstance();
+ * queryEndDate.set(2005, Calendar.MAY, 1, 11, 15, 0);
+ * queryEndDate.set(Calendar.MILLISECOND, 0);
+ *
+ * // This range is monday to friday every three weeks, starting from
+ * // March 7th 2005, which means for our query dates we need
+ * // April 18th through to the 22nd.
+ * PeriodList periods = weekdayNineToFiveEvents.getPeriods(queryStartDate
+ * .getTime(), queryEndDate.getTime());
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class VEvent extends CalendarComponent {
+
+ private static final long serialVersionUID = 2547948989200697335L;
+
+ private final Map methodValidators = new HashMap();
+ {
+ methodValidators.put(Method.ADD, new AddValidator());
+ methodValidators.put(Method.CANCEL, new CancelValidator());
+ methodValidators.put(Method.COUNTER, new CounterValidator());
+ methodValidators.put(Method.DECLINE_COUNTER, new DeclineCounterValidator());
+ methodValidators.put(Method.PUBLISH, new PublishValidator());
+ methodValidators.put(Method.REFRESH, new RefreshValidator());
+ methodValidators.put(Method.REPLY, new ReplyValidator());
+ methodValidators.put(Method.REQUEST, new RequestValidator());
+ }
+
+ private ComponentList alarms;
+
+ /**
+ * Default constructor.
+ */
+ public VEvent() {
+ super(VEVENT);
+ this.alarms = new ComponentList();
+ getProperties().add(new DtStamp());
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public VEvent(final PropertyList properties) {
+ super(VEVENT, properties);
+ this.alarms = new ComponentList();
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ * @param alarms a list of alarms
+ */
+ public VEvent(final PropertyList properties, final ComponentList alarms) {
+ super(VEVENT, properties);
+ this.alarms = alarms;
+ }
+
+ /**
+ * Constructs a new VEVENT instance starting at the specified time with the specified summary.
+ * @param start the start date of the new event
+ * @param summary the event summary
+ */
+ public VEvent(final Date start, final String summary) {
+ this();
+ getProperties().add(new DtStart(start));
+ getProperties().add(new Summary(summary));
+ }
+
+ /**
+ * Constructs a new VEVENT instance starting and ending at the specified times with the specified summary.
+ * @param start the start date of the new event
+ * @param end the end date of the new event
+ * @param summary the event summary
+ */
+ public VEvent(final Date start, final Date end, final String summary) {
+ this();
+ getProperties().add(new DtStart(start));
+ getProperties().add(new DtEnd(end));
+ getProperties().add(new Summary(summary));
+ }
+
+ /**
+ * Constructs a new VEVENT instance starting at the specified times, for the specified duration, with the specified
+ * summary.
+ * @param start the start date of the new event
+ * @param duration the duration of the new event
+ * @param summary the event summary
+ */
+ public VEvent(final Date start, final Dur duration, final String summary) {
+ this();
+ getProperties().add(new DtStart(start));
+ getProperties().add(new Duration(duration));
+ getProperties().add(new Summary(summary));
+ }
+
+ /**
+ * Returns the list of alarms for this event.
+ * @return a component list
+ */
+ public final ComponentList getAlarms() {
+ return alarms;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ b.append(BEGIN);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ b.append(getProperties());
+ b.append(getAlarms());
+ b.append(END);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ return b.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse) throws ValidationException {
+
+ // validate that getAlarms() only contains VAlarm components
+ final Iterator iterator = getAlarms().iterator();
+ while (iterator.hasNext()) {
+ final Component component = (Component) iterator.next();
+
+ if (!(component instanceof VAlarm)) {
+ throw new ValidationException("Component ["
+ + component.getName() + "] may not occur in VEVENT");
+ }
+
+ ((VAlarm) component).validate(recurse);
+ }
+
+ if (!CompatibilityHints
+ .isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+
+ // From "4.8.4.7 Unique Identifier":
+ // Conformance: The property MUST be specified in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.UID,
+ getProperties());
+
+ // From "4.8.7.2 Date/Time Stamp":
+ // Conformance: This property MUST be included in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP,
+ getProperties());
+ }
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once class / created / description / dtstart /
+ * geo / last-mod / location / organizer / priority / dtstamp / seq / status / summary / transp / uid / url /
+ * recurid /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.ORGANIZER,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTAMP,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TRANSP,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.UID,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID,
+ getProperties());
+
+ final Status status = (Status) getProperty(Property.STATUS);
+ if (status != null && !Status.VEVENT_TENTATIVE.getValue().equals(status.getValue())
+ && !Status.VEVENT_CONFIRMED.getValue().equals(status.getValue())
+ && !Status.VEVENT_CANCELLED.getValue().equals(status.getValue())) {
+ throw new ValidationException("Status property ["
+ + status.toString() + "] is not applicable for VEVENT");
+ }
+
+ /*
+ * ; either 'dtend' or 'duration' may appear in ; a 'eventprop', but 'dtend' and 'duration' ; MUST NOT occur in
+ * the same 'eventprop' dtend / duration /
+ */
+ try {
+ PropertyValidator.getInstance().assertNone(Property.DTEND,
+ getProperties());
+ }
+ catch (ValidationException ve) {
+ PropertyValidator.getInstance().assertNone(Property.DURATION,
+ getProperties());
+ }
+
+ if (getProperty(Property.DTEND) != null) {
+
+ /*
+ * The "VEVENT" is also the calendar component used to specify an anniversary or daily reminder within a
+ * calendar. These events have a DATE value type for the "DTSTART" property instead of the default data type
+ * of DATE-TIME. If such a "VEVENT" has a "DTEND" property, it MUST be specified as a DATE value also. The
+ * anniversary type of "VEVENT" can span more than one date (i.e, "DTEND" property value is set to a
+ * calendar date after the "DTSTART" property value).
+ */
+ final DtStart start = (DtStart) getProperty(Property.DTSTART);
+ final DtEnd end = (DtEnd) getProperty(Property.DTEND);
+
+ if (start != null) {
+ final Parameter startValue = start.getParameter(Parameter.VALUE);
+ final Parameter endValue = end.getParameter(Parameter.VALUE);
+
+ boolean startEndValueMismatch = false;
+ if (endValue != null) {
+ if (startValue != null && !endValue.equals(startValue)) {
+ // invalid..
+ startEndValueMismatch = true;
+ }
+ else if (startValue == null && !Value.DATE_TIME.equals(endValue)) {
+ // invalid..
+ startEndValueMismatch = true;
+ }
+ }
+ else if (startValue != null && !Value.DATE_TIME.equals(startValue)) {
+ //invalid..
+ startEndValueMismatch = true;
+ }
+ if (startEndValueMismatch) {
+ throw new ValidationException("Property [" + Property.DTEND
+ + "] must have the same [" + Parameter.VALUE
+ + "] as [" + Property.DTSTART + "]");
+ }
+ }
+ }
+
+ /*
+ * ; the following are optional, ; and MAY occur more than once attach / attendee / categories / comment /
+ * contact / exdate / exrule / rstatus / related / resources / rdate / rrule / x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ return (Validator) methodValidators.get(method);
+ }
+
+ /**
+ * METHOD:ADD Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "ADD"
+ * VEVENT 1
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1
+ * SEQUENCE 1 MUST be greater than 0
+ * SUMMARY 1 Can be null
+ * UID 1 MUST match that of the original event
+ *
+ * ATTACH 0+
+ * ATTENDEE 0+
+ * CATEGORIES 0 or 1 This property MAY contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1 Can be null
+ * DTEND 0 or 1 if present DURATION MUST NOT be present
+ * DURATION 0 or 1 if present DTEND MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property MAY contain a list of values
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of TENTATIVE/CONFIRMED
+ * TRANSP 0 or 1
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * RECURRENCE-ID 0
+ * REQUEST-STATUS 0
+ *
+ * VALARM 0+
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VFREEBUSY 0
+ * VTODO 0
+ * VJOURNAL 0
+ *
+ *
+ */
+ private class AddValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.ADD);
+ }
+ }
+ }
+
+ /**
+ * METHOD:CANCEL Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "CANCEL"
+ *
+ * VEVENT 1+ All must have the same UID
+ * ATTENDEE 0+ MUST include all "Attendees" being removed
+ * the event. MUST include all "Attendees" if
+ * the entire event is cancelled.
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * SEQUENCE 1
+ * UID 1 MUST be the UID of the original REQUEST
+ *
+ * COMMENT 0 or 1
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of values
+ * CLASS 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1
+ * DTEND 0 or 1 if present DURATION MUST NOT be present
+ * DTSTART 0 or 1
+ * DURATION 0 or 1 if present DTEND MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 MUST be present if referring to one or
+ * more or more recurring instances.
+ * Otherwise it MUST NOT be present
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1
+ * RRULE 0+
+ * STATUS 0 or 1 MUST be set to CANCELLED. If uninviting
+ * specific "Attendees" then MUST NOT be
+ * included.
+ * SUMMARY 0 or 1
+ * TRANSP 0 or 1
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ * REQUEST-STATUS 0
+ *
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VTODO 0
+ * VJOURNAL 0
+ * VFREEBUSY 0
+ * VALARM 0
+ *
+ *
+ */
+ private class CancelValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public final void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ * METHOD:COUNTER Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "COUNTER"
+ *
+ * VEVENT 1
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1 MUST be the "Organizer" of the original
+ * event
+ * SEQUENCE 1 MUST be present if value is greater than 0,
+ * MAY be present if 0
+ * SUMMARY 1 Can be null
+ * UID 1 MUST be the UID associated with the REQUEST
+ * being countered
+ *
+ * ATTACH 0+
+ * ATTENDEE 0+ Can also be used to propose other
+ * "Attendees"
+ * CATEGORIES 0 or 1 This property may contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1
+ * DTEND 0 or 1 if present DURATION MUST NOT be present
+ * DURATION 0 or 1 if present DTEND MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * recurring calendar component. Otherwise it
+ * MUST NOT be present.
+ * RELATED-TO 0+
+ * REQUEST-STATUS 0+
+ * RESOURCES 0 or 1 This property may contain a list of values
+ * RRULE 0+
+ * STATUS 0 or 1 Value must be one of CONFIRMED/TENATIVE/
+ * CANCELLED
+ * TRANSP 0 or 1
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * VALARM 0+
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VTODO 0
+ * VJOURNAL 0
+ * VFREEBUSY 0
+ *
+ *
+ */
+ private class CounterValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ }
+
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.COUNTER);
+ }
+ }
+ }
+
+ /**
+ * METHOD:DECLINECOUNTER Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "DECLINECOUNTER"
+ *
+ * VEVENT 1
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * UID 1 MUST, same UID specified in original
+ * REQUEST and subsequent COUNTER
+ * COMMENT 0 or 1
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * recurring calendar component. Otherwise it
+ * MUST NOT be present.
+ * REQUEST-STATUS 0+
+ * SEQUENCE 0 OR 1 MUST be present if value is greater than 0,
+ * MAY be present if 0
+ * X-PROPERTY 0+
+ * ATTACH 0
+ * ATTENDEE 0
+ * CATEGORIES 0
+ * CLASS 0
+ * CONTACT 0
+ * CREATED 0
+ * DESCRIPTION 0
+ * DTEND 0
+ * DTSTART 0
+ * DURATION 0
+ * EXDATE 0
+ * EXRULE 0
+ * GEO 0
+ * LAST-MODIFIED 0
+ * LOCATION 0
+ * PRIORITY 0
+ * RDATE 0
+ * RELATED-TO 0
+ * RESOURCES 0
+ * RRULE 0
+ * STATUS 0
+ * SUMMARY 0
+ * TRANSP 0
+ * URL 0
+ *
+ * X-COMPONENT 0+
+ * VTODO 0
+ * VJOURNAL 0
+ * VFREEBUSY 0
+ * VTIMEZONE 0
+ * VALARM 0
+ *
+ *
+ */
+ private class DeclineCounterValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.ATTACH, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CONTACT, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.EXDATE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.EXRULE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RDATE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RELATED_TO, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RRULE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.URL, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ * METHOD:PUBLISH Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST equal "PUBLISH"
+ * VEVENT 1+
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1
+ * SUMMARY 1 Can be null.
+ * UID 1
+ * RECURRENCE-ID 0 or 1 only if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it MUST NOT be present.
+ * SEQUENCE 0 or 1 MUST be present if value is greater than
+ * 0, MAY be present if 0
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of
+ * values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1 Can be null
+ * DTEND 0 or 1 if present DURATION MUST NOT be present
+ * DURATION 0 or 1 if present DTEND MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property MAY contain a list of values
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of TENTATIVE/CONFIRMED/CANCELLED
+ * TRANSP 0 or 1
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * ATTENDEE 0
+ * REQUEST-STATUS 0
+ *
+ * VALARM 0+
+ * VFREEBUSY 0
+ * VJOURNAL 0
+ * VTODO 0
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ *
+ */
+ private class PublishValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ }
+
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ PropertyValidator.getInstance().assertNone(Property.ATTENDEE, getProperties());
+ }
+
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.PUBLISH);
+ }
+ }
+ }
+
+ /**
+ * METHOD:REFRESH Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "REFRESH"
+ *
+ * VEVENT 1
+ * ATTENDEE 1 MUST be the address of requestor
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * UID 1 MUST be the UID associated with original
+ * REQUEST
+ * COMMENT 0 or 1
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it must NOT be present.
+ * X-PROPERTY 0+
+ *
+ * ATTACH 0
+ * CATEGORIES 0
+ * CLASS 0
+ * CONTACT 0
+ * CREATED 0
+ * DESCRIPTION 0
+ * DTEND 0
+ * DTSTART 0
+ * DURATION 0
+ * EXDATE 0
+ * EXRULE 0
+ * GEO 0
+ * LAST-MODIFIED 0
+ * LOCATION 0
+ * PRIORITY 0
+ * RDATE 0
+ * RELATED-TO 0
+ * REQUEST-STATUS 0
+ * RESOURCES 0
+ * RRULE 0
+ * SEQUENCE 0
+ * STATUS 0
+ * SUMMARY 0
+ * TRANSP 0
+ * URL 0
+ *
+ * X-COMPONENT 0+
+ *
+ * VTODO 0
+ * VJOURNAL 0
+ * VFREEBUSY 0
+ * VTIMEZONE 0
+ * VALARM 0
+ *
+ *
+ */
+ private class RefreshValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.ATTACH, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CONTACT, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.EXDATE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.EXRULE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RDATE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RELATED_TO, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RRULE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.URL, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ * METHOD:REPLY Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "REPLY"
+ * VEVENT 1+ All components MUST have the same UID
+ * ATTENDEE 1 MUST be the address of the Attendee
+ * replying.
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * RECURRENCE-ID 0 or 1 only if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it must NOT be present.
+ * UID 1 MUST be the UID of the original REQUEST
+ *
+ * SEQUENCE 0 or 1 MUST if non-zero, MUST be the sequence
+ * number of the original REQUEST. MAY be
+ * present if 0.
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1
+ * DTEND 0 or 1 if present DURATION MUST NOT be present
+ * DTSTART 0 or 1
+ * DURATION 0 or 1 if present DTEND MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property MAY contain a list of values
+ * REQUEST-STATUS 0+
+ * RRULE 0+
+ * STATUS 0 or 1
+ * SUMMARY 0 or 1
+ * TRANSP 0 or 1
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * VTIMEZONE 0 or 1 MUST be present if any date/time refers
+ * to a timezone
+ * X-COMPONENT 0+
+ *
+ * VALARM 0
+ * VFREEBUSY 0
+ * VJOURNAL 0
+ * VTODO 0
+ *
+ *
+ */
+ private class ReplyValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ * METHOD:REQUEST Validator.
+ *
+ *
+ * Component/Property Presence
+ * -----------------------------------------------------------------
+ * METHOD 1 MUST be "REQUEST"
+ * VEVENT 1+ All components MUST have the same UID
+ * ATTENDEE 1+
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1
+ * SEQUENCE 0 or 1 MUST be present if value is greater than 0,
+ * MAY be present if 0
+ * SUMMARY 1 Can be null
+ * UID 1
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1 Can be null
+ * DTEND 0 or 1 if present DURATION MUST NOT be present
+ * DURATION 0 or 1 if present DTEND MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 only if referring to an instance of a
+ * recurring calendar component. Otherwise it
+ * MUST NOT be present.
+ * RELATED-TO 0+
+ * REQUEST-STATUS 0+
+ * RESOURCES 0 or 1 This property MAY contain a list of values
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of TENTATIVE/CONFIRMED
+ * TRANSP 0 or 1
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * VALARM 0+
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ * VFREEBUSY 0
+ * VJOURNAL 0
+ * VTODO 0
+ *
+ *
+ */
+ private class RequestValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties());
+ }
+
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TRANSP, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.REQUEST);
+ }
+ }
+ }
+ /**
+ * Returns a normalised list of periods representing the consumed time for this event.
+ * @param rangeStart the start of a range
+ * @param rangeEnd the end of a range
+ * @return a normalised list of periods representing consumed time for this event
+ * @see VEvent#getConsumedTime(Date, Date, boolean)
+ */
+ public final PeriodList getConsumedTime(final Date rangeStart,
+ final Date rangeEnd) {
+ return getConsumedTime(rangeStart, rangeEnd, true);
+ }
+
+ /**
+ * Returns a list of periods representing the consumed time for this event in the specified range. Note that the
+ * returned list may contain a single period for non-recurring components or multiple periods for recurring
+ * components. If no time is consumed by this event an empty list is returned.
+ * @param rangeStart the start of the range to check for consumed time
+ * @param rangeEnd the end of the range to check for consumed time
+ * @param normalise indicate whether the returned list of periods should be normalised
+ * @return a list of periods representing consumed time for this event
+ */
+ public final PeriodList getConsumedTime(final Date rangeStart,
+ final Date rangeEnd, final boolean normalise) {
+ PeriodList periods = new PeriodList();
+ // if component is transparent return empty list..
+ if (!Transp.TRANSPARENT.equals(getProperty(Property.TRANSP))) {
+
+// try {
+ periods = calculateRecurrenceSet(new Period(new DateTime(rangeStart),
+ new DateTime(rangeEnd)));
+// }
+// catch (ValidationException ve) {
+// log.error("Invalid event data", ve);
+// return periods;
+// }
+
+ // if periods already specified through recurrence, return..
+ // ..also normalise before returning.
+ if (!periods.isEmpty() && normalise) {
+ periods = periods.normalise();
+ }
+ }
+
+ return periods;
+ }
+
+ /**
+ * Returns a single occurrence of a recurring event.
+ * @param date a date on which the occurence should occur
+ * @return a single non-recurring event instance for the specified date, or null if the event doesn't
+ * occur on the specified date
+ * @throws IOException where an error occurs reading data
+ * @throws URISyntaxException where an invalid URI is encountered
+ * @throws ParseException where an error occurs parsing data
+ */
+ public final VEvent getOccurrence(final Date date) throws IOException,
+ URISyntaxException, ParseException {
+
+ final PeriodList consumedTime = getConsumedTime(date, date);
+ for (final Iterator i = consumedTime.iterator(); i.hasNext();) {
+ final Period p = (Period) i.next();
+ if (p.getStart().equals(date)) {
+ final VEvent occurrence = (VEvent) this.copy();
+ occurrence.getProperties().add(new RecurrenceId(date));
+ return occurrence;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @return the optional access classification property for an event
+ */
+ public final Clazz getClassification() {
+ return (Clazz) getProperty(Property.CLASS);
+ }
+
+ /**
+ * @return the optional creation-time property for an event
+ */
+ public final Created getCreated() {
+ return (Created) getProperty(Property.CREATED);
+ }
+
+ /**
+ * @return the optional description property for an event
+ */
+ public final Description getDescription() {
+ return (Description) getProperty(Property.DESCRIPTION);
+ }
+
+ /**
+ * Convenience method to pull the DTSTART out of the property list.
+ * @return The DtStart object representation of the start Date
+ */
+ public final DtStart getStartDate() {
+ return (DtStart) getProperty(Property.DTSTART);
+ }
+
+ /**
+ * @return the optional geographic position property for an event
+ */
+ public final Geo getGeographicPos() {
+ return (Geo) getProperty(Property.GEO);
+ }
+
+ /**
+ * @return the optional last-modified property for an event
+ */
+ public final LastModified getLastModified() {
+ return (LastModified) getProperty(Property.LAST_MODIFIED);
+ }
+
+ /**
+ * @return the optional location property for an event
+ */
+ public final Location getLocation() {
+ return (Location) getProperty(Property.LOCATION);
+ }
+
+ /**
+ * @return the optional organizer property for an event
+ */
+ public final Organizer getOrganizer() {
+ return (Organizer) getProperty(Property.ORGANIZER);
+ }
+
+ /**
+ * @return the optional priority property for an event
+ */
+ public final Priority getPriority() {
+ return (Priority) getProperty(Property.PRIORITY);
+ }
+
+ /**
+ * @return the optional date-stamp property
+ */
+ public final DtStamp getDateStamp() {
+ return (DtStamp) getProperty(Property.DTSTAMP);
+ }
+
+ /**
+ * @return the optional sequence number property for an event
+ */
+ public final Sequence getSequence() {
+ return (Sequence) getProperty(Property.SEQUENCE);
+ }
+
+ /**
+ * @return the optional status property for an event
+ */
+ public final Status getStatus() {
+ return (Status) getProperty(Property.STATUS);
+ }
+
+ /**
+ * @return the optional summary property for an event
+ */
+ public final Summary getSummary() {
+ return (Summary) getProperty(Property.SUMMARY);
+ }
+
+ /**
+ * @return the optional time transparency property for an event
+ */
+ public final Transp getTransparency() {
+ return (Transp) getProperty(Property.TRANSP);
+ }
+
+ /**
+ * @return the optional URL property for an event
+ */
+ public final Url getUrl() {
+ return (Url) getProperty(Property.URL);
+ }
+
+ /**
+ * @return the optional recurrence identifier property for an event
+ */
+ public final RecurrenceId getRecurrenceId() {
+ return (RecurrenceId) getProperty(Property.RECURRENCE_ID);
+ }
+
+ /**
+ * Returns the end date of this event. Where an end date is not available it will be derived from the event
+ * duration.
+ * @return a DtEnd instance, or null if one cannot be derived
+ */
+ public final DtEnd getEndDate() {
+ return getEndDate(true);
+ }
+
+ /**
+ * Convenience method to pull the DTEND out of the property list. If DTEND was not specified, use the DTSTART +
+ * DURATION to calculate it.
+ * @param deriveFromDuration specifies whether to derive an end date from the event duration where an end date is
+ * not found
+ * @return The end for this VEVENT.
+ */
+ public final DtEnd getEndDate(final boolean deriveFromDuration) {
+ DtEnd dtEnd = (DtEnd) getProperty(Property.DTEND);
+ // No DTEND? No problem, we'll use the DURATION.
+ if (dtEnd == null && deriveFromDuration && getDuration() != null) {
+ final DtStart dtStart = getStartDate();
+ final Duration vEventDuration = getDuration();
+ dtEnd = new DtEnd(Dates.getInstance(vEventDuration.getDuration()
+ .getTime(dtStart.getDate()), (Value) dtStart
+ .getParameter(Parameter.VALUE)));
+ if (dtStart.isUtc()) {
+ dtEnd.setUtc(true);
+ }
+ }
+ return dtEnd;
+ }
+
+ /**
+ * @return the optional Duration property
+ */
+ public final Duration getDuration() {
+ return (Duration) getProperty(Property.DURATION);
+ }
+
+ /**
+ * Returns the UID property of this component if available.
+ * @return a Uid instance, or null if no UID property exists
+ */
+ public final Uid getUid() {
+ return (Uid) getProperty(Property.UID);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object arg0) {
+ if (arg0 instanceof VEvent) {
+ return super.equals(arg0)
+ && ObjectUtils.equals(alarms, ((VEvent) arg0).getAlarms());
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return new HashCodeBuilder().append(getName()).append(getProperties())
+ .append(getAlarms()).toHashCode();
+ }
+
+ /**
+ * Overrides default copy method to add support for copying alarm sub-components.
+ * @return a copy of the instance
+ * @throws ParseException where values in the instance cannot be parsed
+ * @throws IOException where values in the instance cannot be read
+ * @throws URISyntaxException where an invalid URI value is encountered in the instance
+ * @see net.fortuna.ical4j.model.Component#copy()
+ */
+ public Component copy() throws ParseException, IOException,
+ URISyntaxException {
+ final VEvent copy = (VEvent) super.copy();
+ copy.alarms = new ComponentList(alarms);
+ return copy;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VFreeBusy.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VFreeBusy.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,809 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.DateRange;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.Period;
+import net.fortuna.ical4j.model.PeriodList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.parameter.FbType;
+import net.fortuna.ical4j.model.property.Contact;
+import net.fortuna.ical4j.model.property.DtEnd;
+import net.fortuna.ical4j.model.property.DtStamp;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.Duration;
+import net.fortuna.ical4j.model.property.FreeBusy;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Url;
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.PropertyValidator;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VFREEBUSY component.
+ *
+ *
+ * 4.6.4 Free/Busy Component
+ *
+ * Component Name: VFREEBUSY
+ *
+ * Purpose: Provide a grouping of component properties that describe
+ * either a request for free/busy time, describe a response to a request
+ * for free/busy time or describe a published set of busy time.
+ *
+ * Formal Definition: A "VFREEBUSY" calendar component is defined by the
+ * following notation:
+ *
+ * freebusyc = "BEGIN" ":" "VFREEBUSY" CRLF
+ * fbprop
+ * "END" ":" "VFREEBUSY" CRLF
+ *
+ * fbprop = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * contact / dtstart / dtend / duration / dtstamp /
+ * organizer / uid / url /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * attendee / comment / freebusy / rstatus / x-prop
+ *
+ * )
+ *
+ * Description: A "VFREEBUSY" calendar component is a grouping of
+ * component properties that represents either a request for, a reply to
+ * a request for free or busy time information or a published set of
+ * busy time information.
+ *
+ * When used to request free/busy time information, the "ATTENDEE"
+ * property specifies the calendar users whose free/busy time is being
+ * requested; the "ORGANIZER" property specifies the calendar user who
+ * is requesting the free/busy time; the "DTSTART" and "DTEND"
+ * properties specify the window of time for which the free/busy time is
+ * being requested; the "UID" and "DTSTAMP" properties are specified to
+ * assist in proper sequencing of multiple free/busy time requests.
+ *
+ * When used to reply to a request for free/busy time, the "ATTENDEE"
+ * property specifies the calendar user responding to the free/busy time
+ * request; the "ORGANIZER" property specifies the calendar user that
+ * originally requested the free/busy time; the "FREEBUSY" property
+ * specifies the free/busy time information (if it exists); and the
+ * "UID" and "DTSTAMP" properties are specified to assist in proper
+ * sequencing of multiple free/busy time replies.
+ *
+ * When used to publish busy time, the "ORGANIZER" property specifies
+ * the calendar user associated with the published busy time; the
+ * "DTSTART" and "DTEND" properties specify an inclusive time window
+ * that surrounds the busy time information; the "FREEBUSY" property
+ * specifies the published busy time information; and the "DTSTAMP"
+ * property specifies the date/time that iCalendar object was created.
+ *
+ * The "VFREEBUSY" calendar component cannot be nested within another
+ * calendar component. Multiple "VFREEBUSY" calendar components can be
+ * specified within an iCalendar object. This permits the grouping of
+ * Free/Busy information into logical collections, such as monthly
+ * groups of busy time information.
+ *
+ * The "VFREEBUSY" calendar component is intended for use in iCalendar
+ * object methods involving requests for free time, requests for busy
+ * time, requests for both free and busy, and the associated replies.
+ *
+ * Free/Busy information is represented with the "FREEBUSY" property.
+ * This property provides a terse representation of time periods. One or
+ * more "FREEBUSY" properties can be specified in the "VFREEBUSY"
+ * calendar component.
+ *
+ * When present in a "VFREEBUSY" calendar component, the "DTSTART" and
+ * "DTEND" properties SHOULD be specified prior to any "FREEBUSY"
+ * properties. In a free time request, these properties can be used in
+ * combination with the "DURATION" property to represent a request for a
+ * duration of free time within a specified window of time.
+ *
+ * The recurrence properties ("RRULE", "EXRULE", "RDATE", "EXDATE") are
+ * not permitted within a "VFREEBUSY" calendar component. Any recurring
+ * events are resolved into their individual busy time periods using the
+ * "FREEBUSY" property.
+ *
+ * Example: The following is an example of a "VFREEBUSY" calendar
+ * component used to request free or busy time information:
+ *
+ * BEGIN:VFREEBUSY
+ * ORGANIZER:MAILTO:jane_doe@host1.com
+ * ATTENDEE:MAILTO:john_public@host2.com
+ * DTSTART:19971015T050000Z
+ * DTEND:19971016T050000Z
+ * DTSTAMP:19970901T083000Z
+ * END:VFREEBUSY
+ *
+ * The following is an example of a "VFREEBUSY" calendar component used
+ * to reply to the request with busy time information:
+ *
+ * BEGIN:VFREEBUSY
+ * ORGANIZER:MAILTO:jane_doe@host1.com
+ * ATTENDEE:MAILTO:john_public@host2.com
+ * DTSTAMP:19970901T100000Z
+ * FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M,
+ * 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M
+ * URL:http://host2.com/pub/busy/jpublic-01.ifb
+ * COMMENT:This iCalendar file contains busy time information for
+ * the next three months.
+ * END:VFREEBUSY
+ *
+ * The following is an example of a "VFREEBUSY" calendar component used
+ * to publish busy time information.
+ *
+ * BEGIN:VFREEBUSY
+ * ORGANIZER:jsmith@host.com
+ * DTSTART:19980313T141711Z
+ * DTEND:19980410T141711Z
+ * FREEBUSY:19980314T233000Z/19980315T003000Z
+ * FREEBUSY:19980316T153000Z/19980316T163000Z
+ * FREEBUSY:19980318T030000Z/19980318T040000Z
+ * URL:http://www.host.com/calendar/busytime/jsmith.ifb
+ * END:VFREEBUSY
+ *
+ *
+ * Example 1 - Requesting all busy time slots for a given period:
+ *
+ *
+ * // request all busy times between today and 1 week from now..
+ * DateTime start = new DateTime();
+ * DateTime end = new DateTime(start.getTime() + 1000 * 60 * 60 * 24 * 7);
+ *
+ * VFreeBusy request = new VFreeBusy(start, end);
+ *
+ * VFreeBusy reply = new VFreeBusy(request, calendar.getComponents());
+ *
+ *
+ * Example 2 - Requesting all free time slots for a given period of at least the specified duration:
+ *
+ *
+ * // request all free time between today and 1 week from now of
+ * // duration 2 hours or more..
+ * DateTime start = new DateTime();
+ * DateTime end = new DateTime(start.getTime() + 1000 * 60 * 60 * 24 * 7);
+ *
+ * VFreeBusy request = new VFreeBusy(start, end, new Dur(0, 2, 0, 0));
+ *
+ * VFreeBusy response = new VFreeBusy(request, myCalendar.getComponents());
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class VFreeBusy extends CalendarComponent {
+
+ private static final long serialVersionUID = 1046534053331139832L;
+
+ private final Map methodValidators = new HashMap();
+ {
+ methodValidators.put(Method.PUBLISH, new PublishValidator());
+ methodValidators.put(Method.REPLY, new ReplyValidator());
+ methodValidators.put(Method.REQUEST, new RequestValidator());
+ }
+
+ /**
+ * Default constructor.
+ */
+ public VFreeBusy() {
+ super(VFREEBUSY);
+ getProperties().add(new DtStamp());
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public VFreeBusy(final PropertyList properties) {
+ super(VFREEBUSY, properties);
+ }
+
+ /**
+ * Constructs a new VFreeBusy instance with the specified start and end boundaries. This constructor should be used
+ * for requesting busy time for a specified period.
+ * @param start the starting boundary for the VFreeBusy
+ * @param end the ending boundary for the VFreeBusy
+ */
+ public VFreeBusy(final DateTime start, final DateTime end) {
+ this();
+
+ // 4.8.2.4 Date/Time Start:
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // start date and time for the free or busy time information. The time
+ // MUST be specified in UTC time.
+ getProperties().add(new DtStart(start, true));
+
+ // 4.8.2.2 Date/Time End
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // end date and time for the free or busy time information. The time
+ // MUST be specified in the UTC time format. The value MUST be later in
+ // time than the value of the "DTSTART" property.
+ getProperties().add(new DtEnd(end, true));
+ }
+
+ /**
+ * Constructs a new VFreeBusy instance with the specified start and end boundaries. This constructor should be used
+ * for requesting free time for a specified duration in given period defined by the start date and end date.
+ * @param start the starting boundary for the VFreeBusy
+ * @param end the ending boundary for the VFreeBusy
+ * @param duration the length of the period being requested
+ */
+ public VFreeBusy(final DateTime start, final DateTime end, final Dur duration) {
+ this();
+
+ // 4.8.2.4 Date/Time Start:
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // start date and time for the free or busy time information. The time
+ // MUST be specified in UTC time.
+ getProperties().add(new DtStart(start, true));
+
+ // 4.8.2.2 Date/Time End
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // end date and time for the free or busy time information. The time
+ // MUST be specified in the UTC time format. The value MUST be later in
+ // time than the value of the "DTSTART" property.
+ getProperties().add(new DtEnd(end, true));
+
+ getProperties().add(new Duration(duration));
+ }
+
+ /**
+ * Constructs a new VFreeBusy instance representing a reply to the specified VFREEBUSY request according to the
+ * specified list of components.
+ * If the request argument has its duration set, then the result
+ * represents a list of free times (that is, parameter FBTYPE
+ * is set to FbType.FREE).
+ * If the request argument does not have its duration set, then the result
+ * represents a list of busy times.
+ * @param request a VFREEBUSY request
+ * @param components a component list used to initialise busy time
+ * @throws ValidationException
+ */
+ public VFreeBusy(final VFreeBusy request, final ComponentList components) {
+ this();
+
+ final DtStart start = (DtStart) request.getProperty(Property.DTSTART);
+
+ final DtEnd end = (DtEnd) request.getProperty(Property.DTEND);
+
+ final Duration duration = (Duration) request.getProperty(Property.DURATION);
+
+ // 4.8.2.4 Date/Time Start:
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // start date and time for the free or busy time information. The time
+ // MUST be specified in UTC time.
+ getProperties().add(new DtStart(start.getDate(), true));
+
+ // 4.8.2.2 Date/Time End
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // end date and time for the free or busy time information. The time
+ // MUST be specified in the UTC time format. The value MUST be later in
+ // time than the value of the "DTSTART" property.
+ getProperties().add(new DtEnd(end.getDate(), true));
+
+ if (duration != null) {
+ getProperties().add(new Duration(duration.getDuration()));
+ // Initialise with all free time of at least the specified duration..
+ final DateTime freeStart = new DateTime(start.getDate());
+ final DateTime freeEnd = new DateTime(end.getDate());
+ final FreeBusy fb = new FreeTimeBuilder().start(freeStart)
+ .end(freeEnd)
+ .duration(duration.getDuration())
+ .components(components)
+ .build();
+ if (fb != null && !fb.getPeriods().isEmpty()) {
+ getProperties().add(fb);
+ }
+ }
+ else {
+ // initialise with all busy time for the specified period..
+ final DateTime busyStart = new DateTime(start.getDate());
+ final DateTime busyEnd = new DateTime(end.getDate());
+ final FreeBusy fb = new BusyTimeBuilder().start(busyStart)
+ .end(busyEnd)
+ .components(components)
+ .build();
+ if (fb != null && !fb.getPeriods().isEmpty()) {
+ getProperties().add(fb);
+ }
+ }
+ }
+
+ /**
+ * Create a FREEBUSY property representing the busy time for the specified component list. If the component is not
+ * applicable to FREEBUSY time, or if the component is outside the bounds of the start and end dates, null is
+ * returned. If no valid busy periods are identified in the component an empty FREEBUSY property is returned (i.e.
+ * empty period list).
+ */
+ private class BusyTimeBuilder {
+
+ private DateTime start;
+
+ private DateTime end;
+
+ private ComponentList components;
+
+ public BusyTimeBuilder start(DateTime start) {
+ this.start = start;
+ return this;
+ }
+
+ public BusyTimeBuilder end(DateTime end) {
+ this.end = end;
+ return this;
+ }
+
+ public BusyTimeBuilder components(ComponentList components) {
+ this.components = components;
+ return this;
+ }
+
+ public FreeBusy build() {
+ final PeriodList periods = getConsumedTime(components, start, end);
+ final DateRange range = new DateRange(start, end);
+ // periods must be in UTC time for freebusy..
+ periods.setUtc(true);
+ for (final Iterator i = periods.iterator(); i.hasNext();) {
+ final Period period = (Period) i.next();
+ // check if period outside bounds..
+ if (!range.intersects(period)) {
+ periods.remove(period);
+ }
+ }
+ return new FreeBusy(periods);
+ }
+ }
+
+ /**
+ * Create a FREEBUSY property representing the free time available of the specified duration for the given list of
+ * components. component. If the component is not applicable to FREEBUSY time, or if the component is outside the
+ * bounds of the start and end dates, null is returned. If no valid busy periods are identified in the component an
+ * empty FREEBUSY property is returned (i.e. empty period list).
+ */
+ private class FreeTimeBuilder {
+
+ private DateTime start;
+
+ private DateTime end;
+
+ private Dur duration;
+
+ private ComponentList components;
+
+ public FreeTimeBuilder start(DateTime start) {
+ this.start = start;
+ return this;
+ }
+
+ public FreeTimeBuilder end(DateTime end) {
+ this.end = end;
+ return this;
+ }
+
+ private FreeTimeBuilder duration(Dur duration) {
+ this.duration = duration;
+ return this;
+ }
+
+ public FreeTimeBuilder components(ComponentList components) {
+ this.components = components;
+ return this;
+ }
+
+ public FreeBusy build() {
+ final FreeBusy fb = new FreeBusy();
+ fb.getParameters().add(FbType.FREE);
+ final PeriodList periods = getConsumedTime(components, start, end);
+ final DateRange range = new DateRange(start, end);
+ // Add final consumed time to avoid special-case end-of-list processing
+ periods.add(new Period(end, end));
+ DateTime lastPeriodEnd = new DateTime(start);
+ // where no time is consumed set the last period end as the range start..
+ for (final Iterator i = periods.iterator(); i.hasNext();) {
+ final Period period = (Period) i.next();
+
+ // check if period outside bounds.. or period intersects with the end of the range..
+ if (range.contains(period) ||
+ (range.intersects(period) && period.getStart().after(range.getRangeStart()))) {
+
+ // calculate duration between this period start and last period end..
+ final Duration freeDuration = new Duration(lastPeriodEnd, period.getStart());
+ if (freeDuration.getDuration().compareTo(duration) >= 0) {
+ fb.getPeriods().add(new Period(lastPeriodEnd, freeDuration.getDuration()));
+ }
+ }
+
+ if (period.getEnd().after(lastPeriodEnd)) {
+ lastPeriodEnd = period.getEnd();
+ }
+ }
+ return fb;
+ }
+ }
+
+ /**
+ * Creates a list of periods representing the time consumed by the specified list of components.
+ * @param components
+ * @return
+ */
+ private PeriodList getConsumedTime(final ComponentList components, final DateTime rangeStart,
+ final DateTime rangeEnd) {
+
+ final PeriodList periods = new PeriodList();
+ // only events consume time..
+ for (final Iterator i = components.getComponents(Component.VEVENT).iterator(); i.hasNext();) {
+ final Component component = (Component) i.next();
+ periods.addAll(((VEvent) component).getConsumedTime(rangeStart, rangeEnd, false));
+ }
+ return periods.normalise();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse) throws ValidationException {
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+
+ // From "4.8.4.7 Unique Identifier":
+ // Conformance: The property MUST be specified in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.UID,
+ getProperties());
+
+ // From "4.8.7.2 Date/Time Stamp":
+ // Conformance: This property MUST be included in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP,
+ getProperties());
+ }
+
+ final PropertyValidator validator = PropertyValidator.getInstance();
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once contact / dtstart / dtend / duration /
+ * dtstamp / organizer / uid / url /
+ */
+ validator.assertOneOrLess(Property.CONTACT, getProperties());
+ validator.assertOneOrLess(Property.DTSTART, getProperties());
+ validator.assertOneOrLess(Property.DTEND, getProperties());
+ validator.assertOneOrLess(Property.DURATION, getProperties());
+ validator.assertOneOrLess(Property.DTSTAMP, getProperties());
+ validator.assertOneOrLess(Property.ORGANIZER, getProperties());
+ validator.assertOneOrLess(Property.UID, getProperties());
+ validator.assertOneOrLess(Property.URL, getProperties());
+
+ /*
+ * ; the following are optional, ; and MAY occur more than once attendee / comment / freebusy / rstatus / x-prop
+ */
+
+ /*
+ * The recurrence properties ("RRULE", "EXRULE", "RDATE", "EXDATE") are not permitted within a "VFREEBUSY"
+ * calendar component. Any recurring events are resolved into their individual busy time periods using the
+ * "FREEBUSY" property.
+ */
+ validator.assertNone(Property.RRULE, getProperties());
+ validator.assertNone(Property.EXRULE, getProperties());
+ validator.assertNone(Property.RDATE, getProperties());
+ validator.assertNone(Property.EXDATE, getProperties());
+
+ // DtEnd value must be later in time that DtStart..
+ final DtStart dtStart = (DtStart) getProperty(Property.DTSTART);
+
+ // 4.8.2.4 Date/Time Start:
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // start date and time for the free or busy time information. The time
+ // MUST be specified in UTC time.
+ if (dtStart != null && !dtStart.isUtc()) {
+ throw new ValidationException("DTSTART must be specified in UTC time");
+ }
+
+ final DtEnd dtEnd = (DtEnd) getProperty(Property.DTEND);
+
+ // 4.8.2.2 Date/Time End
+ //
+ // Within the "VFREEBUSY" calendar component, this property defines the
+ // end date and time for the free or busy time information. The time
+ // MUST be specified in the UTC time format. The value MUST be later in
+ // time than the value of the "DTSTART" property.
+ if (dtEnd != null && !dtEnd.isUtc()) {
+ throw new ValidationException("DTEND must be specified in UTC time");
+ }
+
+ if (dtStart != null && dtEnd != null
+ && !dtStart.getDate().before(dtEnd.getDate())) {
+ throw new ValidationException("Property [" + Property.DTEND
+ + "] must be later in time than [" + Property.DTSTART + "]");
+ }
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ return (Validator) methodValidators.get(method);
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "PUBLISH"
+ *
+ * VFREEBUSY 1+
+ * DTSTAMP 1
+ * DTSTART 1 DateTime values must be in UTC
+ * DTEND 1 DateTime values must be in UTC
+ * FREEBUSY 1+ MUST be BUSYTIME. Multiple instances are
+ * allowed. Multiple instances must be sorted
+ * in ascending order
+ * ORGANIZER 1 MUST contain the address of originator of
+ * busy time data.
+ * UID 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * X-PROPERTY 0+
+ * URL 0 or 1 Specifies busy time URL
+ *
+ * ATTENDEE 0
+ * DURATION 0
+ * REQUEST-STATUS 0
+ *
+ * X-COMPONENT 0+
+ *
+ * VEVENT 0
+ * VTODO 0
+ * VJOURNAL 0
+ * VTIMEZONE 0
+ * VALARM 0
+ *
+ *
+ */
+ private class PublishValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOneOrMore(Property.FREEBUSY, getProperties());
+
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "REPLY"
+ *
+ * VFREEBUSY 1
+ * ATTENDEE 1 (address of recipient replying)
+ * DTSTAMP 1
+ * DTEND 1 DateTime values must be in UTC
+ * DTSTART 1 DateTime values must be in UTC
+ * FREEBUSY 0+ (values MUST all be of the same data
+ * type. Multiple instances are allowed.
+ * Multiple instances MUST be sorted in
+ * ascending order. Values MAY NOT overlap)
+ * ORGANIZER 1 MUST be the request originator's address
+ * UID 1
+ *
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * REQUEST-STATUS 0+
+ * URL 0 or 1 (specifies busy time URL)
+ * X-PROPERTY 0+
+ * DURATION 0
+ * SEQUENCE 0
+ *
+ * X-COMPONENT 0+
+ * VALARM 0
+ * VEVENT 0
+ * VTODO 0
+ * VJOURNAL 0
+ * VTIMEZONE 0
+ *
+ *
+ */
+ private class ReplyValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+
+ // FREEBUSY is 1+ in RFC2446 but 0+ in Calsify
+
+ PropertyValidator.getInstance().assertOne(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.SEQUENCE, getProperties());
+ }
+ }
+
+ /**
+ * METHOD:REQUEST Validator.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "REQUEST"
+ *
+ * VFREEBUSY 1
+ * ATTENDEE 1+ contain the address of the calendar store
+ * DTEND 1 DateTime values must be in UTC
+ * DTSTAMP 1
+ * DTSTART 1 DateTime values must be in UTC
+ * ORGANIZER 1 MUST be the request originator's address
+ * UID 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * X-PROPERTY 0+
+ *
+ * FREEBUSY 0
+ * DURATION 0
+ * REQUEST-STATUS 0
+ * URL 0
+ *
+ * X-COMPONENT 0+
+ * VALARM 0
+ * VEVENT 0
+ * VTODO 0
+ * VJOURNAL 0
+ * VTIMEZONE 0
+ *
+ *
+ */
+ private class RequestValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties());
+
+ PropertyValidator.getInstance().assertOne(Property.DTEND, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.FREEBUSY, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.URL, getProperties());
+ }
+ }
+
+ /**
+ * @return the CONTACT property or null if not specified
+ */
+ public final Contact getContact() {
+ return (Contact) getProperty(Property.CONTACT);
+ }
+
+ /**
+ * @return the DTSTART propery or null if not specified
+ */
+ public final DtStart getStartDate() {
+ return (DtStart) getProperty(Property.DTSTART);
+ }
+
+ /**
+ * @return the DTEND property or null if not specified
+ */
+ public final DtEnd getEndDate() {
+ return (DtEnd) getProperty(Property.DTEND);
+ }
+
+ /**
+ * @return the DURATION property or null if not specified
+ */
+ public final Duration getDuration() {
+ return (Duration) getProperty(Property.DURATION);
+ }
+
+ /**
+ * @return the DTSTAMP property or null if not specified
+ */
+ public final DtStamp getDateStamp() {
+ return (DtStamp) getProperty(Property.DTSTAMP);
+ }
+
+ /**
+ * @return the ORGANIZER property or null if not specified
+ */
+ public final Organizer getOrganizer() {
+ return (Organizer) getProperty(Property.ORGANIZER);
+ }
+
+ /**
+ * @return the URL property or null if not specified
+ */
+ public final Url getUrl() {
+ return (Url) getProperty(Property.URL);
+ }
+
+ /**
+ * Returns the UID property of this component if available.
+ * @return a Uid instance, or null if no UID property exists
+ */
+ public final Uid getUid() {
+ return (Uid) getProperty(Property.UID);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VJournal.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VJournal.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,543 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.property.Clazz;
+import net.fortuna.ical4j.model.property.Created;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.DtStamp;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.LastModified;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.RecurrenceId;
+import net.fortuna.ical4j.model.property.Sequence;
+import net.fortuna.ical4j.model.property.Status;
+import net.fortuna.ical4j.model.property.Summary;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Url;
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.PropertyValidator;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VJOURNAL component.
+ *
+ *
+ * 4.6.3 Journal Component
+ *
+ * Component Name: VJOURNAL
+ *
+ * Purpose: Provide a grouping of component properties that describe a
+ * journal entry.
+ *
+ * Formal Definition: A "VJOURNAL" calendar component is defined by the
+ * following notation:
+ *
+ * journalc = "BEGIN" ":" "VJOURNAL" CRLF
+ * jourprop
+ * "END" ":" "VJOURNAL" CRLF
+ *
+ * jourprop = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * class / created / description / dtstart / dtstamp /
+ * last-mod / organizer / recurid / seq / status /
+ * summary / uid / url /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * attach / attendee / categories / comment /
+ * contact / exdate / exrule / related / rdate /
+ * rrule / rstatus / x-prop
+ *
+ * )
+ *
+ *
+ * Example 1 - Creating a journal associated with an event:
+ *
+ *
+ * DtStart meetingDate = (DtStart) meeting.getProperties().getProperty(
+ * Property.DTSTART);
+ *
+ * VJournal minutes = new VJournal(meetingDate.getTime(),
+ * "Progress Meeting - Minutes");
+ *
+ * // add timezone information..
+ * TzId tzParam = meetingDate.getParameters().getParmaeter(Parameter.TZID);
+ * minutes.getProperties().getProperty(Property.DTSTART).getParameters().add(
+ * tzParam);
+ *
+ * // add description..
+ * minutes.getProperties().add(new Description("1. Agenda.., 2. Action Items.."));
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class VJournal extends CalendarComponent {
+
+ private static final long serialVersionUID = -7635140949183238830L;
+
+ private final Map methodValidators = new HashMap();
+ {
+ methodValidators.put(Method.ADD, new AddValidator());
+ methodValidators.put(Method.CANCEL, new CancelValidator());
+ methodValidators.put(Method.PUBLISH, new PublishValidator());
+ }
+
+ /**
+ * Default constructor.
+ */
+ public VJournal() {
+ super(VJOURNAL);
+ getProperties().add(new DtStamp());
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public VJournal(final PropertyList properties) {
+ super(VJOURNAL, properties);
+ }
+
+ /**
+ * Constructs a new VJOURNAL instance associated with the specified time with the specified summary.
+ * @param start the date the journal entry is associated with
+ * @param summary the journal summary
+ */
+ public VJournal(final Date start, final String summary) {
+ this();
+ getProperties().add(new DtStart(start));
+ getProperties().add(new Summary(summary));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ if (!CompatibilityHints
+ .isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+
+ // From "4.8.4.7 Unique Identifier":
+ // Conformance: The property MUST be specified in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.UID,
+ getProperties());
+
+ // From "4.8.7.2 Date/Time Stamp":
+ // Conformance: This property MUST be included in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP,
+ getProperties());
+ }
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once class / created / description / dtstart /
+ * dtstamp / last-mod / organizer / recurid / seq / status / summary / uid / url /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTAMP,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.ORGANIZER,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.UID,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL,
+ getProperties());
+
+ final Status status = (Status) getProperty(Property.STATUS);
+ if (status != null && !Status.VJOURNAL_DRAFT.getValue().equals(status.getValue())
+ && !Status.VJOURNAL_FINAL.getValue().equals(status.getValue())
+ && !Status.VJOURNAL_CANCELLED.getValue().equals(status.getValue())) {
+ throw new ValidationException("Status property ["
+ + status.toString() + "] may not occur in VJOURNAL");
+ }
+
+ /*
+ * ; the following are optional, ; and MAY occur more than once attach / attendee / categories / comment /
+ * contact / exdate / exrule / related / rdate / rrule / rstatus / x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ return (Validator) methodValidators.get(method);
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "ADD"
+ * VJOURNAL 1
+ * DESCRIPTION 1 Can be null.
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1
+ * SEQUENCE 1 MUST be greater than 0
+ * UID 1 MUST match that of the original journal
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property MAY contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * EXDATE 0+
+ * EXRULE 0+
+ * LAST-MODIFIED 0 or 1
+ * RDATE 0+
+ * RELATED-TO 0+
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of DRAFT/FINAL/CANCELLED
+ * SUMMARY 0 or 1 Can be null
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * ATTENDEE 0
+ * RECURRENCE-ID 0
+ *
+ * VALARM 0+
+ * VTIMEZONE 0 or 1 MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VEVENT 0
+ * VFREEBUSY 0
+ * VTODO 0
+ *
+ *
+ */
+ private class AddValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RECURRENCE_ID, getProperties());
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ---------------------------------------------
+ * METHOD 1 MUST be "CANCEL"
+ * VJOURNAL 1+ All MUST have the same UID
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * SEQUENCE 1
+ * UID 1 MUST be the UID of the original REQUEST
+ *
+ * ATTACH 0+
+ * ATTENDEE 0+
+ * CATEGORIES 0 or 1 This property MAY contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1
+ * DTSTART 0 or 1
+ * EXDATE 0+
+ * EXRULE 0+
+ * LAST-MODIFIED 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 only if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it MUST NOT be present.
+ * RELATED-TO 0+
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be present, must be "CANCELLED" if
+ * present
+ * SUMMARY 0 or 1
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * REQUEST-STATUS 0
+ *
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ * VALARM 0
+ * VEVENT 0
+ * VFREEBUSY 0
+ * VTODO 0
+ *
+ *
+ */
+ private class CancelValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "PUBLISH"
+ * VJOURNAL 1+
+ * DESCRIPTION 1 Can be null.
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1
+ * UID 1
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property MAY contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * EXDATE 0+
+ * EXRULE 0+
+ * LAST-MODIFIED 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it MUST NOT be present.
+ * RELATED-TO 0+
+ * RRULE 0+
+ * SEQUENCE 0 or 1 MUST echo the original SEQUENCE number.
+ * MUST be present if non-zero. MAY be
+ * present if zero.
+ * STATUS 0 or 1 MAY be one of DRAFT/FINAL/CANCELLED
+ * SUMMARY 0 or 1 Can be null
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * ATTENDEE 0
+ *
+ * VALARM 0+
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VEVENT 0
+ * VFREEBUSY 0
+ * VTODO 0
+ *
+ *
+ */
+ private class PublishValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.ATTENDEE, getProperties());
+ }
+ }
+
+ /**
+ * @return the optional access classification property for a journal entry
+ */
+ public final Clazz getClassification() {
+ return (Clazz) getProperty(Property.CLASS);
+ }
+
+ /**
+ * @return the optional creation-time property for a journal entry
+ */
+ public final Created getCreated() {
+ return (Created) getProperty(Property.CREATED);
+ }
+
+ /**
+ * @return the optional description property for a journal entry
+ */
+ public final Description getDescription() {
+ return (Description) getProperty(Property.DESCRIPTION);
+ }
+
+ /**
+ * Convenience method to pull the DTSTART out of the property list.
+ * @return The DtStart object representation of the start Date
+ */
+ public final DtStart getStartDate() {
+ return (DtStart) getProperty(Property.DTSTART);
+ }
+
+ /**
+ * @return the optional last-modified property for a journal entry
+ */
+ public final LastModified getLastModified() {
+ return (LastModified) getProperty(Property.LAST_MODIFIED);
+ }
+
+ /**
+ * @return the optional organizer property for a journal entry
+ */
+ public final Organizer getOrganizer() {
+ return (Organizer) getProperty(Property.ORGANIZER);
+ }
+
+ /**
+ * @return the optional date-stamp property
+ */
+ public final DtStamp getDateStamp() {
+ return (DtStamp) getProperty(Property.DTSTAMP);
+ }
+
+ /**
+ * @return the optional sequence number property for a journal entry
+ */
+ public final Sequence getSequence() {
+ return (Sequence) getProperty(Property.SEQUENCE);
+ }
+
+ /**
+ * @return the optional status property for a journal entry
+ */
+ public final Status getStatus() {
+ return (Status) getProperty(Property.STATUS);
+ }
+
+ /**
+ * @return the optional summary property for a journal entry
+ */
+ public final Summary getSummary() {
+ return (Summary) getProperty(Property.SUMMARY);
+ }
+
+ /**
+ * @return the optional URL property for a journal entry
+ */
+ public final Url getUrl() {
+ return (Url) getProperty(Property.URL);
+ }
+
+ /**
+ * @return the optional recurrence identifier property for a journal entry
+ */
+ public final RecurrenceId getRecurrenceId() {
+ return (RecurrenceId) getProperty(Property.RECURRENCE_ID);
+ }
+
+ /**
+ * Returns the UID property of this component if available.
+ * @return a Uid instance, or null if no UID property exists
+ */
+ public final Uid getUid() {
+ return (Uid) getProperty(Property.UID);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VTimeZone.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VTimeZone.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,379 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.Iterator;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.property.LastModified;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.TzId;
+import net.fortuna.ical4j.model.property.TzUrl;
+import net.fortuna.ical4j.util.PropertyValidator;
+import net.fortuna.ical4j.util.Strings;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VTIMEZONE component.
+ *
+ *
+ * 4.6.5 Time Zone Component
+ *
+ * Component Name: VTIMEZONE
+ *
+ * Purpose: Provide a grouping of component properties that defines a
+ * time zone.
+ *
+ * Formal Definition: A "VTIMEZONE" calendar component is defined by the
+ * following notation:
+ *
+ * timezonec = "BEGIN" ":" "VTIMEZONE" CRLF
+ *
+ * 2*(
+ *
+ * ; 'tzid' is required, but MUST NOT occur more
+ * ; than once
+ *
+ * tzid /
+ *
+ * ; 'last-mod' and 'tzurl' are optional,
+ * but MUST NOT occur more than once
+ *
+ * last-mod / tzurl /
+ *
+ * ; one of 'standardc' or 'daylightc' MUST occur
+ * ..; and each MAY occur more than once.
+ *
+ * standardc / daylightc /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * x-prop
+ *
+ * )
+ *
+ * "END" ":" "VTIMEZONE" CRLF
+ *
+ * standardc = "BEGIN" ":" "STANDARD" CRLF
+ *
+ * tzprop
+ *
+ * "END" ":" "STANDARD" CRLF
+ *
+ * daylightc = "BEGIN" ":" "DAYLIGHT" CRLF
+ *
+ * tzprop
+ *
+ * "END" ":" "DAYLIGHT" CRLF
+ *
+ * tzprop = 3*(
+ *
+ * ; the following are each REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * dtstart / tzoffsetto / tzoffsetfrom /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * comment / rdate / rrule / tzname / x-prop
+ *
+ * )
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class VTimeZone extends CalendarComponent {
+
+ private static final long serialVersionUID = 5629679741050917815L;
+
+ private final Validator itipValidator = new ITIPValidator();
+
+ private ComponentList observances;
+
+ /**
+ * Default constructor.
+ */
+ public VTimeZone() {
+ super(VTIMEZONE);
+ this.observances = new ComponentList();
+ }
+
+ /**
+ * Constructs a new instance containing the specified properties.
+ * @param properties a list of properties
+ */
+ public VTimeZone(final PropertyList properties) {
+ super(VTIMEZONE, properties);
+ this.observances = new ComponentList();
+ }
+
+ /**
+ * Constructs a new vtimezone component with no properties and the specified list of type components.
+ * @param observances a list of type components
+ */
+ public VTimeZone(final ComponentList observances) {
+ super(VTIMEZONE);
+ this.observances = observances;
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ * @param observances a list of timezone types
+ */
+ public VTimeZone(final PropertyList properties,
+ final ComponentList observances) {
+ super(VTIMEZONE, properties);
+ this.observances = observances;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ b.append(BEGIN);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ b.append(getProperties());
+ b.append(observances);
+ b.append(END);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ return b.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ /*
+ * ; 'tzid' is required, but MUST NOT occur more ; than once tzid /
+ */
+ PropertyValidator.getInstance().assertOne(Property.TZID,
+ getProperties());
+
+ /*
+ * ; 'last-mod' and 'tzurl' are optional, but MUST NOT occur more than once last-mod / tzurl /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TZURL,
+ getProperties());
+
+ /*
+ * ; one of 'standardc' or 'daylightc' MUST occur ..; and each MAY occur more than once. standardc / daylightc /
+ */
+ if (getObservances().getComponent(Observance.STANDARD) == null
+ && getObservances().getComponent(Observance.DAYLIGHT) == null) {
+ throw new ValidationException("Sub-components ["
+ + Observance.STANDARD + "," + Observance.DAYLIGHT
+ + "] must be specified at least once");
+ }
+
+ for (final Iterator i = getObservances().iterator(); i.hasNext();) {
+ ((Component) i.next()).validate(recurse);
+ }
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ return itipValidator;
+ }
+
+ /**
+ * Common validation for all iTIP methods.
+ *
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * VTIMEZONE 0+ MUST be present if any date/time refers
+ * to timezone
+ * DAYLIGHT 0+ MUST be one or more of either STANDARD or
+ * DAYLIGHT
+ * COMMENT 0 or 1
+ * DTSTART 1 MUST be local time format
+ * RDATE 0+ if present RRULE MUST NOT be present
+ * RRULE 0+ if present RDATE MUST NOT be present
+ * TZNAME 0 or 1
+ * TZOFFSET 1
+ * TZOFFSETFROM 1
+ * TZOFFSETTO 1
+ * X-PROPERTY 0+
+ * LAST-MODIFIED 0 or 1
+ * STANDARD 0+ MUST be one or more of either STANDARD or
+ * DAYLIGHT
+ * COMMENT 0 or 1
+ * DTSTART 1 MUST be local time format
+ * RDATE 0+ if present RRULE MUST NOT be present
+ * RRULE 0+ if present RDATE MUST NOT be present
+ * TZNAME 0 or 1
+ * TZOFFSETFROM 1
+ * TZOFFSETTO 1
+ * X-PROPERTY 0+
+ * TZID 1
+ * TZURL 0 or 1
+ * X-PROPERTY 0+
+ *
+ */
+ private class ITIPValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+ for (final Iterator i = getObservances().iterator(); i.hasNext();) {
+ final Observance observance = (Observance) i.next();
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, observance.getProperties());
+ PropertyValidator.getInstance().assertOne(Property.TZOFFSETFROM, observance.getProperties());
+ PropertyValidator.getInstance().assertOne(Property.TZOFFSETTO, observance.getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, observance.getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TZNAME, observance.getProperties());
+ }
+ }
+ }
+
+ /**
+ * @return Returns the types.
+ */
+ public final ComponentList getObservances() {
+ return observances;
+ }
+
+ /**
+ * Returns the latest applicable timezone observance for the specified date.
+ * @param date the latest possible date for a timezone observance onset
+ * @return the latest applicable timezone observance for the specified date or null if there are no applicable
+ * observances
+ */
+ public final Observance getApplicableObservance(final Date date) {
+ Observance latestObservance = null;
+ Date latestOnset = null;
+ for (final Iterator i = getObservances().iterator(); i.hasNext();) {
+ final Observance observance = (Observance) i.next();
+ final Date onset = observance.getLatestOnset(date);
+ if (latestOnset == null
+ || (onset != null && onset.after(latestOnset))) {
+ latestOnset = onset;
+ latestObservance = observance;
+ }
+ }
+ return latestObservance;
+ }
+
+ /**
+ * @return the mandatory timezone identifier property
+ */
+ public final TzId getTimeZoneId() {
+ return (TzId) getProperty(Property.TZID);
+ }
+
+ /**
+ * @return the optional last-modified property
+ */
+ public final LastModified getLastModified() {
+ return (LastModified) getProperty(Property.LAST_MODIFIED);
+ }
+
+ /**
+ * @return the optional timezone url property
+ */
+ public final TzUrl getTimeZoneUrl() {
+ return (TzUrl) getProperty(Property.TZURL);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object arg0) {
+ if (arg0 instanceof VTimeZone) {
+ return super.equals(arg0)
+ && ObjectUtils.equals(observances, ((VTimeZone) arg0)
+ .getObservances());
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return new HashCodeBuilder().append(getName()).append(getProperties())
+ .append(getObservances()).toHashCode();
+ }
+
+ /**
+ * Overrides default copy method to add support for copying observance sub-components.
+ * @return a copy of the instance
+ * @throws ParseException where an error occurs parsing data
+ * @throws IOException where an error occurs reading data
+ * @throws URISyntaxException where an invalid URI is encountered
+ * @see net.fortuna.ical4j.model.Component#copy()
+ */
+ public Component copy() throws ParseException, IOException, URISyntaxException {
+ final VTimeZone copy = (VTimeZone) super.copy();
+ copy.observances = new ComponentList(observances);
+ return copy;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VToDo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VToDo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,1279 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.property.Clazz;
+import net.fortuna.ical4j.model.property.Completed;
+import net.fortuna.ical4j.model.property.Created;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.DtStamp;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.Due;
+import net.fortuna.ical4j.model.property.Duration;
+import net.fortuna.ical4j.model.property.Geo;
+import net.fortuna.ical4j.model.property.LastModified;
+import net.fortuna.ical4j.model.property.Location;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.PercentComplete;
+import net.fortuna.ical4j.model.property.Priority;
+import net.fortuna.ical4j.model.property.RecurrenceId;
+import net.fortuna.ical4j.model.property.Sequence;
+import net.fortuna.ical4j.model.property.Status;
+import net.fortuna.ical4j.model.property.Summary;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Url;
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.ComponentValidator;
+import net.fortuna.ical4j.util.PropertyValidator;
+import net.fortuna.ical4j.util.Strings;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+
+/**
+ * $Id$ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VTODO component.
+ *
+ *
+ * 4.6.2 To-do Component
+ *
+ * Component Name: VTODO
+ *
+ * Purpose: Provide a grouping of calendar properties that describe a
+ * to-do.
+ *
+ * Formal Definition: A "VTODO" calendar component is defined by the
+ * following notation:
+ *
+ * todoc = "BEGIN" ":" "VTODO" CRLF
+ * todoprop *alarmc
+ * "END" ":" "VTODO" CRLF
+ *
+ * todoprop = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * class / completed / created / description / dtstamp /
+ * dtstart / geo / last-mod / location / organizer /
+ * percent / priority / recurid / seq / status /
+ * summary / uid / url /
+ *
+ * ; either 'due' or 'duration' may appear in
+ * ; a 'todoprop', but 'due' and 'duration'
+ * ; MUST NOT occur in the same 'todoprop'
+ *
+ * due / duration /
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ * attach / attendee / categories / comment / contact /
+ * exdate / exrule / rstatus / related / resources /
+ * rdate / rrule / x-prop
+ *
+ * )
+ *
+ *
+ * Example 1 - Creating a todo of two (2) hour duration starting tomorrow:
+ *
+ *
+ * java.util.Calendar cal = java.util.Calendar.getInstance();
+ * // tomorrow..
+ * cal.add(java.util.Calendar.DAY_OF_MONTH, 1);
+ * cal.set(java.util.Calendar.HOUR_OF_DAY, 11);
+ * cal.set(java.util.Calendar.MINUTE, 00);
+ *
+ * VToDo documentation = new VEvent(cal.getTime(), 1000 * 60 * 60 * 2,
+ * "Document calendar component usage");
+ *
+ * // add timezone information..
+ * VTimeZone tz = VTimeZone.getDefault();
+ * TzId tzParam = new TzId(tz.getProperties().getProperty(Property.TZID)
+ * .getValue());
+ * documentation.getProperties().getProperty(Property.DTSTART).getParameters()
+ * .add(tzParam);
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class VToDo extends CalendarComponent {
+
+ private static final long serialVersionUID = -269658210065896668L;
+
+ private final Map methodValidators = new HashMap();
+ {
+ methodValidators.put(Method.ADD, new AddValidator());
+ methodValidators.put(Method.CANCEL, new CancelValidator());
+ methodValidators.put(Method.COUNTER, new CounterValidator());
+ methodValidators.put(Method.DECLINE_COUNTER, new DeclineCounterValidator());
+ methodValidators.put(Method.PUBLISH, new PublishValidator());
+ methodValidators.put(Method.REFRESH, new RefreshValidator());
+ methodValidators.put(Method.REPLY, new ReplyValidator());
+ methodValidators.put(Method.REQUEST, new RequestValidator());
+ }
+
+ private ComponentList alarms = new ComponentList();
+
+ /**
+ * Default constructor.
+ */
+ public VToDo() {
+ super(VTODO);
+ getProperties().add(new DtStamp());
+ }
+
+ /**
+ * Constructor.
+ * @param properties a list of properties
+ */
+ public VToDo(final PropertyList properties) {
+ super(VTODO, properties);
+ }
+
+ /**
+ * Constructs a new VTODO instance starting at the specified time with the specified summary.
+ * @param start the start date of the new todo
+ * @param summary the todo summary
+ */
+ public VToDo(final Date start, final String summary) {
+ this();
+ getProperties().add(new DtStart(start));
+ getProperties().add(new Summary(summary));
+ }
+
+ /**
+ * Constructs a new VTODO instance starting and ending at the specified times with the specified summary.
+ * @param start the start date of the new todo
+ * @param due the due date of the new todo
+ * @param summary the todo summary
+ */
+ public VToDo(final Date start, final Date due, final String summary) {
+ this();
+ getProperties().add(new DtStart(start));
+ getProperties().add(new Due(due));
+ getProperties().add(new Summary(summary));
+ }
+
+ /**
+ * Constructs a new VTODO instance starting at the specified times, for the specified duration, with the specified
+ * summary.
+ * @param start the start date of the new todo
+ * @param duration the duration of the new todo
+ * @param summary the todo summary
+ */
+ public VToDo(final Date start, final Dur duration, final String summary) {
+ this();
+ getProperties().add(new DtStart(start));
+ getProperties().add(new Duration(duration));
+ getProperties().add(new Summary(summary));
+ }
+
+ /**
+ * Returns the list of alarms for this todo.
+ * @return a component list
+ */
+ public final ComponentList getAlarms() {
+ return alarms;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer buffer = new StringBuffer();
+ buffer.append(BEGIN);
+ buffer.append(':');
+ buffer.append(getName());
+ buffer.append(Strings.LINE_SEPARATOR);
+ buffer.append(getProperties());
+ buffer.append(getAlarms());
+ buffer.append(END);
+ buffer.append(':');
+ buffer.append(getName());
+ buffer.append(Strings.LINE_SEPARATOR);
+ return buffer.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ // validate that getAlarms() only contains VAlarm components
+ final Iterator iterator = getAlarms().iterator();
+ while (iterator.hasNext()) {
+ final Component component = (Component) iterator.next();
+ if (!(component instanceof VAlarm)) {
+ throw new ValidationException("Component ["
+ + component.getName() + "] may not occur in VTODO");
+ }
+ ((VAlarm) component).validate(recurse);
+ }
+
+ if (!CompatibilityHints
+ .isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+
+ // From "4.8.4.7 Unique Identifier":
+ // Conformance: The property MUST be specified in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.UID,
+ getProperties());
+
+ // From "4.8.7.2 Date/Time Stamp":
+ // Conformance: This property MUST be included in the "VEVENT", "VTODO",
+ // "VJOURNAL" or "VFREEBUSY" calendar components.
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP,
+ getProperties());
+ }
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once class / completed / created / description /
+ * dtstamp / dtstart / geo / last-mod / location / organizer / percent / priority / recurid / seq / status /
+ * summary / uid / url /
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMPLETED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTAMP,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.ORGANIZER,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(
+ Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.UID,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL,
+ getProperties());
+
+ final Status status = (Status) getProperty(Property.STATUS);
+ if (status != null && !Status.VTODO_NEEDS_ACTION.getValue().equals(status.getValue())
+ && !Status.VTODO_COMPLETED.getValue().equals(status.getValue())
+ && !Status.VTODO_IN_PROCESS.getValue().equals(status.getValue())
+ && !Status.VTODO_CANCELLED.getValue().equals(status.getValue())) {
+ throw new ValidationException("Status property ["
+ + status.toString() + "] may not occur in VTODO");
+ }
+
+ /*
+ * ; either 'due' or 'duration' may appear in ; a 'todoprop', but 'due' and 'duration' ; MUST NOT occur in the
+ * same 'todoprop' due / duration /
+ */
+ try {
+ PropertyValidator.getInstance().assertNone(Property.DUE,
+ getProperties());
+ }
+ catch (ValidationException ve) {
+ PropertyValidator.getInstance().assertNone(Property.DURATION,
+ getProperties());
+ }
+
+ /*
+ * ; the following are optional, ; and MAY occur more than once attach / attendee / categories / comment /
+ * contact / exdate / exrule / rstatus / related / resources / rdate / rrule / x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ return (Validator) methodValidators.get(method);
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "ADD"
+ * VTODO 1
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * PRIORITY 1
+ * SEQUENCE 1 MUST be greater than 0
+ * SUMMARY 1 Can be null.
+ * UID 1 MUST match that of the original to-do
+ *
+ * ATTACH 0+
+ * ATTENDEE 0+
+ * CATEGORIES 0 or 1 This property may contain a list of
+ * values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1 Can be null
+ * DTSTART 0 or 1
+ * DUE 0 or 1 If present DURATION MUST NOT be present
+ * DURATION 0 or 1 If present DUE MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PERCENT-COMPLETE 0 or 1
+ * RDATE 0+
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property may contain a list of
+ * values
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of COMPLETED/NEEDS ACTION/IN-
+ * PROCESS
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * RECURRENCE-ID 0
+ * REQUEST-STATUS 0
+ *
+ * VALARM 0+
+ * VTIMEZONE 0+ MUST be present if any date/time refers
+ * to a timezone
+ * X-COMPONENT 0+
+ *
+ * VEVENT 0
+ * VJOURNAL 0
+ * VFREEBUSY 0
+ *
+ *
+ */
+ private class AddValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.ADD);
+ }
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ---------------------------------------------
+ * METHOD 1 MUST be "CANCEL"
+ * VTODO 1
+ * ATTENDEE 0+ include all "Attendees" being removed from
+ * the todo. MUST include all "Attendees" if
+ * the entire todo is cancelled.
+ * UID 1 MUST echo original UID
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * SEQUENCE 1
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property MAY contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1
+ * DTSTART 0 or 1
+ * DUE 0 or 1 If present DURATION MUST NOT be present
+ * DURATION 0 or 1 If present DUE MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PERCENT-COMPLETE 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 MUST only if referring to one or more
+ * instances of a recurring calendar
+ * component. Otherwise it MUST NOT be
+ * present.
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property MAY contain a list of values
+ * RRULE 0+
+ * PRIORITY 0 or 1
+ * STATUS 0 or 1 If present it MUST be set to "CANCELLED".
+ * MUST NOT be used if purpose is to remove
+ * "ATTENDEES" rather than cancel the entire
+ * VTODO.
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * REQUEST-STATUS 0
+ *
+ * VTIMEZONE 0 or 1 MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VALARM 0
+ * VEVENT 0
+ * VFREEBUSY 0
+ *
+ *
+ */
+ private class CancelValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "COUNTER"
+ * VTODO 1
+ * ATTENDEE 1+
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * PRIORITY 1
+ * SUMMARY 1 Can be null
+ * UID 1
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property MAY contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1 Can be null
+ * DTSTART 0 or 1
+ * DUE 0 or 1 If present DURATION MUST NOT be present
+ * DURATION 0 or 1 If present DUE MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PERCENT-COMPLETE 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 MUST only 3.5if referring to an instance of a
+ * recurring calendar component. Otherwise it
+ * MUST NOT be present.
+ * RELATED-TO 0+
+ * REQUEST-STATUS 0+
+ * RESOURCES 0 or 1 This property MAY contain a list of values
+ * RRULE 0 or 1
+ * SEQUENCE 0 or 1 MUST echo the original SEQUENCE number.
+ * MUST be present if non-zero. MAY be present
+ * if zero.
+ * STATUS 0 or 1 MAY be one of COMPLETED/NEEDS ACTION/IN-
+ * PROCESS/CANCELLED
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ *
+ * VALARM 0+
+ * VTIMEZONE 0 or 1 MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VEVENT 0
+ * VFREEBUSY 0
+ *
+ *
+ */
+ private class CounterValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties());
+
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RRULE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.COUNTER);
+ }
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ---------------------------------------------
+ * METHOD 1 MUST be "DECLINECOUNTER"
+ *
+ * VTODO 1
+ * ATTENDEE 1+ MUST for all attendees
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * SEQUENCE 1 MUST echo the original SEQUENCE number
+ * UID 1 MUST echo original UID
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1
+ * DTSTART 0 or 1
+ * DUE 0 or 1 If present DURATION MUST NOT be present
+ * DURATION 0 or 1 If present DUE MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PERCENT-COMPLETE 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it MUST NOT be present.
+ * RELATED-TO 0+
+ * REQUEST-STATUS 0+
+ * RESOURCES 0 or 1 This property MAY contain a list of values
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of COMPLETED/NEEDS ACTION/IN-
+ * PROCESS
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VALARM 0
+ * VEVENT 0
+ * VFREEBUSY 0
+ *
+ *
+ */
+ private class DeclineCounterValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties());
+
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "PUBLISH"
+ * VTODO 1+
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1
+ * PRIORITY 1
+ * SEQUENCE 0 or 1 MUST be present if value is greater than
+ * 0, MAY be present if 0
+ * SUMMARY 1 Can be null.
+ * UID 1
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1 Can be null
+ * DUE 0 or 1 If present DURATION MUST NOT be present
+ * DURATION 0 or 1 If present DUE MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PERCENT-COMPLETE 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it MUST NOT be present.
+ *
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property may contain a list of values
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of COMPLETED/NEEDS ACTION/IN-
+ * PROCESS/CANCELLED
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * ATTENDEE 0
+ * REQUEST-STATUS 0
+ *
+ * VTIMEZONE 0+ MUST be present if any date/time refers to
+ * a timezone
+ * VALARM 0+
+ * X-COMPONENT 0+
+ *
+ * VFREEBUSY 0
+ * VEVENT 0
+ * VJOURNAL 0
+ *
+ *
+ */
+ private class PublishValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.PRIORITY, getProperties());
+ }
+
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ // DTSTART: RFC2446 conflicts with RCF2445..
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.PUBLISH);
+ }
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ---------------------------------------------
+ * METHOD 1 MUST be "REFRESH"
+ * VTODO 1
+ * ATTENDEE 1
+ * DTSTAMP 1
+ * UID 1 MUST echo original UID
+ *
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * Recurring calendar component. Otherwise it
+ * MUST NOT be present
+ * X-PROPERTY 0+
+ *
+ * ATTACH 0
+ * CATEGORIES 0
+ * CLASS 0
+ * COMMENT 0
+ * CONTACT 0
+ * CREATED 0
+ * DESCRIPTION 0
+ * DTSTART 0
+ * DUE 0
+ * DURATION 0
+ * EXDATE 0
+ * EXRULE 0
+ * GEO 0
+ * LAST-MODIFIED 0
+ * LOCATION 0
+ * ORGANIZER 0
+ * PERCENT-COMPLETE 0
+ * PRIORITY 0
+ * RDATE 0
+ * RELATED-TO 0
+ * REQUEST-STATUS 0
+ * RESOURCES 0
+ * RRULE 0
+ * SEQUENCE 0
+ * STATUS 0
+ * URL 0
+ *
+ * X-COMPONENT 0+
+ *
+ * VALARM 0
+ * VEVENT 0
+ * VFREEBUSY 0
+ * VTIMEZONE 0
+ *
+ *
+ */
+ private class RefreshValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOne(Property.ATTENDEE, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.ATTACH, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CONTACT, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.EXDATE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.EXRULE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RDATE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RELATED_TO, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.RRULE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertNone(Property.URL, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ---------------------------------------------
+ * METHOD 1 MUST be "REPLY"
+ * VTODO 1+ All component MUST have the same UID
+ * ATTENDEE 1+
+ * DTSTAMP 1
+ * ORGANIZER 1
+ * UID 1 MUST must be the address of the replying
+ * attendee
+ * REQUEST-STATUS 0+
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1
+ * DTSTART 0 or 1
+ * DUE 0 or 1 If present DURATION MUST NOT be present
+ * DURATION 0 or 1 If present DUE MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PERCENT-COMPLETE 0 or 1
+ * PRIORITY 0 or 1
+ * RDATE 0+
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property may contain a list of values
+ * RRULE 0+
+ * RECURRENCE-ID 0 or 1 MUST only if referring to an instance of a
+ * Recurring calendar component. Otherwise it
+ * MUST NOT be present
+ * SEQUENCE 0 or 1 MUST be the sequence number of
+ * the original REQUEST if greater than 0.
+ * MAY be present if 0.
+ * STATUS 0 or 1
+ * SUMMARY 0 or 1 Can be null
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * VTIMEZONE 0 or 1 MUST be present if any date/time refers to
+ * a timezone
+ * X-COMPONENT 0+
+ *
+ * VALARM 0
+ * VEVENT 0
+ * VFREEBUSY 0
+ *
+ *
+ */
+ private class ReplyValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties());
+
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ ComponentValidator.assertNone(Component.VALARM, getAlarms());
+ }
+ }
+
+ /**
+ *
+ * Component/Property Presence
+ * ------------------- ----------------------------------------------
+ * METHOD 1 MUST be "REQUEST"
+ * VTODO 1+ All components must have the same UID
+ * ATTENDEE 1+
+ * DTSTAMP 1
+ * DTSTART 1
+ * ORGANIZER 1
+ * PRIORITY 1
+ * SEQUENCE 0 or 1 MUST be present if value is greater than
+ * 0, MAY be present if 0
+ * SUMMARY 1 Can be null.
+ * UID 1
+ *
+ * ATTACH 0+
+ * CATEGORIES 0 or 1 This property may contain a list of
+ * values
+ * CLASS 0 or 1
+ * COMMENT 0 or 1
+ * CONTACT 0+
+ * CREATED 0 or 1
+ * DESCRIPTION 0 or 1 Can be null
+ * DUE 0 or 1 If present DURATION MUST NOT be present
+ * DURATION 0 or 1 If present DUE MUST NOT be present
+ * EXDATE 0+
+ * EXRULE 0+
+ * GEO 0 or 1
+ * LAST-MODIFIED 0 or 1
+ * LOCATION 0 or 1
+ * PERCENT-COMPLETE 0 or 1
+ * RDATE 0+
+ * RECURRENCE-ID 0 or 1 present if referring to an instance of a
+ * recurring calendar component. Otherwise
+ * it MUST NOT be present.
+ * RELATED-TO 0+
+ * RESOURCES 0 or 1 This property may contain a list of
+ * values
+ * RRULE 0+
+ * STATUS 0 or 1 MAY be one of COMPLETED/NEEDS ACTION/IN-
+ * PROCESS
+ * URL 0 or 1
+ * X-PROPERTY 0+
+ *
+ * REQUEST-STATUS 0
+ *
+ * VALARM 0+
+ *
+ * VTIMEZONE 0+ MUST be present if any date/time refers
+ * to a timezone
+ * X-COMPONENT 0+
+ *
+ * VEVENT 0
+ * VFREEBUSY 0
+ * VJOURNAL 0
+ *
+ *
+ */
+ private class RequestValidator implements Validator {
+
+ private static final long serialVersionUID = 1L;
+
+ public void validate() throws ValidationException {
+ PropertyValidator.getInstance().assertOneOrMore(Property.ATTENDEE, getProperties());
+
+ PropertyValidator.getInstance().assertOne(Property.DTSTAMP, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.DTSTART, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.ORGANIZER, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.PRIORITY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.SUMMARY, getProperties());
+ PropertyValidator.getInstance().assertOne(Property.UID, getProperties());
+
+ PropertyValidator.getInstance().assertOneOrLess(Property.SEQUENCE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CLASS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COMMENT, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DUE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DURATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.PERCENT_COMPLETE, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RECURRENCE_ID, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.RESOURCES, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STATUS, getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.URL, getProperties());
+
+ PropertyValidator.getInstance().assertNone(Property.REQUEST_STATUS, getProperties());
+
+ for (final Iterator i = getAlarms().iterator(); i.hasNext();) {
+ final VAlarm alarm = (VAlarm) i.next();
+ alarm.validate(Method.REQUEST);
+ }
+ }
+ }
+
+ /**
+ * @return the optional access classification property
+ */
+ public final Clazz getClassification() {
+ return (Clazz) getProperty(Property.CLASS);
+ }
+
+ /**
+ * @return the optional date completed property
+ */
+ public final Completed getDateCompleted() {
+ return (Completed) getProperty(Property.COMPLETED);
+ }
+
+ /**
+ * @return the optional creation-time property
+ */
+ public final Created getCreated() {
+ return (Created) getProperty(Property.CREATED);
+ }
+
+ /**
+ * @return the optional description property
+ */
+ public final Description getDescription() {
+ return (Description) getProperty(Property.DESCRIPTION);
+ }
+
+ /**
+ * Convenience method to pull the DTSTART out of the property list.
+ * @return The DtStart object representation of the start Date
+ */
+ public final DtStart getStartDate() {
+ return (DtStart) getProperty(Property.DTSTART);
+ }
+
+ /**
+ * @return the optional geographic position property
+ */
+ public final Geo getGeographicPos() {
+ return (Geo) getProperty(Property.GEO);
+ }
+
+ /**
+ * @return the optional last-modified property
+ */
+ public final LastModified getLastModified() {
+ return (LastModified) getProperty(Property.LAST_MODIFIED);
+ }
+
+ /**
+ * @return the optional location property
+ */
+ public final Location getLocation() {
+ return (Location) getProperty(Property.LOCATION);
+ }
+
+ /**
+ * @return the optional organizer property
+ */
+ public final Organizer getOrganizer() {
+ return (Organizer) getProperty(Property.ORGANIZER);
+ }
+
+ /**
+ * @return the optional percentage complete property
+ */
+ public final PercentComplete getPercentComplete() {
+ return (PercentComplete) getProperty(Property.PERCENT_COMPLETE);
+ }
+
+ /**
+ * @return the optional priority property
+ */
+ public final Priority getPriority() {
+ return (Priority) getProperty(Property.PRIORITY);
+ }
+
+ /**
+ * @return the optional date-stamp property
+ */
+ public final DtStamp getDateStamp() {
+ return (DtStamp) getProperty(Property.DTSTAMP);
+ }
+
+ /**
+ * @return the optional sequence number property
+ */
+ public final Sequence getSequence() {
+ return (Sequence) getProperty(Property.SEQUENCE);
+ }
+
+ /**
+ * @return the optional status property
+ */
+ public final Status getStatus() {
+ return (Status) getProperty(Property.STATUS);
+ }
+
+ /**
+ * @return the optional summary property
+ */
+ public final Summary getSummary() {
+ return (Summary) getProperty(Property.SUMMARY);
+ }
+
+ /**
+ * @return the optional URL property
+ */
+ public final Url getUrl() {
+ return (Url) getProperty(Property.URL);
+ }
+
+ /**
+ * @return the optional recurrence identifier property
+ */
+ public final RecurrenceId getRecurrenceId() {
+ return (RecurrenceId) getProperty(Property.RECURRENCE_ID);
+ }
+
+ /**
+ * @return the optional Duration property
+ */
+ public final Duration getDuration() {
+ return (Duration) getProperty(Property.DURATION);
+ }
+
+ /**
+ * @return the optional due property
+ */
+ public final Due getDue() {
+ return (Due) getProperty(Property.DUE);
+ }
+
+ /**
+ * Returns the UID property of this component if available.
+ * @return a Uid instance, or null if no UID property exists
+ */
+ public final Uid getUid() {
+ return (Uid) getProperty(Property.UID);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean equals(final Object arg0) {
+ if (arg0 instanceof VToDo) {
+ return super.equals(arg0)
+ && ObjectUtils.equals(alarms, ((VToDo) arg0).getAlarms());
+ }
+ return super.equals(arg0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return new HashCodeBuilder().append(getName()).append(getProperties())
+ .append(getAlarms()).toHashCode();
+ }
+
+ /**
+ * Overrides default copy method to add support for copying alarm sub-components.
+ * @return a copy of the instance
+ * @throws ParseException where an error occurs parsing data
+ * @throws IOException where an error occurs reading data
+ * @throws URISyntaxException where an invalid URI is encountered
+ * @see net.fortuna.ical4j.model.Component#copy()
+ */
+ public Component copy() throws ParseException, IOException, URISyntaxException {
+ final VToDo copy = (VToDo) super.copy();
+ copy.alarms = new ComponentList(alarms);
+ return copy;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/VVenue.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/VVenue.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,196 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.util.PropertyValidator;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id $ [Apr 5, 2004]
+ *
+ * Defines an iCalendar VVENUE component.
+ *
+ *
+ * 4. Venue Component
+ *
+ * Component Name: "VVENUE"
+ *
+ * Purpose: Provide a grouping of component properties that describe an
+ * event venue.
+ *
+ * Format Definition: A "VVENUE" calendar component is defined by the
+ * following notation:
+ * venuec = "BEGIN" ":" "VVENUE" CRLF
+ * venueprop
+ * "END" ":" "VVENUE" CRLF
+ *
+ * venueprop = *(
+ *
+ * ; the following are all REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * uid
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * name / description / street-address / extended-address /
+ * locality / region / country / postal-code / tzid / geo /
+ * location-type / categories
+ *
+ * ; the following are optional,
+ * ; and MAY occur more than once
+ *
+ * tel / url
+ * )
+ *
+ * Description: A "VVENUE" calendar component is a grouping of component
+ * properties that represent a venue where an event occurs. This
+ * extends the "LOCATION" property of "VEVENT" and "TODO" components,
+ * providing the ability to specify detailed information about the event
+ * venue.
+ *
+ *
+ *
+ * @author Ben Fortuna
+ * @author Mike Douglass
+ */
+public class VVenue extends CalendarComponent {
+
+ private static final long serialVersionUID = 4502423035501438515L;
+
+ /**
+ * Default constructor.
+ */
+ public VVenue() {
+ super(VVENUE);
+ }
+
+ /**
+ * Constructs a new instance containing the specified properties.
+ * @param properties a list of properties
+ */
+ public VVenue(final PropertyList properties) {
+ super(VVENUE, properties);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String toString() {
+ final StringBuffer b = new StringBuffer();
+ b.append(BEGIN);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ b.append(getProperties());
+ b.append(END);
+ b.append(':');
+ b.append(getName());
+ b.append(Strings.LINE_SEPARATOR);
+ return b.toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ /*
+ * ; 'uiid' is required, but MUST NOT occur more ; than once uiid /
+ */
+ PropertyValidator.getInstance().assertOne(Property.UID,
+ getProperties());
+
+ /*
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * name / description / street-address / extended-address /
+ * locality / region / country / postal-code / tzid / geo /
+ * location-type / categories /
+ * dtstamp / created / last-modified
+ */
+ PropertyValidator.getInstance().assertOneOrLess(Property.NAME,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DESCRIPTION,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.STREET_ADDRESS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.EXTENDED_ADDRESS,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCALITY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.REGION,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.COUNTRY,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.POSTALCODE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.TZID,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.GEO,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LOCATION_TYPE,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CATEGORIES,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.DTSTAMP,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.CREATED,
+ getProperties());
+ PropertyValidator.getInstance().assertOneOrLess(Property.LAST_MODIFIED,
+ getProperties());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once tel / url / x-prop
+ */
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ // No method validation required..
+ return EMPTY_VALIDATOR;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/component/XComponent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/component/XComponent.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.component;
+
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.Validator;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+/**
+ * $Id$
+ *
+ * Created on 3/11/2005
+ *
+ * Implementation of an experimental component as defined in RFC2445.
+ * @author Ben Fortuna
+ */
+public class XComponent extends CalendarComponent {
+
+ private static final long serialVersionUID = -3622674849097714927L;
+
+ /**
+ * Creates a new experimental component with the specified name.
+ * @param name the name of the experimental component
+ */
+ public XComponent(final String name) {
+ super(name);
+ }
+
+ /**
+ * Creates a new experimental component with the specified name and properties.
+ * @param name the name of the experimental component
+ * @param properties a list of properties
+ */
+ public XComponent(final String name, final PropertyList properties) {
+ super(name, properties);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate(final boolean recurse)
+ throws ValidationException {
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)
+ && !getName().startsWith(EXPERIMENTAL_PREFIX)) {
+
+ throw new ValidationException(
+ "Experimental components must have the following prefix: "
+ + EXPERIMENTAL_PREFIX);
+ }
+
+ if (recurse) {
+ validateProperties();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Validator getValidator(Method method) {
+ // No method validation required..
+ return EMPTY_VALIDATOR;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Abbrev.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Abbrev.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines an Abbreviation parameter.
+ *
+ * @author benfortuna
+ * @author Mike Douglass
+ */
+public class Abbrev extends Parameter {
+
+ private static final long serialVersionUID = -8650841407406422738L;
+
+ private String value;
+
+ /**
+ * @param aValue
+ * a string abbreviation
+ */
+ public Abbrev(final String aValue) {
+ super(ABBREV, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/AltRep.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/AltRep.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines an Alternate Text Representation parameter.
+ * @author benfortuna
+ */
+public class AltRep extends Parameter {
+
+ private static final long serialVersionUID = -2445932592596993470L;
+
+ private URI uri;
+
+ /**
+ * @param aValue a string representation of an alternate text represenation
+ * @throws URISyntaxException when the specified string is not a value (quoted) uri
+ */
+ public AltRep(final String aValue) throws URISyntaxException {
+ this(Uris.create(Strings.unquote(aValue)));
+ }
+
+ /**
+ * @param aUri a URI representing an alternate text representation
+ */
+ public AltRep(final URI aUri) {
+ super(ALTREP, ParameterFactoryImpl.getInstance());
+ this.uri = aUri;
+ }
+
+ /**
+ * @return Returns the uri.
+ */
+ public final URI getUri() {
+ return uri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return Uris.decode(Strings.valueOf(getUri()));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Cn.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Cn.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Common Name parameter.
+ * @author benfortuna
+ */
+public class Cn extends Parameter {
+
+ private static final long serialVersionUID = -8087119055007093293L;
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a Common Name
+ */
+ public Cn(final String aValue) {
+ super(CN, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/CuType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/CuType.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,99 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Calendar User Type.
+ * @author benfortuna
+ */
+public class CuType extends Parameter {
+
+ private static final long serialVersionUID = -3134064324693983052L;
+
+ private static final String VALUE_INDIVIDUAL = "INDIVIDUAL";
+
+ private static final String VALUE_GROUP = "GROUP";
+
+ private static final String VALUE_RESOURCE = "RESOURCE";
+
+ private static final String VALUE_ROOM = "ROOM";
+
+ private static final String VALUE_UNKNOWN = "UNKNOWN";
+
+ /**
+ * Individual.
+ */
+ public static final CuType INDIVIDUAL = new CuType(VALUE_INDIVIDUAL);
+
+ /**
+ * Group.
+ */
+ public static final CuType GROUP = new CuType(VALUE_GROUP);
+
+ /**
+ * Resource.
+ */
+ public static final CuType RESOURCE = new CuType(VALUE_RESOURCE);
+
+ /**
+ * Room.
+ */
+ public static final CuType ROOM = new CuType(VALUE_ROOM);
+
+ /**
+ * Unknown.
+ */
+ public static final CuType UNKNOWN = new CuType(VALUE_UNKNOWN);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a Calendar User Type
+ */
+ public CuType(final String aValue) {
+ super(CUTYPE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/DelegatedFrom.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/DelegatedFrom.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.AddressList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Delegators parameter.
+ * @author benfortuna
+ */
+public class DelegatedFrom extends Parameter {
+
+ private static final long serialVersionUID = -795956139235258568L;
+
+ private AddressList delegators;
+
+ /**
+ * @param aValue a string representation of Delegators
+ * @throws URISyntaxException when the specified string is not a valid list of cal-addresses
+ */
+ public DelegatedFrom(final String aValue) throws URISyntaxException {
+ this(new AddressList(Strings.unquote(aValue)));
+ }
+
+ /**
+ * @param aList a list of addresses
+ */
+ public DelegatedFrom(final AddressList aList) {
+ super(DELEGATED_FROM, ParameterFactoryImpl.getInstance());
+ delegators = aList;
+ }
+
+ /**
+ * @return Returns the delegators addresses.
+ */
+ public final AddressList getDelegators() {
+ return delegators;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getDelegators().toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected boolean isQuotable() {
+ // override default behaviour as quoting is handled by the implementation..
+ return false;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/DelegatedTo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/DelegatedTo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.AddressList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Delegatees parameter.
+ * @author benfortuna
+ */
+public class DelegatedTo extends Parameter {
+
+ private static final long serialVersionUID = 567577003350648021L;
+
+ private AddressList delegatees;
+
+ /**
+ * @param aValue a string representation of Delegatees
+ * @throws URISyntaxException when the specified string is not a valid list of cal-addresses
+ */
+ public DelegatedTo(final String aValue) throws URISyntaxException {
+ this(new AddressList(Strings.unquote(aValue)));
+ }
+
+ /**
+ * @param aList a list of addresses
+ */
+ public DelegatedTo(final AddressList aList) {
+ super(DELEGATED_TO, ParameterFactoryImpl.getInstance());
+ delegatees = aList;
+ }
+
+ /**
+ * @return Returns the delegatees addresses.
+ */
+ public final AddressList getDelegatees() {
+ return delegatees;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getDelegatees().toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected boolean isQuotable() {
+ // override default behaviour as quoting is handled by the implementation..
+ return false;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Dir.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Dir.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Directory Entry Reference parameter.
+ * @author benfortuna
+ */
+public class Dir extends Parameter {
+
+ private static final long serialVersionUID = -8581904779721020689L;
+
+ private URI uri;
+
+ /**
+ * @param aValue a string representation of a directory entry reference
+ * @throws URISyntaxException when the specified string is not a valid (quoted) uri
+ */
+ public Dir(final String aValue) throws URISyntaxException {
+ this(Uris.create(Strings.unquote(aValue)));
+ }
+
+ /**
+ * @param aUri a URI representing a directory entry reference
+ */
+ public Dir(final URI aUri) {
+ super(DIR, ParameterFactoryImpl.getInstance());
+ this.uri = aUri;
+ }
+
+ /**
+ * @return Returns the uri.
+ */
+ public final URI getUri() {
+ return uri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return Uris.decode(Strings.valueOf(getUri()));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Encoding.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Encoding.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines an Inline Encoding parameter. Constants are provided for all encodings specified in RFC2045.
+ *
+ *
+ * 4.2.7 Inline Encoding
+ *
+ * Parameter Name: ENCODING
+ *
+ * Purpose: To specify an alternate inline encoding for the property
+ * value.
+ *
+ * Format Definition: The property parameter is defined by the following
+ * notation:
+ *
+ * encodingparam = "ENCODING" "="
+ * ("8BIT"
+ * ; "8bit" text encoding is defined in [RFC 2045]
+ * / "BASE64"
+ * ; "BASE64" binary encoding format is defined in [RFC 2045]
+ * / iana-token
+ * ; Some other IANA registered iCalendar encoding type
+ * / x-name)
+ * ; A non-standard, experimental encoding type
+ *
+ * Description: The property parameter identifies the inline encoding
+ * used in a property value. The default encoding is "8BIT",
+ * corresponding to a property value consisting of text. The "BASE64"
+ * encoding type corresponds to a property value encoded using the
+ * "BASE64" encoding defined in [RFC 2045].
+ *
+ * If the value type parameter is ";VALUE=BINARY", then the inline
+ * encoding parameter MUST be specified with the value
+ * ";ENCODING=BASE64".
+ *
+ * Example:
+ *
+ * ATTACH;FMTYPE=IMAGE/JPEG;ENCODING=BASE64;VALUE=BINARY:MIICajC
+ * CAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDA
+ * qBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRw
+ * <...remainder of "BASE64" encoded binary data...>
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Encoding extends Parameter {
+
+ private static final long serialVersionUID = 7536336461076399077L;
+
+ private static final String VALUE_SEVEN_BIT = "7BIT";
+
+ private static final String VALUE_EIGHT_BIT = "8BIT";
+
+ private static final String VALUE_BINARY = "BINARY";
+
+ private static final String VALUE_QUOTED_PRINTABLE = "QUOTED-PRINTABLE";
+
+ private static final String VALUE_BASE64 = "BASE64";
+
+ /**
+ * 7 bit encoding.
+ */
+ public static final Encoding SEVEN_BIT = new Encoding(VALUE_SEVEN_BIT);
+
+ /**
+ * 8 bit encoding.
+ */
+ public static final Encoding EIGHT_BIT = new Encoding(VALUE_EIGHT_BIT);
+
+ /**
+ * Binary encoding.
+ */
+ public static final Encoding BINARY = new Encoding(VALUE_BINARY);
+
+ /**
+ * Quoted printable encoding.
+ */
+ public static final Encoding QUOTED_PRINTABLE = new Encoding(
+ VALUE_QUOTED_PRINTABLE);
+
+ /**
+ * Base64 encoding.
+ */
+ public static final Encoding BASE64 = new Encoding(VALUE_BASE64);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of an Inline Encoding
+ */
+ public Encoding(final String aValue) {
+ super(ENCODING, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/FbType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/FbType.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,94 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Free/Busy Time Type parameter.
+ * @author benfortuna
+ */
+public class FbType extends Parameter {
+
+ private static final long serialVersionUID = -2217689716824679375L;
+
+ private static final String VALUE_FREE = "FREE";
+
+ private static final String VALUE_BUSY = "BUSY";
+
+ private static final String VALUE_BUSY_UNAVAILABLE = "BUSY-UNAVAILABLE";
+
+ private static final String VALUE_BUSY_TENTATIVE = "BUSY-TENTATIVE";
+
+ /**
+ * Free time.
+ */
+ public static final FbType FREE = new FbType(VALUE_FREE);
+
+ /**
+ * Busy time.
+ */
+ public static final FbType BUSY = new FbType(VALUE_BUSY);
+
+ /**
+ * Busy (unavailable) time.
+ */
+ public static final FbType BUSY_UNAVAILABLE = new FbType(
+ VALUE_BUSY_UNAVAILABLE);
+
+ /**
+ * Busy (tentative) time.
+ */
+ public static final FbType BUSY_TENTATIVE = new FbType(VALUE_BUSY_TENTATIVE);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a format type
+ */
+ public FbType(final String aValue) {
+ super(FBTYPE, ParameterFactoryImpl.getInstance());
+
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/FmtType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/FmtType.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Format Type parameter.
+ * @author benfortuna
+ */
+public class FmtType extends Parameter {
+
+ private static final long serialVersionUID = -8764966004966855480L;
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a format type
+ */
+ public FmtType(final String aValue) {
+ super(FMTTYPE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Language.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Language.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Language parameter.
+ * @author benfortuna
+ */
+public class Language extends Parameter {
+
+ private static final long serialVersionUID = 4864176270266226608L;
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a Language
+ */
+ public Language(final String aValue) {
+ super(LANGUAGE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Member.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Member.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.AddressList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Group or List Membership parameter.
+ * @author benfortuna
+ */
+public class Member extends Parameter {
+
+ private static final long serialVersionUID = 287348849443687499L;
+
+ private AddressList groups;
+
+ /**
+ * @param aValue a string representation of a group or list membership
+ * @throws URISyntaxException when the specified string is not a valid list of (quoted) cal-addresses
+ */
+ public Member(final String aValue) throws URISyntaxException {
+ this(new AddressList(Strings.unquote(aValue)));
+ }
+
+ /**
+ * @param aList a list of groups
+ */
+ public Member(final AddressList aList) {
+ super(MEMBER, ParameterFactoryImpl.getInstance());
+ groups = aList;
+ }
+
+ /**
+ * @return Returns the group addresses.
+ */
+ public final AddressList getGroups() {
+ return groups;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getGroups().toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected boolean isQuotable() {
+ // override default behaviour as quoting is handled by the implementation..
+ return false;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/PartStat.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/PartStat.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,113 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Participation Status parameter.
+ * @author benfortuna
+ */
+public class PartStat extends Parameter {
+
+ private static final long serialVersionUID = -7856347127343842441L;
+
+ private static final String VALUE_NEEDS_ACTION = "NEEDS-ACTION";
+
+ private static final String VALUE_ACCEPTED = "ACCEPTED";
+
+ private static final String VALUE_DECLINED = "DECLINED";
+
+ private static final String VALUE_TENTATIVE = "TENTATIVE";
+
+ private static final String VALUE_DELEGATED = "DELEGATED";
+
+ private static final String VALUE_COMPLETED = "COMPLETED";
+
+ private static final String VALUE_IN_PROCESS = "IN-PROCESS";
+
+ /**
+ * Needs action.
+ */
+ public static final PartStat NEEDS_ACTION = new PartStat(VALUE_NEEDS_ACTION);
+
+ /**
+ * Accepted.
+ */
+ public static final PartStat ACCEPTED = new PartStat(VALUE_ACCEPTED);
+
+ /**
+ * Declined.
+ */
+ public static final PartStat DECLINED = new PartStat(VALUE_DECLINED);
+
+ /**
+ * Tentative.
+ */
+ public static final PartStat TENTATIVE = new PartStat(VALUE_TENTATIVE);
+
+ /**
+ * Delegated.
+ */
+ public static final PartStat DELEGATED = new PartStat(VALUE_DELEGATED);
+
+ /**
+ * Completed.
+ */
+ public static final PartStat COMPLETED = new PartStat(VALUE_COMPLETED);
+
+ /**
+ * In-process.
+ */
+ public static final PartStat IN_PROCESS = new PartStat(VALUE_IN_PROCESS);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a participation status
+ */
+ public PartStat(final String aValue) {
+ super(PARTSTAT, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Range.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Range.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.CompatibilityHints;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Recurrence Identifier Range parameter.
+ * @author benfortuna
+ */
+public class Range extends Parameter {
+
+ private static final long serialVersionUID = -3057531444558393776L;
+
+ private static final String VALUE_THISANDPRIOR = "THISANDPRIOR";
+
+ private static final String VALUE_THISANDFUTURE = "THISANDFUTURE";
+
+ /**
+ * This and prior.
+ */
+ public static final Range THISANDPRIOR = new Range(VALUE_THISANDPRIOR);
+
+ /**
+ * This and future.
+ */
+ public static final Range THISANDFUTURE = new Range(VALUE_THISANDFUTURE);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a recurrence identifier range
+ */
+ public Range(final String aValue) {
+ super(RANGE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+
+ // allow arbitrary ranges for Lotus Notes..
+ // eg. X-LOTUS-RECURID;RANGE=ALL:20101006T203000Z
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_NOTES_COMPATIBILITY)) {
+ // value must be one of finite list..
+ if (!VALUE_THISANDPRIOR.equals(value)
+ && !VALUE_THISANDFUTURE.equals(value)) {
+ throw new IllegalArgumentException("Invalid value [" + value + "]");
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/RelType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/RelType.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Relationship Type parameter.
+ * @author benfortuna
+ */
+public class RelType extends Parameter {
+
+ private static final long serialVersionUID = 5346030888832899016L;
+
+ private static final String VALUE_PARENT = "PARENT";
+
+ private static final String VALUE_CHILD = "CHILD";
+
+ private static final String VALUE_SIBLING = "SIBLING";
+
+ /**
+ * Parent.
+ */
+ public static final RelType PARENT = new RelType(VALUE_PARENT);
+
+ /**
+ * Child.
+ */
+ public static final RelType CHILD = new RelType(VALUE_CHILD);
+
+ /**
+ * Sibling.
+ */
+ public static final RelType SIBLING = new RelType(VALUE_SIBLING);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a relationship type
+ */
+ public RelType(final String aValue) {
+ super(RELTYPE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Related.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Related.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines an Alarm Trigger Relationship parameter.
+ * @author benfortuna
+ */
+public class Related extends Parameter {
+
+ private static final long serialVersionUID = 1570525804115869565L;
+
+ private static final String VALUE_START = "START";
+
+ private static final String VALUE_END = "END";
+
+ /**
+ * Trigger start.
+ */
+ public static final Related START = new Related(VALUE_START);
+
+ /**
+ * Trigger end.
+ */
+ public static final Related END = new Related(VALUE_END);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of an alarm trigger relationship
+ */
+ public Related(final String aValue) {
+ super(RELATED, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+
+ // value must be one of finite list..
+ if (!VALUE_START.equals(value) && !VALUE_END.equals(value)) {
+ throw new IllegalArgumentException("Invalid value [" + value + "]");
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Role.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Role.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,92 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Participation Role parameter.
+ * @author benfortuna
+ */
+public class Role extends Parameter {
+
+ private static final long serialVersionUID = 1438225631470825963L;
+
+ private static final String VALUE_CHAIR = "CHAIR";
+
+ private static final String VALUE_REQ_PARTICIPANT = "REQ-PARTICIPANT";
+
+ private static final String VALUE_OPT_PARTICIPANT = "OPT-PARTICIPANT";
+
+ private static final String VALUE_NON_PARTICIPANT = "NON-PARTICIPANT";
+
+ /**
+ * Chair.
+ */
+ public static final Role CHAIR = new Role(VALUE_CHAIR);
+
+ /**
+ * Required participant.
+ */
+ public static final Role REQ_PARTICIPANT = new Role(VALUE_REQ_PARTICIPANT);
+
+ /**
+ * Optional participant.
+ */
+ public static final Role OPT_PARTICIPANT = new Role(VALUE_OPT_PARTICIPANT);
+
+ /**
+ * Non-participant.
+ */
+ public static final Role NON_PARTICIPANT = new Role(VALUE_NON_PARTICIPANT);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a participation role
+ */
+ public Role(final String aValue) {
+ super(ROLE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Rsvp.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Rsvp.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,106 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines an RSVP parameter.
+ * @author benfortuna
+ */
+public class Rsvp extends Parameter {
+
+ private static final long serialVersionUID = -5381653882942018012L;
+
+ private static final String VALUE_TRUE = "TRUE";
+
+ private static final String VALUE_FALSE = "FALSE";
+
+ /**
+ * RSVP is required.
+ */
+ public static final Rsvp TRUE = new Rsvp(VALUE_TRUE);
+
+ /**
+ * RSVP not required.
+ */
+ public static final Rsvp FALSE = new Rsvp(VALUE_FALSE);
+
+ private Boolean rsvp;
+
+ /**
+ * @param aValue a string representation of an RSVP
+ */
+ public Rsvp(final String aValue) {
+ this(Boolean.valueOf(aValue));
+ }
+
+ /**
+ * @param aValue a boolean value
+ */
+ public Rsvp(final Boolean aValue) {
+ super(RSVP, ParameterFactoryImpl.getInstance());
+ this.rsvp = aValue;
+ }
+
+ /**
+ * @return Returns the rsvp.
+ */
+ public final Boolean getRsvp() {
+ return rsvp;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ if (rsvp.booleanValue()) {
+ return VALUE_TRUE;
+ } else {
+ return VALUE_FALSE;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final Parameter copy() {
+ if (rsvp.booleanValue()) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/ScheduleAgent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/ScheduleAgent.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * Defines the scheduling agent for CalDAV scheduling.
+ * @author Mike Douglass
+ */
+public class ScheduleAgent extends Parameter {
+
+ //private static final long serialVersionUID = -3134064324693983052L;
+
+ private static final String VALUE_SERVER = "SERVER";
+
+ private static final String VALUE_CLIENT = "CLIENT";
+
+ private static final String VALUE_NONE = "NONE";
+
+ public static final ScheduleAgent SERVER = new ScheduleAgent(VALUE_SERVER);
+
+ public static final ScheduleAgent CLIENT = new ScheduleAgent(VALUE_CLIENT);
+
+ public static final ScheduleAgent NONE = new ScheduleAgent(VALUE_NONE);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a scheduling agent
+ */
+ public ScheduleAgent(final String aValue) {
+ super(SCHEDULE_AGENT, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see net.fortuna.ical4j.model.Parameter#getValue()
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/ScheduleStatus.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/ScheduleStatus.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * Defines the scheduling status for CalDAV scheduling.
+ * @author Mike Douglass
+ */
+public class ScheduleStatus extends Parameter {
+ private static final long serialVersionUID = -96936874776850075L;
+
+ private String value;
+
+ /**
+ * @param aValue a string scheduling status
+ */
+ public ScheduleStatus(final String aValue) {
+ super(SCHEDULE_STATUS, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see net.fortuna.ical4j.model.Parameter#getValue()
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/SentBy.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/SentBy.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Sent By parameter.
+ * @author benfortuna
+ */
+public class SentBy extends Parameter {
+
+ private static final long serialVersionUID = -1169413145174029391L;
+
+ private URI address;
+
+ /**
+ * @param aValue a string representation of a sent by
+ * @throws URISyntaxException when the specified string is not a valid (quoted) uri
+ */
+ public SentBy(final String aValue) throws URISyntaxException {
+ this(Uris.create(Strings.unquote(aValue)));
+ }
+
+ /**
+ * @param aUri a URI representing a sent by
+ */
+ public SentBy(final URI aUri) {
+ super(SENT_BY, ParameterFactoryImpl.getInstance());
+ this.address = aUri;
+ }
+
+ /**
+ * @return Returns the address.
+ */
+ public final URI getAddress() {
+ return address;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return Uris.decode(Strings.valueOf(getAddress()));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Type.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Type.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Type parameter.
+ * @author benfortuna
+ * @author Mike Douglass
+ */
+public class Type extends Parameter {
+
+ private static final long serialVersionUID = -1153398789161059941L;
+
+ private String value;
+
+ /**
+ * @param aValue a string abbreviation
+ */
+ public Type(final String aValue) {
+ super(TYPE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/TzId.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/TzId.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Time Zone Identifier parameter.
+ * @author benfortuna
+ */
+public class TzId extends Parameter implements Escapable {
+
+ private static final long serialVersionUID = 2366516258055857879L;
+
+ /**
+ * Timezone identifier prefix.
+ */
+ public static final String PREFIX = "/";
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a time zone identifier
+ */
+ public TzId(final String aValue) {
+ super(TZID, ParameterFactoryImpl.getInstance());
+ // parameter values may be quoted if they contain characters in the
+ // set [:;,]..
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Value.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Value.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,162 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Value Data Type parameter.
+ * @author Ben Fortuna
+ */
+public class Value extends Parameter {
+
+ private static final long serialVersionUID = -7238642734500301768L;
+
+ private static final String VALUE_BINARY = "BINARY";
+
+ private static final String VALUE_BOOLEAN = "BOOLEAN";
+
+ private static final String VALUE_CAL_ADDRESS = "CAL-ADDRESS";
+
+ private static final String VALUE_DATE = "DATE";
+
+ private static final String VALUE_DATE_TIME = "DATE-TIME";
+
+ private static final String VALUE_DURATION = "DURATION";
+
+ private static final String VALUE_FLOAT = "FLOAT";
+
+ private static final String VALUE_INTEGER = "INTEGER";
+
+ private static final String VALUE_PERIOD = "PERIOD";
+
+ private static final String VALUE_RECUR = "RECUR";
+
+ private static final String VALUE_TEXT = "TEXT";
+
+ private static final String VALUE_TIME = "TIME";
+
+ private static final String VALUE_URI = "URI";
+
+ private static final String VALUE_UTC_OFFSET = "UTC-OFFSET";
+
+ /**
+ * Binary value type.
+ */
+ public static final Value BINARY = new Value(VALUE_BINARY);
+
+ /**
+ * Boolean value type.
+ */
+ public static final Value BOOLEAN = new Value(VALUE_BOOLEAN);
+
+ /**
+ * Calendar address value type.
+ */
+ public static final Value CAL_ADDRESS = new Value(VALUE_CAL_ADDRESS);
+
+ /**
+ * Date value type.
+ */
+ public static final Value DATE = new Value(VALUE_DATE);
+
+ /**
+ * Date-time value type.
+ */
+ public static final Value DATE_TIME = new Value(VALUE_DATE_TIME);
+
+ /**
+ * Duration value type.
+ */
+ public static final Value DURATION = new Value(VALUE_DURATION);
+
+ /**
+ * Float value type.
+ */
+ public static final Value FLOAT = new Value(VALUE_FLOAT);
+
+ /**
+ * Integer value type.
+ */
+ public static final Value INTEGER = new Value(VALUE_INTEGER);
+
+ /**
+ * Period value type.
+ */
+ public static final Value PERIOD = new Value(VALUE_PERIOD);
+
+ /**
+ * Recurrence value type.
+ */
+ public static final Value RECUR = new Value(VALUE_RECUR);
+
+ /**
+ * Text value type.
+ */
+ public static final Value TEXT = new Value(VALUE_TEXT);
+
+ /**
+ * Time value type.
+ */
+ public static final Value TIME = new Value(VALUE_TIME);
+
+ /**
+ * URI value type.
+ */
+ public static final Value URI = new Value(VALUE_URI);
+
+ /**
+ * UTC offset value type.
+ */
+ public static final Value UTC_OFFSET = new Value(VALUE_UTC_OFFSET);
+
+ private String value;
+
+ /**
+ * @param aValue a string representation of a value data type
+ */
+ public Value(final String aValue) {
+ super(VALUE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/Vvenue.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/Vvenue.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [18-Apr-2004]
+ *
+ * Defines a Vvenue parameter.
+ * @author benfortuna
+ * @author Mike Douglass
+ */
+public class Vvenue extends Parameter {
+
+ private static final long serialVersionUID = -8381878834513491869L;
+
+ private String value;
+
+ /**
+ * @param aValue a string abbreviation
+ */
+ public Vvenue(final String aValue) {
+ super(VVENUE, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/parameter/XParameter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/parameter/XParameter.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.parameter;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterFactoryImpl;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$ [15/06/2004]
+ *
+ * Defines an extension parameter.
+ * @author benfortuna
+ */
+public class XParameter extends Parameter {
+
+ private static final long serialVersionUID = -3372153616695145903L;
+
+ private String value;
+
+ /**
+ * @param aName parameter name
+ * @param aValue parameter value
+ */
+ public XParameter(final String aName, final String aValue) {
+ super(aName, ParameterFactoryImpl.getInstance());
+ this.value = Strings.unquote(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Action.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Action.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,140 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines an ACTION iCalendar component property.
+ * @author benf
+ */
+public class Action extends Property {
+
+ private static final long serialVersionUID = -2353353838411753712L;
+
+ /**
+ * Constant action for playing an audible sound.
+ */
+ public static final Action AUDIO = new ImmutableAction("AUDIO");
+
+ /**
+ * Constant action for displaying a visible notification.
+ */
+ public static final Action DISPLAY = new ImmutableAction("DISPLAY");
+
+ /**
+ * Constant action for sending an email.
+ */
+ public static final Action EMAIL = new ImmutableAction("EMAIL");
+
+ /**
+ * Constant action for a procedure.
+ */
+ public static final Action PROCEDURE = new ImmutableAction("PROCEDURE");
+
+ /**
+ * @author Ben Fortuna An immutable instance of Action.
+ */
+ private static final class ImmutableAction extends Action {
+
+ private static final long serialVersionUID = -2752235951243969905L;
+
+ /**
+ * @param value
+ */
+ private ImmutableAction(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Action() {
+ super(ACTION, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Action(final String aValue) {
+ super(ACTION, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Action(final ParameterList aList, final String aValue) {
+ super(ACTION, aList, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Attach.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Attach.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,303 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.parameter.Encoding;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.util.DecoderFactory;
+import net.fortuna.ical4j.util.EncoderFactory;
+import net.fortuna.ical4j.util.ParameterValidator;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+import org.apache.commons.codec.BinaryDecoder;
+import org.apache.commons.codec.BinaryEncoder;
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.EncoderException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines an ATTACH iCalendar component property.
+ *
+ *
+ * 4.8.1.1 Attachment
+ *
+ * Property Name: ATTACH
+ *
+ * Purpose: The property provides the capability to associate a document
+ * object with a calendar component.
+ *
+ * Value Type: The default value type for this property is URI. The
+ * value type can also be set to BINARY to indicate inline binary
+ * encoded content information.
+ *
+ * Property Parameters: Non-standard, inline encoding, format type and
+ * value data type property parameters can be specified on this
+ * property.
+ *
+ * Conformance: The property can be specified in a "VEVENT", "VTODO",
+ * "VJOURNAL" or "VALARM" calendar components.
+ *
+ * Description: The property can be specified within "VEVENT", "VTODO",
+ * "VJOURNAL", or "VALARM" calendar components. This property can be
+ * specified multiple times within an iCalendar object.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * attach = "ATTACH" attparam ":" uri CRLF
+ *
+ * attach =/ "ATTACH" attparam ";" "ENCODING" "=" "BASE64"
+ * ";" "VALUE" "=" "BINARY" ":" binary
+ *
+ * attparam = *(
+ *
+ * ; the following is optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" fmttypeparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ *
+ * @author benf
+ */
+public class Attach extends Property {
+
+ private static final long serialVersionUID = 4439949507756383452L;
+
+ private URI uri;
+
+ private byte[] binary;
+
+ /**
+ * Default constructor.
+ */
+ public Attach() {
+ super(ATTACH, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws IOException when there is an error reading the binary stream
+ * @throws URISyntaxException where the specified string is not a valid uri
+ */
+ public Attach(final ParameterList aList, final String aValue)
+ throws IOException, URISyntaxException {
+ super(ATTACH, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param data binary data
+ */
+ public Attach(final byte[] data) {
+ super(ATTACH, PropertyFactoryImpl.getInstance());
+ // add required parameters..
+ getParameters().add(Encoding.BASE64);
+ getParameters().add(Value.BINARY);
+ this.binary = data;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param data binary data
+ */
+ public Attach(final ParameterList aList, final byte[] data) {
+ super(ATTACH, aList, PropertyFactoryImpl.getInstance());
+ this.binary = data;
+ }
+
+ /**
+ * @param aUri a URI
+ */
+ public Attach(final URI aUri) {
+ super(ATTACH, PropertyFactoryImpl.getInstance());
+ this.uri = aUri;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aUri a URI
+ */
+ public Attach(final ParameterList aList, final URI aUri) {
+ super(ATTACH, aList, PropertyFactoryImpl.getInstance());
+ this.uri = aUri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once (";" fmttypeparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.FMTTYPE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+
+ /*
+ * If the value type parameter is ";VALUE=BINARY", then the inline encoding parameter MUST be specified with the
+ * value ";ENCODING=BASE64".
+ */
+ if (Value.BINARY.equals(getParameter(Parameter.VALUE))) {
+ ParameterValidator.getInstance().assertOne(Parameter.ENCODING,
+ getParameters());
+ if (!Encoding.BASE64.equals(getParameter(Parameter.ENCODING))) {
+ throw new ValidationException(
+ "If the value type parameter is [BINARY], the inline"
+ + "encoding parameter MUST be specified with the value [BASE64]");
+ }
+ }
+ }
+
+ /**
+ * @return Returns the binary.
+ */
+ public final byte[] getBinary() {
+ return binary;
+ }
+
+ /**
+ * @return Returns the uri.
+ */
+ public final URI getUri() {
+ return uri;
+ }
+
+ /**
+ * Sets the current value of the Attach instance. If the specified
+ * value is encoded binary data, the value is decoded and stored in
+ * the binary field. Otherwise the value is assumed to be a URI
+ * location to binary data and is stored as such.
+ *
+ * @param aValue a string encoded binary or URI value
+ * @throws IOException where binary data cannot be decoded
+ * @throws URISyntaxException where the specified value is not a valid URI
+ */
+ public final void setValue(final String aValue) throws IOException,
+ URISyntaxException {
+
+ // determine if ATTACH is a URI or an embedded
+ // binary..
+ if (getParameter(Parameter.ENCODING) != null) {
+ // binary = Base64.decode(aValue);
+ try {
+ final BinaryDecoder decoder = DecoderFactory.getInstance()
+ .createBinaryDecoder(
+ (Encoding) getParameter(Parameter.ENCODING));
+ binary = decoder.decode(aValue.getBytes());
+ }
+ catch (UnsupportedEncodingException uee) {
+ Log log = LogFactory.getLog(Attach.class);
+ log.error("Error encoding binary data", uee);
+ }
+ catch (DecoderException de) {
+ Log log = LogFactory.getLog(Attach.class);
+ log.error("Error decoding binary data", de);
+ }
+ }
+ // assume URI..
+ else {
+ uri = Uris.create(aValue);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ if (getUri() != null) {
+ return Uris.decode(Strings.valueOf(getUri()));
+ }
+ else if (getBinary() != null) {
+ // return Base64.encodeBytes(getBinary(), Base64.DONT_BREAK_LINES);
+ try {
+ final BinaryEncoder encoder = EncoderFactory.getInstance()
+ .createBinaryEncoder(
+ (Encoding) getParameter(Parameter.ENCODING));
+ return new String(encoder.encode(getBinary()));
+ }
+ catch (UnsupportedEncodingException uee) {
+ Log log = LogFactory.getLog(Attach.class);
+ log.error("Error encoding binary data", uee);
+ }
+ catch (EncoderException ee) {
+ Log log = LogFactory.getLog(Attach.class);
+ log.error("Error encoding binary data", ee);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @param binary The binary to set.
+ */
+ public final void setBinary(final byte[] binary) {
+ this.binary = binary;
+ // unset uri..
+ this.uri = null;
+ }
+
+ /**
+ * @param uri The uri to set.
+ */
+ public final void setUri(final URI uri) {
+ this.uri = uri;
+ // unset binary..
+ this.binary = null;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Attendee.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Attendee.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,185 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines an ATTENDEE iCalendar component property.
+ * @author benf
+ */
+public class Attendee extends Property {
+
+ private static final long serialVersionUID = 8430929418723298803L;
+
+ private URI calAddress;
+
+ /**
+ * Default constructor.
+ */
+ public Attendee() {
+ super(ATTENDEE, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ * @throws URISyntaxException where the specified value string is not a valid uri
+ */
+ public Attendee(final String aValue) throws URISyntaxException {
+ super(ATTENDEE, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws URISyntaxException where the specified value string is not a valid uri
+ */
+ public Attendee(final ParameterList aList, final String aValue)
+ throws URISyntaxException {
+ super(ATTENDEE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aUri a URI
+ */
+ public Attendee(final URI aUri) {
+ super(ATTENDEE, PropertyFactoryImpl.getInstance());
+ calAddress = aUri;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aUri a URI
+ */
+ public Attendee(final ParameterList aList, final URI aUri) {
+ super(ATTENDEE, aList, PropertyFactoryImpl.getInstance());
+ calAddress = aUri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws URISyntaxException {
+ calAddress = Uris.create(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" cutypeparam) / (";"memberparam) / (";"
+ * roleparam) / (";" partstatparam) / (";" rsvpparam) / (";" deltoparam) / (";" delfromparam) / (";"
+ * sentbyparam) / (";"cnparam) / (";" dirparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.CUTYPE,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.MEMBER,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ROLE,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.PARTSTAT,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.RSVP,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(
+ Parameter.DELEGATED_TO, getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(
+ Parameter.DELEGATED_FROM, getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.SENT_BY,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.CN,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.DIR,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /* scheduleagent and schedulestatus added for CalDAV scheduling
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.SCHEDULE_AGENT,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.SCHEDULE_STATUS,
+ getParameters());
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * @return Returns the calAddress.
+ */
+ public final URI getCalAddress() {
+ return calAddress;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return Uris.decode(Strings.valueOf(getCalAddress()));
+ }
+
+ /**
+ * @param calAddress The calAddress to set.
+ */
+ public final void setCalAddress(final URI calAddress) {
+ this.calAddress = calAddress;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final Property copy() throws IOException, URISyntaxException, ParseException {
+ // URI are immutable
+ return new Attendee(new ParameterList(getParameters(), false), calAddress);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/BusyType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/BusyType.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,150 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a BUSYTYPE iCalendar component property.
+ *
+ * Format Definition: This property is defined by the following
+ * notation:
+ *
+ * busytype = "BUSYTYPE" busytypeparam ":" busytypevalue CRLF
+ *
+ * busytypeparam = *(";" xparam)
+ *
+ * busytypevalue = "BUSY" / "BUSY-UNAVAILABLE" /
+ * "BUSY-TENTATIVE" / iana-token / x-name
+ * ; Default is "BUSY-UNAVAILABLE"
+ *
+ * @author Ben Fortuna
+ * @author Mike Douglass
+ */
+public class BusyType extends Property {
+
+ private static final long serialVersionUID = -5140360270562621159L;
+
+ /**
+ * Constant for busy time.
+ */
+ public static final BusyType BUSY = new ImmutableBusyType("BUSY");
+
+ /**
+ * Constant for busy unavailable time.
+ */
+ public static final BusyType BUSY_UNAVAILABLE = new ImmutableBusyType("BUSY-UNAVAILABLE");
+
+ /**
+ * Constant for tentatively busy time.
+ */
+ public static final BusyType BUSY_TENTATIVE = new ImmutableBusyType("BUSY-TENTATIVE");
+
+ /** An immutable instance of BusyType.
+ *
+ * @author Ben Fortuna
+ * @author Mike Douglass
+ */
+ private static final class ImmutableBusyType extends BusyType {
+
+ private static final long serialVersionUID = -2454749569982470433L;
+
+ /**
+ * @param value
+ */
+ private ImmutableBusyType(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public BusyType() {
+ super(BUSYTYPE, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public BusyType(final String aValue) {
+ super(BUSYTYPE, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public BusyType(final ParameterList aList, final String aValue) {
+ super(BUSYTYPE, aList, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/CalScale.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/CalScale.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a CALSCALE iCalendar property.
+ * @author benf
+ */
+public class CalScale extends Property {
+
+ private static final long serialVersionUID = 7446184786984981423L;
+
+ /**
+ * Constant for Gregorian calendar representation.
+ */
+ public static final CalScale GREGORIAN = new ImmutableCalScale("GREGORIAN");
+
+ /**
+ * @author Ben Fortuna An immutable instance of CalScale.
+ */
+ private static final class ImmutableCalScale extends CalScale {
+
+ private static final long serialVersionUID = 1750949550694413878L;
+
+ /**
+ * @param value
+ */
+ private ImmutableCalScale(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public CalScale() {
+ super(CALSCALE, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public CalScale(final String aValue) {
+ super(CALSCALE, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public CalScale(final ParameterList aList, final String aValue) {
+ super(CALSCALE, aList, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)) {
+ if (!GREGORIAN.getValue().equalsIgnoreCase(value)) {
+ throw new ValidationException("Invalid value [" + value + "]");
+ }
+ }
+ else {
+ if (!GREGORIAN.getValue().equals(value)) {
+ throw new ValidationException("Invalid value [" + value + "]");
+ }
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Categories.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Categories.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,176 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.TextList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a CATEGORIES iCalendar component property.
+ *
+ * 4.8.1.2 Categories
+ *
+ * Property Name: CATEGORIES
+ *
+ * Purpose: This property defines the categories for a calendar
+ * component.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard and language property parameters
+ * can be specified on this property.
+ *
+ * Conformance: The property can be specified within "VEVENT", "VTODO"
+ * or "VJOURNAL" calendar components.
+ *
+ * Description: This property is used to specify categories or subtypes
+ * of the calendar component. The categories are useful in searching for
+ * a calendar component of a particular type and category. Within the
+ * "VEVENT", "VTODO" or "VJOURNAL" calendar components, more than one
+ * category can be specified as a list of categories separated by the
+ * COMMA character (US-ASCII decimal 44).
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * categories = "CATEGORIES" catparam ":" text *("," text)
+ * CRLF
+ *
+ * catparam = *(
+ *
+ * ; the following is optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" languageparam ) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ * @author benf
+ */
+public class Categories extends Property {
+
+ private static final long serialVersionUID = -7769987073466681634L;
+
+ private TextList categories;
+
+ /**
+ * Default constructor.
+ */
+ public Categories() {
+ super(CATEGORIES, PropertyFactoryImpl.getInstance());
+ categories = new TextList();
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Categories(final String aValue) {
+ super(CATEGORIES, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Categories(final ParameterList aList, final String aValue) {
+ super(CATEGORIES, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param cList a list of categories
+ */
+ public Categories(final TextList cList) {
+ super(CATEGORIES, PropertyFactoryImpl.getInstance());
+ categories = cList;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param cList a list of categories
+ */
+ public Categories(final ParameterList aList, final TextList cList) {
+ super(CATEGORIES, aList, PropertyFactoryImpl.getInstance());
+ categories = cList;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ categories = new TextList(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once (";" languageparam ) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * @return Returns the categories.
+ */
+ public final TextList getCategories() {
+ return categories;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getCategories().toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Clazz.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Clazz.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,182 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a CLASS iCalendar property.
+ *
+ *
+ * 4.8.1.3 Classification
+ *
+ * Property Name: CLASS
+ *
+ * Purpose: This property defines the access classification for a
+ * calendar component.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: The property can be specified once in a "VEVENT",
+ * "VTODO" or "VJOURNAL" calendar components.
+ *
+ * Description: An access classification is only one component of the
+ * general security system within a calendar application. It provides a
+ * method of capturing the scope of the access the calendar owner
+ * intends for information within an individual calendar entry. The
+ * access classification of an individual iCalendar component is useful
+ * when measured along with the other security components of a calendar
+ * system (e.g., calendar user authentication, authorization, access
+ * rights, access role, etc.). Hence, the semantics of the individual
+ * access classifications cannot be completely defined by this memo
+ * alone. Additionally, due to the "blind" nature of most exchange
+ * processes using this memo, these access classifications cannot serve
+ * as an enforcement statement for a system receiving an iCalendar
+ * object. Rather, they provide a method for capturing the intention of
+ * the calendar owner for the access to the calendar component.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * class = "CLASS" classparam ":" classvalue CRLF
+ *
+ * classparam = *(";" xparam)
+ *
+ * classvalue = "PUBLIC" / "PRIVATE" / "CONFIDENTIAL" / iana-token
+ * / x-name
+ * ;Default is PUBLIC
+ *
+ * Example: The following is an example of this property:
+ *
+ * CLASS:PUBLIC
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Clazz extends Property {
+
+ private static final long serialVersionUID = 4939943639175551481L;
+
+ /**
+ * Constant for public classification.
+ */
+ public static final Clazz PUBLIC = new ImmutableClazz("PUBLIC");
+
+ /**
+ * Constant for private classification.
+ */
+ public static final Clazz PRIVATE = new ImmutableClazz("PRIVATE");
+
+ /**
+ * Constant for confidential classification.
+ */
+ public static final Clazz CONFIDENTIAL = new ImmutableClazz("CONFIDENTIAL");
+
+ /**
+ * @author Ben Fortuna An immutable instance of Clazz.
+ */
+ private static final class ImmutableClazz extends Clazz {
+
+ private static final long serialVersionUID = 5978394762293365042L;
+
+ /**
+ * @param value
+ */
+ private ImmutableClazz(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Clazz() {
+ super(CLASS, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Clazz(final String aValue) {
+ super(CLASS, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Clazz(final ParameterList aList, final String aValue) {
+ super(CLASS, aList, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Comment.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Comment.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a COMMENT iCalendar component property.
+ * @author benf
+ */
+public class Comment extends Property implements Escapable {
+
+ private static final long serialVersionUID = 7519125697719626308L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Comment() {
+ super(COMMENT, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Comment(final String aValue) {
+ super(COMMENT, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Comment(final ParameterList aList, final String aValue) {
+ super(COMMENT, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" altrepparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ALTREP,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Completed.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Completed.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,125 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a COMPLETED iCalendar component property.
+ *
+ *
+ * 4.8.2.1 Date/Time Completed
+ *
+ * Property Name: COMPLETED
+ *
+ * Purpose: This property defines the date and time that a to-do was
+ * actually completed.
+ *
+ * Value Type: DATE-TIME
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: The property can be specified in a "VTODO" calendar
+ * component.
+ *
+ * Description: The date and time MUST be in a UTC format.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * completed = "COMPLETED" compparam ":" date-time CRLF
+ *
+ * compparam = *(";" xparam)
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Completed extends UtcProperty {
+
+ private static final long serialVersionUID = 6824213281785639181L;
+
+ /**
+ * Default constructor.
+ */
+ public Completed() {
+ super(COMPLETED, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ * @throws ParseException when the specified string is not a valid date-time represenation
+ */
+ public Completed(final String aValue) throws ParseException {
+ super(COMPLETED, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException when the specified string is not a valid date-time represenation
+ */
+ public Completed(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(COMPLETED, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aDate a date
+ */
+ public Completed(final DateTime aDate) {
+ super(COMPLETED, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aDate a date
+ */
+ public Completed(final ParameterList aList, final DateTime aDate) {
+ super(COMPLETED, aList, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Contact.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Contact.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a CONTACT iCalendar component property.
+ * @author benf
+ */
+public class Contact extends Property implements Escapable {
+
+ private static final long serialVersionUID = -4776654229643771385L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Contact() {
+ super(CONTACT, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Contact(final String aValue) {
+ super(CONTACT, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Contact(final ParameterList aList, final String aValue) {
+ super(CONTACT, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" altrepparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ALTREP,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Country.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Country.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a REGION iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class Country extends Property implements Escapable {
+
+ private static final long serialVersionUID = -8091183292558005452L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Country() {
+ super(COUNTRY, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Country(final String aValue) {
+ super(COUNTRY, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Country(final ParameterList aList, final String aValue) {
+ super(COUNTRY, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" abbrev
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ABBREV,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Created.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Created.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,129 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a CREATED iCalendar component property.
+ *
+ *
+ * 4.8.7.1 Date/Time Created
+ *
+ * Property Name: CREATED
+ *
+ * Purpose: This property specifies the date and time that the calendar
+ * information was created by the calendar user agent in the calendar
+ * store.
+ *
+ * Note: This is analogous to the creation date and time for a file
+ * in the file system.
+ *
+ * Value Type: DATE-TIME
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: The property can be specified once in "VEVENT", "VTODO"
+ * or "VJOURNAL" calendar components.
+ *
+ * Description: The date and time is a UTC value.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * created = "CREATED" creaparam ":" date-time CRLF
+ *
+ * creaparam = *(";" xparam)
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Created extends UtcProperty {
+
+ private static final long serialVersionUID = -8658935097721652961L;
+
+ /**
+ * Default constructor.
+ */
+ public Created() {
+ super(CREATED, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public Created(final String aValue) throws ParseException {
+ super(CREATED, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public Created(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(CREATED, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aDate a date
+ */
+ public Created(final DateTime aDate) {
+ super(CREATED, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aDate a date
+ */
+ public Created(final ParameterList aList, final DateTime aDate) {
+ super(CREATED, aList, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/DateListProperty.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/DateListProperty.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,185 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactory;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.parameter.TzId;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$
+ *
+ * Created on 11/08/2005
+ *
+ * Base class for properties with a list of dates as a value.
+ * @author Ben Fortuna
+ */
+public abstract class DateListProperty extends Property {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 5233773091972759919L;
+
+ private DateList dates;
+
+ private TimeZone timeZone;
+
+ /**
+ * @param name the property name
+ */
+ public DateListProperty(final String name, PropertyFactory factory) {
+ this(name, new DateList(Value.DATE_TIME), factory);
+ }
+
+ /**
+ * @param name the property name
+ * @param parameters property parameters
+ */
+ public DateListProperty(final String name, final ParameterList parameters, PropertyFactory factory) {
+ super(name, parameters, factory);
+ }
+
+ /**
+ * @param name the property name
+ * @param dates a list of initial dates for the property
+ */
+ public DateListProperty(final String name, final DateList dates, PropertyFactory factory) {
+ this(name, new ParameterList(), dates, factory);
+ }
+
+ /**
+ * @param name the property name
+ * @param parameters property parameters
+ * @param dates a list of initial dates for the property
+ */
+ public DateListProperty(final String name, final ParameterList parameters, final DateList dates,
+ PropertyFactory factory) {
+ super(name, parameters, factory);
+ this.dates = dates;
+ if (dates != null && !Value.DATE_TIME.equals(dates.getType())) {
+ getParameters().replace(dates.getType());
+ }
+ }
+
+ /**
+ * @return Returns the dates.
+ */
+ public final DateList getDates() {
+ return dates;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) throws ParseException {
+ dates = new DateList(aValue, (Value) getParameter(Parameter.VALUE),
+ timeZone);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getValue() {
+ return Strings.valueOf(dates);
+ }
+
+ /**
+ * Sets the timezone associated with this property.
+ * @param timezone a timezone to associate with this property
+ */
+ public void setTimeZone(final TimeZone timezone) {
+ if (dates == null) {
+ throw new UnsupportedOperationException(
+ "TimeZone is not applicable to current value");
+ }
+ this.timeZone = timezone;
+ if (timezone != null) {
+ if (!Value.DATE_TIME.equals(getDates().getType())) {
+ throw new UnsupportedOperationException(
+ "TimeZone is not applicable to current value");
+ }
+ dates.setTimeZone(timezone);
+ getParameters().remove(getParameter(Parameter.TZID));
+ final TzId tzId = new TzId(timezone.getID());
+ getParameters().replace(tzId);
+ }
+ else {
+ // use setUtc() to reset timezone..
+ setUtc(false);
+ }
+ }
+
+ /**
+ * @return the timezone
+ */
+ public final TimeZone getTimeZone() {
+ return timeZone;
+ }
+
+ /**
+ * Resets the timezone associated with the property. If utc is true, any TZID parameters are removed and the Java
+ * timezone is updated to UTC time. If utc is false, TZID parameters are removed and the Java timezone is set to the
+ * default timezone (i.e. represents a "floating" local time)
+ * @param utc the UTC value
+ */
+ public final void setUtc(final boolean utc) {
+ if (dates == null || !Value.DATE_TIME.equals(dates.getType())) {
+ throw new UnsupportedOperationException(
+ "TimeZone is not applicable to current value");
+ }
+ dates.setUtc(utc);
+ getParameters().remove(getParameter(Parameter.TZID));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final Property copy() throws IOException, URISyntaxException, ParseException {
+ final Property copy = super.copy();
+
+ ((DateListProperty) copy).timeZone = timeZone;
+ ((DateListProperty) copy).setValue(getValue());
+
+ return copy;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/DateProperty.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/DateProperty.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,288 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactory;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.parameter.TzId;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.util.ParameterValidator;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$
+ *
+ * Created on 9/07/2005
+ *
+ * Base class for properties with a DATE or DATE-TIME value. Note that some sub-classes may only allow either a DATE or
+ * a DATE-TIME value, for which additional rules/validation should be specified.
+ * @author Ben Fortuna
+ */
+public abstract class DateProperty extends Property {
+
+ private static final long serialVersionUID = 3160883132732961321L;
+
+ private Date date;
+
+ private TimeZone timeZone;
+
+ /**
+ * @param name the property name
+ * @param parameters a list of initial parameters
+ */
+ public DateProperty(final String name, final ParameterList parameters, PropertyFactory factory) {
+ super(name, parameters, factory);
+ }
+
+ /**
+ * @param name the property name
+ */
+ public DateProperty(final String name, PropertyFactory factory) {
+ super(name, factory);
+ }
+
+ /**
+ * Creates a new instance of the named property with an initial timezone.
+ * @param name property name
+ * @param timezone initial timezone
+ */
+ public DateProperty(final String name, TimeZone timezone, PropertyFactory factory) {
+ super(name, factory);
+ updateTimeZone(timezone);
+ }
+
+ /**
+ * @return Returns the date.
+ */
+ public final Date getDate() {
+ return date;
+ }
+
+ /**
+ * Sets the date value of this property. The timezone and value of this
+ * instance will also be updated accordingly.
+ * @param date The date to set.
+ */
+ public final void setDate(final Date date) {
+ this.date = date;
+ if (date instanceof DateTime) {
+ if (Value.DATE.equals(getParameter(Parameter.VALUE))) {
+ getParameters().replace(Value.DATE_TIME);
+ }
+ updateTimeZone(((DateTime) date).getTimeZone());
+ }
+ else {
+ if (date != null) {
+ getParameters().replace(Value.DATE);
+ }
+ /*
+ else {
+ getParameters().removeAll(Parameter.VALUE);
+ }
+ */
+ // ensure timezone is null for VALUE=DATE or null properties..
+ updateTimeZone(null);
+ }
+ }
+
+ /**
+ * Default setValue() implementation. Allows for either DATE or DATE-TIME values.
+ *
+ * @param value a string representation of a DATE or DATE-TIME value
+ * @throws ParseException where the specified value is not a valid DATE or DATE-TIME
+ * representation
+ */
+ public void setValue(final String value) throws ParseException {
+ // value can be either a date-time or a date..
+ if (Value.DATE.equals(getParameter(Parameter.VALUE))) {
+ // ensure timezone is null for VALUE=DATE properties..
+ updateTimeZone(null);
+ this.date = new Date(value);
+ }
+ else {
+ this.date = new DateTime(value, timeZone);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getValue() {
+ return Strings.valueOf(getDate());
+ }
+
+ /**
+ * Publically available method to update the current timezone.
+ * @param timezone a timezone instance
+ */
+ public void setTimeZone(final TimeZone timezone) {
+ updateTimeZone(timezone);
+ }
+
+ /**
+ * @return the timezone
+ */
+ public final TimeZone getTimeZone() {
+ return timeZone;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public int hashCode() {
+ return getDate().hashCode();
+ }
+
+ /**
+ * Updates the timezone associated with the property's value. If the specified timezone is equivalent to UTC any
+ * existing TZID parameters will be removed. Note that this method is only applicable where the current date is an
+ * instance of DateTime
. For all other cases an UnsupportedOperationException
will be
+ * thrown.
+ * @param vTimeZone
+ */
+ private void updateTimeZone(final TimeZone timezone) {
+ this.timeZone = timezone;
+ if (timezone != null) {
+ if (getDate() != null && !(getDate() instanceof DateTime)) {
+ throw new UnsupportedOperationException(
+ "TimeZone is not applicable to current value");
+ }
+ if (getDate() != null) {
+ ((DateTime) getDate()).setTimeZone(timezone);
+ }
+
+ getParameters().replace(new TzId(timezone.getID()));
+ }
+ else {
+ // use setUtc() to reset timezone..
+ setUtc(isUtc());
+ }
+ }
+
+ /**
+ * Resets the VTIMEZONE associated with the property. If utc is true, any TZID parameters are removed and the Java
+ * timezone is updated to UTC time. If utc is false, TZID parameters are removed and the Java timezone is set to the
+ * default timezone (i.e. represents a "floating" local time)
+ * @param utc a UTC value
+ */
+ public final void setUtc(final boolean utc) {
+ if (getDate() != null && (getDate() instanceof DateTime)) {
+ ((DateTime) getDate()).setUtc(utc);
+ }
+ getParameters().remove(getParameter(Parameter.TZID));
+ }
+
+ /**
+ * Indicates whether the current date value is specified in UTC time.
+ * @return true if the property is in UTC time, otherwise false
+ */
+ public final boolean isUtc() {
+ if (getDate() instanceof DateTime) {
+ return ((DateTime) getDate()).isUtc();
+ }
+ return false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.VALUE,
+ getParameters());
+
+ if (isUtc()) {
+ ParameterValidator.getInstance().assertNone(Parameter.TZID,
+ getParameters());
+ }
+ else {
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.TZID,
+ getParameters());
+ }
+
+ final Value value = (Value) getParameter(Parameter.VALUE);
+
+ if (getDate() instanceof DateTime) {
+
+ if (value != null && !Value.DATE_TIME.equals(value)) {
+ throw new ValidationException("VALUE parameter [" + value
+ + "] is invalid for DATE-TIME instance");
+ }
+
+ final DateTime dateTime = (DateTime) date;
+
+ // ensure tzid matches date-time timezone..
+ final Parameter tzId = getParameter(Parameter.TZID);
+ if (dateTime.getTimeZone() != null
+ && (tzId == null || !tzId.getValue().equals(
+ dateTime.getTimeZone().getID()))) {
+
+ throw new ValidationException("TZID parameter [" + tzId
+ + "] does not match the timezone ["
+ + dateTime.getTimeZone().getID() + "]");
+ }
+ }
+ else if (getDate() != null) {
+
+ if (value == null) {
+ throw new ValidationException("VALUE parameter [" + Value.DATE
+ + "] must be specified for DATE instance");
+ }
+ else if (!Value.DATE.equals(value)) {
+ throw new ValidationException("VALUE parameter [" + value
+ + "] is invalid for DATE instance");
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Property copy() throws IOException, URISyntaxException, ParseException {
+ final Property copy = super.copy();
+
+ ((DateProperty) copy).timeZone = timeZone;
+ ((DateProperty) copy).setValue(getValue());
+
+ return copy;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Description.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Description.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a DESCRIPTION iCalendar component property.
+ * @author benf
+ */
+public class Description extends Property implements Escapable {
+
+ private static final long serialVersionUID = 7287564228220558361L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Description() {
+ super(DESCRIPTION, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Description(final String aValue) {
+ super(DESCRIPTION, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Description(final ParameterList aList, final String aValue) {
+ super(DESCRIPTION, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" altrepparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ALTREP,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/DtEnd.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/DtEnd.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,208 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a DTEND iCalendar component property.
+ *
+ *
+ * 4.8.2.2 Date/Time End
+ *
+ * Property Name: DTEND
+ *
+ * Purpose: This property specifies the date and time that a calendar
+ * component ends.
+ *
+ * Value Type: The default value type is DATE-TIME. The value type can
+ * be set to a DATE value type.
+ *
+ * Property Parameters: Non-standard, value data type, time zone
+ * identifier property parameters can be specified on this property.
+ *
+ * Conformance: This property can be specified in "VEVENT" or
+ * "VFREEBUSY" calendar components.
+ *
+ * Description: Within the "VEVENT" calendar component, this property
+ * defines the date and time by which the event ends. The value MUST be
+ * later in time than the value of the "DTSTART" property.
+ *
+ * Within the "VFREEBUSY" calendar component, this property defines the
+ * end date and time for the free or busy time information. The time
+ * MUST be specified in the UTC time format. The value MUST be later in
+ * time than the value of the "DTSTART" property.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * dtend = "DTEND" dtendparam":" dtendval CRLF
+ *
+ * dtendparam = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
+ * (";" tzidparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ *
+ *
+ * dtendval = date-time / date
+ * ;Value MUST match value type
+ *
+ *
+ * Examples:
+ *
+ *
+ * // construct an end date from a start date and a duration..
+ * DtStart start = ...
+ * Dur oneWeek = new Dur("1W");
+ * DtEnd end = new DtEnd(oneWeek.getTime(start.getDate());
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class DtEnd extends DateProperty {
+
+ private static final long serialVersionUID = 8107416684717228297L;
+
+ /**
+ * Default constructor. The time value is initialised to the time of instantiation.
+ */
+ public DtEnd() {
+ super(DTEND, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * Creates a new DTEND property initialised with the specified timezone.
+ * @param timezone initial timezone
+ */
+ public DtEnd(TimeZone timezone) {
+ super(DTEND, timezone, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * Creates a new instance initialised with the parsed value.
+ * @param value the DTEND value string to parse
+ * @throws ParseException where the specified string is not a valid DTEND value representation
+ */
+ public DtEnd(final String value) throws ParseException {
+ super(DTEND, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * Creates a new DTEND property initialised with the specified timezone and value.
+ * @param value a string representation of a DTEND value
+ * @param timezone initial timezone
+ * @throws ParseException where the specified value is not a valid string
+ * representation
+ */
+ public DtEnd(String value, TimeZone timezone) throws ParseException {
+ super(DTEND, timezone, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException when the specified string is not a valid date/date-time representation
+ */
+ public DtEnd(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(DTEND, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aDate a date
+ */
+ public DtEnd(final Date aDate) {
+ super(DTEND, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * Constructs a new DtEnd with the specified time.
+ * @param time the time of the DtEnd
+ * @param utc specifies whether time is UTC
+ */
+ public DtEnd(final Date time, final boolean utc) {
+ super(DTEND, PropertyFactoryImpl.getInstance());
+ setDate(time);
+ setUtc(utc);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aList a list of parameters for this component
+ * @param aDate a date
+ */
+ public DtEnd(final ParameterList aList, final Date aDate) {
+ super(DTEND, aList, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ super.validate();
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
+ * (";" tzidparam) /
+ */
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/DtStamp.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/DtStamp.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,136 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a DTSTAMP iCalendar component property.
+ *
+ *
+ * 4.8.7.2 Date/Time Stamp
+ *
+ * Property Name: DTSTAMP
+ *
+ * Purpose: The property indicates the date/time that the instance of
+ * the iCalendar object was created.
+ *
+ * Value Type: DATE-TIME
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property MUST be included in the "VEVENT", "VTODO",
+ * "VJOURNAL" or "VFREEBUSY" calendar components.
+ *
+ * Description: The value MUST be specified in the UTC time format.
+ *
+ * This property is also useful to protocols such as [IMIP] that have
+ * inherent latency issues with the delivery of content. This property
+ * will assist in the proper sequencing of messages containing iCalendar
+ * objects.
+ *
+ * This property is different than the "CREATED" and "LAST-MODIFIED"
+ * properties. These two properties are used to specify when the
+ * particular calendar data in the calendar store was created and last
+ * modified. This is different than when the iCalendar object
+ * representation of the calendar service information was created or
+ * last modified.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * dtstamp = "DTSTAMP" stmparam ":" date-time CRLF
+ *
+ * stmparam = *(";" xparam)
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class DtStamp extends UtcProperty {
+
+ private static final long serialVersionUID = 7581197869433744070L;
+
+ /**
+ * Default constructor. Initialises the dateTime value to the time of instantiation.
+ */
+ public DtStamp() {
+ super(DTSTAMP, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a string representation of a DTSTAMP value
+ * @throws ParseException if the specified value is not a valid representation
+ */
+ public DtStamp(final String aValue) throws ParseException {
+ this(new ParameterList(), aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public DtStamp(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(DTSTAMP, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aDate a date representing a date-time
+ */
+ public DtStamp(final DateTime aDate) {
+ super(DTSTAMP, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aDate a date representing a date-time
+ */
+ public DtStamp(final ParameterList aList, final DateTime aDate) {
+ super(DTSTAMP, aList, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/DtStart.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/DtStart.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,205 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a DTSTART iCalendar component property.
+ *
+ *
+ * 4.8.2.4 Date/Time Start
+ *
+ * Property Name: DTSTART
+ *
+ * Purpose: This property specifies when the calendar component begins.
+ *
+ * Value Type: The default value type is DATE-TIME. The time value MUST
+ * be one of the forms defined for the DATE-TIME value type. The value
+ * type can be set to a DATE value type.
+ *
+ * Property Parameters: Non-standard, value data type, time zone
+ * identifier property parameters can be specified on this property.
+ *
+ * Conformance: This property can be specified in the "VEVENT", "VTODO",
+ * "VFREEBUSY", or "VTIMEZONE" calendar components.
+ *
+ * Description: Within the "VEVENT" calendar component, this property
+ * defines the start date and time for the event. The property is
+ * REQUIRED in "VEVENT" calendar components. Events can have a start
+ * date/time but no end date/time. In that case, the event does not take
+ * up any time.
+ *
+ * Within the "VFREEBUSY" calendar component, this property defines the
+ * start date and time for the free or busy time information. The time
+ * MUST be specified in UTC time.
+ *
+ * Within the "VTIMEZONE" calendar component, this property defines the
+ * effective start date and time for a time zone specification. This
+ * property is REQUIRED within each STANDARD and DAYLIGHT part included
+ * in "VTIMEZONE" calendar components and MUST be specified as a local
+ * DATE-TIME without the "TZID" property parameter.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * dtstart = "DTSTART" dtstparam ":" dtstval CRLF
+ *
+ * dtstparam = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
+ * (";" tzidparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * *(";" xparam)
+ *
+ * )
+ *
+ *
+ *
+ * dtstval = date-time / date
+ * ;Value MUST match value type
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class DtStart extends DateProperty {
+
+ private static final long serialVersionUID = -5707097476081111815L;
+
+ /**
+ * Default constructor. The time value is initialised to the time of instantiation.
+ */
+ public DtStart() {
+ super(DTSTART, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * Creates a new DTSTART property initialised with the specified timezone.
+ * @param timezone initial timezone
+ */
+ public DtStart(TimeZone timezone) {
+ super(DTSTART, timezone, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public DtStart(final String aValue) throws ParseException {
+ super(DTSTART, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * Creates a new DTSTART property initialised with the specified timezone and value.
+ * @param value a string representation of a DTSTART value
+ * @param timezone initial timezone
+ * @throws ParseException where the specified value is not a valid string
+ * representation
+ */
+ public DtStart(String value, TimeZone timezone) throws ParseException {
+ super(DTSTART, timezone, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public DtStart(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(DTSTART, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aDate a date
+ */
+ public DtStart(final Date aDate) {
+ super(DTSTART, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * Constructs a new DtStart with the specified time.
+ * @param time the time of the DtStart
+ * @param utc specifies whether time is UTC
+ */
+ public DtStart(final Date time, final boolean utc) {
+ super(DTSTART, PropertyFactoryImpl.getInstance());
+ setDate(time);
+ setUtc(utc);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aList a list of parameters for this component
+ * @param aDate a date
+ */
+ public DtStart(final ParameterList aList, final Date aDate) {
+ super(DTSTART, aList, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ super.validate();
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
+ * (";" tzidparam) /
+ */
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Due.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Due.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a DUE iCalendar component property.
+ *
+ *
+ * 4.8.2.3 Date/Time Due
+ *
+ * Property Name: DUE
+ *
+ * Purpose: This property defines the date and time that a to-do is
+ * expected to be completed.
+ *
+ * Value Type: The default value type is DATE-TIME. The value type can
+ * be set to a DATE value type.
+ *
+ * Property Parameters: Non-standard, value data type, time zone
+ * identifier property parameters can be specified on this property.
+ *
+ * Conformance: The property can be specified once in a "VTODO" calendar
+ * component.
+ *
+ * Description: The value MUST be a date/time equal to or after the
+ * DTSTART value, if specified.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * due = "DUE" dueparam":" dueval CRLF
+ *
+ * dueparam = *(
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
+ * (";" tzidparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * *(";" xparam)
+ *
+ * )
+ *
+ *
+ *
+ * dueval = date-time / date
+ * ;Value MUST match value type
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Due extends DateProperty {
+
+ private static final long serialVersionUID = -2965312347832730406L;
+
+ /**
+ * Default constructor. The time value is initialised to the time of instantiation.
+ */
+ public Due() {
+ super(DUE, PropertyFactoryImpl.getInstance());
+ // defaults to UTC time..
+ setDate(new DateTime(true));
+ }
+
+ /**
+ * Creates a new DUE property initialised with the specified timezone.
+ * @param timezone initial timezone
+ */
+ public Due(TimeZone timezone) {
+ super(DUE, timezone, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * Creates a new instance initialised with the parsed value.
+ * @param value the DUE value string to parse
+ * @throws ParseException where the specified string is not a valid DUE value representation
+ */
+ public Due(final String value) throws ParseException {
+ super(DUE, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * Creates a new DUE property initialised with the specified timezone and value.
+ * @param value a string representation of a DUE value
+ * @param timezone initial timezone
+ * @throws ParseException where the specified value is not a valid string
+ * representation
+ */
+ public Due(String value, TimeZone timezone) throws ParseException {
+ super(DUE, timezone, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException when the specified string is not a valid date/date-time representation
+ */
+ public Due(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(DUE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aDate a date
+ */
+ public Due(final Date aDate) {
+ super(DUE, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aList a list of parameters for this component
+ * @param aDate a date
+ */
+ public Due(final ParameterList aList, final Date aDate) {
+ super(DUE, aList, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ super.validate();
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
+ * (";" tzidparam) /
+ */
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Duration.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Duration.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,175 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.util.Date;
+
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a DURATION iCalendar component property.
+ *
+ *
+ * 4.3.6 Duration
+ *
+ * Value Name: DURATION
+ *
+ * Purpose: This value type is used to identify properties that contain
+ * a duration of time.
+ *
+ * Formal Definition: The value type is defined by the following
+ * notation:
+ *
+ * dur-value = (["+"] / "-") "P" (dur-date / dur-time / dur-week)
+ *
+ * dur-date = dur-day [dur-time]
+ * dur-time = "T" (dur-hour / dur-minute / dur-second)
+ * dur-week = 1*DIGIT "W"
+ * dur-hour = 1*DIGIT "H" [dur-minute]
+ * dur-minute = 1*DIGIT "M" [dur-second]
+ * dur-second = 1*DIGIT "S"
+ * dur-day = 1*DIGIT "D"
+ *
+ * Description: If the property permits, multiple "duration" values are
+ * specified by a COMMA character (US-ASCII decimal 44) separated list
+ * of values. The format is expressed as the [ISO 8601] basic format for
+ * the duration of time. The format can represent durations in terms of
+ * weeks, days, hours, minutes, and seconds.
+ *
+ * No additional content value encoding (i.e., BACKSLASH character
+ * encoding) are defined for this value type.
+ *
+ * Example: A duration of 15 days, 5 hours and 20 seconds would be:
+ *
+ * P15DT5H0M20S
+ *
+ * A duration of 7 weeks would be:
+ *
+ * P7W
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Duration extends Property {
+
+ private static final long serialVersionUID = 9144969653829796798L;
+
+ private Dur duration;
+
+ /**
+ * Default constructor.
+ */
+ public Duration() {
+ super(DURATION, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Duration(final ParameterList aList, final String aValue) {
+ super(DURATION, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param duration a duration value
+ */
+ public Duration(final Dur duration) {
+ super(DURATION, PropertyFactoryImpl.getInstance());
+ this.duration = duration;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param duration a duration value
+ */
+ public Duration(final ParameterList aList, final Dur duration) {
+ super(DURATION, aList, PropertyFactoryImpl.getInstance());
+ setDuration(duration);
+ }
+
+ /**
+ * Constructs a new duration representing the time between the specified start date and end date.
+ * @param start the starting time for the duration
+ * @param end the end time for the duration
+ */
+ public Duration(final Date start, final Date end) {
+ super(DURATION, PropertyFactoryImpl.getInstance());
+ setDuration(new Dur(start, end));
+ }
+
+ /**
+ * @return Returns the duration.
+ */
+ public final Dur getDuration() {
+ return duration;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ // duration = DurationFormat.getInstance().parse(aValue);
+ duration = new Dur(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ // return DurationFormat.getInstance().format(getDuration());
+ return duration.toString();
+ }
+
+ /**
+ * @param duration The duration to set.
+ */
+ public final void setDuration(final Dur duration) {
+ this.duration = duration;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/ExDate.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/ExDate.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a EXDATE iCalendar component property.
+ * @author benf
+ */
+public class ExDate extends DateListProperty {
+
+ private static final long serialVersionUID = 2635730172243974463L;
+
+ /**
+ * Default constructor.
+ */
+ public ExDate() {
+ super(EXDATE, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public ExDate(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(EXDATE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param dList a list of dates
+ */
+ public ExDate(final DateList dList) {
+ super(EXDATE, dList, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param dList a list of dates
+ */
+ public ExDate(final ParameterList aList, final DateList dList) {
+ super(EXDATE, aList, dList, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" "VALUE" "=" ("DATE-TIME" / "DATE")) /
+ * (";" tzidparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.VALUE,
+ getParameters());
+
+ final Parameter valueParam = getParameter(Parameter.VALUE);
+
+ if (valueParam != null && !Value.DATE_TIME.equals(valueParam)
+ && !Value.DATE.equals(valueParam)) {
+ throw new ValidationException("Parameter [" + Parameter.VALUE
+ + "] is invalid");
+ }
+
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.TZID,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/ExRule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/ExRule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,127 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.Recur;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a EXRULE iCalendar component property.
+ * @author benf
+ */
+public class ExRule extends Property {
+
+ private static final long serialVersionUID = -9171193801247139294L;
+
+ private Recur recur;
+
+ /**
+ * Default constructor.
+ */
+ public ExRule() {
+ super(EXRULE, PropertyFactoryImpl.getInstance());
+ recur = new Recur(Recur.DAILY, 1);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException thrown when the specified string is not a valid representaton of a recurrence
+ * @see Recur#Recur(String)
+ */
+ public ExRule(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(EXRULE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aRecur a recurrence
+ */
+ public ExRule(final Recur aRecur) {
+ super(EXRULE, PropertyFactoryImpl.getInstance());
+ recur = aRecur;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aRecur a recurrence
+ */
+ public ExRule(final ParameterList aList, final Recur aRecur) {
+ super(EXRULE, aList, PropertyFactoryImpl.getInstance());
+ recur = aRecur;
+ }
+
+ /**
+ * @return Returns the recur.
+ */
+ public final Recur getRecur() {
+ return recur;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws ParseException {
+ recur = new Recur(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getRecur().toString();
+ }
+
+ /**
+ * @param recur The recur to set.
+ */
+ public final void setRecur(final Recur recur) {
+ this.recur = recur;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/ExtendedAddress.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/ExtendedAddress.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a EXTENDED_ADDRESS iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class ExtendedAddress extends Property implements Escapable {
+
+ private static final long serialVersionUID = 6506776332370144983L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public ExtendedAddress() {
+ super(EXTENDED_ADDRESS, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public ExtendedAddress(final String aValue) {
+ super(EXTENDED_ADDRESS, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public ExtendedAddress(final ParameterList aList, final String aValue) {
+ super(EXTENDED_ADDRESS, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/FreeBusy.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/FreeBusy.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,206 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PeriodList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 14, 2004]
+ *
+ * Defines a FREEBUSY iCalendar component property.
+ *
+ *
+ * 4.8.2.6 Free/Busy Time
+ *
+ * Property Name: FREEBUSY
+ *
+ * Purpose: The property defines one or more free or busy time
+ * intervals.
+ *
+ * Value Type: PERIOD. The date and time values MUST be in an UTC time
+ * format.
+ *
+ * Property Parameters: Non-standard or free/busy time type property
+ * parameters can be specified on this property.
+ *
+ * Conformance: The property can be specified in a "VFREEBUSY" calendar
+ * component.
+ *
+ * Property Parameter: "FBTYPE" and non-standard parameters can be
+ * specified on this property.
+ *
+ * Description: These time periods can be specified as either a start
+ * and end date-time or a start date-time and duration. The date and
+ * time MUST be a UTC time format.
+ *
+ * "FREEBUSY" properties within the "VFREEBUSY" calendar component
+ * SHOULD be sorted in ascending order, based on start time and then end
+ * time, with the earliest periods first.
+ *
+ * The "FREEBUSY" property can specify more than one value, separated by
+ * the COMMA character (US-ASCII decimal 44). In such cases, the
+ * "FREEBUSY" property values SHOULD all be of the same "FBTYPE"
+ * property parameter type (e.g., all values of a particular "FBTYPE"
+ * listed together in a single property).
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * freebusy = "FREEBUSY" fbparam ":" fbvalue
+ * CRLF
+ *
+ * fbparam = *(
+ * ; the following is optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" fbtypeparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ * fbvalue = period *["," period]
+ * ;Time value MUST be in the UTC time format.
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class FreeBusy extends Property {
+
+ private static final long serialVersionUID = -6415954847619338567L;
+
+ private PeriodList periods;
+
+ /**
+ * Default constructor.
+ */
+ public FreeBusy() {
+ super(FREEBUSY, PropertyFactoryImpl.getInstance());
+ periods = new PeriodList();
+ }
+
+ /**
+ * @param aValue a freebusy value
+ * @throws ParseException where the specified string is not a valid freebusy value
+ */
+ public FreeBusy(final String aValue) throws ParseException {
+ super(FREEBUSY, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException when the specified string is not a valid list of periods
+ */
+ public FreeBusy(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(FREEBUSY, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param pList a list of periods
+ */
+ public FreeBusy(final PeriodList pList) {
+ super(FREEBUSY, PropertyFactoryImpl.getInstance());
+ if (!pList.isUtc()) {
+ throw new IllegalArgumentException("Periods must be in UTC format");
+ }
+ periods = pList;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param pList a list of periods
+ */
+ public FreeBusy(final ParameterList aList, final PeriodList pList) {
+ super(FREEBUSY, aList, PropertyFactoryImpl.getInstance());
+ if (!pList.isUtc()) {
+ throw new IllegalArgumentException("Periods must be in UTC format");
+ }
+ periods = pList;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once (";" fbtypeparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.FBTYPE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+
+ if (!periods.isUtc()) {
+ throw new ValidationException("Periods must be in UTC format");
+ }
+ }
+
+ /**
+ * @return Returns the periods.
+ */
+ public final PeriodList getPeriods() {
+ return periods;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws ParseException {
+ periods = new PeriodList(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getPeriods().toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Geo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Geo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,253 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.math.BigDecimal;
+
+import org.apache.commons.lang.StringUtils;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a GEO iCalendar component property.
+ *
+ *
+ * 4.8.1.6 Geographic Position
+ *
+ * Property Name: GEO
+ *
+ * Purpose: This property specifies information related to the global
+ * position for the activity specified by a calendar component.
+ *
+ * Value Type: FLOAT. The value MUST be two SEMICOLON separated FLOAT
+ * values.
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property can be specified in "VEVENT" or "VTODO"
+ * calendar components.
+ *
+ * Description: The property value specifies latitude and longitude, in
+ * that order (i.e., "LAT LON" ordering). The longitude represents the
+ * location east or west of the prime meridian as a positive or negative
+ * real number, respectively. The longitude and latitude values MAY be
+ * specified up to six decimal places, which will allow for accuracy to
+ * within one meter of geographical position. Receiving applications
+ * MUST accept values of this precision and MAY truncate values of
+ * greater precision.
+ *
+ * Values for latitude and longitude shall be expressed as decimal
+ * fractions of degrees. Whole degrees of latitude shall be represented
+ * by a two-digit decimal number ranging from 0 through 90. Whole
+ * degrees of longitude shall be represented by a decimal number ranging
+ * from 0 through 180. When a decimal fraction of a degree is specified,
+ * it shall be separated from the whole number of degrees by a decimal
+ * point.
+ *
+ * Latitudes north of the equator shall be specified by a plus sign (+),
+ * or by the absence of a minus sign (-), preceding the digits
+ * designating degrees. Latitudes south of the Equator shall be
+ * designated by a minus sign (-) preceding the digits designating
+ * degrees. A point on the Equator shall be assigned to the Northern
+ * Hemisphere.
+ *
+ * Longitudes east of the prime meridian shall be specified by a plus
+ * sign (+), or by the absence of a minus sign (-), preceding the digits
+ * designating degrees. Longitudes west of the meridian shall be
+ * designated by minus sign (-) preceding the digits designating
+ * degrees. A point on the prime meridian shall be assigned to the
+ * Eastern Hemisphere. A point on the 180th meridian shall be assigned
+ * to the Western Hemisphere. One exception to this last convention is
+ * permitted. For the special condition of describing a band of latitude
+ * around the earth, the East Bounding Coordinate data element shall be
+ * assigned the value +180 (180) degrees.
+ *
+ * Any spatial address with a latitude of +90 (90) or -90 degrees will
+ * specify the position at the North or South Pole, respectively. The
+ * component for longitude may have any legal value.
+ *
+ * With the exception of the special condition described above, this
+ * form is specified in Department of Commerce, 1986, Representation of
+ * geographic point locations for information interchange (Federal
+ * Information Processing Standard 70-1): Washington, Department of
+ * Commerce, National Institute of Standards and Technology.
+ *
+ * The simple formula for converting degrees-minutes-seconds into
+ * decimal degrees is:
+ *
+ * decimal = degrees + minutes/60 + seconds/3600.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * geo = "GEO" geoparam ":" geovalue CRLF
+ *
+ * geoparam = *(";" xparam)
+ *
+ * geovalue = float ";" float
+ * ;Latitude and Longitude components
+ *
+ * Example: The following is an example of this property:
+ *
+ * GEO:37.386013;-122.082932
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Geo extends Property {
+
+ private static final long serialVersionUID = -902100715801867636L;
+
+ private BigDecimal latitude;
+
+ private BigDecimal longitude;
+
+ /**
+ * Default constructor.
+ */
+ public Geo() {
+ super(GEO, PropertyFactoryImpl.getInstance());
+ latitude = BigDecimal.valueOf(0);
+ longitude = BigDecimal.valueOf(0);
+ }
+
+ /**
+ * Creates a new instance by parsing the specified string representation.
+ * @param value a geo value
+ */
+ public Geo(final String value) {
+ super(GEO, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Geo(final ParameterList aList, final String aValue) {
+ super(GEO, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param latitude a latitudinal value
+ * @param longitude a longitudinal value
+ */
+ public Geo(final BigDecimal latitude, final BigDecimal longitude) {
+ super(GEO, PropertyFactoryImpl.getInstance());
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param latitude a latitudinal value
+ * @param longitude a longitudinal value
+ */
+ public Geo(final ParameterList aList, final BigDecimal latitude,
+ final BigDecimal longitude) {
+ super(GEO, aList, PropertyFactoryImpl.getInstance());
+ this.latitude = latitude;
+ this.longitude = longitude;
+ }
+
+ /**
+ * @return Returns the latitude.
+ */
+ public final BigDecimal getLatitude() {
+ return latitude;
+ }
+
+ /**
+ * @return Returns the longitude.
+ */
+ public final BigDecimal getLongitude() {
+ return longitude;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ final String latitudeString = aValue.substring(0, aValue.indexOf(';'));
+ if (StringUtils.isNotBlank(latitudeString)) {
+ latitude = new BigDecimal(latitudeString);
+ }
+ else {
+ latitude = BigDecimal.valueOf(0);
+ }
+
+ final String longitudeString = aValue.substring(aValue.indexOf(';') + 1);
+ if (StringUtils.isNotBlank(longitudeString)) {
+ longitude = new BigDecimal(longitudeString);
+ }
+ else {
+ longitude = BigDecimal.valueOf(0);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return String.valueOf(getLatitude()) + ";"
+ + String.valueOf(getLongitude());
+ }
+
+ /**
+ * @param latitude The latitude to set.
+ */
+ public final void setLatitude(final BigDecimal latitude) {
+ this.latitude = latitude;
+ }
+
+ /**
+ * @param longitude The longitude to set.
+ */
+ public final void setLongitude(final BigDecimal longitude) {
+ this.longitude = longitude;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/LastModified.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/LastModified.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,129 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a LAST-MODIFIED iCalendar component property.
+ *
+ *
+ * 4.8.7.3 Last Modified
+ *
+ * Property Name: LAST-MODIFIED
+ *
+ * Purpose: The property specifies the date and time that the
+ * information associated with the calendar component was last revised
+ * in the calendar store.
+ *
+ * Note: This is analogous to the modification date and time for a
+ * file in the file system.
+ *
+ * Value Type: DATE-TIME
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property can be specified in the "EVENT", "VTODO",
+ * "VJOURNAL" or "VTIMEZONE" calendar components.
+ *
+ * Description: The property value MUST be specified in the UTC time
+ * format.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * last-mod = "LAST-MODIFIED" lstparam ":" date-time CRLF
+ *
+ * lstparam = *(";" xparam)
+ *
+ *
+ * @author benf
+ */
+public class LastModified extends UtcProperty {
+
+ private static final long serialVersionUID = 5288572652052836062L;
+
+ /**
+ * Default constructor.
+ */
+ public LastModified() {
+ super(LAST_MODIFIED, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a date-time value
+ * @throws ParseException where the specified string is not a valid date-time
+ */
+ public LastModified(final String aValue) throws ParseException {
+ this(new ParameterList(), aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public LastModified(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(LAST_MODIFIED, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aDate a date representation of a date-time value
+ */
+ public LastModified(final DateTime aDate) {
+ super(LAST_MODIFIED, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aDate a date representation of a date-time value
+ */
+ public LastModified(final ParameterList aList, final DateTime aDate) {
+ super(LAST_MODIFIED, aList, PropertyFactoryImpl.getInstance());
+ // time must be in UTC..
+ aDate.setUtc(true);
+ setDate(aDate);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Locality.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Locality.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a LOCALITY iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class Locality extends Property implements Escapable {
+
+ private static final long serialVersionUID = -2324296161017475527L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Locality() {
+ super(LOCALITY, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Locality(final String aValue) {
+ super(LOCALITY, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Locality(final ParameterList aList, final String aValue) {
+ super(LOCALITY, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Location.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Location.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a LOCATION iCalendar component property.
+ *
+ *
+ * 4.8.1.7 Location
+ *
+ * Property Name: LOCATION
+ *
+ * Purpose: The property defines the intended venue for the activity
+ * defined by a calendar component.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard, alternate text representation and
+ * language property parameters can be specified on this property.
+ *
+ * Conformance: This property can be specified in "VEVENT" or "VTODO"
+ * calendar component.
+ *
+ * Description: Specific venues such as conference or meeting rooms may
+ * be explicitly specified using this property. An alternate
+ * representation may be specified that is a URI that points to
+ * directory information with more structured specification of the
+ * location. For example, the alternate representation may specify
+ * either an LDAP URI pointing to an LDAP server entry or a CID URI
+ * pointing to a MIME body part containing a vCard [RFC 2426] for the
+ * location.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * location = "LOCATION locparam ":" text CRLF
+ *
+ * locparam = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" altrepparam) / (";" languageparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ * Example: The following are some examples of this property:
+ *
+ * LOCATION:Conference Room - F123, Bldg. 002
+ *
+ * LOCATION;ALTREP="http://xyzcorp.com/conf-rooms/f123.vcf":
+ * Conference Room - F123, Bldg. 002
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Location extends Property implements Escapable {
+
+ private static final long serialVersionUID = 8651881536125682401L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Location() {
+ super(LOCATION, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Location(final String aValue) {
+ super(LOCATION, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Location(final ParameterList aList, final String aValue) {
+ super(LOCATION, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" altrepparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ALTREP,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.VVENUE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/LocationType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/LocationType.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,134 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.LocationTypeList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a LOCATION_TYPE iCalendar component property.
+ * @author benf
+ */
+public class LocationType extends Property {
+
+ private static final long serialVersionUID = -3541686430899510312L;
+
+ private LocationTypeList locationTypes;
+
+ /**
+ * Default constructor.
+ */
+ public LocationType() {
+ super(LOCATION_TYPE, PropertyFactoryImpl.getInstance());
+ locationTypes = new LocationTypeList();
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public LocationType(final String aValue) {
+ super(LOCATION_TYPE, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public LocationType(final ParameterList aList, final String aValue) {
+ super(LOCATION_TYPE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param cList a list of locationTypes
+ */
+ public LocationType(final LocationTypeList cList) {
+ super(LOCATION_TYPE, PropertyFactoryImpl.getInstance());
+ locationTypes = cList;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param cList a list of locationTypes
+ */
+ public LocationType(final ParameterList aList, final LocationTypeList cList) {
+ super(LOCATION_TYPE, aList, PropertyFactoryImpl.getInstance());
+ locationTypes = cList;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ locationTypes = new LocationTypeList(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once (";" languageparam ) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * @return Returns the locationTypes.
+ */
+ public final LocationTypeList getLocationTypes() {
+ return locationTypes;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getLocationTypes().toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Method.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Method.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,162 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a METHOD iCalendar property.
+ * @author benf
+ */
+public class Method extends Property {
+
+ private static final long serialVersionUID = 7220956532685378719L;
+
+ /**
+ * Used to publish a calendar entry to one or more Calendar Users. There is no interactivity between the publisher
+ * and any other calendar user. An example might include a baseball team publishing its schedule to the public. [RFC
+ * 2446]
+ */
+ public static final Method PUBLISH = new ImmutableMethod("PUBLISH");
+
+ /**
+ * Used to schedule a calendar entry with other Calendar Users. Requests are interactive in that they require the
+ * receiver to respond using the Reply methods. Meeting Requests, Busy Time requests and the assignment of VTODOs to
+ * other Calendar Users are all examples. Requests are also used by the "Organizer" to update the status of a
+ * calendar entry. [RFC 2446]
+ */
+ public static final Method REQUEST = new ImmutableMethod("REQUEST");
+
+ /**
+ * A Reply is used in response to a Request to convey "Attendee" status to the "Organizer". Replies are commonly
+ * used to respond to meeting and task requests. [RFC2446]
+ */
+ public static final Method REPLY = new ImmutableMethod("REPLY");
+
+ /**
+ * Add one or more instances to an existing VEVENT, VTODO, or VJOURNAL. [RFC 2446]
+ */
+ public static final Method ADD = new ImmutableMethod("ADD");
+
+ /**
+ * Cancel one or more instances of an existing VEVENT, VTODO, or VJOURNAL. [RFC 2446]
+ */
+ public static final Method CANCEL = new ImmutableMethod("CANCEL");
+
+ /**
+ * The Refresh method is used by an "Attendee" to request the latest version of a calendar entry. [RFC 2446]
+ */
+ public static final Method REFRESH = new ImmutableMethod("REFRESH");
+
+ /**
+ * The Counter method is used by an "Attendee" to negotiate a change in the calendar entry. Examples include the
+ * request to change a proposed Event time or change the due date for a VTODO. [RFC 2446]
+ */
+ public static final Method COUNTER = new ImmutableMethod("COUNTER");
+
+ /**
+ * Used by the "Organizer" to decline the proposed counter-proprosal. [RFC 2446]
+ */
+ public static final Method DECLINE_COUNTER = new ImmutableMethod(
+ "DECLINE-COUNTER");
+
+ /**
+ * @author Ben Fortuna An immutable instance of Method.
+ */
+ private static final class ImmutableMethod extends Method {
+
+ private static final long serialVersionUID = 5332607957381969713L;
+
+ private ImmutableMethod(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Method() {
+ super(METHOD, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Method(final String aValue) {
+ super(METHOD, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Method(final ParameterList aList, final String aValue) {
+ super(METHOD, aList, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Name.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Name.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a NAME iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class Name extends Property implements Escapable {
+
+ private static final long serialVersionUID = -6930099834219160086L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Name() {
+ super(NAME, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Name(final String aValue) {
+ super(NAME, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Name(final ParameterList aList, final String aValue) {
+ super(NAME, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Organizer.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Organizer.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,238 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines an ORGANIZER iCalendar component property.
+ *
+ *
+ * 4.8.4.3 Organizer
+ *
+ * Property Name: ORGANIZER
+ *
+ * Purpose: The property defines the organizer for a calendar component.
+ *
+ * Value Type: CAL-ADDRESS
+ *
+ * Property Parameters: Non-standard, language, common name, directory
+ * entry reference, sent by property parameters can be specified on this
+ * property.
+ *
+ * Conformance: This property MUST be specified in an iCalendar object
+ * that specifies a group scheduled calendar entity. This property MUST
+ * be specified in an iCalendar object that specifies the publication of
+ * a calendar user's busy time. This property MUST NOT be specified in
+ * an iCalendar object that specifies only a time zone definition or
+ * that defines calendar entities that are not group scheduled entities,
+ * but are entities only on a single user's calendar.
+ *
+ * Description: The property is specified within the "VEVENT", "VTODO",
+ * "VJOURNAL calendar components to specify the organizer of a group
+ * scheduled calendar entity. The property is specified within the
+ * "VFREEBUSY" calendar component to specify the calendar user
+ * requesting the free or busy time. When publishing a "VFREEBUSY"
+ * calendar component, the property is used to specify the calendar that
+ * the published busy time came from.
+ *
+ * The property has the property parameters CN, for specifying the
+ * common or display name associated with the "Organizer", DIR, for
+ * specifying a pointer to the directory information associated with the
+ * "Organizer", SENT-BY, for specifying another calendar user that is
+ * acting on behalf of the "Organizer". The non-standard parameters may
+ * also be specified on this property. If the LANGUAGE property
+ * parameter is specified, the identified language applies to the CN
+ * parameter value.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * organizer = "ORGANIZER" orgparam ":"
+ * cal-address CRLF
+ *
+ * orgparam = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" cnparam) / (";" dirparam) / (";" sentbyparam) /
+ * (";" languageparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ * Example: The following is an example of this property:
+ *
+ * ORGANIZER;CN=John Smith:MAILTO:jsmith@host1.com
+ *
+ * The following is an example of this property with a pointer to the
+ * directory information associated with the organizer:
+ *
+ * ORGANIZER;CN=JohnSmith;DIR="ldap://host.com:6666/o=3DDC%20Associ
+ * ates,c=3DUS??(cn=3DJohn%20Smith)":MAILTO:jsmith@host1.com
+ *
+ * The following is an example of this property used by another calendar
+ * user who is acting on behalf of the organizer, with responses
+ * intended to be sent back to the organizer, not the other calendar
+ * user:
+ *
+ * ORGANIZER;SENT-BY="MAILTO:jane_doe@host.com":
+ * MAILTO:jsmith@host1.com
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Organizer extends Property {
+
+ private static final long serialVersionUID = -5216965653165090725L;
+
+ private URI calAddress;
+
+ /**
+ * Default constructor.
+ */
+ public Organizer() {
+ super(ORGANIZER, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * Constructs a new instance with the specified value.
+ * @param value an organizer URI
+ * @throws URISyntaxException where the specified value is not a valid URI
+ */
+ public Organizer(String value) throws URISyntaxException {
+ super(ORGANIZER, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws URISyntaxException where the specified value string is not a valid uri
+ */
+ public Organizer(final ParameterList aList, final String aValue)
+ throws URISyntaxException {
+ super(ORGANIZER, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aUri a URI representation of a calendar address
+ */
+ public Organizer(final URI aUri) {
+ super(ORGANIZER, PropertyFactoryImpl.getInstance());
+ calAddress = aUri;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aUri a URI representation of a calendar address
+ */
+ public Organizer(final ParameterList aList, final URI aUri) {
+ super(ORGANIZER, aList, PropertyFactoryImpl.getInstance());
+ calAddress = aUri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" cnparam) / (";" dirparam) / (";"
+ * sentbyparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.CN,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.DIR,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.SENT_BY,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /* schedulestatus added for CalDAV scheduling
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.SCHEDULE_STATUS,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * @return Returns the calAddress.
+ */
+ public final URI getCalAddress() {
+ return calAddress;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws URISyntaxException {
+ calAddress = Uris.create(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return Uris.decode(Strings.valueOf(getCalAddress()));
+ }
+
+ /**
+ * @param calAddress The calAddress to set.
+ */
+ public final void setCalAddress(final URI calAddress) {
+ this.calAddress = calAddress;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/PercentComplete.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/PercentComplete.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,122 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a PERCENT-COMPLETE iCalendar component property.
+ * @author benf
+ */
+public class PercentComplete extends Property {
+
+ private static final long serialVersionUID = 7788138484983240112L;
+
+ private int percentage;
+
+ /**
+ * Default constructor.
+ */
+ public PercentComplete() {
+ super(PERCENT_COMPLETE, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public PercentComplete(final ParameterList aList, final String aValue) {
+ super(PERCENT_COMPLETE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aPercentage an int representation of a percentage
+ */
+ public PercentComplete(final int aPercentage) {
+ super(PERCENT_COMPLETE, PropertyFactoryImpl.getInstance());
+ percentage = aPercentage;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aPercentage an int representation of a percentage
+ */
+ public PercentComplete(final ParameterList aList, final int aPercentage) {
+ super(PERCENT_COMPLETE, aList, PropertyFactoryImpl.getInstance());
+ percentage = aPercentage;
+ }
+
+ /**
+ * @return Returns the percentage.
+ */
+ public final int getPercentage() {
+ return percentage;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ percentage = Integer.parseInt(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return String.valueOf(getPercentage());
+ }
+
+ /**
+ * @param percentage The percentage to set.
+ */
+ public final void setPercentage(final int percentage) {
+ this.percentage = percentage;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ if (percentage < 0 || percentage > 100) {
+ throw new ValidationException(getName() + " with invalid value: " + percentage);
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Postalcode.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Postalcode.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a POSTALCODE iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class Postalcode extends Property implements Escapable {
+
+ private static final long serialVersionUID = 1983456638722378724L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Postalcode() {
+ super(POSTALCODE, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Postalcode(final String aValue) {
+ super(POSTALCODE, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Postalcode(final ParameterList aList, final String aValue) {
+ super(POSTALCODE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Priority.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Priority.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,239 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a PRIORITY iCalendar component property.
+ *
+ *
+ * 4.8.1.9 Priority
+ *
+ * Property Name: PRIORITY
+ *
+ * Purpose: The property defines the relative priority for a calendar
+ * component.
+ *
+ * Value Type: INTEGER
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: The property can be specified in a "VEVENT" or "VTODO"
+ * calendar component.
+ *
+ * Description: The priority is specified as an integer in the range
+ * zero to nine. A value of zero (US-ASCII decimal 48) specifies an
+ * undefined priority. A value of one (US-ASCII decimal 49) is the
+ * highest priority. A value of two (US-ASCII decimal 50) is the second
+ * highest priority. Subsequent numbers specify a decreasing ordinal
+ * priority. A value of nine (US-ASCII decimal 58) is the lowest
+ * priority.
+ *
+ * A CUA with a three-level priority scheme of "HIGH", "MEDIUM" and
+ * "LOW" is mapped into this property such that a property value in the
+ * range of one (US-ASCII decimal 49) to four (US-ASCII decimal 52)
+ * specifies "HIGH" priority. A value of five (US-ASCII decimal 53) is
+ * the normal or "MEDIUM" priority. A value in the range of six (US-
+ * ASCII decimal 54) to nine (US-ASCII decimal 58) is "LOW" priority.
+ *
+ * A CUA with a priority schema of "A1", "A2", "A3",
+ * "B1", "B2", ...,
+ * "C3" is mapped into this property such that a property value of one
+ * (US-ASCII decimal 49) specifies "A1", a property value of two (US-
+ * ASCII decimal 50) specifies "A2", a property value of three (US-ASCII
+ * decimal 51) specifies "A3", and so forth up to a property value of 9
+ * (US-ASCII decimal 58) specifies "C3".
+ *
+ * Other integer values are reserved for future use.
+ *
+ * Within a "VEVENT" calendar component, this property specifies a
+ * priority for the event. This property may be useful when more than
+ * one event is scheduled for a given time period.
+ *
+ * Within a "VTODO" calendar component, this property specified a
+ * priority for the to-do. This property is useful in prioritizing
+ * multiple action items for a given time period.
+ *
+ * Format Definition: The property is specified by the following
+ * notation:
+ *
+ * priority = "PRIORITY" prioparam ":" privalue CRLF
+ * ;Default is zero
+ *
+ * prioparam = *(";" xparam)
+ *
+ * privalue = integer ;Must be in the range [0..9]
+ * ; All other values are reserved for future use
+ *
+ * The following is an example of a property with the highest priority:
+ *
+ * PRIORITY:1
+ *
+ * The following is an example of a property with a next highest
+ * priority:
+ *
+ * PRIORITY:2
+ *
+ * Example: The following is an example of a property with no priority.
+ * This is equivalent to not specifying the "PRIORITY" property:
+ *
+ * PRIORITY:0
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Priority extends Property {
+
+ private static final long serialVersionUID = -5654367843953827397L;
+
+ /**
+ * Undefined priority.
+ */
+ public static final Priority UNDEFINED = new ImmutablePriority(0);
+
+ /**
+ * High priority.
+ */
+ public static final Priority HIGH = new ImmutablePriority(1);
+
+ /**
+ * Medium priority.
+ */
+ public static final Priority MEDIUM = new ImmutablePriority(5);
+
+ /**
+ * Low priority.
+ */
+ public static final Priority LOW = new ImmutablePriority(9);
+
+ /**
+ * @author Ben Fortuna An immutable instance of Priority.
+ */
+ private static final class ImmutablePriority extends Priority {
+
+ private static final long serialVersionUID = 5884973714694108418L;
+
+ private ImmutablePriority(final int level) {
+ super(new ParameterList(true), level);
+ }
+
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+
+ public void setLevel(final int level) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private int level;
+
+ /**
+ * Default constructor.
+ */
+ public Priority() {
+ super(PRIORITY, PropertyFactoryImpl.getInstance());
+ level = UNDEFINED.getLevel();
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Priority(final ParameterList aList, final String aValue) {
+ super(PRIORITY, aList, PropertyFactoryImpl.getInstance());
+ level = Integer.parseInt(aValue);
+ }
+
+ /**
+ * @param aLevel an int representation of a priority level
+ */
+ public Priority(final int aLevel) {
+ super(PRIORITY, PropertyFactoryImpl.getInstance());
+ level = aLevel;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aLevel an int representation of a priority level
+ */
+ public Priority(final ParameterList aList, final int aLevel) {
+ super(PRIORITY, aList, PropertyFactoryImpl.getInstance());
+ level = aLevel;
+ }
+
+ /**
+ * @return Returns the level.
+ */
+ public final int getLevel() {
+ return level;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ level = Integer.parseInt(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return String.valueOf(getLevel());
+ }
+
+ /**
+ * @param level The level to set.
+ */
+ public void setLevel(final int level) {
+ this.level = level;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/ProdId.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/ProdId.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,98 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a PRODID iCalendar property.
+ * @author benf
+ */
+public class ProdId extends Property implements Escapable {
+
+ private static final long serialVersionUID = -2433059917714523286L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public ProdId() {
+ super(PRODID, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public ProdId(final String aValue) {
+ super(PRODID, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public ProdId(final ParameterList aList, final String aValue) {
+ super(PRODID, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/RDate.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/RDate.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,266 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PeriodList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.util.ParameterValidator;
+import net.fortuna.ical4j.util.Strings;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines an RDATE iCalendar component property.
+ *
+ *
+ * 4.8.5.3 Recurrence Date/Times
+ *
+ * Property Name: RDATE
+ *
+ * Purpose: This property defines the list of date/times for a
+ * recurrence set.
+ *
+ * Value Type: The default value type for this property is DATE-TIME.
+ * The value type can be set to DATE or PERIOD.
+ *
+ * Property Parameters: Non-standard, value data type and time zone
+ * identifier property parameters can be specified on this property.
+ *
+ * Conformance: The property can be specified in "VEVENT", "VTODO",
+ * "VJOURNAL" or "VTIMEZONE" calendar components.
+ *
+ * Description: This property can appear along with the "RRULE" property
+ * to define an aggregate set of repeating occurrences. When they both
+ * appear in an iCalendar object, the recurring events are defined by
+ * the union of occurrences defined by both the "RDATE" and "RRULE".
+ *
+ * The recurrence dates, if specified, are used in computing the
+ * recurrence set. The recurrence set is the complete set of recurrence
+ * instances for a calendar component. The recurrence set is generated
+ * by considering the initial "DTSTART" property along with the "RRULE",
+ * "RDATE", "EXDATE" and "EXRULE" properties contained within the
+ * iCalendar object. The "DTSTART" property defines the first instance
+ * in the recurrence set. Multiple instances of the "RRULE" and "EXRULE"
+ * properties can also be specified to define more sophisticated
+ * recurrence sets. The final recurrence set is generated by gathering
+ * all of the start date/times generated by any of the specified "RRULE"
+ * and "RDATE" properties, and excluding any start date/times which fall
+ * within the union of start date/times generated by any specified
+ * "EXRULE" and "EXDATE" properties. This implies that start date/times
+ * within exclusion related properties (i.e., "EXDATE" and "EXRULE")
+ * take precedence over those specified by inclusion properties (i.e.,
+ * "RDATE" and "RRULE"). Where duplicate instances are generated by the
+ * "RRULE" and "RDATE" properties, only one recurrence is considered.
+ * Duplicate instances are ignored.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * rdate = "RDATE" rdtparam ":" rdtval *("," rdtval) CRLF
+ *
+ * rdtparam = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" "VALUE" "=" ("DATE-TIME"
+ * / "DATE" / "PERIOD")) /
+ * (";" tzidparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ * rdtval = date-time / date / period
+ * ;Value MUST match value type
+ *
+ * Example: The following are examples of this property:
+ *
+ * RDATE:19970714T123000Z
+ *
+ * RDATE;TZID=US-EASTERN:19970714T083000
+ *
+ * RDATE;VALUE=PERIOD:19960403T020000Z/19960403T040000Z,
+ * 19960404T010000Z/PT3H
+ *
+ * RDATE;VALUE=DATE:19970101,19970120,19970217,19970421
+ * 19970526,19970704,19970901,19971014,19971128,19971129,19971225
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class RDate extends DateListProperty {
+
+ private static final long serialVersionUID = -3320381650013860193L;
+
+ private PeriodList periods;
+
+ /**
+ * Default constructor.
+ */
+ public RDate() {
+ super(RDATE, PropertyFactoryImpl.getInstance());
+ periods = new PeriodList(false, true);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public RDate(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(RDATE, aList, PropertyFactoryImpl.getInstance());
+ periods = new PeriodList(false, true);
+ setValue(aValue);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param dates a list of dates
+ */
+ public RDate(final DateList dates) {
+ super(RDATE, dates, PropertyFactoryImpl.getInstance());
+ periods = new PeriodList(false, true);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aList a list of parameters for this component
+ * @param dates a list of dates
+ */
+ public RDate(final ParameterList aList, final DateList dates) {
+ super(RDATE, aList, dates, PropertyFactoryImpl.getInstance());
+ periods = new PeriodList(false, true);
+ }
+
+ /**
+ * Constructor.
+ * @param periods a list of periods
+ */
+ public RDate(final PeriodList periods) {
+ super(RDATE, new DateList(true), PropertyFactoryImpl.getInstance());
+ this.periods = periods;
+ }
+
+ /**
+ * Constructor.
+ * @param aList a list of parameters for this component
+ * @param periods a list of periods
+ */
+ public RDate(final ParameterList aList, final PeriodList periods) {
+ super(RDATE, aList, new DateList(true), PropertyFactoryImpl.getInstance());
+ this.periods = periods;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" "VALUE" "=" ("DATE-TIME" / "DATE" /
+ * "PERIOD")) / (";" tzidparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.VALUE,
+ getParameters());
+
+ final Parameter valueParam = getParameter(Parameter.VALUE);
+
+ if (valueParam != null && !Value.DATE_TIME.equals(valueParam)
+ && !Value.DATE.equals(valueParam)
+ && !Value.PERIOD.equals(valueParam)) {
+ throw new ValidationException("Parameter [" + Parameter.VALUE
+ + "] is invalid");
+ }
+
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.TZID,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * @return Returns the period list.
+ */
+ public final PeriodList getPeriods() {
+ return periods;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws ParseException {
+ if (Value.PERIOD.equals(getParameter(Parameter.VALUE))) {
+ periods = new PeriodList(aValue);
+ }
+ else {
+ super.setValue(aValue);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ if (periods != null && !(periods.isEmpty() && periods.isUnmodifiable())) {
+ return Strings.valueOf(getPeriods());
+ }
+ return super.getValue();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setTimeZone(TimeZone timezone) {
+ if (periods != null && !(periods.isEmpty() && periods.isUnmodifiable())) {
+ periods.setTimeZone(timezone);
+ }
+ else {
+ super.setTimeZone(timezone);
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/RRule.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/RRule.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,129 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.Recur;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines an RRULE iCalendar component property.
+ * @author benf
+ */
+public class RRule extends Property {
+
+ private static final long serialVersionUID = -9188265089143001164L;
+
+ private Recur recur;
+
+ /**
+ * Default constructor.
+ */
+ public RRule() {
+ super(RRULE, PropertyFactoryImpl.getInstance());
+ recur = new Recur(Recur.DAILY, 1);
+ }
+
+ /**
+ * @param value a rule string
+ * @throws ParseException where the specified string is not a valid rule
+ */
+ public RRule(String value) throws ParseException {
+ super(RRULE, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException thrown when the specified string is not a valid representaton of a recurrence
+ * @see Recur#Recur(String)
+ */
+ public RRule(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(RRULE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aRecur a recurrence value
+ */
+ public RRule(final Recur aRecur) {
+ super(RRULE, PropertyFactoryImpl.getInstance());
+ recur = aRecur;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aRecur a recurrence value
+ */
+ public RRule(final ParameterList aList, final Recur aRecur) {
+ super(RRULE, aList, PropertyFactoryImpl.getInstance());
+ recur = aRecur;
+ }
+
+ /**
+ * @return Returns the recur.
+ */
+ public final Recur getRecur() {
+ return recur;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws ParseException {
+ recur = new Recur(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getRecur().toString();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/RecurrenceId.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/RecurrenceId.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,221 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a RECURRENCE-ID iCalendar component property.
+ *
+ *
+ * 4.8.4.4 Recurrence ID
+ *
+ * Property Name: RECURRENCE-ID
+ *
+ * Purpose: This property is used in conjunction with the "UID" and
+ * "SEQUENCE" property to identify a specific instance of a recurring
+ * "VEVENT", "VTODO" or "VJOURNAL" calendar component. The property
+ * value is the effective value of the "DTSTART" property of the
+ * recurrence instance.
+ *
+ * Value Type: The default value type for this property is DATE-TIME.
+ * The time format can be any of the valid forms defined for a DATE-TIME
+ * value type. See DATE-TIME value type definition for specific
+ * interpretations of the various forms. The value type can be set to
+ * DATE.
+ *
+ * Property Parameters: Non-standard property, value data type, time
+ * zone identifier and recurrence identifier range parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property can be specified in an iCalendar object
+ * containing a recurring calendar component.
+ *
+ * Description: The full range of calendar components specified by a
+ * recurrence set is referenced by referring to just the "UID" property
+ * value corresponding to the calendar component. The "RECURRENCE-ID"
+ * property allows the reference to an individual instance within the
+ * recurrence set.
+ *
+ * If the value of the "DTSTART" property is a DATE type value, then the
+ * value MUST be the calendar date for the recurrence instance.
+ *
+ * The date/time value is set to the time when the original recurrence
+ * instance would occur; meaning that if the intent is to change a
+ * Friday meeting to Thursday, the date/time is still set to the
+ * original Friday meeting.
+ *
+ * The "RECURRENCE-ID" property is used in conjunction with the "UID"
+ * and "SEQUENCE" property to identify a particular instance of a
+ * recurring event, to-do or journal. For a given pair of "UID" and
+ * "SEQUENCE" property values, the "RECURRENCE-ID" value for a
+ * recurrence instance is fixed. When the definition of the recurrence
+ * set for a calendar component changes, and hence the "SEQUENCE"
+ * property value changes, the "RECURRENCE-ID" for a given recurrence
+ * instance might also change.The "RANGE" parameter is used to specify
+ * the effective range of recurrence instances from the instance
+ * specified by the "RECURRENCE-ID" property value. The default value
+ * for the range parameter is the single recurrence instance only. The
+ * value can also be "THISANDPRIOR" to indicate a range defined by the
+ * given recurrence instance and all prior instances or the value can be
+ * "THISANDFUTURE" to indicate a range defined by the given recurrence
+ * instance and all subsequent instances.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * recurid = "RECURRENCE-ID" ridparam ":" ridval CRLF
+ *
+ * ridparam = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" "VALUE" "=" ("DATE-TIME" / "DATE)) /
+ * (";" tzidparam) / (";" rangeparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ * ridval = date-time / date
+ * ;Value MUST match value type
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class RecurrenceId extends DateProperty {
+
+ private static final long serialVersionUID = 4456883817126011006L;
+
+ /**
+ * Default constructor.
+ */
+ public RecurrenceId() {
+ super(RECURRENCE_ID, PropertyFactoryImpl.getInstance());
+ setDate(new DateTime());
+ }
+
+ /**
+ * Creates a new RECURRENCE_ID property initialised with the specified timezone.
+ * @param timezone initial timezone
+ */
+ public RecurrenceId(TimeZone timezone) {
+ super(RECURRENCE_ID, timezone, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * Creates a new instance initialised with the parsed value.
+ * @param value the RECURRENCE_ID value string to parse
+ * @throws ParseException where the specified string is not a valid RECURRENCE_ID value representation
+ */
+ public RecurrenceId(final String value) throws ParseException {
+ super(RECURRENCE_ID, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * Creates a new RECURRENCE_ID property initialised with the specified timezone and value.
+ * @param value a string representation of a RECURRENCE_ID value
+ * @param timezone initial timezone
+ * @throws ParseException where the specified value is not a valid string
+ * representation
+ */
+ public RecurrenceId(String value, TimeZone timezone) throws ParseException {
+ super(RECURRENCE_ID, timezone, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws ParseException where the specified value string is not a valid date-time/date representation
+ */
+ public RecurrenceId(final ParameterList aList, final String aValue)
+ throws ParseException {
+ super(RECURRENCE_ID, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aDate a date representation of a date or date-time
+ */
+ public RecurrenceId(final Date aDate) {
+ super(RECURRENCE_ID, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * Constructor. Date or Date-Time format is determined based on the presence of a VALUE parameter.
+ * @param aList a list of parameters for this component
+ * @param aDate a date representation of a date or date-time
+ */
+ public RecurrenceId(final ParameterList aList, final Date aDate) {
+ super(RECURRENCE_ID, aList, PropertyFactoryImpl.getInstance());
+ setDate(aDate);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ super.validate();
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" "VALUE" "=" ("DATE-TIME" / "DATE)) /
+ * (";" tzidparam) / (";" rangeparam) /
+ */
+
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.RANGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Region.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Region.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a REGION iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class Region extends Property implements Escapable {
+
+ private static final long serialVersionUID = 7753849118575885600L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Region() {
+ super(REGION, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Region(final String aValue) {
+ super(REGION, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Region(final ParameterList aList, final String aValue) {
+ super(REGION, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" abbrev
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ABBREV,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/RelatedTo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/RelatedTo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a RELATED-TO iCalendar component property.
+ * @author benf
+ */
+public class RelatedTo extends Property implements Escapable {
+
+ private static final long serialVersionUID = -109375299147319752L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public RelatedTo() {
+ super(RELATED_TO, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public RelatedTo(final String aValue) {
+ super(RELATED_TO, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public RelatedTo(final ParameterList aList, final String aValue) {
+ super(RELATED_TO, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once (";" reltypeparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.RELTYPE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparm)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Repeat.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Repeat.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,120 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a REPEAT iCalendar component property.
+ * @author benf
+ */
+public class Repeat extends Property {
+
+ private static final long serialVersionUID = -1765522613173314831L;
+
+ private int count;
+
+ /**
+ * Default constructor.
+ */
+ public Repeat() {
+ super(REPEAT, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Repeat(final ParameterList aList, final String aValue) {
+ super(REPEAT, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aCount a repetition count
+ */
+ public Repeat(final int aCount) {
+ super(REPEAT, PropertyFactoryImpl.getInstance());
+ count = aCount;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aCount a repetition count
+ */
+ public Repeat(final ParameterList aList, final int aCount) {
+ super(REPEAT, aList, PropertyFactoryImpl.getInstance());
+ count = aCount;
+ }
+
+ /**
+ * @return Returns the count.
+ */
+ public final int getCount() {
+ return count;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ count = Integer.parseInt(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return String.valueOf(getCount());
+ }
+
+ /**
+ * @param count The count to set.
+ */
+ public final void setCount(final int count) {
+ this.count = count;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/RequestStatus.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/RequestStatus.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,223 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.util.StringTokenizer;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a REQUEST-STATUS iCalendar component property.
+ * @author benf
+ */
+public class RequestStatus extends Property {
+
+ private static final long serialVersionUID = -3273944031884755345L;
+
+ /**
+ * Preliminary success status.
+ */
+ public static final String PRELIM_SUCCESS = "1";
+
+ /**
+ * Success status.
+ */
+ public static final String SUCCESS = "2";
+
+ /**
+ * Client error status.
+ */
+ public static final String CLIENT_ERROR = "3";
+
+ /**
+ * Scheduling error status.
+ */
+ public static final String SCHEDULING_ERROR = "4";
+
+ private String statusCode;
+
+ private String description;
+
+ private String exData;
+
+ /**
+ * Default constructor.
+ */
+ public RequestStatus() {
+ super(REQUEST_STATUS, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public RequestStatus(final ParameterList aList, final String aValue) {
+ super(REQUEST_STATUS, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aStatusCode a string representation of a status code
+ * @param aDescription a description
+ * @param data a string representation of extension data
+ */
+ public RequestStatus(final String aStatusCode, final String aDescription,
+ final String data) {
+ super(REQUEST_STATUS, PropertyFactoryImpl.getInstance());
+ statusCode = aStatusCode;
+ description = aDescription;
+ exData = data;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aStatusCode a string representation of a status code
+ * @param aDescription a description
+ * @param data a string representation of extension data
+ */
+ public RequestStatus(final ParameterList aList, final String aStatusCode,
+ final String aDescription, final String data) {
+ super(REQUEST_STATUS, aList, PropertyFactoryImpl.getInstance());
+ statusCode = aStatusCode;
+ description = aDescription;
+ exData = data;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once (";" languageparm) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * @return Returns the description.
+ */
+ public final String getDescription() {
+ return description;
+ }
+
+ /**
+ * @return Returns the exData.
+ */
+ public final String getExData() {
+ return exData;
+ }
+
+ /**
+ * @return Returns the statusCode.
+ */
+ public final String getStatusCode() {
+ return statusCode;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ final StringTokenizer t = new StringTokenizer(aValue, ";");
+
+ if (t.hasMoreTokens()) {
+ statusCode = t.nextToken();
+ }
+
+ if (t.hasMoreTokens()) {
+ description = t.nextToken();
+ }
+
+ if (t.hasMoreTokens()) {
+ exData = t.nextToken();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ final StringBuffer b = new StringBuffer();
+
+ if ((getStatusCode() != null)) {
+ b.append(getStatusCode());
+ }
+
+ if ((getDescription() != null)) {
+ b.append(';');
+ b.append(getDescription());
+ }
+
+ if ((getExData() != null)) {
+ b.append(';');
+ b.append(getExData());
+ }
+
+ return b.toString();
+ }
+
+ /**
+ * @param description The description to set.
+ */
+ public final void setDescription(final String description) {
+ this.description = description;
+ }
+
+ /**
+ * @param exData The exData to set.
+ */
+ public final void setExData(final String exData) {
+ this.exData = exData;
+ }
+
+ /**
+ * @param statusCode The statusCode to set.
+ */
+ public final void setStatusCode(final String statusCode) {
+ this.statusCode = statusCode;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Resources.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Resources.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.TextList;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a RESOURCES iCalendar component property.
+ * @author benf
+ */
+public class Resources extends Property {
+
+ private static final long serialVersionUID = -848562477226746807L;
+
+ private TextList resources;
+
+ /**
+ * Default constructor.
+ */
+ public Resources() {
+ super(RESOURCES, PropertyFactoryImpl.getInstance());
+ resources = new TextList();
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Resources(final ParameterList aList, final String aValue) {
+ super(RESOURCES, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param rList a list of resources
+ */
+ public Resources(final TextList rList) {
+ super(RESOURCES, PropertyFactoryImpl.getInstance());
+ resources = rList;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param rList a list of resources
+ */
+ public Resources(final ParameterList aList, final TextList rList) {
+ super(RESOURCES, aList, PropertyFactoryImpl.getInstance());
+ resources = rList;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" altrepparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ALTREP,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * @return Returns the resources.
+ */
+ public final TextList getResources() {
+ return resources;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ resources = new TextList(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return getResources().toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Sequence.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Sequence.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,204 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a SEQUENCE iCalendar component property.
+ *
+ *
+ * 4.8.7.4 Sequence Number
+ *
+ * Property Name: SEQUENCE
+ *
+ * Purpose: This property defines the revision sequence number of the
+ * calendar component within a sequence of revisions.
+ *
+ * Value Type: integer
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: The property can be specified in "VEVENT", "VTODO" or
+ * "VJOURNAL" calendar component.
+ *
+ * Description: When a calendar component is created, its sequence
+ * number is zero (US-ASCII decimal 48). It is monotonically incremented
+ * by the "Organizer's" CUA each time the "Organizer" makes a
+ * significant revision to the calendar component. When the "Organizer"
+ * makes changes to one of the following properties, the sequence number
+ * MUST be incremented:
+ *
+ * . "DTSTART"
+ *
+ * . "DTEND"
+ *
+ * . "DUE"
+ *
+ * . "RDATE"
+ *
+ * . "RRULE"
+ *
+ * . "EXDATE"
+ *
+ * . "EXRULE"
+ *
+ * . "STATUS"
+ *
+ * In addition, changes made by the "Organizer" to other properties can
+ * also force the sequence number to be incremented. The "Organizer" CUA
+ * MUST increment the sequence number when ever it makes changes to
+ * properties in the calendar component that the "Organizer" deems will
+ * jeopardize the validity of the participation status of the
+ * "Attendees". For example, changing the location of a meeting from one
+ * locale to another distant locale could effectively impact the
+ * participation status of the "Attendees".
+ *
+ * The "Organizer" includes this property in an iCalendar object that it
+ * sends to an "Attendee" to specify the current version of the calendar
+ * component.
+ *
+ * The "Attendee" includes this property in an iCalendar object that it
+ * sends to the "Organizer" to specify the version of the calendar
+ * component that the "Attendee" is referring to.
+ *
+ * A change to the sequence number is not the mechanism that an
+ * "Organizer" uses to request a response from the "Attendees". The
+ * "RSVP" parameter on the "ATTENDEE" property is used by the
+ * "Organizer" to indicate that a response from the "Attendees" is
+ * requested.
+ *
+ * Format Definition: This property is defined by the following
+ * notation:
+ *
+ * seq = "SEQUENCE" seqparam ":" integer CRLF
+ * ; Default is "0"
+ *
+ * seqparam = *(";" xparam)
+ *
+ * Example: The following is an example of this property for a calendar
+ * component that was just created by the "Organizer".
+ *
+ * SEQUENCE:0
+ *
+ * The following is an example of this property for a calendar component
+ * that has been revised two different times by the "Organizer".
+ *
+ * SEQUENCE:2
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Sequence extends Property {
+
+ private static final long serialVersionUID = -1606972893204822853L;
+
+ private int sequenceNo;
+
+ /**
+ * Default constructor.
+ */
+ public Sequence() {
+ super(SEQUENCE, PropertyFactoryImpl.getInstance());
+ sequenceNo = 0;
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Sequence(final String aValue) {
+ super(SEQUENCE, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Sequence(final ParameterList aList, final String aValue) {
+ super(SEQUENCE, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aSequenceNo a sequence number
+ */
+ public Sequence(final int aSequenceNo) {
+ super(SEQUENCE, PropertyFactoryImpl.getInstance());
+ sequenceNo = aSequenceNo;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aSequenceNo a sequence number
+ */
+ public Sequence(final ParameterList aList, final int aSequenceNo) {
+ super(SEQUENCE, aList, PropertyFactoryImpl.getInstance());
+ sequenceNo = aSequenceNo;
+ }
+
+ /**
+ * @return Returns the sequenceNo.
+ */
+ public final int getSequenceNo() {
+ return sequenceNo;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ sequenceNo = Integer.parseInt(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return String.valueOf(getSequenceNo());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Status.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Status.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,243 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a STATUS iCalendar component property.
+ *
+ *
+ * 4.8.1.11 Status
+ *
+ * Property Name: STATUS
+ *
+ * Purpose: This property defines the overall status or confirmation for
+ * the calendar component.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property can be specified in "VEVENT", "VTODO" or
+ * "VJOURNAL" calendar components.
+ *
+ * Description: In a group scheduled calendar component, the property is
+ * used by the "Organizer" to provide a confirmation of the event to the
+ * "Attendees". For example in a "VEVENT" calendar component, the
+ * "Organizer" can indicate that a meeting is tentative, confirmed or
+ * cancelled. In a "VTODO" calendar component, the "Organizer" can
+ * indicate that an action item needs action, is completed, is in
+ * process or being worked on, or has been cancelled. In a "VJOURNAL"
+ * calendar component, the "Organizer" can indicate that a journal entry
+ * is draft, final or has been cancelled or removed.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * status = "STATUS" statparam] ":" statvalue CRLF
+ *
+ * statparam = *(";" xparam)
+ *
+ * statvalue = "TENTATIVE" ;Indicates event is
+ * ;tentative.
+ * / "CONFIRMED" ;Indicates event is
+ * ;definite.
+ * / "CANCELLED" ;Indicates event was
+ * ;cancelled.
+ * ;Status values for a "VEVENT"
+ *
+ * statvalue =/ "NEEDS-ACTION" ;Indicates to-do needs action.
+ * / "COMPLETED" ;Indicates to-do completed.
+ * / "IN-PROCESS" ;Indicates to-do in process of
+ * / "CANCELLED" ;Indicates to-do was cancelled.
+ * ;Status values for "VTODO".
+ *
+ * statvalue =/ "DRAFT" ;Indicates journal is draft.
+ * / "FINAL" ;Indicates journal is final.
+ * / "CANCELLED" ;Indicates journal is removed.
+ * ;Status values for "VJOURNAL".
+ *
+ * Example: The following is an example of this property for a "VEVENT"
+ * calendar component:
+ *
+ * STATUS:TENTATIVE
+ *
+ * The following is an example of this property for a "VTODO" calendar
+ * component:
+ *
+ * STATUS:NEEDS-ACTION
+ *
+ * The following is an example of this property for a "VJOURNAL"
+ * calendar component:
+ *
+ * STATUS:DRAFT
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Status extends Property {
+
+ private static final long serialVersionUID = 7401102230299289898L;
+
+ // Status values for a "VEVENT"
+ /**
+ * Tentative VEVENT status.
+ */
+ public static final Status VEVENT_TENTATIVE = new ImmutableStatus(
+ "TENTATIVE");
+
+ /**
+ * Confirmed VEVENT status.
+ */
+ public static final Status VEVENT_CONFIRMED = new ImmutableStatus(
+ "CONFIRMED");
+
+ /**
+ * Cancelled VEVENT status.
+ */
+ public static final Status VEVENT_CANCELLED = new ImmutableStatus(
+ "CANCELLED");
+
+ // Status values for "VTODO"
+ /**
+ * Tentative VTODO status.
+ */
+ public static final Status VTODO_NEEDS_ACTION = new ImmutableStatus(
+ "NEEDS-ACTION");
+
+ /**
+ * Completed VTODO status.
+ */
+ public static final Status VTODO_COMPLETED = new ImmutableStatus(
+ "COMPLETED");
+
+ /**
+ * In-process VTODO status.
+ */
+ public static final Status VTODO_IN_PROCESS = new ImmutableStatus(
+ "IN-PROCESS");
+
+ /**
+ * Cancelled VTODO status.
+ */
+ public static final Status VTODO_CANCELLED = new ImmutableStatus(
+ "CANCELLED");
+
+ // Status values for "VJOURNAL"
+ /**
+ * Draft VJOURNAL status.
+ */
+ public static final Status VJOURNAL_DRAFT = new ImmutableStatus("DRAFT");
+
+ /**
+ * Final VJOURNAL status.
+ */
+ public static final Status VJOURNAL_FINAL = new ImmutableStatus("FINAL");
+
+ /**
+ * Cancelled VJOURNAL status.
+ */
+ public static final Status VJOURNAL_CANCELLED = new ImmutableStatus(
+ "CANCELLED");
+
+ /**
+ * @author Ben Fortuna An immutable instance of Status.
+ */
+ private static final class ImmutableStatus extends Status {
+
+ private static final long serialVersionUID = 7771868877237685612L;
+
+ private ImmutableStatus(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Status() {
+ super(STATUS, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Status(final String aValue) {
+ super(STATUS, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Status(final ParameterList aList, final String aValue) {
+ super(STATUS, aList, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/StreetAddress.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/StreetAddress.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a STREET_ADDRESS iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class StreetAddress extends Property implements Escapable {
+
+ private static final long serialVersionUID = 6352997029056626656L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public StreetAddress() {
+ super(STREET_ADDRESS, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public StreetAddress(final String aValue) {
+ super(STREET_ADDRESS, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public StreetAddress(final ParameterList aList, final String aValue) {
+ super(STREET_ADDRESS, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Summary.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Summary.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a SUMMARY iCalendar component property.
+ *
+ *
+ * 4.8.1.12 Summary
+ *
+ * Property Name: SUMMARY
+ *
+ * Purpose: This property defines a short summary or subject for the
+ * calendar component.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard, alternate text representation and
+ * language property parameters can be specified on this property.
+ *
+ * Conformance: The property can be specified in "VEVENT", "VTODO",
+ * "VJOURNAL" or "VALARM" calendar components.
+ *
+ * Description: This property is used in the "VEVENT", "VTODO" and
+ * "VJOURNAL" calendar components to capture a short, one line summary
+ * about the activity or journal entry.
+ *
+ * This property is used in the "VALARM" calendar component to capture
+ * the subject of an EMAIL category of alarm.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * summary = "SUMMARY" summparam ":" text CRLF
+ *
+ * summparam = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" altrepparam) / (";" languageparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * )
+ *
+ * Example: The following is an example of this property:
+ *
+ * SUMMARY:Department Party
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Summary extends Property implements Escapable {
+
+ private static final long serialVersionUID = 7709437653910363024L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Summary() {
+ super(SUMMARY, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Summary(final String aValue) {
+ super(SUMMARY, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Summary(final ParameterList aList, final String aValue) {
+ super(SUMMARY, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" altrepparam) / (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.ALTREP,
+ getParameters());
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Tel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Tel.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TEL iCalendar component property.
+ * @author benf
+ * @author Mike Douglass
+ */
+public class Tel extends Property implements Escapable {
+
+ private static final long serialVersionUID = 3159826142152932485L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Tel() {
+ super(TEL, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Tel(final String aValue) {
+ super(TEL, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Tel(final ParameterList aList, final String aValue) {
+ super(TEL, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following are optional, ; but MUST NOT occur more than once (";" abbrev
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.TYPE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Transp.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Transp.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,171 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TRANSP iCalendar component property.
+ *
+ *
+ * 4.8.2.7 Time Transparency
+ *
+ * Property Name: TRANSP
+ *
+ * Purpose: This property defines whether an event is transparent or not
+ * to busy time searches.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property can be specified once in a "VEVENT"
+ * calendar component.
+ *
+ * Description: Time Transparency is the characteristic of an event that
+ * determines whether it appears to consume time on a calendar. Events
+ * that consume actual time for the individual or resource associated
+ * with the calendar SHOULD be recorded as OPAQUE, allowing them to be
+ * detected by free-busy time searches. Other events, which do not take
+ * up the individual's (or resource's) time SHOULD be recorded as
+ * TRANSPARENT, making them invisible to free-busy time searches.
+ *
+ * Format Definition: The property is specified by the following
+ * notation:
+ *
+ * transp = "TRANSP" tranparam ":" transvalue CRLF
+ *
+ * tranparam = *(";" xparam)
+ *
+ * transvalue = "OPAQUE" ;Blocks or opaque on busy time searches.
+ * / "TRANSPARENT" ;Transparent on busy time searches.
+ * ;Default value is OPAQUE
+ *
+ * Example: The following is an example of this property for an event
+ * that is transparent or does not block on free/busy time searches:
+ *
+ * TRANSP:TRANSPARENT
+ *
+ * The following is an example of this property for an event that is
+ * opaque or blocks on free/busy time searches:
+ *
+ * TRANSP:OPAQUE
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Transp extends Property {
+
+ private static final long serialVersionUID = 3801479657311785518L;
+
+ /**
+ * Opaque.
+ */
+ public static final Transp OPAQUE = new ImmutableTransp("OPAQUE");
+
+ /**
+ * Transparent.
+ */
+ public static final Transp TRANSPARENT = new ImmutableTransp("TRANSPARENT");
+
+ /**
+ * @author Ben Fortuna An immutable instance of Transp.
+ */
+ private static final class ImmutableTransp extends Transp {
+
+ private static final long serialVersionUID = -6595830107310111996L;
+
+ private ImmutableTransp(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Transp() {
+ super(TRANSP, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Transp(final String aValue) {
+ super(TRANSP, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Transp(final ParameterList aList, final String aValue) {
+ super(TRANSP, aList, PropertyFactoryImpl.getInstance());
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Trigger.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Trigger.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,288 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.text.ParseException;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TRIGGER iCalendar component property.
+ *
+ *
+ * 4.8.6.3 Trigger
+ *
+ * Property Name: TRIGGER
+ *
+ * Purpose: This property specifies when an alarm will trigger.
+ *
+ * Value Type: The default value type is DURATION. The value type can be
+ * set to a DATE-TIME value type, in which case the value MUST specify a
+ * UTC formatted DATE-TIME value.
+ *
+ * Property Parameters: Non-standard, value data type, time zone
+ * identifier or trigger relationship property parameters can be
+ * specified on this property. The trigger relationship property
+ * parameter MUST only be specified when the value type is DURATION.
+ *
+ * Conformance: This property MUST be specified in the "VALARM" calendar
+ * component.
+ *
+ * Description: Within the "VALARM" calendar component, this property
+ * defines when the alarm will trigger. The default value type is
+ * DURATION, specifying a relative time for the trigger of the alarm.
+ * The default duration is relative to the start of an event or to-do
+ * that the alarm is associated with. The duration can be explicitly set
+ *
+ * to trigger from either the end or the start of the associated event
+ * or to-do with the "RELATED" parameter. A value of START will set the
+ * alarm to trigger off the start of the associated event or to-do. A
+ * value of END will set the alarm to trigger off the end of the
+ * associated event or to-do.
+ *
+ * Either a positive or negative duration may be specified for the
+ * "TRIGGER" property. An alarm with a positive duration is triggered
+ * after the associated start or end of the event or to-do. An alarm
+ * with a negative duration is triggered before the associated start or
+ * end of the event or to-do.
+ *
+ * The "RELATED" property parameter is not valid if the value type of
+ * the property is set to DATE-TIME (i.e., for an absolute date and time
+ * alarm trigger). If a value type of DATE-TIME is specified, then the
+ * property value MUST be specified in the UTC time format. If an
+ * absolute trigger is specified on an alarm for a recurring event or
+ * to-do, then the alarm will only trigger for the specified absolute
+ * date/time, along with any specified repeating instances.
+ *
+ * If the trigger is set relative to START, then the "DTSTART" property
+ * MUST be present in the associated "VEVENT" or "VTODO" calendar
+ * component. If an alarm is specified for an event with the trigger set
+ * relative to the END, then the "DTEND" property or the "DSTART" and
+ * "DURATION' properties MUST be present in the associated "VEVENT"
+ * calendar component. If the alarm is specified for a to-do with a
+ * trigger set relative to the END, then either the "DUE" property or
+ * the "DSTART" and "DURATION' properties MUST be present in the
+ * associated "VTODO" calendar component.
+ *
+ * Alarms specified in an event or to-do which is defined in terms of a
+ * DATE value type will be triggered relative to 00:00:00 UTC on the
+ * specified date. For example, if "DTSTART:19980205, then the duration
+ * trigger will be relative to19980205T000000Z.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * trigger = "TRIGGER" (trigrel / trigabs)
+ *
+ * trigrel = *(
+ *
+ * ; the following are optional,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" "VALUE" "=" "DURATION") /
+ * (";" trigrelparam) /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ * ) ":" dur-value
+ *
+ * trigabs = 1*(
+ *
+ * ; the following is REQUIRED,
+ * ; but MUST NOT occur more than once
+ *
+ * (";" "VALUE" "=" "DATE-TIME") /
+ *
+ * ; the following is optional,
+ * ; and MAY occur more than once
+ *
+ * (";" xparam)
+ *
+ * ) ":" date-time
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Trigger extends UtcProperty {
+
+ private static final long serialVersionUID = 5049421499261722194L;
+
+ private Dur duration;
+
+ /**
+ * Default constructor.
+ */
+ public Trigger() {
+ super(TRIGGER, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Trigger(final ParameterList aList, final String aValue) {
+ super(TRIGGER, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param duration a duration in milliseconds
+ */
+ public Trigger(final Dur duration) {
+ super(TRIGGER, PropertyFactoryImpl.getInstance());
+ setDuration(duration);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param duration a duration in milliseconds
+ */
+ public Trigger(final ParameterList aList, final Dur duration) {
+ super(TRIGGER, aList, PropertyFactoryImpl.getInstance());
+ setDuration(duration);
+ }
+
+ /**
+ * @param dateTime a date representation of a date-time
+ */
+ public Trigger(final DateTime dateTime) {
+ super(TRIGGER, PropertyFactoryImpl.getInstance());
+ setDateTime(dateTime);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param dateTime a date representation of a date-time
+ */
+ public Trigger(final ParameterList aList, final DateTime dateTime) {
+ super(TRIGGER, aList, PropertyFactoryImpl.getInstance());
+ setDateTime(dateTime);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ super.validate();
+
+ final Parameter relParam = getParameter(Parameter.RELATED);
+ final Parameter valueParam = getParameter(Parameter.VALUE);
+
+ if (relParam != null || !Value.DATE_TIME.equals(valueParam)) {
+
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.RELATED,
+ getParameters());
+
+ ParameterValidator.getInstance().assertNullOrEqual(Value.DURATION,
+ getParameters());
+
+ if (getDuration() == null) {
+ throw new ValidationException("Duration value not specified");
+ }
+ }
+ else {
+ ParameterValidator.getInstance().assertOne(Parameter.VALUE,
+ getParameters());
+
+ ParameterValidator.getInstance().assertNullOrEqual(Value.DATE_TIME,
+ getParameters());
+
+ if (getDateTime() == null) {
+ throw new ValidationException("DATE-TIME value not specified");
+ }
+ }
+ }
+
+ /**
+ * @return Returns the duration.
+ */
+ public final Dur getDuration() {
+ return duration;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ try {
+ super.setValue(aValue);
+ duration = null;
+ }
+ catch (ParseException pe) {
+ duration = new Dur(aValue);
+ super.setDateTime(null);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ if (duration != null) {
+ return duration.toString();
+ }
+ return super.getValue();
+ }
+
+ /**
+ * @param dateTime The dateTime to set.
+ */
+ public final void setDateTime(final DateTime dateTime) {
+ super.setDateTime(dateTime);
+ duration = null;
+ getParameters().replace(Value.DATE_TIME);
+ }
+
+ /**
+ * @param duration The duration to set.
+ */
+ public final void setDuration(final Dur duration) {
+ this.duration = duration;
+ super.setDateTime(null);
+ // duration is the default value type for Trigger..
+ if (getParameter(Parameter.VALUE) != null) {
+ getParameters().replace(Value.DURATION);
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/TzId.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/TzId.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TZID iCalendar component property.
+ *
+ *
+ * 4.8.3.1 Time Zone Identifier
+ *
+ * Property Name: TZID
+ *
+ * Purpose: This property specifies the text value that uniquely
+ * identifies the "VTIMEZONE" calendar component.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property MUST be specified in a "VTIMEZONE"
+ * calendar component.
+ *
+ * Description: This is the label by which a time zone calendar
+ * component is referenced by any iCalendar properties whose data type
+ * is either DATE-TIME or TIME and not intended to specify a UTC or a
+ * "floating" time. The presence of the SOLIDUS character (US-ASCII
+ * decimal 47) as a prefix, indicates that this TZID represents an
+ * unique ID in a globally defined time zone registry (when such
+ * registry is defined).
+ *
+ * Note: This document does not define a naming convention for time
+ * zone identifiers. Implementers may want to use the naming
+ * conventions defined in existing time zone specifications such as
+ * the public-domain Olson database [TZ]. The specification of
+ * globally unique time zone identifiers is not addressed by this
+ * document and is left for future study.
+ *
+ * Format Definition: This property is defined by the following
+ * notation:
+ *
+ * tzid = "TZID" tzidpropparam ":" [tzidprefix] text CRLF
+ *
+ * tzidpropparam = *(";" xparam)
+ *
+ * ;tzidprefix = "/"
+ * ; Defined previously. Just listed here for reader convenience.
+ *
+ * Example: The following are examples of non-globally unique time zone
+ * identifiers:
+ *
+ * TZID:US-Eastern
+ *
+ * TZID:California-Los_Angeles
+ *
+ * The following is an example of a fictitious globally unique time zone
+ * identifier:
+ *
+ * TZID:/US-New_York-New_York
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class TzId extends Property implements Escapable {
+
+ private static final long serialVersionUID = -522764921502407137L;
+
+ /**
+ * Timezone identifier prefix.
+ */
+ public static final String PREFIX = "/";
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public TzId() {
+ super(TZID, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public TzId(final String aValue) {
+ super(TZID, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public TzId(final ParameterList aList, final String aValue) {
+ super(TZID, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/TzName.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/TzName.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.ParameterValidator;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TZNAME iCalendar component property.
+ * @author benf
+ */
+public class TzName extends Property implements Escapable {
+
+ private static final long serialVersionUID = -6930099834219160086L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public TzName() {
+ super(TZNAME, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public TzName(final String aValue) {
+ super(TZNAME, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public TzName(final ParameterList aList, final String aValue) {
+ super(TZNAME, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ /*
+ * ; the following is optional, ; but MUST NOT occur more than once (";" languageparam) /
+ */
+ ParameterValidator.getInstance().assertOneOrLess(Parameter.LANGUAGE,
+ getParameters());
+
+ /*
+ * ; the following is optional, ; and MAY occur more than once (";" xparam)
+ */
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/TzOffsetFrom.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/TzOffsetFrom.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.UtcOffset;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TZOFFSETFROM iCalendar component property.
+ * @author benf
+ */
+public class TzOffsetFrom extends Property {
+
+ private static final long serialVersionUID = 450274263165493502L;
+
+ private UtcOffset offset;
+
+ /**
+ * Default constructor.
+ */
+ public TzOffsetFrom() {
+ super(TZOFFSETFROM, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public TzOffsetFrom(final String aValue) {
+ super(TZOFFSETFROM, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public TzOffsetFrom(final ParameterList aList, final String aValue) {
+ super(TZOFFSETFROM, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param anOffset a timezone offset in milliseconds
+ */
+ public TzOffsetFrom(final UtcOffset anOffset) {
+ super(TZOFFSETFROM, PropertyFactoryImpl.getInstance());
+ offset = anOffset;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param anOffset a timezone offset in milliseconds
+ */
+ public TzOffsetFrom(final ParameterList aList, final UtcOffset anOffset) {
+ super(TZOFFSETFROM, aList, PropertyFactoryImpl.getInstance());
+ offset = anOffset;
+ }
+
+ /**
+ * @return Returns the offset.
+ */
+ public final UtcOffset getOffset() {
+ return offset;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ offset = new UtcOffset(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ if (offset != null) {
+ return offset.toString();
+ }
+ return "";
+ }
+
+ /**
+ * @param offset The offset to set.
+ */
+ public final void setOffset(final UtcOffset offset) {
+ this.offset = offset;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/TzOffsetTo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/TzOffsetTo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.UtcOffset;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TZOFFSETTO iCalendar component property.
+ * @author benf
+ */
+public class TzOffsetTo extends Property {
+
+ private static final long serialVersionUID = 8213874575051177732L;
+
+ private UtcOffset offset;
+
+ /**
+ * Default constructor.
+ */
+ public TzOffsetTo() {
+ super(TZOFFSETTO, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param value an offset value
+ */
+ public TzOffsetTo(String value) {
+ super(TZOFFSETTO, PropertyFactoryImpl.getInstance());
+ setValue(value);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public TzOffsetTo(final ParameterList aList, final String aValue) {
+ super(TZOFFSETTO, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param anOffset a timezone offset in milliseconds
+ */
+ public TzOffsetTo(final UtcOffset anOffset) {
+ super(TZOFFSETTO, PropertyFactoryImpl.getInstance());
+ offset = anOffset;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param anOffset a timezone offset in milliseconds
+ */
+ public TzOffsetTo(final ParameterList aList, final UtcOffset anOffset) {
+ super(TZOFFSETTO, aList, PropertyFactoryImpl.getInstance());
+ offset = anOffset;
+ }
+
+ /**
+ * @return Returns the offset.
+ */
+ public final UtcOffset getOffset() {
+ return offset;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ offset = new UtcOffset(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ if (offset != null) {
+ return offset.toString();
+ }
+ return "";
+ }
+
+ /**
+ * @param offset The offset to set.
+ */
+ public final void setOffset(final UtcOffset offset) {
+ this.offset = offset;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/TzUrl.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/TzUrl.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,163 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a TZURL iCalendar component property.
+ *
+ *
+ * 4.8.3.5 Time Zone URL
+ *
+ * Property Name: TZURL
+ *
+ * Purpose: The TZURL provides a means for a VTIMEZONE component to
+ * point to a network location that can be used to retrieve an up-to-
+ * date version of itself.
+ *
+ * Value Type: URI
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property can be specified in a "VTIMEZONE" calendar
+ * component.
+ *
+ * Description: The TZURL provides a means for a VTIMEZONE component to
+ * point to a network location that can be used to retrieve an up-to-
+ * date version of itself. This provides a hook to handle changes
+ * government bodies impose upon time zone definitions. Retrieval of
+ * this resource results in an iCalendar object containing a single
+ * VTIMEZONE component and a METHOD property set to PUBLISH.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * tzurl = "TZURL" tzurlparam ":" uri CRLF
+ *
+ * tzurlparam = *(";" xparam)
+ *
+ * Example: The following is an example of this property:
+ *
+ * TZURL:http://timezones.r.us.net/tz/US-California-Los_Angeles
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class TzUrl extends Property {
+
+ private static final long serialVersionUID = 9106100107954797406L;
+
+ private URI uri;
+
+ /**
+ * Default constructor.
+ */
+ public TzUrl() {
+ super(TZURL, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws URISyntaxException where the specified value string is not a valid uri
+ */
+ public TzUrl(final ParameterList aList, final String aValue)
+ throws URISyntaxException {
+ super(TZURL, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aUri a URI
+ */
+ public TzUrl(final URI aUri) {
+ super(TZURL, PropertyFactoryImpl.getInstance());
+ uri = aUri;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aUri a URI
+ */
+ public TzUrl(final ParameterList aList, final URI aUri) {
+ super(TZURL, aList, PropertyFactoryImpl.getInstance());
+ uri = aUri;
+ }
+
+ /**
+ * @return Returns the uri.
+ */
+ public final URI getUri() {
+ return uri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws URISyntaxException {
+ uri = Uris.create(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return Uris.decode(Strings.valueOf(getUri()));
+ }
+
+ /**
+ * @param uri The uri to set.
+ */
+ public final void setUri(final URI uri) {
+ this.uri = uri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Uid.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Uid.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,166 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a UID iCalendar component property.
+ *
+ *
+ * 4.8.4.7 Unique Identifier
+ *
+ * Property Name: UID
+ *
+ * Purpose: This property defines the persistent, globally unique
+ * identifier for the calendar component.
+ *
+ * Value Type: TEXT
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: The property MUST be specified in the "VEVENT", "VTODO",
+ * "VJOURNAL" or "VFREEBUSY" calendar components.
+ *
+ * Description: The UID itself MUST be a globally unique identifier. The
+ * generator of the identifier MUST guarantee that the identifier is
+ * unique. There are several algorithms that can be used to accomplish
+ * this. The identifier is RECOMMENDED to be the identical syntax to the
+ * [RFC 822] addr-spec. A good method to assure uniqueness is to put the
+ * domain name or a domain literal IP address of the host on which the
+ * identifier was created on the right hand side of the "@", and on the
+ * left hand side, put a combination of the current calendar date and
+ * time of day (i.e., formatted in as a DATE-TIME value) along with some
+ * other currently unique (perhaps sequential) identifier available on
+ * the system (for example, a process id number). Using a date/time
+ * value on the left hand side and a domain name or domain literal on
+ * the right hand side makes it possible to guarantee uniqueness since
+ * no two hosts should be using the same domain name or IP address at
+ * the same time. Though other algorithms will work, it is RECOMMENDED
+ * that the right hand side contain some domain identifier (either of
+ * the host itself or otherwise) such that the generator of the message
+ * identifier can guarantee the uniqueness of the left hand side within
+ * the scope of that domain.
+ *
+ * This is the method for correlating scheduling messages with the
+ * referenced "VEVENT", "VTODO", or "VJOURNAL" calendar component.
+ *
+ * The full range of calendar components specified by a recurrence set
+ * is referenced by referring to just the "UID" property value
+ * corresponding to the calendar component. The "RECURRENCE-ID" property
+ * allows the reference to an individual instance within the recurrence
+ * set.
+ *
+ * This property is an important method for group scheduling
+ * applications to match requests with later replies, modifications or
+ * deletion requests. Calendaring and scheduling applications MUST
+ * generate this property in "VEVENT", "VTODO" and "VJOURNAL" calendar
+ * components to assure interoperability with other group scheduling
+ * applications. This identifier is created by the calendar system that
+ * generates an iCalendar object.
+ *
+ * Implementations MUST be able to receive and persist values of at
+ * least 255 characters for this property.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * uid = "UID" uidparam ":" text CRLF
+ *
+ * uidparam = *(";" xparam)
+ *
+ * Example: The following is an example of this property:
+ *
+ * UID:19960401T080045Z-4000F192713-0052@host1.com
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Uid extends Property implements Escapable {
+
+ private static final long serialVersionUID = -7139407612536588584L;
+
+ private String value;
+
+ /**
+ * Default constructor.
+ */
+ public Uid() {
+ super(UID, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aValue a value string for this component
+ */
+ public Uid(final String aValue) {
+ super(UID, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Uid(final ParameterList aList, final String aValue) {
+ super(UID, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Url.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Url.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,163 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.Strings;
+import net.fortuna.ical4j.util.Uris;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a URL iCalendar component property.
+ *
+ *
+ * 4.8.4.6 Uniform Resource Locator
+ *
+ * Property Name: URL
+ *
+ * Purpose: This property defines a Uniform Resource Locator (URL)
+ * associated with the iCalendar object.
+ *
+ * Value Type: URI
+ *
+ * Property Parameters: Non-standard property parameters can be
+ * specified on this property.
+ *
+ * Conformance: This property can be specified once in the "VEVENT",
+ * "VTODO", "VJOURNAL" or "VFREEBUSY" calendar components.
+ *
+ * Description: This property may be used in a calendar component to
+ * convey a location where a more dynamic rendition of the calendar
+ * information associated with the calendar component can be found. This
+ * memo does not attempt to standardize the form of the URI, nor the
+ * format of the resource pointed to by the property value. If the URL
+ * property and Content-Location MIME header are both specified, they
+ * MUST point to the same resource.
+ *
+ * Format Definition: The property is defined by the following notation:
+ *
+ * url = "URL" urlparam ":" uri CRLF
+ *
+ * urlparam = *(";" xparam)
+ *
+ * Example: The following is an example of this property:
+ *
+ * URL:http://abc.com/pub/calendars/jsmith/mytime.ics
+ *
+ *
+ * @author Ben Fortuna
+ */
+public class Url extends Property {
+
+ private static final long serialVersionUID = 1092576402256525737L;
+
+ private URI uri;
+
+ /**
+ * Default constructor.
+ */
+ public Url() {
+ super(URL, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ * @throws URISyntaxException where the specified value string is not a valid uri
+ */
+ public Url(final ParameterList aList, final String aValue)
+ throws URISyntaxException {
+ super(URL, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aUri a URI
+ */
+ public Url(final URI aUri) {
+ super(URL, PropertyFactoryImpl.getInstance());
+ uri = aUri;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aUri a URI
+ */
+ public Url(final ParameterList aList, final URI aUri) {
+ super(URL, aList, PropertyFactoryImpl.getInstance());
+ uri = aUri;
+ }
+
+ /**
+ * @return Returns the uri.
+ */
+ public final URI getUri() {
+ return uri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) throws URISyntaxException {
+ uri = Uris.create(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return Uris.decode(Strings.valueOf(getUri()));
+ }
+
+ /**
+ * @param uri The uri to set.
+ */
+ public final void setUri(final URI uri) {
+ this.uri = uri;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/UtcProperty.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/UtcProperty.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,119 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.PropertyFactory;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created on 8/08/2005
+ *
+ * Superclass for all properties with date-time values that must be specified in UTC time.
+ * @author Ben Fortuna
+ */
+public abstract class UtcProperty extends DateProperty {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 4850079486497487938L;
+
+ /**
+ * @param name a property name
+ * @param parameters list of parameters
+ */
+ public UtcProperty(final String name, final ParameterList parameters, PropertyFactory factory) {
+ super(name, parameters, factory);
+ setDate(new DateTime(true));
+ }
+
+ /**
+ * @param name a property name
+ */
+ public UtcProperty(final String name, PropertyFactory factory) {
+ super(name, factory);
+ setDate(new DateTime(true));
+ }
+
+ /**
+ * @return Returns the date-time.
+ */
+ public final DateTime getDateTime() {
+ return (DateTime) getDate();
+ }
+
+ /**
+ * @param dateTime The dateTime to set.
+ */
+ public void setDateTime(final DateTime dateTime) {
+ // time must be in UTC..
+ if (dateTime != null) {
+ final DateTime utcDateTime = new DateTime(dateTime);
+ utcDateTime.setUtc(true);
+ setDate(utcDateTime);
+ }
+ else {
+ setDate(dateTime);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setTimeZone(TimeZone timezone) {
+ throw new UnsupportedOperationException("Cannot set timezone for UTC properties");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void validate() throws ValidationException {
+ super.validate();
+
+ if (getDate() != null && !(getDate() instanceof DateTime)) {
+ throw new ValidationException(
+ "Property must have a DATE-TIME value");
+ }
+
+ final DateTime dateTime = (DateTime) getDate();
+
+ if (dateTime != null && !dateTime.isUtc()) {
+ throw new ValidationException(getName() +
+ ": DATE-TIME value must be specified in UTC time");
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/Version.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/Version.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,198 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$
+ *
+ * Created: [Apr 6, 2004]
+ *
+ * Defines a VERSION iCalendar property. When creating a new calendar you should always add a version property with
+ * value "2.0". There is actually a constant defined in the Version class for this. e.g:
+ * Calendar calendar = new Calendar();
+ * calendar.getProperties().add(Version.VERSION_2_0);
+ * @author Ben Fortuna
+ */
+public class Version extends Property {
+
+ private static final long serialVersionUID = 8872508067309087704L;
+
+ /**
+ * iCalendar version 2.0.
+ */
+ public static final Version VERSION_2_0 = new ImmutableVersion("2.0");
+
+ /**
+ * @author Ben Fortuna An immutable instance of Version.
+ */
+ private static final class ImmutableVersion extends Version {
+
+ private static final long serialVersionUID = -5040679357859594835L;
+
+ private ImmutableVersion(final String value) {
+ super(new ParameterList(true), value);
+ }
+
+ public void setValue(final String aValue) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+
+ public void setMaxVersion(final String maxVersion) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+
+ public void setMinVersion(final String minVersion) {
+ throw new UnsupportedOperationException(
+ "Cannot modify constant instances");
+ }
+ }
+
+ private String minVersion;
+
+ private String maxVersion;
+
+ /**
+ * Default constructor.
+ */
+ public Version() {
+ super(VERSION, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aValue a value string for this component
+ */
+ public Version(final ParameterList aList, final String aValue) {
+ super(VERSION, aList, PropertyFactoryImpl.getInstance());
+ if (aValue.indexOf(';') >= 0) {
+ this.minVersion = aValue.substring(0, aValue.indexOf(';') - 1);
+ this.maxVersion = aValue.substring(aValue.indexOf(';'));
+ }
+ else {
+ this.maxVersion = aValue;
+ }
+ }
+
+ /**
+ * @param minVersion a string representation of the minimum version
+ * @param maxVersion a string representation of the maximum version
+ */
+ public Version(final String minVersion, final String maxVersion) {
+ super(VERSION, PropertyFactoryImpl.getInstance());
+ this.minVersion = minVersion;
+ this.maxVersion = maxVersion;
+ }
+
+ /**
+ * @param aList a list of parameters for this component
+ * @param aVersion1 a string representation of the minimum version
+ * @param aVersion2 a string representation of the maximum version
+ */
+ public Version(final ParameterList aList, final String aVersion1,
+ final String aVersion2) {
+ super(VERSION, aList, PropertyFactoryImpl.getInstance());
+ minVersion = aVersion1;
+ maxVersion = aVersion2;
+ }
+
+ /**
+ * @return Returns the maxVersion.
+ */
+ public final String getMaxVersion() {
+ return maxVersion;
+ }
+
+ /**
+ * @return Returns the minVersion.
+ */
+ public final String getMinVersion() {
+ return minVersion;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setValue(final String aValue) {
+ if (aValue.indexOf(';') >= 0) {
+ this.minVersion = aValue.substring(0, aValue.indexOf(';') - 1);
+ this.maxVersion = aValue.substring(aValue.indexOf(';'));
+ }
+ else {
+ this.maxVersion = aValue;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ final StringBuffer b = new StringBuffer();
+ if (getMinVersion() != null) {
+ b.append(getMinVersion());
+ if (getMaxVersion() != null) {
+ b.append(';');
+ }
+ }
+ if (getMaxVersion() != null) {
+ b.append(getMaxVersion());
+ }
+ return b.toString();
+ }
+
+ /**
+ * @param maxVersion The maxVersion to set.
+ */
+ public void setMaxVersion(final String maxVersion) {
+ this.maxVersion = maxVersion;
+ }
+
+ /**
+ * @param minVersion The minVersion to set.
+ */
+ public void setMinVersion(final String minVersion) {
+ this.minVersion = minVersion;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+ // TODO: Auto-generated method stub
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/property/XProperty.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/property/XProperty.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,112 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.model.property;
+
+import net.fortuna.ical4j.model.Escapable;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyFactoryImpl;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+/**
+ * $Id$
+ *
+ * Created: [15/06/2004]
+ *
+ * Defines an extension property.
+ * @author benfortuna
+ */
+public class XProperty extends Property implements Escapable {
+
+ private static final long serialVersionUID = 2331763266954894541L;
+
+ private String value;
+
+ /**
+ * Constructs an uninitialised non-standard property.
+ * @param name a non-standard property name
+ */
+ public XProperty(final String name) {
+ super(name, PropertyFactoryImpl.getInstance());
+ }
+
+ /**
+ * @param aName a non-standard property name
+ * @param aValue a property value
+ */
+ public XProperty(final String aName, final String aValue) {
+ super(aName, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * @param aName a non-standard property name
+ * @param aList a list of parameters
+ * @param aValue a property value
+ */
+ public XProperty(final String aName, final ParameterList aList,
+ final String aValue) {
+ super(aName, aList, PropertyFactoryImpl.getInstance());
+ setValue(aValue);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void setValue(final String aValue) {
+ this.value = aValue;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final String getValue() {
+ return value;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public final void validate() throws ValidationException {
+
+ if (!CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION)
+ && !getName().startsWith(EXPERIMENTAL_PREFIX)) {
+
+ throw new ValidationException(
+ "Invalid name ["
+ + getName()
+ + "]. Experimental properties must have the following prefix: "
+ + EXPERIMENTAL_PREFIX);
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/model/tz.alias
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/model/tz.alias Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+## Unsupported timezone identifiers..
+Etc/GMT+0=Etc/GMT
+Etc/GMT-0=Etc/GMT
+Etc/GMT0=Etc/GMT
+GMT=Etc/GMT
+
+### Temporary hack to support above timezones..
+Etc/GMT=Europe/London
+Etc/Greenwich=Etc/GMT
+Etc/UCT=Europe/London
+Etc/UTC=Europe/London
+Etc/Universal=Etc/UTC
+
+Etc/Zulu=Etc/UTC
+
+## Non-Oslon aliases:
+#
+US/Pacific-New=America/Los_Angeles
+
+## Update Olson backward compatibility here:
+#
+Africa/Asmera = Africa/Asmara
+Africa/Timbuktu = Africa/Bamako
+America/Argentina/ComodRivadavia = America/Argentina/Catamarca
+America/Atka = America/Adak
+America/Buenos_Aires = America/Argentina/Buenos_Aires
+America/Catamarca = America/Argentina/Catamarca
+America/Coral_Harbour = America/Atikokan
+America/Cordoba = America/Argentina/Cordoba
+America/Ensenada = America/Tijuana
+America/Fort_Wayne = America/Indiana/Indianapolis
+America/Indianapolis = America/Indiana/Indianapolis
+America/Jujuy = America/Argentina/Jujuy
+America/Knox_IN = America/Indiana/Knox
+America/Louisville = America/Kentucky/Louisville
+America/Mendoza = America/Argentina/Mendoza
+America/Porto_Acre = America/Rio_Branco
+America/Rosario = America/Argentina/Cordoba
+America/Virgin = America/St_Thomas
+Asia/Ashkhabad = Asia/Ashgabat
+Asia/Chungking = Asia/Chongqing
+Asia/Dacca = Asia/Dhaka
+Asia/Katmandu = Asia/Kathmandu
+Asia/Calcutta = Asia/Kolkata
+Asia/Macao = Asia/Macau
+Asia/Tel_Aviv = Asia/Jerusalem
+Asia/Saigon = Asia/Ho_Chi_Minh
+Asia/Thimbu = Asia/Thimphu
+Asia/Ujung_Pandang = Asia/Makassar
+Asia/Ulan_Bator = Asia/Ulaanbaatar
+Atlantic/Faeroe = Atlantic/Faroe
+Atlantic/Jan_Mayen = Europe/Oslo
+Australia/ACT = Australia/Sydney
+Australia/Canberra = Australia/Sydney
+Australia/LHI = Australia/Lord_Howe
+Australia/NSW = Australia/Sydney
+Australia/North = Australia/Darwin
+Australia/Queensland = Australia/Brisbane
+Australia/South = Australia/Adelaide
+Australia/Tasmania = Australia/Hobart
+Australia/Victoria = Australia/Melbourne
+Australia/West = Australia/Perth
+Australia/Yancowinna = Australia/Broken_Hill
+Brazil/Acre = America/Rio_Branco
+Brazil/DeNoronha = America/Noronha
+Brazil/East = America/Sao_Paulo
+Brazil/West = America/Manaus
+Canada/Atlantic = America/Halifax
+Canada/Central = America/Winnipeg
+Canada/East-Saskatchewan = America/Regina
+Canada/Eastern = America/Toronto
+Canada/Mountain = America/Edmonton
+Canada/Newfoundland = America/St_Johns
+Canada/Pacific = America/Vancouver
+Canada/Saskatchewan = America/Regina
+Canada/Yukon = America/Whitehorse
+Chile/Continental = America/Santiago
+Chile/EasterIsland = Pacific/Easter
+Cuba = America/Havana
+Egypt = Africa/Cairo
+Eire = Europe/Dublin
+Europe/Belfast = Europe/London
+Europe/Tiraspol = Europe/Chisinau
+GB = Europe/London
+GB-Eire = Europe/London
+GMT+0 = Etc/GMT
+GMT-0 = Etc/GMT
+GMT0 = Etc/GMT
+Greenwich = Etc/GMT
+Hongkong = Asia/Hong_Kong
+Iceland = Atlantic/Reykjavik
+Iran = Asia/Tehran
+Israel = Asia/Jerusalem
+Jamaica = America/Jamaica
+Japan = Asia/Tokyo
+Kwajalein = Pacific/Kwajalein
+Libya = Africa/Tripoli
+Mexico/BajaNorte = America/Tijuana
+Mexico/BajaSur = America/Mazatlan
+Mexico/General = America/Mexico_City
+NZ = Pacific/Auckland
+NZ-CHAT = Pacific/Chatham
+Navajo = America/Denver
+PRC = Asia/Shanghai
+Pacific/Samoa = Pacific/Pago_Pago
+Pacific/Yap = Pacific/Chuuk
+Pacific/Truk = Pacific/Chuuk
+Pacific/Ponape = Pacific/Pohnpei
+Poland = Europe/Warsaw
+Portugal = Europe/Lisbon
+ROC = Asia/Taipei
+ROK = Asia/Seoul
+Singapore = Asia/Singapore
+Turkey = Europe/Istanbul
+UCT = Etc/UCT
+US/Alaska = America/Anchorage
+US/Aleutian = America/Adak
+US/Arizona = America/Phoenix
+US/Central = America/Chicago
+US/East-Indiana = America/Indiana/Indianapolis
+US/Eastern = America/New_York
+US/Hawaii = Pacific/Honolulu
+US/Indiana-Starke = America/Indiana/Knox
+US/Michigan = America/Detroit
+US/Mountain = America/Denver
+US/Pacific = America/Los_Angeles
+US/Samoa = Pacific/Pago_Pago
+UTC = Etc/UTC
+Universal = Etc/UTC
+W-SU = Europe/Moscow
+Zulu = Etc/UTC
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/transform/PublishTransformer.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/transform/PublishTransformer.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,88 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.transform;
+
+import java.util.Iterator;
+import net.fortuna.ical4j.model.Calendar;
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Sequence;
+
+/**
+ * $Id$
+ *
+ * Created: 26/09/2004
+ *
+ * Transforms a calendar for publishing.
+ * @author benfortuna
+ */
+public class PublishTransformer extends Transformer {
+
+ /**
+ * {@inheritDoc}
+ */
+ public final Calendar transform(final Calendar calendar) {
+ PropertyList calProps = calendar.getProperties();
+
+ Property method = calProps.getProperty(Property.METHOD);
+
+ if (method != null) {
+ calProps.remove(method);
+ }
+
+ calProps.add(Method.PUBLISH);
+
+ // if a calendar component has already been published previously
+ // update the sequence number..
+ for (Iterator i = calendar.getComponents().iterator(); i.hasNext();) {
+ Component component = (Component) i.next();
+
+ PropertyList compProps = component.getProperties();
+
+ Sequence sequence = (Sequence) compProps
+ .getProperty(Property.SEQUENCE);
+
+ if (sequence == null) {
+ compProps.add(new Sequence(0));
+ }
+ else {
+ compProps.remove(sequence);
+ compProps.add(new Sequence(sequence.getSequenceNo() + 1));
+ }
+ }
+
+ return calendar;
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/transform/Transformer.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/transform/Transformer.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.transform;
+
+import net.fortuna.ical4j.model.Calendar;
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.util.Calendars;
+
+/**
+ * $Id$
+ *
+ * Created: 23/09/2004
+ *
+ * Base class of calendar transformations.
+ * @author benfortuna
+ */
+public abstract class Transformer {
+
+ /**
+ * Transforms the specified calendar according to the implementation of this method. By definition this method will
+ * modify the existing calendar instance and return it for convenience.
+ * @param calendar a calendar to transform
+ * @return a transformed calendar
+ */
+ public abstract Calendar transform(final Calendar calendar);
+
+ /**
+ * Transforms the specified component according to the transformer implementation.
+ * @param component a component to transform
+ * @return a calendar containing the transformed component
+ */
+ public final Calendar transform(final Component component) {
+ return transform(Calendars.wrap(component));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/Calendars.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/Calendars.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,231 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import net.fortuna.ical4j.data.CalendarBuilder;
+import net.fortuna.ical4j.data.ParserException;
+import net.fortuna.ical4j.model.Calendar;
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.ConstraintViolationException;
+import net.fortuna.ical4j.model.IndexedComponentList;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.component.VTimeZone;
+import net.fortuna.ical4j.model.parameter.TzId;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Uid;
+
+/**
+ * $Id$
+ *
+ * Created on 10/11/2006
+ *
+ * Utility method for working with {@link Calendar}s.
+ * @author Ben Fortuna
+ */
+public final class Calendars {
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private Calendars() {
+ }
+
+ /**
+ * Loads a calendar from the specified file.
+ * @param filename the name of the file from which to load calendar data
+ * @return returns a new calendar instance initialised from the specified file
+ * @throws IOException occurs when there is an error reading the specified file
+ * @throws ParserException occurs when the data in the specified file is invalid
+ */
+ public static Calendar load(final String filename) throws IOException, ParserException {
+ final FileInputStream fin = new FileInputStream(filename);
+ final CalendarBuilder builder = new CalendarBuilder();
+ return builder.build(fin);
+ }
+
+ /**
+ * Loads a calendar from the specified URL.
+ * @param url the URL from which to load calendar data
+ * @return returns a new calendar instance initialised from the specified URL
+ * @throws IOException occurs when there is an error reading from the specified URL
+ * @throws ParserException occurs when the data in the specified URL is invalid
+ */
+ public static Calendar load(final URL url) throws IOException, ParserException {
+ final CalendarBuilder builder = new CalendarBuilder();
+ return builder.build(url.openStream());
+ }
+
+ /**
+ * Merge all properties and components from two specified calendars into one instance.
+ * Note that the merge process is not very sophisticated, and may result in invalid calendar
+ * data (e.g. multiple properties of a type that should only be specified once).
+ * @param c1 the first calendar to merge
+ * @param c2 the second calendar to merge
+ * @return a Calendar instance containing all properties and components from both of the specified calendars
+ */
+ public static Calendar merge(final Calendar c1, final Calendar c2) {
+ final Calendar result = new Calendar();
+ result.getProperties().addAll(c1.getProperties());
+ for (final Iterator i = c2.getProperties().iterator(); i.hasNext();) {
+ final Property p = (Property) i.next();
+ if (!result.getProperties().contains(p)) {
+ result.getProperties().add(p);
+ }
+ }
+ result.getComponents().addAll(c1.getComponents());
+ for (final Iterator i = c2.getComponents().iterator(); i.hasNext();) {
+ final Component c = (Component) i.next();
+ if (!result.getComponents().contains(c)) {
+ result.getComponents().add(c);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Wraps a component in a calendar.
+ * @param component the component to wrap with a calendar
+ * @return a calendar containing the specified component
+ */
+ public static Calendar wrap(final Component component) {
+ final ComponentList components = new ComponentList();
+ components.add(component);
+ return new Calendar(components);
+ }
+
+ /**
+ * Splits a calendar object into distinct calendar objects for unique
+ * identifers (UID).
+ * @param calendar a calendar instance
+ * @return an array of calendar objects
+ */
+ public static Calendar[] split(final Calendar calendar) {
+ // if calendar contains one component or less, or is composed entirely of timezone
+ // definitions, return the original calendar unmodified..
+ if (calendar.getComponents().size() <= 1
+ || calendar.getComponents(Component.VTIMEZONE).size() == calendar.getComponents().size()) {
+ return new Calendar[] {calendar};
+ }
+
+ final IndexedComponentList timezones = new IndexedComponentList(calendar.getComponents(Component.VTIMEZONE),
+ Property.TZID);
+
+ final Map calendars = new HashMap();
+ for (final Iterator i = calendar.getComponents().iterator(); i.hasNext();) {
+ final Component c = (Component) i.next();
+ if (c instanceof VTimeZone) {
+ continue;
+ }
+
+ final Uid uid = (Uid) c.getProperty(Property.UID);
+
+ Calendar uidCal = (Calendar) calendars.get(uid);
+ if (uidCal == null) {
+ uidCal = new Calendar(calendar.getProperties(), new ComponentList());
+ // remove METHOD property for split calendars..
+ for (final Iterator mp = uidCal.getProperties(Property.METHOD).iterator(); mp.hasNext();) {
+ uidCal.getProperties().remove(mp.next());
+ }
+ calendars.put(uid, uidCal);
+ }
+
+ for (final Iterator j = c.getProperties().iterator(); j.hasNext();) {
+ final Property p = (Property) j.next();
+ final TzId tzid = (TzId) p.getParameter(Parameter.TZID);
+ if (tzid != null) {
+ final VTimeZone timezone = (VTimeZone) timezones.getComponent(tzid.getValue());
+ if (!uidCal.getComponents().contains(timezone)) {
+ uidCal.getComponents().add(timezone);
+ }
+ }
+ }
+ uidCal.getComponents().add(c);
+ }
+ return (Calendar[]) calendars.values().toArray(new Calendar[calendars.values().size()]);
+ }
+
+ /**
+ * Returns a unique identifier as specified by components in the provided calendar.
+ * @param calendar a calendar instance
+ * @return the UID property
+ * @throws ConstraintViolationException if zero or more than one unique identifer is found in the specified calendar
+ */
+ public static Uid getUid(final Calendar calendar) throws ConstraintViolationException {
+ Uid uid = null;
+ for (final Iterator i = calendar.getComponents().iterator(); i.hasNext();) {
+ final Component c = (Component) i.next();
+ for (final Iterator j = c.getProperties(Property.UID).iterator(); j.hasNext();) {
+ final Uid foundUid = (Uid) j.next();
+ if (uid != null && !uid.equals(foundUid)) {
+ throw new ConstraintViolationException("More than one UID found in calendar");
+ }
+ uid = foundUid;
+ }
+ }
+ if (uid == null) {
+ throw new ConstraintViolationException("Calendar must specify a single unique identifier (UID)");
+ }
+ return uid;
+ }
+
+ /**
+ * Returns an appropriate MIME Content-Type for the specified calendar object.
+ * @param calendar a calendar instance
+ * @param charset an optional encoding
+ * @return a content type string
+ */
+ public static String getContentType(Calendar calendar, Charset charset) {
+ final StringBuffer b = new StringBuffer("text/calendar");
+
+ final Method method = (Method) calendar.getProperty(Property.METHOD);
+ if (method != null) {
+ b.append("; method=");
+ b.append(method.getValue());
+ }
+
+ if (charset != null) {
+ b.append("; charset=");
+ b.append(charset);
+ }
+ return b.toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/CompatibilityHints.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/CompatibilityHints.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,125 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.util.Map;
+
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * $Id$
+ *
+ * Created on 9/03/2006
+ *
+ * A set of keys used to enable compatibility features.
+ *
+ * @author Ben Fortuna
+ */
+public final class CompatibilityHints {
+
+ /**
+ * A system property key to enable relaxed unfolding. Relaxed unfolding is enabled by setting this system property
+ * to "true".
+ */
+ public static final String KEY_RELAXED_UNFOLDING = "ical4j.unfolding.relaxed";
+
+ /**
+ * A system property key to enable relaxed parsing. Relaxed parsing is enabled by setting this system property to
+ * "true".
+ */
+ public static final String KEY_RELAXED_PARSING = "ical4j.parsing.relaxed";
+
+ /**
+ * A system property key to enable relaxed validation. Relaxed validation disables validation of certain conformance
+ * rules that many iCalendar implementations do not conform to. Relaxed validation is enabled by setting this system
+ * property to "true".
+ */
+ public static final String KEY_RELAXED_VALIDATION = "ical4j.validation.relaxed";
+
+ /**
+ * A system property key used to enable compatibility with Outlook/Exchange-generated iCalendar files. Outlook
+ * compatibility is enabled by setting this system property to "true".
+ */
+ public static final String KEY_OUTLOOK_COMPATIBILITY = "ical4j.compatibility.outlook";
+
+ /**
+ * A system property key used to enable compatibility with Lotus Notes-generated iCalendar files. Notes
+ * compatibility is enabled by setting this system property to "true".
+ */
+ public static final String KEY_NOTES_COMPATIBILITY = "ical4j.compatibility.notes";
+
+ private static final Map HINTS = new ConcurrentHashMap();
+ // preload known hints from the configurator
+ static {
+ setHintEnabled(KEY_RELAXED_UNFOLDING, "true".equals(Configurator.getProperty(KEY_RELAXED_UNFOLDING)));
+ setHintEnabled(KEY_RELAXED_PARSING, "true".equals(Configurator.getProperty(KEY_RELAXED_PARSING)));
+ setHintEnabled(KEY_RELAXED_VALIDATION, "true".equals(Configurator.getProperty(KEY_RELAXED_VALIDATION)));
+ setHintEnabled(KEY_OUTLOOK_COMPATIBILITY, "true".equals(Configurator.getProperty(KEY_OUTLOOK_COMPATIBILITY)));
+ setHintEnabled(KEY_NOTES_COMPATIBILITY, "true".equals(Configurator.getProperty(KEY_NOTES_COMPATIBILITY)));
+ }
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private CompatibilityHints() {
+ }
+
+ /**
+ * @param key
+ * a compatibility hint key
+ * @param enabled
+ * indicates whether to enable or disable the compatibility hint
+ */
+ public static void setHintEnabled(final String key, final boolean enabled) {
+ HINTS.put(key, Boolean.valueOf(enabled));
+ }
+
+ /**
+ * @param key
+ * a compatibility hint key
+ */
+ public static void clearHintEnabled(final String key) {
+ HINTS.remove(key);
+ }
+
+ /**
+ * @param key
+ * a compatibility hint key
+ * @return true if the specified compatibility hint is enabled, otherwise false
+ */
+ public static boolean isHintEnabled(final String key) {
+ if (HINTS.get(key) != null) {
+ return ((Boolean) HINTS.get(key)).booleanValue();
+ }
+ return "true".equals(Configurator.getProperty(key));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/ComponentValidator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/ComponentValidator.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,74 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * @author Ben
+ *
+ */
+public final class ComponentValidator {
+
+ private static final String ASSERT_NONE_MESSAGE = "Component [{0}] is not applicable";
+
+ private static final String ASSERT_ONE_OR_LESS_MESSAGE = "Component [{0}] must only be specified once";
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private ComponentValidator() {
+ }
+
+ /**
+ * @param componentName a component name used in the assertion
+ * @param components a list of components
+ * @throws ValidationException where the assertion fails
+ */
+ public static void assertNone(String componentName, ComponentList components) throws ValidationException {
+ if (components.getComponent(componentName) != null) {
+ throw new ValidationException(ASSERT_NONE_MESSAGE, new Object[] {componentName});
+ }
+ }
+
+ /**
+ * @param componentName a component name used in the assertion
+ * @param components a list of components
+ * @throws ValidationException where the assertion fails
+ */
+ public static void assertOneOrLess(String componentName, ComponentList components) throws ValidationException {
+ if (components.getComponents(componentName).size() > 1) {
+ throw new ValidationException(ASSERT_ONE_OR_LESS_MESSAGE, new Object[] {componentName});
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/Configurator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/Configurator.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,81 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.util.Properties;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * $Id$
+ *
+ * Created on 06/02/2008
+ *
+ * Provides configuration properties specified either as system properties
+ * or in an ical4j.properties configuration file.
+ * @author Ben
+ *
+ */
+public final class Configurator {
+
+ private static final Log LOG = LogFactory.getLog(Configurator.class);
+
+ private static final Properties CONFIG = new Properties();
+
+ static {
+ try {
+ CONFIG.load(ResourceLoader.getResourceAsStream("ical4j.properties"));
+ }
+ catch (Exception e) {
+ LOG.info("ical4j.properties not found.");
+ }
+ }
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private Configurator() {
+ }
+
+ /**
+ * @param key a compatibility hint key
+ * @return true if the specified compatibility hint is enabled, otherwise false
+ */
+ public static String getProperty(final String key) {
+ String property = CONFIG.getProperty(key);
+ if (property == null) {
+ property = System.getProperty(key);
+ }
+ return property;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/Constants.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/Constants.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,172 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.property.Action;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Clazz;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Priority;
+import net.fortuna.ical4j.model.property.Status;
+import net.fortuna.ical4j.model.property.Transp;
+import net.fortuna.ical4j.model.property.Version;
+
+/**
+ * $Id$
+ *
+ * Created on 5/07/2005
+ *
+ * Provides some convenience methods for working with constant
+ * parameters and properties.
+ * @author Ben Fortuna
+ */
+public final class Constants {
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private Constants() {
+ }
+
+ /**
+ * Returns a constant equivalent to the specified property
+ * if one is applicable. Otherwise will return the specified
+ * property.
+ * @param property a property instance
+ * @return an equivalent constant property, or the specified property if no equivalent
+ * constant exists
+ */
+ public static Property forProperty(final Property property) {
+ Property retVal = property;
+ if (Action.AUDIO.equals(property)) {
+ retVal = Action.AUDIO;
+ }
+ else if (Action.DISPLAY.equals(property)) {
+ retVal = Action.DISPLAY;
+ }
+ else if (Action.EMAIL.equals(property)) {
+ retVal = Action.EMAIL;
+ }
+ else if (Action.PROCEDURE.equals(property)) {
+ retVal = Action.PROCEDURE;
+ }
+ else if (CalScale.GREGORIAN.equals(property)) {
+ retVal = CalScale.GREGORIAN;
+ }
+ else if (Clazz.CONFIDENTIAL.equals(property)) {
+ retVal = Clazz.CONFIDENTIAL;
+ }
+ else if (Clazz.PRIVATE.equals(property)) {
+ retVal = Clazz.PRIVATE;
+ }
+ else if (Clazz.PUBLIC.equals(property)) {
+ retVal = Clazz.PUBLIC;
+ }
+ else if (Method.ADD.equals(property)) {
+ retVal = Method.ADD;
+ }
+ else if (Method.CANCEL.equals(property)) {
+ retVal = Method.CANCEL;
+ }
+ else if (Method.COUNTER.equals(property)) {
+ retVal = Method.COUNTER;
+ }
+ else if (Method.DECLINE_COUNTER.equals(property)) {
+ retVal = Method.DECLINE_COUNTER;
+ }
+ else if (Method.PUBLISH.equals(property)) {
+ retVal = Method.PUBLISH;
+ }
+ else if (Method.REFRESH.equals(property)) {
+ retVal = Method.REFRESH;
+ }
+ else if (Method.REPLY.equals(property)) {
+ retVal = Method.REPLY;
+ }
+ else if (Method.REQUEST.equals(property)) {
+ retVal = Method.REQUEST;
+ }
+ else if (Priority.HIGH.equals(property)) {
+ retVal = Priority.HIGH;
+ }
+ else if (Priority.LOW.equals(property)) {
+ retVal = Priority.LOW;
+ }
+ else if (Priority.MEDIUM.equals(property)) {
+ retVal = Priority.MEDIUM;
+ }
+ else if (Priority.UNDEFINED.equals(property)) {
+ retVal = Priority.UNDEFINED;
+ }
+ else if (Status.VEVENT_CANCELLED.equals(property)) {
+ retVal = Status.VEVENT_CANCELLED;
+ }
+ else if (Status.VEVENT_CONFIRMED.equals(property)) {
+ retVal = Status.VEVENT_CONFIRMED;
+ }
+ else if (Status.VEVENT_TENTATIVE.equals(property)) {
+ retVal = Status.VEVENT_TENTATIVE;
+ }
+ else if (Status.VJOURNAL_CANCELLED.equals(property)) {
+ retVal = Status.VJOURNAL_CANCELLED;
+ }
+ else if (Status.VJOURNAL_DRAFT.equals(property)) {
+ retVal = Status.VJOURNAL_DRAFT;
+ }
+ else if (Status.VJOURNAL_FINAL.equals(property)) {
+ retVal = Status.VJOURNAL_FINAL;
+ }
+ else if (Status.VTODO_CANCELLED.equals(property)) {
+ retVal = Status.VTODO_CANCELLED;
+ }
+ else if (Status.VTODO_COMPLETED.equals(property)) {
+ retVal = Status.VTODO_COMPLETED;
+ }
+ else if (Status.VTODO_IN_PROCESS.equals(property)) {
+ retVal = Status.VTODO_IN_PROCESS;
+ }
+ else if (Status.VTODO_NEEDS_ACTION.equals(property)) {
+ retVal = Status.VTODO_NEEDS_ACTION;
+ }
+ else if (Transp.OPAQUE.equals(property)) {
+ retVal = Transp.OPAQUE;
+ }
+ else if (Transp.TRANSPARENT.equals(property)) {
+ retVal = Transp.TRANSPARENT;
+ }
+ else if (Version.VERSION_2_0.equals(property)) {
+ retVal = Version.VERSION_2_0;
+ }
+ return retVal;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/Dates.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/Dates.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,315 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.TimeZone;
+
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.parameter.Value;
+
+/**
+ * $Id$
+ *
+ * Created on 26/06/2005
+ *
+ * Implements a collection of utility methods relevant to date processing.
+ *
+ * @author Ben Fortuna
+ */
+public final class Dates {
+
+ /**
+ * Number of milliseconds in one second.
+ */
+ public static final long MILLIS_PER_SECOND = 1000;
+
+ /**
+ * Number of milliseconds in one minute.
+ */
+ public static final long MILLIS_PER_MINUTE = 60000;
+
+ /**
+ * Number of milliseconds in one hour.
+ */
+ public static final long MILLIS_PER_HOUR = 3600000;
+
+ /**
+ * Number of milliseconds in one day.
+ */
+ public static final long MILLIS_PER_DAY = 86400000;
+
+ /**
+ * Number of milliseconds in one week.
+ */
+ public static final long MILLIS_PER_WEEK = 604800000;
+
+ /**
+ * Number of days in one week.
+ */
+ public static final int DAYS_PER_WEEK = 7;
+
+ /**
+ * Constant indicating precision to the second.
+ */
+ public static final int PRECISION_SECOND = 0;
+
+ /**
+ * Constant indicating precision to the day.
+ */
+ public static final int PRECISION_DAY = 1;
+
+ /**
+ * Maximum number of weeks per year.
+ */
+ public static final int MAX_WEEKS_PER_YEAR = 53;
+
+ /**
+ * Maximum number of days per year.
+ */
+ public static final int MAX_DAYS_PER_YEAR = 366;
+
+ /**
+ * Maximum number of days per month.
+ */
+ public static final int MAX_DAYS_PER_MONTH = 31;
+
+ private static final String INVALID_WEEK_MESSAGE = "Invalid week number [{0}]";
+
+ private static final String INVALID_YEAR_DAY_MESSAGE = "Invalid year day [{0}]";
+
+ private static final String INVALID_MONTH_DAY_MESSAGE = "Invalid month day [{0}]";
+
+ /**
+ * Constructor made private to prevent instantiation.
+ */
+ private Dates() {
+ }
+
+ /**
+ * Returns the absolute week number for the year specified by the
+ * supplied date. Note that a value of zero (0) is invalid for the
+ * weekNo parameter and an IllegalArgumentException
+ * will be thrown.
+ * @param date a date instance representing a week of the year
+ * @param weekNo a week number offset
+ * @return the absolute week of the year for the specified offset
+ */
+ public static int getAbsWeekNo(final java.util.Date date, final int weekNo) {
+ if (weekNo == 0 || weekNo < -MAX_WEEKS_PER_YEAR || weekNo > MAX_WEEKS_PER_YEAR) {
+ throw new IllegalArgumentException(MessageFormat.format(INVALID_WEEK_MESSAGE,
+ new Object[] {new Integer(weekNo)}));
+ }
+ if (weekNo > 0) {
+ return weekNo;
+ }
+ final Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ final int year = cal.get(Calendar.YEAR);
+ // construct a list of possible week numbers..
+ final List weeks = new ArrayList();
+ cal.set(Calendar.WEEK_OF_YEAR, 1);
+ while (cal.get(Calendar.YEAR) == year) {
+ weeks.add(new Integer(cal.get(Calendar.WEEK_OF_YEAR)));
+ cal.add(Calendar.WEEK_OF_YEAR, 1);
+ }
+ return ((Integer) weeks.get(weeks.size() + weekNo)).intValue();
+ }
+
+ /**
+ * Returns the absolute year day for the year specified by the
+ * supplied date. Note that a value of zero (0) is invalid for the
+ * yearDay parameter and an IllegalArgumentException
+ * will be thrown.
+ * @param date a date instance representing a day of the year
+ * @param yearDay a day of year offset
+ * @return the absolute day of month for the specified offset
+ */
+ public static int getAbsYearDay(final java.util.Date date, final int yearDay) {
+ if (yearDay == 0 || yearDay < -MAX_DAYS_PER_YEAR || yearDay > MAX_DAYS_PER_YEAR) {
+ throw new IllegalArgumentException(MessageFormat.format(INVALID_YEAR_DAY_MESSAGE,
+ new Object[] {new Integer(yearDay)}));
+ }
+ if (yearDay > 0) {
+ return yearDay;
+ }
+ final Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ final int year = cal.get(Calendar.YEAR);
+ // construct a list of possible year days..
+ final List days = new ArrayList();
+ cal.set(Calendar.DAY_OF_YEAR, 1);
+ while (cal.get(Calendar.YEAR) == year) {
+ days.add(new Integer(cal.get(Calendar.DAY_OF_YEAR)));
+ cal.add(Calendar.DAY_OF_YEAR, 1);
+ }
+ return ((Integer) days.get(days.size() + yearDay)).intValue();
+ }
+
+ /**
+ * Returns the absolute month day for the month specified by the
+ * supplied date. Note that a value of zero (0) is invalid for the
+ * monthDay parameter and an IllegalArgumentException
+ * will be thrown.
+ * @param date a date instance representing a day of the month
+ * @param monthDay a day of month offset
+ * @return the absolute day of month for the specified offset
+ */
+ public static int getAbsMonthDay(final java.util.Date date, final int monthDay) {
+ if (monthDay == 0 || monthDay < -MAX_DAYS_PER_MONTH || monthDay > MAX_DAYS_PER_MONTH) {
+ throw new IllegalArgumentException(MessageFormat.format(INVALID_MONTH_DAY_MESSAGE,
+ new Object[] {new Integer(monthDay)}));
+ }
+ if (monthDay > 0) {
+ return monthDay;
+ }
+ final Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ final int month = cal.get(Calendar.MONTH);
+ // construct a list of possible month days..
+ final List days = new ArrayList();
+ cal.set(Calendar.DAY_OF_MONTH, 1);
+ while (cal.get(Calendar.MONTH) == month) {
+ days.add(new Integer(cal.get(Calendar.DAY_OF_MONTH)));
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ }
+ return ((Integer) days.get(days.size() + monthDay)).intValue();
+ }
+
+ /**
+ * Returns a new date instance of the specified type. If no type is
+ * specified a DateTime instance is returned.
+ * @param date a seed Java date instance
+ * @param type the type of date instance
+ * @return an instance of net.fortuna.ical4j.model.Date
+ */
+ public static Date getInstance(final java.util.Date date, final Value type) {
+ if (Value.DATE.equals(type)) {
+ return new Date(date);
+ }
+ return new DateTime(date);
+ }
+
+ /**
+ * Returns an instance of java.util.Calendar
that is suitably
+ * initialised for working with the specified date.
+ * @param date a date instance
+ * @return a java.util.Calendar
+ */
+ public static Calendar getCalendarInstance(final Date date) {
+ Calendar instance = null;
+ if (date instanceof DateTime) {
+ final DateTime dateTime = (DateTime) date;
+ if (dateTime.getTimeZone() != null) {
+ instance = Calendar.getInstance(dateTime.getTimeZone());
+ }
+ else if (dateTime.isUtc()) {
+ instance = Calendar.getInstance(TimeZones.getUtcTimeZone());
+ }
+ else {
+ // a date-time without a timezone but not UTC is floating
+ instance = Calendar.getInstance();
+ }
+ }
+ else {
+ instance = Calendar.getInstance(TimeZones.getDateTimeZone());
+ }
+ return instance;
+ }
+
+ /**
+ * @param time the time value to round
+ * @param precision the rounding precision
+ * @return a round time value
+ * @deprecated It is not all that useful to perform rounding without specifying an
+ * explicit timezone.
+ */
+ public static long round(final long time, final int precision) {
+ return round(time, precision, TimeZone.getDefault());
+// return round(time, precision, TimeZone.getTimeZone(TimeZones.UTC_ID));
+ /*
+ long newTime = time;
+ if (precision == PRECISION_DAY) {
+ long remainder = newTime%(1000*60*60); // get the mod remainder using milliseconds*seconds*min
+ newTime = newTime-remainder;
+ // remove the remainder from the time to clear the milliseconds, seconds and minutes
+ }
+ else if (precision == PRECISION_SECOND) {
+ long remainder = newTime%(1000); // get the mod remainder using milliseconds
+ newTime = newTime-remainder; // remove the remainder from the time to clear the milliseconds
+ }
+ return newTime;
+ */
+ }
+
+ /**
+ * Rounds a time value to remove any precision smaller than specified.
+ * @param time the time value to round
+ * @param precision the rounding precision
+ * @param tz the timezone of the rounded value
+ * @return a round time value
+ */
+ public static long round(final long time, final int precision, final TimeZone tz) {
+ if ((precision == PRECISION_SECOND) && ((time % Dates.MILLIS_PER_SECOND) == 0)) {
+ return time;
+ }
+ final Calendar cal = Calendar.getInstance(tz);
+ cal.setTimeInMillis(time);
+ if (precision == PRECISION_DAY) {
+// return (long) Math.floor(time / (double) Dates.MILLIS_PER_DAY) * Dates.MILLIS_PER_DAY;
+ cal.set(Calendar.HOUR_OF_DAY, 0);
+ cal.clear(Calendar.MINUTE);
+ cal.clear(Calendar.SECOND);
+ cal.clear(Calendar.MILLISECOND);
+ }
+ else if (precision == PRECISION_SECOND) {
+// return (long) Math.floor(time / (double) Dates.MILLIS_PER_SECOND) * Dates.MILLIS_PER_SECOND;
+ cal.clear(Calendar.MILLISECOND);
+ }
+ // unrecognised precision..
+ return cal.getTimeInMillis();
+ }
+
+ /**
+ * Returns the {@code System.currentTimeMillis()}, rounded to the second.
+ * By doing a rough rounding here, we avoid an expensive java.util.Calendar based
+ * rounding later on.
+ * @return the current time in millisec.
+ */
+ public static long getCurrentTimeRounded() {
+ return (long) Math.floor(System.currentTimeMillis() / (double) Dates.MILLIS_PER_SECOND) * Dates.MILLIS_PER_SECOND;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/DecoderFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/DecoderFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.io.UnsupportedEncodingException;
+
+import net.fortuna.ical4j.model.parameter.Encoding;
+
+import org.apache.commons.codec.BinaryDecoder;
+import org.apache.commons.codec.StringDecoder;
+
+/**
+ * Abstract base class for decoder factory implementations.
+ *
+ * $Id$
+ *
+ * Created on 13/05/2006
+ *
+ * @author Ben Fortuna
+ */
+public abstract class DecoderFactory {
+
+ /**
+ * The system property used to specify an alternate
+ * DecoderFactory
implementation.
+ */
+ public static final String KEY_FACTORY_CLASS = "net.fortuna.ical4j.factory.decoder";
+
+ private static DecoderFactory instance;
+ static {
+ try {
+ final Class factoryClass = Class.forName(Configurator.getProperty(KEY_FACTORY_CLASS));
+ instance = (DecoderFactory) factoryClass.newInstance();
+ }
+ catch (Exception e) {
+ instance = new DefaultDecoderFactory();
+ }
+ }
+
+ /**
+ * @return Returns the instance.
+ */
+ public static final DecoderFactory getInstance() {
+ return instance;
+ }
+
+ /**
+ * Returns a new {@link BinaryDecoder} for the specified encoding.
+ * @param encoding an encoding type
+ * @return a {@link BinaryDecoder} instance
+ * @throws UnsupportedEncodingException where an encoder supporting the
+ * specified encoding is not available.
+ */
+ public abstract BinaryDecoder createBinaryDecoder(Encoding encoding)
+ throws UnsupportedEncodingException;
+
+ /**
+ * Returns a new {@link StringDecoder} for the specified encoding.
+ * @param encoding an encoding type
+ * @return a {@link StringDecoder} instance
+ * @throws UnsupportedEncodingException where an encoder supporting the
+ * specified encoding is not available.
+ */
+ public abstract StringDecoder createStringDecoder(Encoding encoding)
+ throws UnsupportedEncodingException;
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/DefaultDecoderFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/DefaultDecoderFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.io.UnsupportedEncodingException;
+import java.text.MessageFormat;
+
+import net.fortuna.ical4j.model.parameter.Encoding;
+
+import org.apache.commons.codec.BinaryDecoder;
+import org.apache.commons.codec.StringDecoder;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.net.QuotedPrintableCodec;
+
+/**
+ * Default decoder factory implementation.
+ *
+ * $Id$
+ *
+ * Created on 13/05/2006
+ *
+ * @author Ben Fortuna
+ */
+public class DefaultDecoderFactory extends DecoderFactory {
+
+ private static final String UNSUPPORTED_ENCODING_MESSAGE = "Decoder not available for encoding [{0}]";
+
+ /**
+ * {@inheritDoc}
+ */
+ public BinaryDecoder createBinaryDecoder(final Encoding encoding)
+ throws UnsupportedEncodingException {
+
+ if (Encoding.QUOTED_PRINTABLE.equals(encoding)) {
+ return new QuotedPrintableCodec();
+ }
+ else if (Encoding.BASE64.equals(encoding)) {
+ return new Base64();
+ }
+ throw new UnsupportedEncodingException(MessageFormat.format(UNSUPPORTED_ENCODING_MESSAGE,
+ new Object[] {encoding}));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public StringDecoder createStringDecoder(final Encoding encoding)
+ throws UnsupportedEncodingException {
+
+ if (Encoding.QUOTED_PRINTABLE.equals(encoding)) {
+ return new QuotedPrintableCodec();
+ }
+ throw new UnsupportedEncodingException(MessageFormat.format(UNSUPPORTED_ENCODING_MESSAGE,
+ new Object[] {encoding}));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/DefaultEncoderFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/DefaultEncoderFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.io.UnsupportedEncodingException;
+import java.text.MessageFormat;
+
+import net.fortuna.ical4j.model.parameter.Encoding;
+
+import org.apache.commons.codec.BinaryEncoder;
+import org.apache.commons.codec.StringEncoder;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.net.QuotedPrintableCodec;
+
+/**
+ * Default encoder factory implementation.
+ *
+ * $Id$
+ *
+ * Created on 13/05/2006
+ *
+ * @author Ben Fortuna
+ */
+public class DefaultEncoderFactory extends EncoderFactory {
+
+ private static final String UNSUPPORTED_ENCODING_MESSAGE = "Encoder not available for encoding [{0}]";
+
+ /**
+ * {@inheritDoc}
+ */
+ public BinaryEncoder createBinaryEncoder(final Encoding encoding)
+ throws UnsupportedEncodingException {
+
+ if (Encoding.QUOTED_PRINTABLE.equals(encoding)) {
+ return new QuotedPrintableCodec();
+ }
+ else if (Encoding.BASE64.equals(encoding)) {
+ return new Base64();
+ }
+ throw new UnsupportedEncodingException(MessageFormat.format(UNSUPPORTED_ENCODING_MESSAGE,
+ new Object[] {encoding}));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public StringEncoder createStringEncoder(final Encoding encoding)
+ throws UnsupportedEncodingException {
+
+ if (Encoding.QUOTED_PRINTABLE.equals(encoding)) {
+ return new QuotedPrintableCodec();
+ }
+ throw new UnsupportedEncodingException(MessageFormat.format(UNSUPPORTED_ENCODING_MESSAGE,
+ new Object[] {encoding}));
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/EncoderFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/EncoderFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.io.UnsupportedEncodingException;
+
+import net.fortuna.ical4j.model.parameter.Encoding;
+
+import org.apache.commons.codec.BinaryEncoder;
+import org.apache.commons.codec.StringEncoder;
+
+/**
+ * Abstract base class for encoder factory implementations.
+ *
+ * $Id$
+ *
+ * Created on 13/05/2006
+ *
+ * @author Ben Fortuna
+ */
+public abstract class EncoderFactory {
+
+ /**
+ * The system property used to specify an alternate
+ * EncoderFactory
implementation.
+ */
+ public static final String KEY_FACTORY_CLASS = "net.fortuna.ical4j.factory.encoder";
+
+ private static EncoderFactory instance;
+ static {
+ try {
+ final Class factoryClass = Class.forName(Configurator.getProperty(KEY_FACTORY_CLASS));
+ instance = (EncoderFactory) factoryClass.newInstance();
+ }
+ catch (Exception e) {
+ instance = new DefaultEncoderFactory();
+ }
+ }
+
+ /**
+ * @return Returns the instance.
+ */
+ public static final EncoderFactory getInstance() {
+ return instance;
+ }
+
+ /**
+ * Returns a new {@link BinaryEncoder} for the specified encoding.
+ * @param encoding an encoding type
+ * @return a {@link BinaryEncoder} instance
+ * @throws UnsupportedEncodingException where an encoder supporting the
+ * specified encoding is not available.
+ */
+ public abstract BinaryEncoder createBinaryEncoder(Encoding encoding)
+ throws UnsupportedEncodingException;
+
+ /**
+ * Returns a new {@link StringEncoder} for the specified encoding.
+ * @param encoding an encoding type
+ * @return a {@link StringEncoder} instance
+ * @throws UnsupportedEncodingException where an encoder supporting the
+ * specified encoding is not available.
+ */
+ public abstract StringEncoder createStringEncoder(Encoding encoding)
+ throws UnsupportedEncodingException;
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/HostInfo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/HostInfo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+/**
+ * Provides platform-independent host information.
+ *
+ * @author fortuna
+ *
+ */
+public interface HostInfo {
+
+ /**
+ * @return a name for the host machine
+ */
+ String getHostName();
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/InetAddressHostInfo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/InetAddressHostInfo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
+
+/**
+ * @author fortuna
+ *
+ */
+public class InetAddressHostInfo implements HostInfo {
+
+ private final InetAddress hostAddress;
+
+ /**
+ * @throws SocketException where an error occurs identifying the host address
+ */
+ public InetAddressHostInfo() throws SocketException {
+ this(findNonLoopbackAddress());
+ }
+
+ /**
+ * @param address a host address
+ */
+ public InetAddressHostInfo(InetAddress address) {
+ this.hostAddress = address;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getHostName() {
+ return hostAddress.getHostName();
+ }
+
+ /**
+ * Find a non loopback address for this machine on which to start the server.
+ * @return a non loopback address
+ * @throws SocketException if a socket error occurs
+ */
+ private static InetAddress findNonLoopbackAddress() throws SocketException {
+ final Enumeration enumInterfaceAddress = NetworkInterface.getNetworkInterfaces();
+ while (enumInterfaceAddress.hasMoreElements()) {
+ final NetworkInterface netIf = (NetworkInterface) enumInterfaceAddress.nextElement();
+
+ // Iterate over inet address
+ final Enumeration enumInetAdress = netIf.getInetAddresses();
+ while (enumInetAdress.hasMoreElements()) {
+ final InetAddress address = (InetAddress) enumInetAdress.nextElement();
+ if (!address.isLoopbackAddress()) {
+ return address;
+ }
+ }
+ }
+ return null;
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/Numbers.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/Numbers.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+/**
+ * $Id$
+ *
+ * Created on 6/08/2005
+ *
+ * A utility class for number processing.
+ * @author Ben Fortuna
+ */
+public final class Numbers {
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private Numbers() {
+ }
+
+ /**
+ * Wraps java.lang.Integer.parseInt()
to accept values with
+ * a PLUS character (i.e. "+2").
+ * @param value an integer string
+ * @return a parsed integer value
+ */
+ public static int parseInt(final String value) {
+ if (value != null && value.charAt(0) == '+') {
+ return Integer.parseInt(value.substring(1));
+ }
+ return Integer.parseInt(value);
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/ParameterValidator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/ParameterValidator.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$ [15-May-2004]
+ *
+ * Defines methods for validating parameters and parameter
+ * lists.
+ *
+ * @author Ben Fortuna
+ */
+public final class ParameterValidator {
+
+ private static final String ASSERT_NONE_MESSAGE = "Parameter [{0}] is not applicable";
+
+ private static final String ASSERT_ONE_OR_LESS_MESSAGE = "Parameter [{0}] must only be specified once";
+
+ private static final String ASSERT_ONE_MESSAGE = "Parameter [{0}] must be specified once";
+
+ private static final String ASSERT_NULL_OR_EQUAL_MESSAGE = "Parameter [{0}] is invalid";
+
+ private static ParameterValidator instance = new ParameterValidator();
+
+ /**
+ * Constructor made private to enforce singleton.
+ */
+ private ParameterValidator() {
+ }
+
+ /**
+ * Ensure a parameter occurs no more than once.
+ *
+ * @param paramName
+ * the parameter name
+ * @param parameters
+ * a list of parameters to query
+ * @throws ValidationException
+ * when the specified parameter occurs more than once
+ */
+ public void assertOneOrLess(final String paramName,
+ final ParameterList parameters) throws ValidationException {
+
+ if (parameters.getParameters(paramName).size() > 1) {
+ throw new ValidationException(ASSERT_ONE_OR_LESS_MESSAGE, new Object[] {paramName});
+ }
+ }
+
+ /**
+ * Ensure a parameter occurs once.
+ *
+ * @param paramName
+ * the parameter name
+ * @param parameters
+ * a list of parameters to query
+ * @throws ValidationException
+ * when the specified parameter does not occur once
+ */
+ public void assertOne(final String paramName,
+ final ParameterList parameters) throws ValidationException {
+
+ if (parameters.getParameters(paramName).size() != 1) {
+ throw new ValidationException(ASSERT_ONE_MESSAGE, new Object[] {paramName});
+ }
+ }
+
+ /**
+ * Ensure a parameter doesn't occur in the specified list.
+ * @param paramName the name of a parameter
+ * @param parameters a list of parameters
+ * @throws ValidationException thrown when the specified property
+ * is found in the list of properties
+ */
+ public void assertNone(final String paramName, final ParameterList parameters) throws ValidationException {
+ if (parameters.getParameter(paramName) != null) {
+ throw new ValidationException(ASSERT_NONE_MESSAGE, new Object[] {paramName});
+ }
+ }
+
+ /**
+ * @param param a parameter instance
+ * @param parameters a list of parameters
+ * @throws ValidationException where the assertion fails
+ */
+ public void assertNullOrEqual(final Parameter param, final ParameterList parameters) throws ValidationException {
+ final Parameter p = parameters.getParameter(param.getName());
+ if (p != null && !param.equals(p)) {
+ throw new ValidationException(ASSERT_NULL_OR_EQUAL_MESSAGE, new Object[] {p});
+ }
+ }
+
+ /**
+ * @return Returns the instance.
+ */
+ public static ParameterValidator getInstance() {
+ return instance;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/PropertyValidator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/PropertyValidator.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.ValidationException;
+
+/**
+ * $Id$ [15-May-2004]
+ *
+ * Defines methods for validating properties and property lists.
+ *
+ * @author Ben Fortuna
+ */
+public final class PropertyValidator {
+
+ private static final String ASSERT_NONE_MESSAGE = "Property [{0}] is not applicable";
+
+ private static final String ASSERT_ONE_OR_LESS_MESSAGE = "Property [{0}] must only be specified once";
+
+ private static final String ASSERT_ONE_MESSAGE = "Property [{0}] must be specified once";
+
+ private static final String ASSERT_ONE_OR_MORE_MESSAGE = "Property [{0}] must be specified at least once";
+
+ private static PropertyValidator instance = new PropertyValidator();
+
+ /**
+ * Constructor made private to enforce singleton.
+ */
+ private PropertyValidator() {
+ }
+
+ /**
+ * Ensure a property occurs no more than once.
+ *
+ * @param propertyName
+ * the property name
+ * @param properties
+ * a list of properties to query
+ * @throws ValidationException
+ * when the specified property occurs more than once
+ */
+ public void assertOneOrLess(final String propertyName,
+ final PropertyList properties) throws ValidationException {
+
+ if (properties.getProperties(propertyName).size() > 1) {
+ throw new ValidationException(ASSERT_ONE_OR_LESS_MESSAGE, new Object[] {propertyName});
+ }
+ }
+
+ /**
+ * Ensure a property occurs at least once.
+ *
+ * @param propertyName
+ * the property name
+ * @param properties
+ * a list of properties to query
+ * @throws ValidationException
+ * when the specified property occurs more than once
+ */
+ public void assertOneOrMore(final String propertyName,
+ final PropertyList properties) throws ValidationException {
+
+ if (properties.getProperties(propertyName).size() < 1) {
+ throw new ValidationException(ASSERT_ONE_OR_MORE_MESSAGE, new Object[] {propertyName});
+ }
+ }
+
+ /**
+ * Ensure a property occurs once.
+ *
+ * @param propertyName
+ * the property name
+ * @param properties
+ * a list of properties to query
+ * @throws ValidationException
+ * when the specified property does not occur once
+ */
+ public void assertOne(final String propertyName,
+ final PropertyList properties) throws ValidationException {
+
+ if (properties.getProperties(propertyName).size() != 1) {
+ throw new ValidationException(ASSERT_ONE_MESSAGE, new Object[] {propertyName});
+ }
+ }
+
+ /**
+ * Ensure a property doesn't occur in the specified list.
+ * @param propertyName the name of a property
+ * @param properties a list of properties
+ * @throws ValidationException thrown when the specified property
+ * is found in the list of properties
+ */
+ public void assertNone(final String propertyName, final PropertyList properties) throws ValidationException {
+ if (properties.getProperty(propertyName) != null) {
+ throw new ValidationException(ASSERT_NONE_MESSAGE, new Object[] {propertyName});
+ }
+ }
+
+ /**
+ * @return Returns the instance.
+ */
+ public static PropertyValidator getInstance() {
+ return instance;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/ResourceLoader.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/ResourceLoader.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.io.InputStream;
+import java.net.URL;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @author fortuna
+ *
+ */
+public class ResourceLoader {
+
+ private static final Log LOG = LogFactory.getLog(ResourceLoader.class);
+
+ /**
+ * Load a resource via the thread context classloader. If security permissions don't allow
+ * this fallback to loading via current classloader.
+ * @param name a resource name
+ * @return a {@link URL} or null if resource is not found
+ */
+ public static URL getResource(String name) {
+ URL resource = null;
+ try {
+ resource = Thread.currentThread().getContextClassLoader().getResource(name);
+ }
+ catch (SecurityException e) {
+ LOG.info("Unable to access context classloader, using default. " + e.getMessage());
+ }
+ if (resource == null) {
+ resource = ResourceLoader.class.getResource("/" + name);
+ }
+ return resource;
+ }
+
+ /**
+ * Load a resource via the thread context classloader. If security permissions don't allow
+ * this fallback to loading via current classloader.
+ * @param name a resource name
+ * @return an {@link InputStream} or null if resource is not found
+ */
+ public static InputStream getResourceAsStream(String name) {
+ InputStream stream = null;
+ try {
+ stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
+ }
+ catch (SecurityException e) {
+ LOG.info("Unable to access context classloader, using default. " + e.getMessage());
+ }
+ if (stream == null) {
+ stream = ResourceLoader.class.getResourceAsStream("/" + name);
+ }
+ return stream;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/SimpleHostInfo.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/SimpleHostInfo.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+/**
+ * @author fortuna
+ *
+ */
+public class SimpleHostInfo implements HostInfo {
+
+ private final String hostName;
+
+ /**
+ * @param hostName the hostname returned by {@link HostInfo#getHostName()}
+ */
+ public SimpleHostInfo(String hostName) {
+ this.hostName = hostName;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getHostName() {
+ return hostName;
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/Strings.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/Strings.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,238 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.util.regex.Pattern;
+
+/**
+ * $Id$ [23-Apr-2004]
+ *
+ * Utility methods for working with parameters.
+ * @author Ben Fortuna
+ *
+ * 4.3.11 Text
+ *
+ * Value Name: TEXT
+ *
+ * Purpose This value type is used to identify values that contain human
+ * readable text.
+ *
+ * Formal Definition: The character sets supported by this revision of
+ * iCalendar are UTF-8 and US ASCII thereof. The applicability to other
+ * character sets is for future work. The value type is defined by the
+ * following notation.
+ *
+ * text = *(TSAFE-CHAR / ":" / DQUOTE / ESCAPED-CHAR)
+ * ; Folded according to description above
+ *
+ * ESCAPED-CHAR = "\\" / "\;" / "\," / "\N" / "\n")
+ * ; \\ encodes \, \N or \n encodes newline
+ * ; \; encodes ;, \, encodes ,
+ *
+ * TSAFE-CHAR = %x20-21 / %x23-2B / %x2D-39 / %x3C-5B
+ * %x5D-7E / NON-US-ASCII
+ * ; Any character except CTLs not needed by the current
+ * ; character set, DQUOTE, ";", ":", "\", ","
+ *
+ * Note: Certain other character sets may require modification of the
+ * above definitions, but this is beyond the scope of this document.
+ *
+ * Description: If the property permits, multiple "text" values are
+ * specified by a COMMA character (US-ASCII decimal 44) separated list
+ * of values.
+ *
+ * The language in which the text is represented can be controlled by
+ * the "LANGUAGE" property parameter.
+ *
+ * An intentional formatted text line break MUST only be included in a
+ * "TEXT" property value by representing the line break with the
+ * character sequence of BACKSLASH (US-ASCII decimal 92), followed by a
+ * LATIN SMALL LETTER N (US-ASCII decimal 110) or a LATIN CAPITAL LETTER
+ * N (US-ASCII decimal 78), that is "\n" or "\N".
+ *
+ * The "TEXT" property values may also contain special characters that
+ * are used to signify delimiters, such as a COMMA character for lists
+ * of values or a SEMICOLON character for structured values. In order to
+ * support the inclusion of these special characters in "TEXT" property
+ * values, they MUST be escaped with a BACKSLASH character. A BACKSLASH
+ * character (US-ASCII decimal 92) in a "TEXT" property value MUST be
+ * escaped with another BACKSLASH character. A COMMA character in a
+ * "TEXT" property value MUST be escaped with a BACKSLASH character
+ * (US-ASCII decimal 92). A SEMICOLON character in a "TEXT" property
+ * value MUST be escaped with a BACKSLASH character (US-ASCII decimal
+ * 92). However, a COLON character in a "TEXT" property value SHALL NOT
+ * be escaped with a BACKSLASH character.Example: A multiple line value
+ * of:
+ *
+ * Project XYZ Final Review
+ * Conference Room - 3B
+ * Come Prepared.
+ *
+ * would be represented as:
+ *
+ * Project XYZ Final Review\nConference Room - 3B\nCome Prepared.
+ *
+ */
+public final class Strings {
+
+ /**
+ * Defines a regular expression representing all parameter strings that
+ * should be quoted.
+ */
+ public static final Pattern PARAM_QUOTE_PATTERN = Pattern.compile("[:;,]|[^\\p{ASCII}]");
+
+ private static final Pattern ESCAPE_PUNCTUATION_PATTERN = Pattern.compile("([,;])");
+ private static final Pattern UNESCAPE_PUNCTUATION_PATTERN = Pattern.compile("\\\\([,;\"])");
+
+ private static final Pattern ESCAPE_NEWLINE_PATTERN = Pattern.compile("\r?\n");
+ private static final Pattern UNESCAPE_NEWLINE_PATTERN = Pattern.compile("(?toString() method.
+ * @param aValue an object to quote
+ * @return a quoted string
+ */
+ public static String quote(final Object aValue) {
+ if (aValue != null) {
+ return "\"" + aValue + "\"";
+ }
+ return "\"\"";
+ }
+
+ /**
+ * Convenience method for removing surrounding quotes
+ * from a string value.
+ * @param aValue a string to remove quotes from
+ * @return an un-quoted string
+ */
+ public static String unquote(final String aValue) {
+ if (aValue != null && aValue.startsWith("\"") && aValue.endsWith("\"")) {
+ return aValue.substring(0, aValue.length() - 1).substring(1);
+ }
+ return aValue;
+ }
+
+ /**
+ * Convenience method for escaping special characters.
+ * @param aValue a string value to escape
+ * @return an escaped representation of the specified
+ * string
+ */
+ public static String escape(final String aValue) {
+ return escapePunctuation(escapeNewline(escapeBackslash(aValue)));
+ }
+
+ /**
+ * Convenience method for replacing escaped special characters
+ * with their original form.
+ * @param aValue a string value to unescape
+ * @return a string representation of the specified
+ * string with escaped characters replaced with their
+ * original form
+ */
+ public static String unescape(final String aValue) {
+ return unescapeBackslash(unescapeNewline(unescapePunctuation(aValue)));
+ }
+
+ private static String escapePunctuation(String value) {
+ if (value != null) {
+ return ESCAPE_PUNCTUATION_PATTERN.matcher(value).replaceAll("\\\\$1");
+ }
+ return value;
+ }
+
+ private static String unescapePunctuation(String value) {
+ if (value != null) {
+ return UNESCAPE_PUNCTUATION_PATTERN.matcher(value).replaceAll("$1");
+ }
+ return value;
+ }
+
+ public static String escapeNewline(String value) {
+ if (value != null) {
+ return ESCAPE_NEWLINE_PATTERN.matcher(value).replaceAll("\\\\n");
+ }
+ return value;
+ }
+
+ private static String unescapeNewline(String value) {
+ if (value != null) {
+ return UNESCAPE_NEWLINE_PATTERN.matcher(value).replaceAll("\n");
+ }
+ return value;
+ }
+
+ private static String escapeBackslash(String value) {
+ if (value != null) {
+ return ESCAPE_BACKSLASH_PATTERN.matcher(value).replaceAll("\\\\\\\\");
+ }
+ return value;
+ }
+
+ private static String unescapeBackslash(String value) {
+ if (value != null) {
+ return UNESCAPE_BACKSLASH_PATTERN.matcher(value).replaceAll("\\\\");
+ }
+ return value;
+ }
+
+ /**
+ * Wraps java.lang.String.valueOf()
to return an empty string
+ * where the specified object is null.
+ * @param object an object instance
+ * @return a string representation of the object
+ */
+ public static String valueOf(final Object object) {
+ if (object == null) {
+ return "";
+ }
+ return object.toString();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/TimeZones.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/TimeZones.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.util.TimeZone;
+
+/**
+ * $Id$ [5/07/2004]
+ *
+ * Utility methods relevant to Java timezones.
+ *
+ * @author Ben Fortuna
+ */
+public final class TimeZones {
+
+ /**
+ * The timezone identifier for UTC time.
+ */
+ public static final String UTC_ID = "Etc/UTC";
+
+ /**
+ * The timezone identifier for UTC time in the IBM JVM.
+ */
+ public static final String IBM_UTC_ID = "GMT";
+
+ /**
+ * The timezone identifier for GMT time.
+ */
+ public static final String GMT_ID = "Etc/GMT";
+
+ private static final TimeZone UTC_TIMEZONE;
+ static {
+ UTC_TIMEZONE = TimeZone.getTimeZone(UTC_ID);
+ }
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private TimeZones() {
+ }
+
+ /**
+ * Indicates whether the specified timezone is equivalent to
+ * UTC time.
+ * @param timezone a timezone instance
+ * @return true if the timezone is UTC time, otherwise false
+ */
+ public static boolean isUtc(final TimeZone timezone) {
+// return timezone.hasSameRules(TimeZone.getTimeZone(UTC_ID));
+// return timezone.getRawOffset() == 0;
+ return UTC_ID.equals(timezone.getID())
+ || IBM_UTC_ID.equals(timezone.getID());
+ }
+
+ /**
+ * Although timezones are not really applicable to DATE instances in iCalendar, the implementation
+ * in iCal4j requires the use of a timezone. Dates in iCal4j may be either "floating", in that they
+ * use the default Java timezone, or alternatively will use UTC (this is the default).
+ *
+ * The use of floating dates may be configured by specifying the following as a system property or in
+ * a file called "ical4j.properties" in the classpath:
+ *
+ * net.fortuna.ical4j.timezone.date.floating=true
+ *
+ * @return the timezone used for date instances
+ */
+ public static TimeZone getDateTimeZone() {
+ if ("true".equals(Configurator.getProperty("net.fortuna.ical4j.timezone.date.floating"))) {
+ return TimeZone.getDefault();
+ }
+ return getUtcTimeZone();
+ }
+
+ /**
+ * Get the UTC Timezone.
+ */
+ public static TimeZone getUtcTimeZone() {
+ return UTC_TIMEZONE;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/UidGenerator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/UidGenerator.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.net.SocketException;
+
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.property.Uid;
+
+/**
+ * $Id$
+ *
+ * Created on 11/03/2007
+ *
+ * Generates {@link Uid} properties in a similar fashion to that recommended in section 4.8.4.7 of the specification.
+ * @author Ben Fortuna
+ */
+public class UidGenerator {
+
+ private final String pid;
+
+ private final HostInfo hostInfo;
+
+ private static long lastMillis;
+
+ /**
+ * @param pid a unique process identifier for the host machine
+ * @throws SocketException where host information cannot be retrieved
+ */
+ public UidGenerator(String pid) throws SocketException {
+ this(new InetAddressHostInfo(), pid);
+ }
+
+ /**
+ * @param hostInfo custom host information
+ * @param pid a unique process identifier for the host machine
+ */
+ public UidGenerator(HostInfo hostInfo, String pid) {
+ this.hostInfo = hostInfo;
+ this.pid = pid;
+ }
+
+ /**
+ * @return a unique component identifier
+ */
+ public Uid generateUid() {
+ final StringBuffer b = new StringBuffer();
+ b.append(uniqueTimestamp());
+ b.append('-');
+ b.append(pid);
+ if (hostInfo != null) {
+ b.append('@');
+ b.append(hostInfo.getHostName());
+ }
+ return new Uid(b.toString());
+ }
+
+ /**
+ * Generates a timestamp guaranteed to be unique for the current JVM instance.
+ * @return a {@link DateTime} instance representing a unique timestamp
+ */
+ private static DateTime uniqueTimestamp() {
+ long currentMillis;
+ synchronized (UidGenerator.class) {
+ currentMillis = System.currentTimeMillis();
+ // guarantee uniqueness by ensuring timestamp is always greater
+ // than the previous..
+ if (currentMillis < lastMillis) {
+ currentMillis = lastMillis;
+ }
+ if (currentMillis - lastMillis < Dates.MILLIS_PER_SECOND) {
+ currentMillis += Dates.MILLIS_PER_SECOND;
+ }
+ lastMillis = currentMillis;
+ }
+ final DateTime timestamp = new DateTime(currentMillis);
+ timestamp.setUtc(true);
+ return timestamp;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/net/fortuna/ical4j/util/Uris.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/net/fortuna/ical4j/util/Uris.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+/**
+ * Copyright (c) 2012, Ben Fortuna
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * o Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * o Neither the name of Ben Fortuna nor the names of any other contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package net.fortuna.ical4j.util;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.regex.Pattern;
+
+/**
+ * $Id$
+ *
+ * Created on 11/09/2005
+ *
+ * Utility methods for working with URIs.
+ * @author Ben Fortuna
+ */
+public final class Uris {
+
+ /**
+ * URI Scheme used when relaxed parsing is enabled and the given input stream lead to an invalid URI.
+ */
+ public static final String INVALID_SCHEME = "net.fortunal.ical4j.invalid";
+
+ private static final Pattern CID_PATTERN = Pattern.compile("(?i)^cid:.*");
+ private static final Pattern NOTES_CID_REPLACEMENT_PATTERN = Pattern.compile("[<>]");
+
+ /**
+ * Constructor made private to enforce static nature.
+ */
+ private Uris() {
+ }
+
+ /**
+ * Encodes the specified URI string using the UTF-8 charset. In the event that an exception is thrown, the specifed
+ * URI string is returned unmodified.
+ * @param s a URI string
+ * @return an encoded URI string
+ */
+ public static String encode(final String s) {
+ /*
+ * try { return URLEncoder.encode(s, ENCODING_CHARSET); } catch (UnsupportedEncodingException use) {
+ * log.error("Error ocurred encoding URI [" + s + "]", use); }
+ */
+
+ /*
+ * Lotus Notes does not correctly strip angle brackets from cid uris. From RFC2392: A "cid" URL is converted to
+ * the corresponding Content-ID message header [MIME] by removing the "cid:" prefix, converting the % encoded
+ * character to their equivalent US-ASCII characters, and enclosing the remaining parts with an angle bracket
+ * pair, "<" and ">". For example, "cid:foo4%25foo1@bar.net" corresponds to Content-ID:
+ * Reversing the process and converting URL special characters to their % encodings produces the original cid. A
+ * "mid" URL is converted to a Message-ID or Message-ID/Content-ID pair in a similar fashion.
+ */
+ if (CompatibilityHints.isHintEnabled(CompatibilityHints.KEY_NOTES_COMPATIBILITY)
+ && CID_PATTERN.matcher(s).matches()) {
+
+ return NOTES_CID_REPLACEMENT_PATTERN.matcher(s).replaceAll("");
+ }
+ return s;
+ }
+
+ /**
+ * Decodes the specified URI string using the UTF-8 charset. In the event that an exception is thrown, the specifed
+ * URI string is returned unmodified.
+ * @param s a URI string
+ * @return an encoded URI string
+ */
+ public static String decode(final String s) {
+ /*
+ * try { return URLDecoder.decode(s, ENCODING_CHARSET); } catch (UnsupportedEncodingException use) {
+ * log.error("Error ocurred decoding URI [" + s + "]", use); }
+ */
+ return s;
+ }
+
+ /**
+ * Attempts to create a URI instance and will optionally swallow any resulting URISyntaxException depending on
+ * configured {@link CompatibilityHints}. Will also automatically attempt encoding of the string representation for
+ * greater compatibility.
+ * When relaxed parsing is enabled and if the string representation is not valid, a second URI creation attempt is made
+ * by extracting the scheme from the scheme specific part and URI encoding that later part. For example,
+ * "mailto: joe smith@example.com" becomes "mailto:joe%20smith@example.com".
+ *
If the second attempts also leads to a {@code URISyntaxException}, an opaque URI is constructed with a scheme
+ * of {@code Uris.INVALID_SCHEME} and a value corresponding to the initial representation.
+ *
+ * @param s a string representation of a URI.
+ * @return a URI instance, which may not correspond to the URI string if a valid
+ * URI string is not specified and relaxed parsing is enabled.
+ * @throws URISyntaxException if a valid URI string is not specified and relaxed parsing is disabled
+ */
+ public static URI create(final String s) throws URISyntaxException {
+ try {
+ return new URI(encode(s));
+ }
+ catch (URISyntaxException use) {
+ if (CompatibilityHints
+ .isHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING)) {
+ String encoded = encode(s);
+ int index = encoded.indexOf(':');
+ if (index != -1 && index < encoded.length() -1) {
+ try {
+ return new URI(encoded.substring(0, index), encoded.substring(index + 1), null);
+ } catch (URISyntaxException use2) {
+ }
+ }
+ try {
+ return new URI(INVALID_SCHEME, s, null);
+ } catch (URISyntaxException use2) {
+ // should not happen as we are building an opaque URI
+ throw new IllegalArgumentException("Could not build URI from " + s);
+ }
+ }
+ throw use;
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/CalendarColors.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/CalendarColors.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,39 @@
+package org.gege.caldavsyncadapter;
+
+public class CalendarColors {
+
+
+// Colors come from Solarized, (c) ETHAN SCHOONOVER
+// http://ethanschoonover.com/solarized
+
+// SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB
+// --------- ------- ---- ------- ----------- ---------- ----------- -----------
+// base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21
+// base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26
+// base01 #586e75 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46
+// base00 #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51
+// base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59
+// base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63
+// base2 #eee8d5 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93
+// base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99
+// yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71
+// orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80
+// red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86
+// magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83
+// violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77
+// blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82
+// cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63
+// green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60
+
+ public static long colors[] = {
+ 0xffb58900, // yellow
+ 0xffcb4b16, // orange
+ 0xffdc322f, // red
+ 0xffd33682, // magenta
+ 0xff6c71c4, // violet
+ 0xff268bd2, // blue
+ 0xff2aa198, // cyan
+ 0xff859900 // green
+ };
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/Event.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/Event.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,184 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia, Timo Berger
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+package org.gege.caldavsyncadapter;
+
+import android.content.ContentValues;
+import android.provider.CalendarContract.Events;
+import android.util.Log;
+
+/**
+ * abstract class for Calendar and Android events
+ */
+abstract public class Event {
+ private static final String TAG = "Event";
+
+ /**
+ * stores the ETAG of an event
+ */
+ public static String ETAG = Events.SYNC_DATA1;
+
+ /**
+ * internal Tag used to identify deleted events
+ */
+ public static String INTERNALTAG = Events.SYNC_DATA2;
+
+ /**
+ * store the whole VEVENT in here
+ * missing TAGs they might be missing for google update
+ *
+ * CREATED:20130906T102857Z
+ * DTSTAMP:20130906T102857Z
+ * LAST-MODIFIED:20130906T102857Z
+ * SEQUENCE:0
+ */
+ public static String RAWDATA = Events.SYNC_DATA3;
+
+ /**
+ * stores the UID of an Event
+ * example: UID:e6be67c6-eff0-44f8-a1a0-6c2cb1029944-caldavsyncadapter
+ */
+ public static String UID = Events.SYNC_DATA4;
+
+ /**
+ * the event transformed into ContentValues
+ */
+ public ContentValues ContentValues = new ContentValues();
+
+ abstract public String getETag();
+ abstract public void setETag(String ETag);
+
+ /**
+ * returns a list of all items that are comparable with this sync adapter
+ * @return a list of all items that are comparable with this sync adapter
+ */
+ public static java.util.ArrayList getComparableItems() {
+ java.util.ArrayList Result = new java.util.ArrayList();
+ Result.add(Events.DTSTART);
+ Result.add(Events.DTEND);
+ Result.add(Events.EVENT_TIMEZONE);
+ Result.add(Events.EVENT_END_TIMEZONE);
+ Result.add(Events.ALL_DAY);
+ Result.add(Events.DURATION);
+ Result.add(Events.TITLE);
+ Result.add(Events.CALENDAR_ID);
+ Result.add(Events._SYNC_ID);
+ //Result.add(Events.SYNC_DATA1);
+ Result.add(ETAG);
+ Result.add(Events.DESCRIPTION);
+ Result.add(Events.EVENT_LOCATION);
+ Result.add(Events.ACCESS_LEVEL);
+ Result.add(Events.STATUS);
+ Result.add(Events.RDATE);
+ Result.add(Events.RRULE);
+ Result.add(Events.EXRULE);
+ Result.add(Events.EXDATE);
+ Result.add(UID);
+
+ return Result;
+ }
+
+ /**
+ * sets the AndroidCalendarId for this event
+ * @param ID the AndroidCalendarId for this event
+ */
+ public void setAndroidCalendarId(long ID) {
+ if (this.ContentValues.containsKey(Events.CALENDAR_ID))
+ this.ContentValues.remove(Events.CALENDAR_ID);
+
+ this.ContentValues.put(Events.CALENDAR_ID, ID);
+ }
+
+ /**
+ * returns the AndroidCalendarId for this event.
+ * @return the AndroidCalendarId for this event
+ */
+ public long getAndroidCalendarId() {
+ long Result = -1;
+ if (this.ContentValues.containsKey(Events.CALENDAR_ID))
+ Result = this.ContentValues.getAsLong(Events.CALENDAR_ID);
+ return Result;
+ }
+
+ /**
+ * returns the UID for this event. you can also check, whether the UID was stored from server. the V1.7 release and before didn't save them.
+ * example: UID:e6be67c6-eff0-44f8-a1a0-6c2cb1029944-caldavsyncadapter
+ * @return the UID for this event
+ */
+ public String getUID() {
+ String Result = "";
+ if (this.ContentValues.containsKey(UID))
+ Result = this.ContentValues.getAsString(UID);
+
+ return Result;
+ }
+
+ /**
+ * compares the given ContentValues with the current ones for differences
+ * @param calendarEventValues the contentValues of the calendar event
+ * @return if the events are different
+ */
+ public boolean checkEventValuesChanged(ContentValues calendarEventValues) {
+ boolean Result = false;
+ Object ValueAndroid = null;
+ Object ValueCalendar = null;
+ java.util.ArrayList CompareItems = Event.getComparableItems();
+
+ for (String Key: CompareItems) {
+
+ if (this.ContentValues.containsKey(Key))
+ ValueAndroid = this.ContentValues.get(Key);
+ else
+ ValueAndroid = null;
+
+ if (calendarEventValues.containsKey(Key))
+ ValueCalendar = calendarEventValues.get(Key);
+ else
+ ValueCalendar = null;
+
+ /*
+ * TODO: Sync is designed to "Server always wins", should be a general option for this adapter
+ */
+ if (ValueAndroid != null) {
+ if (ValueCalendar != null) {
+ if (!ValueAndroid.toString().equals(ValueCalendar.toString())) {
+ Log.d(TAG, "difference in " + Key.toString() + ":" + ValueAndroid.toString() + " <> " + ValueCalendar.toString());
+ this.ContentValues.put(Key,ValueCalendar.toString());
+ Result = true;
+ }
+ } else {
+ Log.d(TAG, "difference in " + Key.toString() + ":" + ValueAndroid.toString() + " <> null");
+ this.ContentValues.putNull(Key);
+ Result = true;
+ }
+ } else {
+ if (ValueCalendar != null) {
+ Log.d(TAG, "difference in " + Key.toString() + ":null <> " + ValueCalendar.toString());
+ this.ContentValues.put(Key, ValueCalendar.toString());
+ Result = true;
+ } else {
+ // both null -> this is ok
+ }
+ }
+ }
+
+ return Result;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/android/entities/AndroidEvent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/android/entities/AndroidEvent.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,582 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia, Timo Berger
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.android.entities;
+
+import java.net.URISyntaxException;
+import java.text.ParseException;
+import net.fortuna.ical4j.model.Calendar;
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.Date;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.TimeZoneRegistry;
+import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
+import net.fortuna.ical4j.model.component.VAlarm;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.PartStat;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.parameter.Rsvp;
+import net.fortuna.ical4j.model.parameter.Value;
+import net.fortuna.ical4j.model.property.Action;
+import net.fortuna.ical4j.model.property.Attendee;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Clazz;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.DtEnd;
+import net.fortuna.ical4j.model.property.DtStart;
+import net.fortuna.ical4j.model.property.Duration;
+import net.fortuna.ical4j.model.property.ExDate;
+import net.fortuna.ical4j.model.property.ExRule;
+import net.fortuna.ical4j.model.property.Location;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.RDate;
+import net.fortuna.ical4j.model.property.RRule;
+import net.fortuna.ical4j.model.property.Status;
+import net.fortuna.ical4j.model.property.Summary;
+import net.fortuna.ical4j.model.property.Trigger;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Version;
+//import android.accounts.Account;
+//import android.content.ContentProviderClient;
+//import android.content.ContentValues;
+//import android.content.SyncStats;
+import android.database.Cursor;
+import android.net.Uri;
+//import android.os.RemoteException;
+import android.provider.CalendarContract.Attendees;
+//import android.provider.CalendarContract.Calendars;
+import android.provider.CalendarContract.Events;
+import android.provider.CalendarContract.Reminders;
+
+//import org.gege.caldavsyncadapter.Event;
+//import org.gege.caldavsyncadapter.caldav.CaldavFacade;
+import org.gege.caldavsyncadapter.caldav.entities.CalendarEvent;
+//import org.gege.caldavsyncadapter.caldav.entities.DavCalendar;
+//import org.gege.caldavsyncadapter.syncadapter.SyncAdapter;
+
+public class AndroidEvent extends org.gege.caldavsyncadapter.Event {
+
+ private Uri muri;
+
+ private Uri mAndroidCalendarUri;
+
+ /**
+ * the list of attendees
+ */
+ private PropertyList mAttendees = new PropertyList();
+
+ /**
+ * the list of reminders
+ */
+ private ComponentList mReminders = new ComponentList();
+
+ private Calendar mCalendar = null;
+
+/* private Account mAccount = null;
+ private ContentProviderClient mProvider = null;*/
+
+ //public AndroidEvent(Account account, ContentProviderClient provider, Uri uri, Uri calendarUri) {
+ public AndroidEvent(Uri uri, Uri calendarUri) {
+ super();
+ this.setUri(uri);
+/* this.mAccount = account;
+ this.mProvider = provider;*/
+ //this.setCounterpartUri(calendarUri);
+ mAndroidCalendarUri = calendarUri;
+ }
+
+ public Calendar getIcsEvent() {
+ return mCalendar;
+ }
+
+ public String getETag() {
+ String Result = "";
+ if (this.ContentValues.containsKey(ETAG))
+ Result = this.ContentValues.getAsString(ETAG);
+ return Result;
+ }
+
+ public void setETag(String eTag) {
+ this.ContentValues.put(ETAG, eTag);
+ }
+
+ public Uri getUri() {
+ return muri;
+ }
+
+ public void setUri(Uri uri) {
+ this.muri = uri;
+ }
+
+ public Uri getAndroidCalendarUri() {
+ return mAndroidCalendarUri;
+ }
+
+ @Override
+ public String toString() {
+ return this.getUri().toString();
+ }
+
+ /**
+ * reads an android event from a given cursor into {@link AndroidEvent#ContentValues}
+ * @param cur the cursor with the event
+ * @return success of this funtion
+ * @see AndroidEvent#ContentValues
+ */
+ public boolean readContentValues(Cursor cur) {
+ this.setETag(cur.getString(cur.getColumnIndex(ETAG)));
+
+ this.ContentValues.put(Events.EVENT_TIMEZONE, cur.getString(cur.getColumnIndex(Events.EVENT_TIMEZONE)));
+ this.ContentValues.put(Events.EVENT_END_TIMEZONE, cur.getString(cur.getColumnIndex(Events.EVENT_END_TIMEZONE)));
+ this.ContentValues.put(Events.DTSTART, cur.getLong(cur.getColumnIndex(Events.DTSTART)));
+ this.ContentValues.put(Events.DTEND, cur.getLong(cur.getColumnIndex(Events.DTEND)));
+ this.ContentValues.put(Events.ALL_DAY, cur.getLong(cur.getColumnIndex(Events.ALL_DAY)));
+ this.ContentValues.put(Events.TITLE, cur.getString(cur.getColumnIndex(Events.TITLE)));
+ this.ContentValues.put(Events.CALENDAR_ID, cur.getString(cur.getColumnIndex(Events.CALENDAR_ID)));
+ this.ContentValues.put(Events._SYNC_ID, cur.getString(cur.getColumnIndex(Events._SYNC_ID)));
+ //this.ContentValues.put(Events.SYNC_DATA1, cur.getString(cur.getColumnIndex(Events.SYNC_DATA1))); //not needed here, eTag has already been read
+ this.ContentValues.put(Events.DESCRIPTION, cur.getString(cur.getColumnIndex(Events.DESCRIPTION)));
+ this.ContentValues.put(Events.EVENT_LOCATION, cur.getString(cur.getColumnIndex(Events.EVENT_LOCATION)));
+ this.ContentValues.put(Events.ACCESS_LEVEL, cur.getInt(cur.getColumnIndex(Events.ACCESS_LEVEL)));
+
+ this.ContentValues.put(Events.STATUS, cur.getInt(cur.getColumnIndex(Events.STATUS)));
+
+ this.ContentValues.put(Events.LAST_DATE, cur.getInt(cur.getColumnIndex(Events.LAST_DATE)));
+ this.ContentValues.put(Events.DURATION, cur.getString(cur.getColumnIndex(Events.DURATION)));
+
+ this.ContentValues.put(Events.RDATE, cur.getString(cur.getColumnIndex(Events.RDATE)));
+ this.ContentValues.put(Events.RRULE, cur.getString(cur.getColumnIndex(Events.RRULE)));
+ this.ContentValues.put(Events.EXRULE, cur.getString(cur.getColumnIndex(Events.EXRULE)));
+ this.ContentValues.put(Events.EXDATE, cur.getString(cur.getColumnIndex(Events.EXDATE)));
+ this.ContentValues.put(Events.DIRTY, cur.getInt(cur.getColumnIndex(Events.DIRTY)));
+ this.ContentValues.put(UID, cur.getString(cur.getColumnIndex(UID)));
+ this.ContentValues.put(RAWDATA, cur.getString(cur.getColumnIndex(RAWDATA)));
+
+ return true;
+ }
+
+ /**
+ * reads the attendees from a given cursor
+ * @param cur the cursor with the attendees
+ * @return success of this function
+ * @see AndroidEvent#mAttendees
+ */
+ public boolean readAttendees(Cursor cur) {
+ Attendee attendee = null;
+ Organizer organizer = null;
+ ParameterList paraList = null;
+
+ String Name = "";
+ Cn cn = null;
+
+ String Email = "";
+
+ int Relationship = 0;
+
+
+ int Status = 0;
+ PartStat partstat = null;
+
+ int Type = 0;
+ Role role = null;
+
+ try {
+ while (cur.moveToNext()) {
+ Name = cur.getString(cur.getColumnIndex(Attendees.ATTENDEE_NAME));
+ Email = cur.getString(cur.getColumnIndex(Attendees.ATTENDEE_EMAIL));
+ Relationship = cur.getInt(cur.getColumnIndex(Attendees.ATTENDEE_RELATIONSHIP));
+ Type = cur.getInt(cur.getColumnIndex(Attendees.ATTENDEE_TYPE));
+ Status = cur.getInt(cur.getColumnIndex(Attendees.ATTENDEE_STATUS));
+
+ if (Relationship == Attendees.RELATIONSHIP_ORGANIZER) {
+ organizer = new Organizer();
+ organizer.setValue("mailto:" + Email);
+ paraList = organizer.getParameters();
+ mAttendees.add(organizer);
+ } else {
+ attendee = new Attendee();
+ attendee.setValue("mailto:" + Email);
+ paraList = attendee.getParameters();
+ mAttendees.add(attendee);
+ }
+
+ Rsvp rsvp = new Rsvp(true);
+ paraList.add(rsvp);
+
+ cn = new Cn(Name);
+ paraList.add(cn);
+
+ if (Status == Attendees.ATTENDEE_STATUS_INVITED)
+ partstat = new PartStat(PartStat.NEEDS_ACTION.getValue());
+ else if (Status == Attendees.ATTENDEE_STATUS_ACCEPTED)
+ partstat = new PartStat(PartStat.ACCEPTED.getValue());
+ else if (Status == Attendees.ATTENDEE_STATUS_DECLINED)
+ partstat = new PartStat(PartStat.DECLINED.getValue());
+ else if (Status == Attendees.ATTENDEE_STATUS_NONE)
+ partstat = new PartStat(PartStat.COMPLETED.getValue());
+ else if (Status == Attendees.ATTENDEE_STATUS_TENTATIVE)
+ partstat = new PartStat(PartStat.TENTATIVE.getValue());
+ else
+ partstat = new PartStat(PartStat.NEEDS_ACTION.getValue());
+ paraList.add(partstat);
+
+ if (Type == Attendees.TYPE_OPTIONAL)
+ role = new Role(Role.OPT_PARTICIPANT.getValue());
+ else if (Type == Attendees.TYPE_NONE)
+ role = new Role(Role.NON_PARTICIPANT.getValue()); //regular participants in android are non required?
+ else if (Type == Attendees.TYPE_REQUIRED)
+ role = new Role(Role.REQ_PARTICIPANT.getValue());
+ else
+ role = new Role(Role.NON_PARTICIPANT.getValue());
+ paraList.add(role);
+ }
+
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+ return true;
+ }
+
+ /**
+ * reads the reminders from a given cursor
+ * @param cur the cursor with the reminders
+ * @return success of this function
+ */
+ public boolean readReminder(Cursor cur) {
+ int Method;
+ int Minutes;
+ VAlarm reminder;
+ while (cur.moveToNext()) {
+ reminder = new VAlarm();
+ Method = cur.getInt(cur.getColumnIndex(Reminders.METHOD));
+ Minutes = cur.getInt(cur.getColumnIndex(Reminders.MINUTES)) * -1;
+
+
+ Dur dur = new Dur(0, 0, Minutes, 0);
+ Trigger tri = new Trigger(dur);
+ Value val = new Value(Duration.DURATION);
+ tri.getParameters().add(val);
+ reminder.getProperties().add(tri);
+
+ Description desc = new Description();
+ desc.setValue("caldavsyncadapter standard description");
+ reminder.getProperties().add(desc);
+
+
+ if (Method == Reminders.METHOD_EMAIL)
+ reminder.getProperties().add(Action.EMAIL);
+ else
+ reminder.getProperties().add(Action.DISPLAY);
+
+ this.mReminders.add(reminder);
+ }
+ return true;
+ }
+
+ /**
+ * generates a new ics-file.
+ * uses {@link AndroidEvent#ContentValues} as source.
+ * this should only be used when a new event has been generated within android.
+ * @param strUid the UID for this event. example: UID:e6be67c6-eff0-44f8-a1a0-6c2cb1029944-caldavsyncadapter
+ * @return success of the function
+ * @see CalendarEvent#fetchBody()
+ */
+ public boolean createIcs(String strUid) {
+ boolean Result = false;
+ TimeZone timezone = null;
+ TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
+//TODO: do not simply create the ics-file new. take into account the RAWDATA if available
+ /*
+ * dtstart=1365598800000
+ * dtend=1365602400000
+ * eventTimezone=Europe/Berlin
+ * eventEndTimezone=null
+ * duration=null
+ * allDay=0
+ * rrule=null
+ * rdate=null
+ * exrule=null
+ * exdate=null
+ * title=Einurlner Termin
+ * description=null
+ * eventLocation=null
+ * accessLevel=0
+ * eventStatus=0
+ *
+ * calendar_id=4
+ * lastDate=-197200128
+ * sync_data1=null
+ * _sync_id=null
+ * dirty=1
+ */
+
+ try {
+ mCalendar = new Calendar();
+ PropertyList propCalendar = mCalendar.getProperties();
+ propCalendar.add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
+ propCalendar.add(Version.VERSION_2_0);
+ propCalendar.add(CalScale.GREGORIAN);
+
+ VEvent event = new VEvent();
+ mCalendar.getComponents().add(event);
+ PropertyList propEvent = event.getProperties();
+
+ // DTSTAMP -> is created by new VEvent() automatical
+ //na
+
+ // CREATED
+ //na
+
+ // LAST-MODIFIED
+ //na
+
+ // SEQUENCE
+ //na
+
+ // DTSTART
+ long lngStart = this.ContentValues.getAsLong(Events.DTSTART);
+ String strTZStart = this.ContentValues.getAsString(Events.EVENT_TIMEZONE);
+ boolean allDay = this.ContentValues.getAsBoolean(Events.ALL_DAY);
+ if (lngStart > 0) {
+ DtStart dtStart = new DtStart();
+ if (allDay) {
+ Date dateStart = new Date();
+ dateStart.setTime(lngStart);
+ dtStart.setDate(dateStart);
+ } else {
+ DateTime datetimeStart = new DateTime();
+ datetimeStart.setTime(lngStart);
+ dtStart.setDate(datetimeStart);
+
+ timezone = registry.getTimeZone(strTZStart);
+ dtStart.setTimeZone(timezone);
+
+ // no timezone information for allDay events
+ mCalendar.getComponents().add(timezone.getVTimeZone());
+ }
+ propEvent.add(dtStart);
+ }
+
+ // DTEND
+ long lngEnd = this.ContentValues.getAsLong(Events.DTEND);
+ String strTZEnd = this.ContentValues.getAsString(Events.EVENT_END_TIMEZONE);
+ if (strTZEnd == null)
+ strTZEnd = strTZStart;
+ if (lngEnd > 0) {
+ DtEnd dtEnd = new DtEnd();
+ if (allDay) {
+ Date dateEnd = new Date();
+ dateEnd.setTime(lngEnd);
+ dtEnd.setDate(dateEnd);
+ } else {
+ DateTime datetimeEnd = new DateTime();
+ datetimeEnd.setTime(lngEnd);
+ dtEnd.setDate(datetimeEnd);
+ if (strTZEnd != null)
+ timezone = registry.getTimeZone(strTZEnd);
+ dtEnd.setTimeZone(timezone);
+ }
+ propEvent.add(dtEnd);
+ }
+
+ // DURATION
+ if (this.ContentValues.containsKey(Events.DURATION)) {
+ String strDuration = this.ContentValues.getAsString(Events.DURATION);
+ if (strDuration != null) {
+ Duration duration = new Duration();
+ duration.setValue(strDuration);
+
+ propEvent.add(duration);
+ }
+ }
+
+ //RRULE
+ if (this.ContentValues.containsKey(Events.RRULE)) {
+ String strRrule = this.ContentValues.getAsString(Events.RRULE);
+ if (strRrule != null) {
+ if (!strRrule.equals("")) {
+ RRule rrule = new RRule();
+ rrule.setValue(strRrule);
+ propEvent.add(rrule);
+ }
+ }
+ }
+
+ //RDATE
+ if (this.ContentValues.containsKey(Events.RDATE)) {
+ String strRdate = this.ContentValues.getAsString(Events.RDATE);
+ if (strRdate != null) {
+ if (!strRdate.equals("")) {
+ RDate rdate = new RDate();
+ rdate.setValue(strRdate);
+ propEvent.add(rdate);
+ }
+ }
+ }
+
+ //EXRULE
+ if (this.ContentValues.containsKey(Events.EXRULE)) {
+ String strExrule = this.ContentValues.getAsString(Events.EXRULE);
+ if (strExrule != null) {
+ if (!strExrule.equals("")) {
+ ExRule exrule = new ExRule();
+ exrule.setValue(strExrule);
+ propEvent.add(exrule);
+ }
+ }
+ }
+
+ //EXDATE
+ if (this.ContentValues.containsKey(Events.EXDATE)) {
+ String strExdate = this.ContentValues.getAsString(Events.EXDATE);
+ if (strExdate != null) {
+ if (!strExdate.equals("")) {
+ ExDate exdate = new ExDate();
+ exdate.setValue(strExdate);
+ propEvent.add(exdate);
+ }
+ }
+ }
+
+ //SUMMARY
+ if (this.ContentValues.containsKey(Events.TITLE)) {
+ String strTitle = this.ContentValues.getAsString(Events.TITLE);
+ if (strTitle != null) {
+ Summary summary = new Summary(strTitle);
+ propEvent.add(summary);
+ }
+ }
+
+ //DESCIPTION
+ if (this.ContentValues.containsKey(Events.DESCRIPTION)) {
+ String strDescription = this.ContentValues.getAsString(Events.DESCRIPTION);
+ if (strDescription != null) {
+ if (!strDescription.equals("")) {
+ Description description = new Description(strDescription);
+ propEvent.add(description);
+ }
+ }
+ }
+
+ //LOCATION
+ if (this.ContentValues.containsKey(Events.EVENT_LOCATION)) {
+ String strLocation = this.ContentValues.getAsString(Events.EVENT_LOCATION);
+ if (strLocation != null) {
+ if (!strLocation.equals("")) {
+ Location location = new Location(strLocation);
+ propEvent.add(location);
+ }
+ }
+ }
+
+ //CLASS / ACCESS_LEVEL
+ if (this.ContentValues.containsKey(Events.ACCESS_LEVEL)) {
+ int accessLevel = this.ContentValues.getAsInteger(Events.ACCESS_LEVEL);
+ Clazz clazz = new Clazz();
+ if (accessLevel == Events.ACCESS_PUBLIC)
+ clazz.setValue(Clazz.PUBLIC.getValue());
+ else if (accessLevel == Events.ACCESS_PRIVATE)
+ clazz.setValue(Clazz.PRIVATE.getValue());
+ else if (accessLevel == Events.ACCESS_CONFIDENTIAL)
+ clazz.setValue(Clazz.CONFIDENTIAL.getValue());
+ else
+ clazz.setValue(Clazz.PUBLIC.getValue());
+
+ propEvent.add(clazz);
+ }
+
+ //STATUS
+ if (this.ContentValues.containsKey(Events.STATUS)) {
+ int intStatus = this.ContentValues.getAsInteger(Events.STATUS);
+ if (intStatus > -1) {
+ Status status = new Status();
+ if (intStatus == Events.STATUS_CANCELED)
+ status.setValue(Status.VEVENT_CANCELLED.getValue());
+ else if (intStatus == Events.STATUS_CONFIRMED)
+ status.setValue(Status.VEVENT_CONFIRMED.getValue());
+ else if (intStatus == Events.STATUS_TENTATIVE)
+ status.setValue(Status.VEVENT_TENTATIVE.getValue());
+
+ propEvent.add(status);
+ }
+ }
+
+ //UID
+ Uid uid = new Uid(strUid);
+ propEvent.add(uid);
+
+ // Attendees
+ if (mAttendees.size() > 0) {
+ for (Object objProp: mAttendees) {
+ Property prop = (Property) objProp;
+ propEvent.add(prop);
+ }
+ }
+
+ // Reminders
+ if (mReminders.size() > 0) {
+ for (Object objComp: mReminders) {
+ Component com = (Component) objComp;
+ event.getAlarms().add(com);
+ }
+ }
+
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ return Result;
+ }
+
+ /**
+ * marks the android event as already handled
+ * @return
+ * @see AndroidEvent#cInternalTag
+ * @see SyncAdapter#synchroniseEvents(CaldavFacade, Account, ContentProviderClient, Uri, DavCalendar, SyncStats)
+ * @throws RemoteException
+ */
+/* public boolean tagAndroidEvent() throws RemoteException {
+
+ ContentValues values = new ContentValues();
+ values.put(Event.INTERNALTAG, 1);
+
+ int RowCount = this.mProvider.update(asSyncAdapter(this.getUri(), this.mAccount.name, this.mAccount.type), values, null, null);
+ //Log.e(TAG,"Rows updated: " + RowCount.toString());
+
+ return (RowCount == 1);
+ }*/
+
+/* private static Uri asSyncAdapter(Uri uri, String account, String accountType) {
+ return uri.buildUpon()
+ .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
+ .appendQueryParameter(Calendars.ACCOUNT_NAME, account)
+ .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
+ }*/
+}
+
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/authenticator/AuthenticationService.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/authenticator/AuthenticationService.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.authenticator;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+
+
+public class AuthenticationService extends Service {
+
+ private static final String TAG = "AuthenticationService";
+
+ private Authenticator mAuthenticator;
+
+ @Override
+ public void onCreate() {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "SampleSyncAdapter Authentication Service started.");
+ }
+ mAuthenticator = new Authenticator(this);
+ }
+
+ @Override
+ public void onDestroy() {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "SampleSyncAdapter Authentication Service stopped.");
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "getBinder()... returning the AccountAuthenticator binder for intent "
+ + intent);
+ }
+ return mAuthenticator.getIBinder();
+ }
+}
\ No newline at end of file
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/authenticator/Authenticator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/authenticator/Authenticator.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.authenticator;
+
+
+
+import android.accounts.AbstractAccountAuthenticator;
+import android.accounts.Account;
+import android.accounts.AccountAuthenticatorResponse;
+import android.accounts.AccountManager;
+import android.accounts.NetworkErrorException;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+public class Authenticator extends AbstractAccountAuthenticator {
+
+ private static final String TAG = "Authenticator";
+ private Context mContext;
+
+ public Authenticator(Context context) {
+ super(context);
+
+ mContext = context;
+ }
+
+ @Override
+ public Bundle addAccount(AccountAuthenticatorResponse response,
+ String accountType, String authTokenType,
+ String[] requiredFeatures, Bundle options)
+ throws NetworkErrorException {
+
+
+ Log.v(TAG, "addAccount()");
+
+ final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
+ intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
+ final Bundle bundle = new Bundle();
+ bundle.putParcelable(AccountManager.KEY_INTENT, intent);
+ return bundle;
+
+ }
+
+ @Override
+ public Bundle confirmCredentials(AccountAuthenticatorResponse response,
+ Account account, Bundle options) throws NetworkErrorException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Bundle editProperties(AccountAuthenticatorResponse response,
+ String accountType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Bundle getAuthToken(AccountAuthenticatorResponse response,
+ Account account, String authTokenType, Bundle options)
+ throws NetworkErrorException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getAuthTokenLabel(String authTokenType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Bundle hasFeatures(AccountAuthenticatorResponse response,
+ Account account, String[] features) throws NetworkErrorException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Bundle updateCredentials(AccountAuthenticatorResponse response,
+ Account account, String authTokenType, Bundle options)
+ throws NetworkErrorException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/authenticator/AuthenticatorActivity.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/authenticator/AuthenticatorActivity.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,474 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.authenticator;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.http.conn.HttpHostConnectException;
+import org.gege.caldavsyncadapter.R;
+import org.gege.caldavsyncadapter.caldav.CaldavFacade;
+import org.gege.caldavsyncadapter.caldav.CaldavFacade.TestConnectionResult;
+import org.xml.sax.SAXException;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.AsyncTask;
+import android.os.Build;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.Menu;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+/**
+ * Activity which displays a login screen to the user, offering registration as
+ * well.
+ */
+public class AuthenticatorActivity extends Activity {
+
+ private static final String TAG = "AuthenticatorActivity";
+
+ private static final String ACCOUNT_TYPE = "org.gege.caldavsyncadapter.account";
+
+ public static final String USER_DATA_URL_KEY = "USER_DATA_URL_KEY";
+ public static final String USER_DATA_USERNAME = "USER_DATA_USERNAME";
+ public static final String USER_DATA_VERSION = "USER_DATA_VERSION";
+ public static final String CURRENT_USER_DATA_VERSION = "1";
+
+ public static final String ACCOUNT_NAME_SPLITTER = "@";
+
+ /**
+ * The default email to populate the email field with.
+ */
+ public static final String EXTRA_EMAIL = "com.example.android.authenticatordemo.extra.EMAIL";
+
+ /**
+ * Keep track of the login task to ensure we can cancel it if requested.
+ */
+ private UserLoginTask mAuthTask = null;
+
+ // Values for email and password at the time of the login attempt.
+ private String mUser;
+ private String mPassword;
+ private Context mContext;
+
+ // UI references.
+ private EditText mUserView;
+ private EditText mPasswordView;
+ private View mLoginFormView;
+ private View mLoginStatusView;
+ private TextView mLoginStatusMessageView;
+
+ private AccountManager mAccountManager;
+
+ private String mURL;
+ private EditText mURLView;
+
+ private String mAccountname;
+ private EditText mAccountnameView;
+
+ public AuthenticatorActivity() {
+ super();
+
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mAccountManager = AccountManager.get(this);
+
+ setContentView(R.layout.activity_authenticator);
+
+ // Set up the login form.
+ mUser = getIntent().getStringExtra(EXTRA_EMAIL);
+ mUserView = (EditText) findViewById(R.id.user);
+ mUserView.setText(mUser);
+
+ mContext = getBaseContext();
+
+ mPasswordView = (EditText) findViewById(R.id.password);
+ mPasswordView
+ .setOnEditorActionListener(new TextView.OnEditorActionListener() {
+ @Override
+ public boolean onEditorAction(TextView textView, int id,
+ KeyEvent keyEvent) {
+ if (id == R.id.login || id == EditorInfo.IME_NULL) {
+ attemptLogin();
+ return true;
+ }
+ return false;
+ }
+ });
+
+
+ mURLView = (EditText) findViewById(R.id.url);
+
+ mAccountnameView = (EditText) findViewById(R.id.accountname);
+
+ mLoginFormView = findViewById(R.id.login_form);
+ mLoginStatusView = findViewById(R.id.login_status);
+ mLoginStatusMessageView = (TextView) findViewById(R.id.login_status_message);
+
+ findViewById(R.id.sign_in_button).setOnClickListener(
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ attemptLogin();
+ }
+ });
+
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ super.onCreateOptionsMenu(menu);
+ getMenuInflater().inflate(R.menu.activity_authenticator, menu);
+ return true;
+ }
+
+ /**
+ * Attempts to sign in or register the account specified by the login form.
+ * If there are form errors (invalid email, missing fields, etc.), the
+ * errors are presented and no actual login attempt is made.
+ */
+ public void attemptLogin() {
+ if (mAuthTask != null) {
+ return;
+ }
+
+ // Reset errors.
+ mUserView.setError(null);
+ mPasswordView.setError(null);
+
+ // Store values at the time of the login attempt.
+ mUser = mUserView.getText().toString();
+ mPassword = mPasswordView.getText().toString();
+ mURL = mURLView.getText().toString();
+ mAccountname = mAccountnameView.getText().toString();
+
+ boolean cancel = false;
+ View focusView = null;
+
+ if (!mAccountname.equals("")) {
+ Account TestAccount = new Account(mAccountname, ACCOUNT_TYPE);
+ String TestUrl = mAccountManager.getUserData(TestAccount, AuthenticatorActivity.USER_DATA_URL_KEY);
+ if (TestUrl != null) {
+ mAccountnameView.setError(getString(R.string.error_account_already_in_use));
+ focusView = mAccountnameView;
+ cancel = true;
+ }
+ }
+
+ // Check for a valid password.
+ if (TextUtils.isEmpty(mPassword)) {
+ mPasswordView.setError(getString(R.string.error_field_required));
+ focusView = mPasswordView;
+ cancel = true;
+ } else if (mPassword.length() < 4) {
+ mPasswordView.setError(getString(R.string.error_invalid_password));
+ focusView = mPasswordView;
+ cancel = true;
+ }
+
+ // Check for a valid email address.
+ if (TextUtils.isEmpty(mUser)) {
+ mUserView.setError(getString(R.string.error_field_required));
+ focusView = mUserView;
+ cancel = true;
+ }
+ //else if (!mUser.contains("@")) {
+ // mUserView.setError(getString(R.string.error_invalid_email));
+ // focusView = mUserView;
+ // cancel = true;
+ //}
+
+ if (cancel) {
+ // There was an error; don't attempt login and focus the first
+ // form field with an error.
+ focusView.requestFocus();
+ } else {
+ // Show a progress spinner, and kick off a background task to
+ // perform the user login attempt.
+ mLoginStatusMessageView.setText(R.string.login_progress_signing_in);
+ showProgress(true);
+ mAuthTask = new UserLoginTask();
+ mAuthTask.execute((Void) null);
+ }
+ }
+
+ /**
+ * Shows the progress UI and hides the login form.
+ */
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
+ private void showProgress(final boolean show) {
+ // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
+ // for very easy animations. If available, use these APIs to fade-in
+ // the progress spinner.
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
+ int shortAnimTime = getResources().getInteger(
+ android.R.integer.config_shortAnimTime);
+
+ mLoginStatusView.setVisibility(View.VISIBLE);
+ mLoginStatusView.animate().setDuration(shortAnimTime)
+ .alpha(show ? 1 : 0)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mLoginStatusView.setVisibility(show ? View.VISIBLE
+ : View.GONE);
+ }
+ });
+
+ mLoginFormView.setVisibility(View.VISIBLE);
+ mLoginFormView.animate().setDuration(shortAnimTime)
+ .alpha(show ? 0 : 1)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mLoginFormView.setVisibility(show ? View.GONE
+ : View.VISIBLE);
+ }
+ });
+ } else {
+ // The ViewPropertyAnimator APIs are not available, so simply show
+ // and hide the relevant UI components.
+ mLoginStatusView.setVisibility(show ? View.VISIBLE : View.GONE);
+ mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
+ }
+ }
+
+
+ protected enum LoginResult {
+ MalformedURLException,
+ GeneralSecurityException,
+ UnkonwnException,
+ WrongCredentials,
+ InvalidResponse,
+ WrongUrl,
+ ConnectionRefused,
+ Success_Calendar,
+ Success_Collection,
+ Account_Already_In_Use
+ }
+
+
+ /**
+ * Represents an asynchronous login/registration task used to authenticate
+ * the user.
+ */
+ public class UserLoginTask extends AsyncTask {
+
+ @Override
+ protected LoginResult doInBackground(Void... params) {
+
+ TestConnectionResult result = null;
+
+ try {
+ CaldavFacade facade = new CaldavFacade(mUser, mPassword, mURL);
+ String version = "";
+ try {
+ version = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionName;
+ } catch (NameNotFoundException e) {
+ version = "unknown";
+ e.printStackTrace();
+ }
+ facade.setVersion(version);
+ result = facade.testConnection();
+ Log.i(TAG, "testConnection status="+result);
+ } catch (HttpHostConnectException e) {
+ Log.w(TAG,"testConnection", e);
+ return LoginResult.ConnectionRefused;
+ } catch (MalformedURLException e) {
+ Log.w(TAG,"testConnection", e);
+ return LoginResult.MalformedURLException;
+ } catch (UnsupportedEncodingException e) {
+ Log.w(TAG,"testConnection", e);
+ return LoginResult.UnkonwnException;
+ } catch (ParserConfigurationException e) {
+ Log.w(TAG,"testConnection", e);
+ return LoginResult.UnkonwnException;
+ } catch (SAXException e) {
+ Log.w(TAG,"testConnection", e);
+ return LoginResult.InvalidResponse;
+ } catch (IOException e) {
+ Log.w(TAG,"testConnection", e);
+ return LoginResult.UnkonwnException;
+ } catch (URISyntaxException e) {
+ Log.w(TAG,"testConnection", e);
+ return LoginResult.MalformedURLException;
+ }
+
+ if (result == null) {
+ return LoginResult.UnkonwnException;
+ }
+
+ switch (result) {
+
+ case SUCCESS:
+ boolean OldAccount = false;
+ LoginResult Result = LoginResult.Success_Calendar;
+
+ if (OldAccount) {
+ final Account account = new Account(mUser, ACCOUNT_TYPE);
+ if (mAccountManager.addAccountExplicitly(account, mPassword, null)) {
+ Log.v(TAG,"new account created");
+ mAccountManager.setUserData(account, USER_DATA_URL_KEY, mURL);
+ } else {
+ Log.v(TAG,"no new account created");
+ Result = LoginResult.Account_Already_In_Use;
+ }
+ } else {
+ final Account account;
+ if (mAccountname.equals("")) {
+ account = new Account(mUser + ACCOUNT_NAME_SPLITTER + mURL, ACCOUNT_TYPE);
+ } else {
+ account = new Account(mAccountname, ACCOUNT_TYPE);
+ }
+ if (mAccountManager.addAccountExplicitly(account, mPassword, null)) {
+ Log.v(TAG,"new account created");
+ mAccountManager.setUserData(account, USER_DATA_URL_KEY, mURL);
+ mAccountManager.setUserData(account, USER_DATA_USERNAME, mUser);
+ mAccountManager.setUserData(account, USER_DATA_VERSION, CURRENT_USER_DATA_VERSION);
+ } else {
+ Log.v(TAG,"no new account created");
+ Result = LoginResult.Account_Already_In_Use;
+ }
+ }
+
+ return Result;
+
+ case WRONG_CREDENTIAL:
+ return LoginResult.WrongCredentials;
+
+ case WRONG_SERVER_STATUS:
+ return LoginResult.InvalidResponse;
+
+ case WRONG_URL:
+ return LoginResult.WrongUrl;
+
+ case WRONG_ANSWER:
+ return LoginResult.InvalidResponse;
+
+ default:
+ return LoginResult.UnkonwnException;
+
+ }
+
+ }
+
+
+ @Override
+ protected void onPostExecute(final LoginResult result) {
+ mAuthTask = null;
+ showProgress(false);
+
+ int duration = Toast.LENGTH_SHORT;
+ Toast toast = null;
+
+ switch (result) {
+ case Success_Calendar:
+ toast = Toast.makeText(getApplicationContext(), R.string.success_calendar, duration);
+ toast.show();
+ finish();
+ break;
+
+ case Success_Collection:
+ toast = Toast.makeText(getApplicationContext(), R.string.success_collection, duration);
+ toast.show();
+ finish();
+ break;
+
+ case MalformedURLException:
+
+ toast = Toast.makeText(getApplicationContext(), R.string.error_incorrect_url_format, duration);
+ toast.show();
+ mURLView.setError(getString(R.string.error_incorrect_url_format));
+ mURLView.requestFocus();
+ break;
+ case InvalidResponse:
+ toast = Toast.makeText(getApplicationContext(), R.string.error_invalid_server_answer, duration);
+ toast.show();
+ mURLView.setError(getString(R.string.error_invalid_server_answer));
+ mURLView.requestFocus();
+ break;
+ case WrongUrl:
+ toast = Toast.makeText(getApplicationContext(), R.string.error_wrong_url, duration);
+ toast.show();
+ mURLView.setError(getString(R.string.error_wrong_url));
+ mURLView.requestFocus();
+ break;
+
+ case WrongCredentials:
+ mPasswordView.setError(getString(R.string.error_incorrect_password));
+ mPasswordView.requestFocus();
+ break;
+
+ case ConnectionRefused:
+ toast = Toast.makeText(getApplicationContext(), R.string.error_connection_refused, duration);
+ toast.show();
+ mURLView.setError(getString(R.string.error_connection_refused));
+ mURLView.requestFocus();
+ break;
+ case Account_Already_In_Use:
+ toast = Toast.makeText(getApplicationContext(), R.string.error_account_already_in_use, duration);
+ toast.show();
+ mURLView.setError(getString(R.string.error_account_already_in_use));
+ mURLView.requestFocus();
+ break;
+ default:
+ toast = Toast.makeText(getApplicationContext(), R.string.error_unkown_error, duration);
+ toast.show();
+ mURLView.setError(getString(R.string.error_unkown_error));
+ mURLView.requestFocus();
+ break;
+ }
+
+
+
+
+ }
+
+ @Override
+ protected void onCancelled() {
+ mAuthTask = null;
+ showProgress(false);
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/CaldavFacade.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/CaldavFacade.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,866 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia, David Wiesner, Timo Berger
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.SocketException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.http.HttpException;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpRequestInterceptor;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpVersion;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.AuthState;
+import org.apache.http.auth.AuthenticationException;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.protocol.ClientContext;
+import org.apache.http.conn.HttpHostConnectException;
+import org.apache.http.conn.params.ConnManagerPNames;
+import org.apache.http.conn.params.ConnPerRouteBean;
+import org.apache.http.conn.scheme.PlainSocketFactory;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.AbstractHttpClient;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
+import org.apache.http.params.BasicHttpParams;
+import org.apache.http.params.CoreProtocolPNames;
+import org.apache.http.params.HttpParams;
+import org.apache.http.params.HttpProtocolParams;
+import org.apache.http.protocol.BasicHttpContext;
+import org.apache.http.protocol.HttpContext;
+import org.gege.caldavsyncadapter.BuildConfig;
+import org.gege.caldavsyncadapter.caldav.entities.DavCalendar;
+import org.gege.caldavsyncadapter.caldav.entities.DavCalendar.CalendarSource;
+import org.gege.caldavsyncadapter.caldav.entities.CalendarEvent;
+import org.gege.caldavsyncadapter.caldav.entities.CalendarList;
+import org.gege.caldavsyncadapter.caldav.http.HttpPropFind;
+import org.gege.caldavsyncadapter.caldav.http.HttpReport;
+import org.gege.caldavsyncadapter.caldav.xml.CalendarHomeHandler;
+import org.gege.caldavsyncadapter.caldav.xml.CalendarsHandler;
+import org.gege.caldavsyncadapter.caldav.xml.ServerInfoHandler;
+import org.gege.caldavsyncadapter.syncadapter.notifications.NotificationsHelper;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+import android.accounts.Account;
+import android.content.ContentProviderClient;
+import android.content.Context;
+import android.util.Log;
+
+public class CaldavFacade {
+ private static final String TAG = "CaldavFacade";
+
+ private final static String XML_VERSION = "\n";
+
+ private String USER_AGENT = "CalDAV Sync Adapter (Android) https://github.com/gggard/AndroidCaldavSyncAdapater";
+ private String VERSION = "";
+
+ private static HttpClient httpClient;
+ private HttpContext mContext = null;
+ private AuthState mLastAuthState = null;
+ private AuthScope mLastAuthScope = null;
+
+ private boolean trustAll = true;
+
+ private URL url;
+
+ private static HttpHost targetHost;
+
+ private int lastStatusCode;
+ private String lastETag;
+ private String lastDav;
+
+ private String mstrcHeaderIfMatch = "If-Match";
+ private String mstrcHeaderIfNoneMatch = "If-None-Match";
+
+ private Account mAccount = null;
+ private ContentProviderClient mProvider;
+
+ protected HttpClient getHttpClient() {
+
+ HttpParams params = new BasicHttpParams();
+ params.setParameter(ConnManagerPNames.MAX_TOTAL_CONNECTIONS, 30);
+ params.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new ConnPerRouteBean(30));
+ params.setParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, false);
+ HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
+
+ SchemeRegistry registry = new SchemeRegistry();
+ registry.register(new Scheme("http", new PlainSocketFactory(), 80));
+ registry.register(new Scheme("https", (trustAll ? EasySSLSocketFactory.getSocketFactory() : SSLSocketFactory.getSocketFactory()), 443));
+ DefaultHttpClient client = new DefaultHttpClient(new ThreadSafeClientConnManager(params, registry), params);
+
+ return client;
+ }
+
+ public CaldavFacade(String mUser, String mPassword, String mURL) throws MalformedURLException {
+ url = new URL(mURL);
+
+ httpClient = getHttpClient();
+ UsernamePasswordCredentials upc = new UsernamePasswordCredentials(mUser, mPassword);
+
+ AuthScope as = null;
+ as = new AuthScope(url.getHost(), -1);
+ ((AbstractHttpClient) httpClient).getCredentialsProvider().setCredentials(as, upc);
+
+ mContext = new BasicHttpContext();
+ CredentialsProvider credProvider = ((AbstractHttpClient) httpClient).getCredentialsProvider();
+ mContext.setAttribute(ClientContext.CREDS_PROVIDER, credProvider);
+
+ //http://dlinsin.blogspot.de/2009/08/http-basic-authentication-with-android.html
+ ((AbstractHttpClient) httpClient).addRequestInterceptor(preemptiveAuth, 0);
+
+ String proto = "http";
+ int port = 80;
+
+ if (url.getProtocol().equalsIgnoreCase("https")) {
+ proto = "https";
+ if (url.getPort() == -1)
+ port = 443;
+ else
+ port = url.getPort();
+ }
+
+ if (url.getProtocol().equalsIgnoreCase("http")) {
+ proto = "http";
+ if (url.getPort() == -1)
+ port = 80;
+ else
+ port = url.getPort();
+ }
+ targetHost = new HttpHost(url.getHost(), port, proto);
+ }
+
+ //http://dlinsin.blogspot.de/2009/08/http-basic-authentication-with-android.html
+ HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() {
+ @Override
+ public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
+ AuthState authState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);
+
+ if (authState.getAuthScheme() == null) {
+ if (mLastAuthState != null) {
+ Log.d(TAG, "LastAuthState: restored with user " + mLastAuthState.getCredentials().getUserPrincipal().getName());
+ authState.setAuthScheme(mLastAuthState.getAuthScheme());
+ authState.setCredentials(mLastAuthState.getCredentials());
+ } else {
+ Log.d(TAG, "LastAuthState: nothing to do");
+ }
+ if (mLastAuthScope != null) {
+ authState.setAuthScope(mLastAuthScope);
+ Log.d(TAG, "LastAuthScope: restored");
+ } else {
+ Log.d(TAG, "LastAuthScope: nothing to do");
+ }
+ } else {
+ //AuthState and AuthScope have to be saved separate because of the AuthScope within AuthState gets lost, so we save it in a separate var.
+ mLastAuthState = authState;
+ Log.d(TAG, "LastAuthState: new with user " + mLastAuthState.getCredentials().getUserPrincipal().getName());
+ if (authState.getAuthScope() != null) {
+ mLastAuthScope = authState.getAuthScope();
+ Log.d(TAG, "LastAuthScope: new");
+ }
+ }
+ }
+ };
+
+ public enum TestConnectionResult {
+ WRONG_CREDENTIAL,
+ WRONG_URL,
+ WRONG_SERVER_STATUS,
+ WRONG_ANSWER,
+ SUCCESS
+ }
+
+ /**
+ * TODO: testConnection should return only an instance of
+ * TestConnectionResult without throwing an exception or only throw checked
+ * exceptions so you don't have to check the result of this function AND
+ * handle the exceptions
+ * @param context
+ *
+ * @return {@link TestConnectionResult}
+ * @throws HttpHostConnectException
+ * @throws IOException
+ * @throws URISyntaxException
+ * @throws ParserConfigurationException
+ * @throws SAXException
+ */
+ public TestConnectionResult testConnection() throws HttpHostConnectException, IOException, URISyntaxException, ParserConfigurationException, SAXException {
+ Log.d(TAG, "start testConnection ");
+ try {
+ List calendars = new ArrayList();
+ calendars = forceGetCalendarsFromUri(null, url.toURI());
+ if (calendars.size() != 0) {
+ return TestConnectionResult.SUCCESS;
+ }
+
+ URI userPrincipal = getUserPrincipal();
+ List calendarSets = getCalendarHomes(userPrincipal);
+ for (URI calendarSet : calendarSets) {
+ List calendarSetCalendars = getCalendarsFromSet(calendarSet);
+ calendars.addAll(calendarSetCalendars);
+ }
+ if (calendarSets.size() == 0) {
+ return TestConnectionResult.WRONG_ANSWER;
+ }
+ } catch (FileNotFoundException e) {
+ return TestConnectionResult.WRONG_URL;
+ } catch (SocketException e) {
+ return TestConnectionResult.WRONG_URL;
+ } catch (AuthenticationException e) {
+ return TestConnectionResult.WRONG_CREDENTIAL;
+ } catch (ClientProtocolException e) {
+ return TestConnectionResult.WRONG_SERVER_STATUS;
+ } catch (CaldavProtocolException e) {
+ return TestConnectionResult.WRONG_ANSWER;
+ }
+ return TestConnectionResult.SUCCESS;
+ }
+
+ /**
+ * @param context May be null if no notification is needed
+ * @param uri
+ * @return
+ * @throws AuthenticationException
+ * @throws FileNotFoundException
+ */
+ private List forceGetCalendarsFromUri(Context context, URI uri) throws AuthenticationException, FileNotFoundException {
+ List calendars = new ArrayList();
+ Exception exception = null;
+ try {
+ calendars = getCalendarsFromSet(uri);
+ } catch (ClientProtocolException e) {
+ if (context != null) {
+ NotificationsHelper.signalSyncErrors(context, "Caldav sync problem", e.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(e);
+ }
+ exception = e;
+ } catch (FileNotFoundException e) {
+ if (context != null) {
+ NotificationsHelper.signalSyncErrors(context, "Caldav sync problem", e.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(e);
+ }
+ throw e;
+ } catch (IOException e) {
+ if (context != null) {
+ NotificationsHelper.signalSyncErrors(context, "Caldav sync problem", e.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(e);
+ }
+ exception = e;
+ } catch (CaldavProtocolException e) {
+
+ if (context != null) {
+ NotificationsHelper.signalSyncErrors(context, "Caldav sync problem", e.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(e);
+ }
+ exception = e;
+ }
+ if (exception != null && BuildConfig.DEBUG) {
+ Log.e(TAG, "Force get calendars from '" + uri.toString()
+ + "' failed " + exception.getClass().getCanonicalName()
+ + ": " + exception.getMessage());
+ }
+ return calendars;
+ }
+
+ private final static String PROPFIND_USER_PRINCIPAL = XML_VERSION +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "";
+
+ private URI getUserPrincipal() throws SocketException,
+ ClientProtocolException, AuthenticationException,
+ FileNotFoundException, IOException, CaldavProtocolException,
+ URISyntaxException {
+ URI uri = this.url.toURI();
+ HttpPropFind request = createPropFindRequest(uri,
+ PROPFIND_USER_PRINCIPAL, 0);
+ HttpResponse response = httpClient.execute(targetHost, request, mContext);
+ checkStatus(response);
+ ServerInfoHandler serverInfoHandler = new ServerInfoHandler();
+ parseXML(response, serverInfoHandler);
+ String userPrincipal = null;
+ if (serverInfoHandler.currentUserPrincipal != null) {
+ userPrincipal = serverInfoHandler.currentUserPrincipal;
+ } else if (serverInfoHandler.principalUrl != null) {
+ userPrincipal = serverInfoHandler.principalUrl;
+ } else {
+ throw new CaldavProtocolException("no principal url found");
+ }
+ try {
+ URI userPrincipalUri = new URI(userPrincipal);
+ userPrincipalUri = uri.resolve(userPrincipalUri);
+ if (BuildConfig.DEBUG) {
+ Log.d(TAG,
+ "Found userPrincipal: " + userPrincipalUri.toString());
+ }
+ return userPrincipalUri;
+ } catch (URISyntaxException e) {
+ throw new CaldavProtocolException("principal url '" + userPrincipal
+ + "' malformed");
+ }
+ }
+
+ private final static String PROPFIND_CALENDAR_HOME_SET = XML_VERSION
+ + "";
+
+ private List getCalendarHomes(URI userPrincipal)
+ throws ClientProtocolException, IOException,
+ AuthenticationException, FileNotFoundException,
+ CaldavProtocolException {
+ HttpPropFind request = createPropFindRequest(userPrincipal,
+ PROPFIND_CALENDAR_HOME_SET, 0);
+ HttpResponse response = httpClient.execute(targetHost, request, mContext);
+ checkStatus(response);
+ CalendarHomeHandler calendarHomeHandler = new CalendarHomeHandler(
+ userPrincipal);
+ parseXML(response, calendarHomeHandler);
+ List result = calendarHomeHandler.calendarHomeSet;
+ if (BuildConfig.DEBUG) {
+ Log.d(TAG, result.size() + " calendar-home-set found in "
+ + userPrincipal.toString());
+ }
+ return result;
+ }
+
+ private final static String PROPFIND_CALENDER_LIST = XML_VERSION
+ + ""
+ + ""
+ // +
+ // ""
+ // +
+ // "
+ + ""
+ //"
+ + "";
+
+
+ private List getCalendarsFromSet(URI calendarSet)
+ throws ClientProtocolException, IOException,
+ CaldavProtocolException, AuthenticationException,
+ FileNotFoundException {
+ HttpPropFind request = createPropFindRequest(calendarSet, PROPFIND_CALENDER_LIST, 1);
+ HttpResponse response = httpClient.execute(targetHost, request, mContext);
+ checkStatus(response);
+ CalendarsHandler calendarsHandler = new CalendarsHandler(calendarSet);
+ parseXML(response, calendarsHandler);
+ List result = calendarsHandler.calendars;
+ if (BuildConfig.DEBUG) {
+ Log.i(TAG,
+ result.size() + " calendars found in set "
+ + calendarSet.toString());
+ }
+ return result;
+ }
+
+ /**
+ * Discover CalDAV Calendars Mentioned in
+ * http://tools.ietf.org/html/draft-daboo-srv-caldav-10#section-6 and
+ * http://code.google.com/p/sabredav/wiki/BuildingACalDAVClient#Discovery
+ *
+ * - PROPFIND calendar-home-set on url
+ *
- PROPFIND DAV:current-user-principal or principal-URL on url
+ *
- PROPFIND calendar-home-set on current-user-principal or principal-URL
+ *
- PROPFIND displayname, resourcetype, getctag on CalendarHomeSets
+ *
+ * @param context
+ *
+ * @return List of {@link DavCalendar}
+ * @throws ClientProtocolException
+ * http protocol error
+ * @throws IOException
+ * Connection lost
+ * @throws URISyntaxException
+ * url in Constructor malformed
+ * @throws CaldavProtocolException
+ * caldav protocol error
+ */
+ //public Iterable getCalendarList(Context context) throws ClientProtocolException,
+ public CalendarList getCalendarList(Context context) throws ClientProtocolException,
+ IOException, URISyntaxException, ParserConfigurationException,
+ CaldavProtocolException {
+ try {
+ CalendarList Result = new CalendarList(this.mAccount, this.mProvider, CalendarSource.CalDAV, this.url.toString());
+ List calendars = new ArrayList();
+
+ calendars = forceGetCalendarsFromUri(context, this.url.toURI());
+
+ if (calendars.size() == 0) {
+ // no calendars found, try the home-set
+ URI userPrincipal = getUserPrincipal();
+ List calendarSets = getCalendarHomes(userPrincipal);
+ for (URI calendarSet : calendarSets) {
+ List calendarSetCalendars = getCalendarsFromSet(calendarSet);
+ calendars.addAll(calendarSetCalendars);
+ }
+ }
+ for (DavCalendar cal : calendars) {
+ Result.addCalendar(cal);
+ }
+
+ //return calendars;
+ return Result;
+ } catch (AuthenticationException e) {
+ throw new IOException(e);
+ }
+ }
+
+ //public Iterable getCalendarEvents(DavCalendar calendar)
+ public ArrayList getCalendarEvents(DavCalendar calendar)
+ throws URISyntaxException, ClientProtocolException, IOException,
+ ParserConfigurationException, SAXException {
+
+ ArrayList calendarEventList = new ArrayList();
+
+ String requestBody = ""
+ + "" + "" + ""
+ + "" + "";
+
+ HttpPropFind request = null;
+
+ String EventUri;
+
+ /*request = new HttpPropFind();
+ request.setURI(calendar.getURI());
+ request.setHeader("Host", targetHost.getHostName());
+ request.setHeader("Depth", "1");
+ request.setHeader("Content-Type", "application/xml;charset=\"UTF-8\"");
+
+ try {
+ request.setEntity(new StringEntity(requestBody, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ throw new AssertionError("UTF-8 is unknown");
+ }*/
+ request = this.createPropFindRequest(calendar.getURI(), requestBody, 1);
+
+ Log.d(TAG, "Getting eTag by PROPFIND at " + request.getURI());
+
+ HttpResponse response = httpClient.execute(targetHost, request, mContext);
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ response.getEntity().getContent(), "UTF-8"));
+
+ String line;
+ String body = "";
+ do {
+ line = reader.readLine();
+ if (line != null)
+ body += line;
+ } while (line != null);
+
+ Log.d(TAG, "HttpResponse status=" + response.getStatusLine()
+ + " body= " + body);
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document dom = builder.parse(new InputSource(new ByteArrayInputStream(
+ body.getBytes("utf-8"))));
+ Element root = dom.getDocumentElement();
+ NodeList items = root.getElementsByTagNameNS("*", "getetag");
+
+ for (int i = 0; i < items.getLength(); i++) {
+ CalendarEvent calendarEvent = new CalendarEvent(this.mAccount, this.mProvider);
+
+ Node node = items.item(i);
+
+ if (node.getTextContent().trim().length() == 0)
+ continue; // not an event
+
+ calendarEvent.setETag(node.getTextContent().trim());
+ //calendarEvent.calendarURL = this.url;
+ calendarEvent.calendarURL = calendar.getURI().toURL();
+
+ node = node.getParentNode(); // prop
+ node = node.getParentNode(); // propstat
+ node = node.getParentNode(); // response
+
+ NodeList children = node.getChildNodes();
+ for (int j = 0; j < children.getLength(); j++) {
+ Node childNode = children.item(j);
+ if ((childNode.getLocalName()!=null) && (childNode.getLocalName().equalsIgnoreCase("href"))) {
+ EventUri = childNode.getTextContent().trim();
+ //HINT: bugfix for zimbra calendar: replace("@", "%40")
+ EventUri = EventUri.replace("@", "%40");
+ calendarEvent.setUri(new URI(EventUri));
+ }
+ }
+
+ calendarEventList.add(calendarEvent);
+
+ }
+
+ return calendarEventList;
+ }
+
+ private void parseXML(HttpResponse response, ContentHandler contentHandler)
+ throws IOException, CaldavProtocolException {
+ InputStream is = response.getEntity().getContent();
+ /*BufferedReader bReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+ String Content = "";
+ String Line = bReader.readLine();
+
+ while (Line != null) {
+ Content += Line;
+ Line = bReader.readLine();
+ }*/
+
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ try {
+ SAXParser parser = factory.newSAXParser();
+ XMLReader reader = parser.getXMLReader();
+ reader.setContentHandler(contentHandler);
+ reader.parse(new InputSource(is));
+ } catch (ParserConfigurationException e) {
+ throw new AssertionError("ParserConfigurationException "
+ + e.getMessage());
+ } catch (IllegalStateException e) {
+ throw new CaldavProtocolException(e.getMessage());
+ } catch (SAXException e) {
+ throw new CaldavProtocolException(e.getMessage());
+ }
+ }
+
+ private void checkStatus(HttpResponse response)
+ throws AuthenticationException, FileNotFoundException,
+ ClientProtocolException {
+ final int statusCode = response.getStatusLine().getStatusCode();
+ lastStatusCode = statusCode;
+ if (response.containsHeader("ETag"))
+ lastETag = response.getFirstHeader("ETag").getValue();
+ else
+ lastETag = "";
+ if (response.containsHeader("DAV"))
+ lastDav = response.getFirstHeader("DAV").getValue();
+ else
+ lastDav = "";
+
+ switch (statusCode) {
+ case 401:
+ throw new AuthenticationException();
+ case 404:
+ throw new FileNotFoundException();
+ case 409: //Conflict
+ case 412:
+ case 200:
+ case 201:
+ case 204:
+ case 207:
+ return;
+ default:
+ throw new ClientProtocolException("StatusCode: " + statusCode);
+ }
+ }
+
+ private HttpPropFind createPropFindRequest(URI uri, String data, int depth) {
+ HttpPropFind request = new HttpPropFind();
+
+ request.setURI(uri);
+ //request.setHeader("Host", targetHost.getHostName());
+ request.setHeader("Host", targetHost.getHostName() + ":" + String.valueOf(targetHost.getPort()));
+ request.setHeader("Depth", Integer.toString(depth));
+ request.setHeader("Content-Type", "application/xml;charset=\"UTF-8\"");
+ try {
+ request.setEntity(new StringEntity(data, "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ throw new AssertionError("UTF-8 is unknown");
+ }
+ return request;
+ }
+
+ private HttpDelete createDeleteRequest(URI uri) {
+ HttpDelete request = new HttpDelete();
+ request.setURI(uri);
+ //request.setHeader("Host", targetHost.getHostName());
+ request.setHeader("Host", targetHost.getHostName() + ":" + String.valueOf(targetHost.getPort()));
+ request.setHeader("Content-Type", "application/xml;charset=\"UTF-8\"");
+ return request;
+ }
+
+ private HttpPut createPutRequest(URI uri, String data, int depth) {
+ HttpPut request = new HttpPut();
+ request.setURI(uri);
+ //request.setHeader("Host", targetHost.getHostName());
+ request.setHeader("Host", targetHost.getHostName() + ":" + String.valueOf(targetHost.getPort()));
+ //request.setHeader("Content-Type", "application/xml;charset=\"UTF-8\"");
+ request.setHeader("Content-Type", "text/calendar; charset=UTF-8");
+ try {
+ request.setEntity(new StringEntity(data, "UTF-8"));
+ //request.setEntity(new StringEntity(data));
+ } catch (UnsupportedEncodingException e) {
+ throw new AssertionError("UTF-8 is unknown");
+ }
+ return request;
+ }
+
+ private static HttpReport createReportRequest(URI uri, String data, int depth) {
+ HttpReport request = new HttpReport();
+ request.setURI(uri);
+ //request.setHeader("Host", targetHost.getHostName());
+ request.setHeader("Host", targetHost.getHostName() + ":" + String.valueOf(targetHost.getPort()));
+ request.setHeader("Depth", Integer.toString(depth));
+ request.setHeader("Content-Type", "application/xml;charset=\"UTF-8\"");
+ //request.setHeader("Content-Type", "text/xml;charset=\"UTF-8\"");
+ try {
+ request.setEntity(new StringEntity(data));
+ } catch (UnsupportedEncodingException e) {
+ throw new AssertionError("UTF-8 is unknown");
+ }
+ return request;
+ }
+
+ public static void fetchEvent_old(CalendarEvent calendarEvent)
+ throws ClientProtocolException, IOException {
+ HttpGet request = null;
+
+ request = new HttpGet();
+ request.setURI(calendarEvent.getUri());
+ request.setHeader("Host", targetHost.getHostName());
+ request.setHeader("Content-Type", "application/xml;charset=\"UTF-8\"");
+
+ HttpResponse response = httpClient.execute(targetHost, request);
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ response.getEntity().getContent(), "UTF-8"));
+
+ String line;
+ String body = "";
+ do {
+ line = reader.readLine();
+ if (line != null)
+ body += line + "\n";
+ } while (line != null);
+
+ calendarEvent.setICSasString(body);
+
+ Log.d(TAG, "HttpResponse GET event status=" + response.getStatusLine()
+ + " body= " + body);
+ }
+
+ public static boolean getEvent(CalendarEvent calendarEvent) throws ClientProtocolException, IOException {
+ boolean Result = false;
+ HttpReport request = null;
+
+ //HINT: bugfix for google calendar: replace("@", "%40")
+ String data = XML_VERSION +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" + calendarEvent.getUri().getRawPath().replace("@", "%40") + "" +
+ "";
+
+ URI calendarURI = null;
+ try {
+ calendarURI = calendarEvent.calendarURL.toURI();
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+ //request = createReportRequest(calendarEvent.getUri(), data, 1);
+ request = createReportRequest(calendarURI, data, 1);
+
+ HttpResponse response = httpClient.execute(targetHost, request);
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ response.getEntity().getContent(), "UTF-8"));
+
+ String line;
+ String body = "";
+ do {
+ line = reader.readLine();
+ if (line != null)
+ body += line + "\n";
+ } while (line != null);
+
+ if (calendarEvent.setICSasMultiStatus(body))
+ Result = true;
+
+ return Result;
+ }
+
+
+ /**
+ * sends a update event request to the server
+ * @param uri the full URI of the event on server side. example: http://caldav.example.com/principal/user/calendar/e6be67c6-eff0-44f8-a1a0-6c2cb1029944-caldavsyncadapter.ics
+ * @param data the full ical-data for the event
+ * @param ETag the ETAG of this event is send within the "If-Match" Parameter to tell the server only to update this version
+ * @return
+ */
+ public boolean updateEvent(URI uri, String data, String ETag) {
+ boolean Result = false;
+
+ try {
+ HttpPut request = createPutRequest(uri, data, 1);
+ request.addHeader(mstrcHeaderIfMatch, ETag);
+ HttpResponse response = httpClient.execute(targetHost, request, mContext);
+ checkStatus(response);
+ if ((lastStatusCode == 200) || (lastStatusCode == 201) || (lastStatusCode == 204)) {
+ Result = true;
+ } else if (lastStatusCode == 412) {
+ //Precondition failed
+ Result = false;
+ } else if (lastStatusCode == 409) {
+ //Conflict
+ Result = false;
+ } else {
+ Log.w(TAG, "Unkown StatusCode during creation of an event");
+ }
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (AuthenticationException e) {
+ e.printStackTrace();
+ }
+ return Result;
+ }
+
+ /**
+ * sends a create event request to server
+ * @param uri the full URI of the new event on server side. example: http://caldav.example.com/principal/user/calendar/e6be67c6-eff0-44f8-a1a0-6c2cb1029944-caldavsyncadapter.ics
+ * @param data the full ical-data for the new event
+ * @return success of this function
+ */
+ public boolean createEvent(URI uri, String data) {
+ boolean Result = false;
+
+ try {
+ HttpPut request = createPutRequest(uri, data, 1);
+ request.addHeader(mstrcHeaderIfNoneMatch, "*");
+ HttpResponse response = httpClient.execute(targetHost, request, mContext);
+ checkStatus(response);
+ if (lastStatusCode == 201) {
+ Result = true;
+ } else {
+ Log.w(TAG, "Unkown StatusCode during creation of an event");
+ }
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (AuthenticationException e) {
+ e.printStackTrace();
+ }
+ return Result;
+ }
+
+ /**
+ * sends a delete event request to the server
+ * @param calendarEventUri the full URI of the event on server side. example: http://caldav.example.com/principal/user/calendar/e6be67c6-eff0-44f8-a1a0-6c2cb1029944-caldavsyncadapter.ics
+ * @param ETag the ETAG of this event is send within the "If-Match" Parameter to tell the server only to delete this version
+ * @return success of this function
+ */
+ public boolean deleteEvent(URI calendarEventUri, String ETag) {
+ boolean Result = false;
+
+ try {
+ HttpDelete request = createDeleteRequest(calendarEventUri);
+ request.addHeader(mstrcHeaderIfMatch, ETag);
+ HttpResponse response = httpClient.execute(targetHost, request, mContext);
+ checkStatus(response);
+ if ((lastStatusCode == 204) || (lastStatusCode == 200)) {
+ Result = true;
+ } else {
+ Log.w(TAG, "Unkown StatusCode during deletion of an event");
+ }
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ if (lastStatusCode == 404) {
+ //the event has already been deleted on server side. no action needed
+ Result = true;
+ } else {
+ e.printStackTrace();
+ }
+ } catch (AuthenticationException e) {
+ e.printStackTrace();
+ }
+
+ return Result;
+ }
+
+ /**
+ * returns the ETAG send by the last server response.
+ * @return the ETAG
+ */
+ public String getLastETag() {
+ return lastETag;
+ }
+
+ /**
+ * returns the DAV-Options send by the last server response.
+ * @return the DAV-Options
+ */
+ public String getLastDav() {
+ return lastDav;
+ }
+
+ public void setVersion(String version) {
+ VERSION = version;
+ ((AbstractHttpClient) httpClient).getParams().setParameter(CoreProtocolPNames.USER_AGENT, this.USER_AGENT + " Version:" + VERSION);
+ }
+
+ public void setAccount(Account account) {
+ this.mAccount = account;
+ }
+ public void setProvider(ContentProviderClient provider) {
+ this.mProvider = provider;
+ }
+}
\ No newline at end of file
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/CaldavProtocolException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/CaldavProtocolException.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,35 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav;
+
+public class CaldavProtocolException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8237099919427898671L;
+
+ public CaldavProtocolException(String string) {
+ super(string);
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/CopyOfEasySSLSocketFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/CopyOfEasySSLSocketFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.UnknownHostException;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.TrustManager;
+
+import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.conn.scheme.LayeredSocketFactory;
+import org.apache.http.conn.scheme.SocketFactory;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
+
+/**
+ * This socket factory will create ssl socket that accepts self signed
+ * certificate
+ *
+ * @author olamy
+ * @version $Id: EasySSLSocketFactory.java 765355 2009-04-15 20:59:07Z evenisse
+ * $
+ * @since 1.2.3
+ */
+public class CopyOfEasySSLSocketFactory implements SocketFactory,
+ LayeredSocketFactory {
+
+ private SSLContext sslcontext = null;
+
+ private static SSLContext createEasySSLContext() throws IOException {
+ try {
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, new TrustManager[] { new EasyX509TrustManager(
+ null) }, null);
+ return context;
+ } catch (Exception e) {
+ throw new IOException(e.getMessage());
+ }
+ }
+
+ private SSLContext getSSLContext() throws IOException {
+ if (this.sslcontext == null) {
+ this.sslcontext = createEasySSLContext();
+ }
+ return this.sslcontext;
+ }
+
+ /**
+ * @see org.apache.http.conn.scheme.SocketFactory#connectSocket(java.net.Socket,
+ * java.lang.String, int, java.net.InetAddress, int,
+ * org.apache.http.params.HttpParams)
+ */
+ public Socket connectSocket(Socket sock, String host, int port,
+ InetAddress localAddress, int localPort, HttpParams params)
+ throws IOException, UnknownHostException, ConnectTimeoutException {
+ int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
+ int soTimeout = HttpConnectionParams.getSoTimeout(params);
+
+ InetSocketAddress remoteAddress = new InetSocketAddress(host, port);
+ SSLSocket sslsock = (SSLSocket) ((sock != null) ? sock : createSocket());
+
+ if ((localAddress != null) || (localPort > 0)) {
+ // we need to bind explicitly
+ if (localPort < 0) {
+ localPort = 0; // indicates "any"
+ }
+ InetSocketAddress isa = new InetSocketAddress(localAddress,
+ localPort);
+ sslsock.bind(isa);
+ }
+
+ sslsock.connect(remoteAddress, connTimeout);
+ sslsock.setSoTimeout(soTimeout);
+ return sslsock;
+
+ }
+
+ /**
+ * @see org.apache.http.conn.scheme.SocketFactory#createSocket()
+ */
+ public Socket createSocket() throws IOException {
+ return getSSLContext().getSocketFactory().createSocket();
+ }
+
+ /**
+ * @see org.apache.http.conn.scheme.SocketFactory#isSecure(java.net.Socket)
+ */
+ public boolean isSecure(Socket socket) throws IllegalArgumentException {
+ return true;
+ }
+
+ /**
+ * @see org.apache.http.conn.scheme.LayeredSocketFactory#createSocket(java.net.Socket,
+ * java.lang.String, int, boolean)
+ */
+ public Socket createSocket(Socket socket, String host, int port,
+ boolean autoClose) throws IOException, UnknownHostException {
+ return getSSLContext().getSocketFactory().createSocket();
+ }
+
+ // -------------------------------------------------------------------
+ // javadoc in org.apache.http.conn.scheme.SocketFactory says :
+ // Both Object.equals() and Object.hashCode() must be overridden
+ // for the correct operation of some connection managers
+ // -------------------------------------------------------------------
+
+ public boolean equals(Object obj) {
+ return ((obj != null) && obj.getClass().equals(
+ CopyOfEasySSLSocketFactory.class));
+ }
+
+ public int hashCode() {
+ return CopyOfEasySSLSocketFactory.class.hashCode();
+ }
+
+}
\ No newline at end of file
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/EasySSLSocketFactory.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/EasySSLSocketFactory.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.http.conn.ConnectTimeoutException;
+import org.apache.http.conn.scheme.LayeredSocketFactory;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
+
+import android.util.Log;
+
+
+
+public final class EasySSLSocketFactory implements
+ LayeredSocketFactory {
+
+ private static final String TAG = "TrustAllSSLSocketFactory";
+
+ private static final EasySSLSocketFactory DEFAULT_FACTORY = new EasySSLSocketFactory();
+
+ public static EasySSLSocketFactory getSocketFactory() {
+ return DEFAULT_FACTORY;
+ }
+
+ private SSLContext sslcontext;
+ private javax.net.ssl.SSLSocketFactory socketfactory;
+
+ private EasySSLSocketFactory() {
+ super();
+ TrustManager[] tm = new TrustManager[] { new X509TrustManager() {
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain,
+ String authType) throws CertificateException {
+ // do nothing
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain,
+ String authType) throws CertificateException {
+ // do nothing
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[0];
+ }
+
+ } };
+ try {
+ this.sslcontext = SSLContext.getInstance(SSLSocketFactory.TLS);
+ this.sslcontext.init(null, tm, new SecureRandom());
+ this.socketfactory = this.sslcontext.getSocketFactory();
+ } catch ( NoSuchAlgorithmException e ) {
+ Log.e(TAG,
+ "Faild to instantiate TrustAllSSLSocketFactory!", e);
+ } catch ( KeyManagementException e ) {
+ Log.e(TAG,
+ "Failed to instantiate TrustAllSSLSocketFactory!", e);
+ }
+ }
+
+ @Override
+ public Socket createSocket(Socket socket, String host, int port,
+ boolean autoClose) throws IOException, UnknownHostException {
+ SSLSocket sslSocket = (SSLSocket) this.socketfactory.createSocket(
+ socket, host, port, autoClose);
+ return sslSocket;
+ }
+
+ @Override
+ public Socket connectSocket(Socket sock, String host, int port,
+ InetAddress localAddress, int localPort, HttpParams params)
+ throws IOException, UnknownHostException, ConnectTimeoutException {
+ if ( host == null ) {
+ throw new IllegalArgumentException(
+ "Target host may not be null.");
+ }
+ if ( params == null ) {
+ throw new IllegalArgumentException(
+ "Parameters may not be null.");
+ }
+
+ SSLSocket sslsock = (SSLSocket) ( ( sock != null ) ? sock
+ : createSocket() );
+
+ if ( ( localAddress != null ) || ( localPort > 0 ) ) {
+
+ // we need to bind explicitly
+ if ( localPort < 0 ) {
+ localPort = 0; // indicates "any"
+ }
+
+ InetSocketAddress isa = new InetSocketAddress(localAddress,
+ localPort);
+ sslsock.bind(isa);
+ }
+
+ int connTimeout = HttpConnectionParams.getConnectionTimeout(params);
+ int soTimeout = HttpConnectionParams.getSoTimeout(params);
+
+ InetSocketAddress remoteAddress;
+ remoteAddress = new InetSocketAddress(host, port);
+
+ sslsock.connect(remoteAddress, connTimeout);
+
+ sslsock.setSoTimeout(soTimeout);
+
+ return sslsock;
+ }
+
+ @Override
+ public Socket createSocket() throws IOException {
+ // the cast makes sure that the factory is working as expected
+ return (SSLSocket) this.socketfactory.createSocket();
+ }
+
+ @Override
+ public boolean isSecure(Socket sock) throws IllegalArgumentException {
+ return true;
+ }
+
+}
\ No newline at end of file
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/EasyX509TrustManager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/EasyX509TrustManager.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,114 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+
+/**
+ * @author olamy
+ * @version $Id: EasyX509TrustManager.java 765355 2009-04-15 20:59:07Z evenisse $
+ * @since 1.2.3
+ */
+public class EasyX509TrustManager
+ implements X509TrustManager
+{
+
+ private X509TrustManager standardTrustManager = null;
+
+ /**
+ * Constructor for EasyX509TrustManager.
+ */
+ public EasyX509TrustManager( KeyStore keystore )
+ throws NoSuchAlgorithmException, KeyStoreException
+ {
+ super();
+ TrustManagerFactory factory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm() );
+ factory.init( keystore );
+ TrustManager[] trustmanagers = factory.getTrustManagers();
+ if ( trustmanagers.length == 0 )
+ {
+ throw new NoSuchAlgorithmException( "no trust manager found" );
+ }
+ this.standardTrustManager = (X509TrustManager) trustmanagers[0];
+ }
+
+ /**
+ * @see javax.net.ssl.X509TrustManager#checkClientTrusted(X509Certificate[],String authType)
+ */
+ public void checkClientTrusted( X509Certificate[] certificates, String authType )
+ throws CertificateException
+ {
+ standardTrustManager.checkClientTrusted( certificates, authType );
+ }
+
+ /**
+ * @see javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[],String authType)
+ */
+ public void checkServerTrusted( X509Certificate[] certificates, String authType )
+ throws CertificateException
+ {
+ if ( ( certificates != null ) && ( certificates.length == 1 ) )
+ {
+ certificates[0].checkValidity();
+ }
+ else
+ {
+ standardTrustManager.checkServerTrusted( certificates, authType );
+ }
+ }
+
+ /**
+ * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
+ */
+ public X509Certificate[] getAcceptedIssuers()
+ {
+ return this.standardTrustManager.getAcceptedIssuers();
+ }
+
+}
\ No newline at end of file
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/entities/CalendarEvent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/entities/CalendarEvent.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,1068 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia, Timo Berger
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav.entities;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.text.ParseException;
+import java.util.ArrayList;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import net.fortuna.ical4j.data.CalendarBuilder;
+import net.fortuna.ical4j.data.ParserException;
+import net.fortuna.ical4j.model.Calendar;
+import net.fortuna.ical4j.model.Component;
+import net.fortuna.ical4j.model.ComponentList;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.Dur;
+import net.fortuna.ical4j.model.Parameter;
+import net.fortuna.ical4j.model.ParameterList;
+import net.fortuna.ical4j.model.Property;
+import net.fortuna.ical4j.model.PropertyList;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.component.VTimeZone;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.CuType;
+import net.fortuna.ical4j.model.parameter.PartStat;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.property.Clazz;
+import net.fortuna.ical4j.model.property.Status;
+import net.fortuna.ical4j.util.CompatibilityHints;
+
+import org.apache.http.client.ClientProtocolException;
+import org.gege.caldavsyncadapter.Event;
+import org.gege.caldavsyncadapter.android.entities.AndroidEvent;
+import org.gege.caldavsyncadapter.caldav.CaldavFacade;
+import org.gege.caldavsyncadapter.caldav.CaldavProtocolException;
+import org.gege.caldavsyncadapter.caldav.xml.MultiStatusHandler;
+import org.gege.caldavsyncadapter.caldav.xml.sax.MultiStatus;
+import org.gege.caldavsyncadapter.caldav.xml.sax.Prop;
+import org.gege.caldavsyncadapter.caldav.xml.sax.PropStat;
+import org.gege.caldavsyncadapter.caldav.xml.sax.Response;
+import org.gege.caldavsyncadapter.syncadapter.SyncAdapter;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+import android.accounts.Account;
+import android.content.ContentProviderClient;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.SyncStats;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.RemoteException;
+import android.provider.CalendarContract.Attendees;
+import android.provider.CalendarContract.Calendars;
+import android.provider.CalendarContract.Events;
+import android.provider.CalendarContract.Reminders;
+import android.util.Log;
+
+
+
+public class CalendarEvent extends org.gege.caldavsyncadapter.Event {
+ private static final String TAG = "CalendarEvent";
+
+ private String stringIcs;
+
+ private Calendar calendar;
+
+ private Component calendarComponent;
+
+ private String eTag;
+ private URI muri;
+ private Uri mAndroidEventUri;
+ public URL calendarURL;
+
+ private boolean mAllDay = false;
+ private VTimeZone mVTimeZone = null;
+ private TimeZone mTimeZone = null;
+
+ private String mstrTimeZoneStart = "";
+ private String mstrTimeZoneEnd = "";
+
+ private Account mAccount = null;
+ private ContentProviderClient mProvider = null;
+
+ public CalendarEvent(Account account, ContentProviderClient provider) {
+ this.mAccount = account;
+ this.mProvider = provider;
+ }
+
+ public String getETag() {
+ return eTag;
+ }
+
+ public void setETag(String eTag) {
+ this.eTag = eTag;
+ }
+
+ public URI getUri() {
+ return muri;
+ }
+
+ public void setUri(URI uri) {
+ this.muri = uri;
+ }
+
+ public void setICSasString(String ics) {
+ this.stringIcs = ics;
+ }
+
+ public boolean setICSasMultiStatus(String stringMultiStatus) {
+ boolean Result = false;
+ String ics = "";
+ MultiStatus multistatus;
+ ArrayList responselist;
+ Response response;
+ PropStat propstat;
+ Prop prop;
+ try {
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ SAXParser parser = factory.newSAXParser();
+ XMLReader reader = parser.getXMLReader();
+ MultiStatusHandler contentHandler = new MultiStatusHandler();
+ reader.setContentHandler(contentHandler);
+ reader.parse(new InputSource(new StringReader(stringMultiStatus)));
+
+ multistatus = contentHandler.mMultiStatus;
+ if (multistatus != null) {
+ responselist = multistatus.ResponseList;
+ if (responselist.size() == 1) {
+ response = responselist.get(0);
+ //HINT: bugfix for google calendar, zimbra replace("@", "%40")
+ if (response.href.replace("@", "%40").equals(this.getUri().getRawPath().replace("@", "%40"))) {
+ propstat = response.propstat;
+ if (propstat != null) {
+ if (propstat.status.contains("200 OK")) {
+ prop = propstat.prop;
+ ics = prop.calendardata;
+ this.setETag(prop.getetag);
+ Result = true;
+ }
+ }
+ }
+ }
+ }
+ } catch (ParserConfigurationException e1) {
+ e1.printStackTrace();
+ } catch (SAXException e1) {
+ e1.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ this.stringIcs = ics;
+ return Result;
+ }
+
+ /**
+ * sets the Uri of the android event
+ * @param uri
+ * @see org.gege.caldavsyncadapter.syncadapter.SyncAdapter#createAndroidEvent(ContentProviderClient provider, Account account, Uri calendarUri, CalendarEvent calendarEvent)
+ * @see org.gege.caldavsyncadapter.syncadapter.SyncAdapter#updateAndroidEvent(ContentProviderClient provider, Account account, AndroidEvent androidEvent, CalendarEvent calendarEvent)
+ */
+ public void setAndroidEventUri(Uri uri) {
+ mAndroidEventUri = uri;
+ }
+
+ /**
+ * gets the Uri of the android event
+ * @return
+ */
+ public Uri getAndroidEventUri() {
+ return mAndroidEventUri;
+ }
+
+
+ /**
+ * reads all ContentValues from the caldav source
+ * @param calendarUri
+ * @return
+ * @see org.gege.caldavsyncadapter.syncadapter.SyncAdapter#createAndroidEvent(ContentProviderClient provider, Account account, Uri calendarUri, CalendarEvent calendarEvent)
+ * @see org.gege.caldavsyncadapter.syncadapter.SyncAdapter#updateAndroidEvent(ContentProviderClient provider, Account account, AndroidEvent androidEvent, CalendarEvent calendarEvent)
+ */
+ public boolean readContentValues() {
+ this.ContentValues.put(Events.DTSTART, this.getStartTime());
+ this.ContentValues.put(Events.EVENT_TIMEZONE, this.getTimeZoneStart());
+
+ //if (this.getRRule().isEmpty() && this.getRDate().isEmpty()) {
+ if (this.getRRule() == null && this.getRDate() == null) {
+ //if (AllDay.equals(1)) //{
+ // values.put(Events.ALL_DAY, AllDay);
+ //} else {
+ this.ContentValues.put(Events.DTEND, this.getEndTime());
+ this.ContentValues.put(Events.EVENT_END_TIMEZONE, this.getTimeZoneEnd());
+ //}
+ } else {
+ //if (AllDay.equals(1))
+ // values.put(Events.ALL_DAY, AllDay);
+ this.ContentValues.put(Events.DURATION, this.getDuration());
+ }
+ int AllDay = this.getAllDay();
+ this.ContentValues.put(Events.ALL_DAY, AllDay);
+
+ this.ContentValues.put(Events.TITLE, this.getTitle());
+ //this.ContentValues.put(Events.CALENDAR_ID, ContentUris.parseId(calendarUri));
+ this.ContentValues.put(Events._SYNC_ID, this.getUri().toString());
+ this.ContentValues.put(ETAG, this.getETag());
+ this.ContentValues.put(Events.DESCRIPTION, this.getDescription());
+ this.ContentValues.put(Events.EVENT_LOCATION, this.getLocation());
+ this.ContentValues.put(Events.ACCESS_LEVEL, this.getAccessLevel());
+ this.ContentValues.put(Events.STATUS, this.getStatus());
+ this.ContentValues.put(Events.RDATE, this.getRDate());
+ this.ContentValues.put(Events.RRULE, this.getRRule());
+ this.ContentValues.put(Events.EXRULE, this.getExRule());
+ this.ContentValues.put(Events.EXDATE, this.getExDate());
+ this.ContentValues.put(UID, this.getUid());
+ this.ContentValues.put(RAWDATA, this.stringIcs);
+
+ return true;
+ }
+
+ /**
+ * receives a single event and parses its content
+ * @return success of this function
+ * @see CalendarEvent#parseIcs()
+ * @throws ClientProtocolException
+ * @throws IOException
+ * @throws CaldavProtocolException
+ * @throws ParserException
+ */
+ public boolean fetchBody() throws ClientProtocolException, IOException, CaldavProtocolException, ParserException {
+ boolean Error = false;
+
+ //replaced fetchEvent() with getEvent()
+ //CaldavFacade.fetchEvent(this);
+ CaldavFacade.getEvent(this);
+
+ boolean Parse = this.parseIcs();
+ if (!Parse)
+ Error = true;
+
+ return !Error;
+ }
+
+ public java.util.ArrayList getReminders() {
+ java.util.ArrayList Result = new java.util.ArrayList();
+ ContentValues Reminder;
+
+ /*
+ * http://sourceforge.net/tracker/?func=detail&aid=3021704&group_id=107024&atid=646395
+ */
+
+ net.fortuna.ical4j.model.component.VEvent event = (VEvent) this.calendarComponent;
+
+ //ComponentList ComList = this.calendar.getComponents(Component.VALARM);
+ ComponentList ComList = event.getAlarms();
+
+ if (ComList != null) {
+ for (Object objCom : ComList) {
+ Component Com = (Component) objCom;
+ Reminder = new ContentValues();
+
+ //Property ACTION = Com.getProperty("ACTION");
+ Property TRIGGER = Com.getProperty("TRIGGER");
+ if (TRIGGER != null) {
+ Dur Duration = new Dur(TRIGGER.getValue());
+ //if (ACTION.getValue().equals("DISPLAY"))
+
+ int intDuration = Duration.getMinutes() + Duration.getHours() * 60 + Duration.getDays() * 60 * 24;
+
+ Reminder.put(Reminders.EVENT_ID, ContentUris.parseId(mAndroidEventUri));
+ Reminder.put(Reminders.METHOD, Reminders.METHOD_ALERT);
+ Reminder.put(Reminders.MINUTES, intDuration);
+
+ Result.add(Reminder);
+ }
+ }
+ }
+ return Result;
+ }
+
+ public java.util.ArrayList getAttandees() {
+ java.util.ArrayList Result = new java.util.ArrayList();
+ ContentValues Attendee;
+ PropertyList Propertys = calendarComponent.getProperties(Property.ATTENDEE);
+ if (Propertys != null) {
+ for (Object objProperty : Propertys){
+ Property property = (Property) objProperty;
+ Attendee = ReadAttendeeProperties(property,Property.ATTENDEE);
+ if (Attendee != null)
+ Result.add(Attendee);
+ }
+ }
+ Propertys = calendarComponent.getProperties(Property.ORGANIZER);
+ if (Propertys != null) {
+ for (Object objProperty : Propertys){
+ Property property = (Property) objProperty;
+ Attendee = ReadAttendeeProperties(property,Property.ORGANIZER);
+ if (Attendee != null)
+ Result.add(Attendee);
+ }
+ }
+
+
+ return Result;
+ }
+
+ private String mstrcIcalPropertyError = "net.fortunal.ical4j.invalid:";
+ private ContentValues ReadAttendeeProperties(Property property, String Type) {
+ ContentValues Attendee = null;
+
+ ParameterList Parameters = property.getParameters();
+ Parameter CN = Parameters.getParameter(Cn.CN);
+ Parameter ROLE = Parameters.getParameter(Role.ROLE);
+ Parameter CUTYPE = Parameters.getParameter(CuType.CUTYPE);
+ //Parameter RSVP = Parameters.getParameter("RSVP");
+ Parameter PARTSTAT = Parameters.getParameter(PartStat.PARTSTAT);
+
+ String strCN = "";
+ String strROLE = "";
+ String strCUTYPE = "";
+ String strValue = property.getValue().replace("mailto:", "");
+ String strPARTSTAT = "";
+
+ if (strValue.startsWith(mstrcIcalPropertyError)) {
+ strValue = strValue.replace(mstrcIcalPropertyError, "");
+ try {
+ strValue = URLDecoder.decode(strValue, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (CN != null)
+ strCN = CN.getValue();
+ if (ROLE != null)
+ strROLE = ROLE.getValue();
+ if (CUTYPE != null)
+ strCUTYPE = CUTYPE.getValue();
+ if (PARTSTAT != null)
+ strPARTSTAT = PARTSTAT.getValue();
+
+ if (strCN.equals("")) {
+ if (!strValue.equals("")) {
+ strCN = strValue;
+ }
+ }
+
+ if (!strCN.equals("")) {
+ if (strCUTYPE.equals("") || strCUTYPE.equals("INDIVIDUAL")) {
+ Attendee = new ContentValues();
+
+ Attendee.put(Attendees.EVENT_ID, ContentUris.parseId(mAndroidEventUri));
+
+ Attendee.put(Attendees.ATTENDEE_NAME, strCN);
+ Attendee.put(Attendees.ATTENDEE_EMAIL, strValue);
+
+ if (strROLE.equals("OPT-PARTICIPANT"))
+ Attendee.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_OPTIONAL);
+ else if (strROLE.equals("NON-PARTICIPANT"))
+ Attendee.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_NONE);
+ else if (strROLE.equals("REQ-PARTICIPANT"))
+ Attendee.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_REQUIRED);
+ else if (strROLE.equals("CHAIR"))
+ Attendee.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_REQUIRED);
+ else
+ Attendee.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_NONE);
+
+ if (Type.equals(Property.ATTENDEE))
+ Attendee.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ATTENDEE);
+ else if (Type.equals(Property.ORGANIZER))
+ Attendee.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ORGANIZER);
+ else
+ Attendee.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_NONE);
+
+ if (strPARTSTAT.equals(PartStat.NEEDS_ACTION.getValue()))
+ Attendee.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_INVITED);
+ else if (strPARTSTAT.equals(PartStat.ACCEPTED.getValue()))
+ Attendee.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_ACCEPTED);
+ else if (strPARTSTAT.equals(PartStat.DECLINED.getValue()))
+ Attendee.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_DECLINED);
+ else if (strPARTSTAT.equals(PartStat.COMPLETED.getValue()))
+ Attendee.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_NONE);
+ else if (strPARTSTAT.equals(PartStat.TENTATIVE.getValue()))
+ Attendee.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_TENTATIVE);
+ else
+ Attendee.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_INVITED);
+
+ }
+ }
+
+ return Attendee;
+ }
+
+ private long getAccessLevel() {
+ long Result = Events.ACCESS_DEFAULT;
+ String Value = "";
+ Property property = calendarComponent.getProperty(Property.CLASS);
+ if (property != null) {
+ Value = property.getValue();
+ if (Value.equals(Clazz.PUBLIC))
+ Result = Events.ACCESS_PUBLIC;
+ else if (Value.equals(Clazz.PRIVATE))
+ Result = Events.ACCESS_PRIVATE;
+ else if (Value.equals(Clazz.CONFIDENTIAL))
+ Result = Events.ACCESS_PRIVATE; // should be ACCESS_CONFIDENTIAL, but is not implemented within Android
+ }
+
+ return Result;
+ }
+
+ private int getStatus() {
+ int Result = -1;
+ String Value = "";
+ Property property = calendarComponent.getProperty(Property.STATUS);
+ if (property != null) {
+ Value = property.getValue();
+ if (Value.equals(Status.VEVENT_CONFIRMED.getValue()))
+ Result = Events.STATUS_CONFIRMED;
+ else if (Value.equals(Status.VEVENT_CANCELLED.getValue()))
+ Result = Events.STATUS_CANCELED;
+ else if (Value.equals(Status.VEVENT_TENTATIVE.getValue()))
+ Result = Events.STATUS_TENTATIVE;
+ }
+
+ return Result;
+ }
+
+ private String getDescription() {
+ String Result = null;
+ Property property = calendarComponent.getProperty(Property.DESCRIPTION);
+ if (property != null)
+ Result = property.getValue();
+
+ return Result;
+ }
+
+ private String getLocation() {
+ String Result = null;
+ Property property = calendarComponent.getProperty(Property.LOCATION);
+ if (property != null)
+ Result = property.getValue();
+
+ return Result;
+ }
+
+ private String getTitle() {
+ Property property = calendarComponent.getProperty(Property.SUMMARY);
+ if (property != null)
+ return property.getValue();
+ else
+ return "**unkonwn**";
+ }
+
+ private String getRRule() {
+ String Result = null;
+ Property property = calendarComponent.getProperty(Property.RRULE);
+ if (property != null)
+ Result = property.getValue();
+
+ return Result;
+ }
+
+ private String getExRule() {
+ String Result = null;
+ Property property = calendarComponent.getProperty(Property.EXRULE);
+ if (property != null)
+ Result = property.getValue();
+
+ return Result;
+ }
+
+ private String getRDate() {
+ String Result = null;
+
+ java.util.ArrayList ExDates = this.getRDates();
+ for (String Value: ExDates) {
+ if (Result == null)
+ Result = "";
+ if (!Result.isEmpty())
+ Result += ",";
+ Result += Value;
+ }
+
+ return Result;
+ }
+
+ private java.util.ArrayList getRDates() {
+ java.util.ArrayList Result = new java.util.ArrayList();
+ PropertyList Propertys = calendarComponent.getProperties(Property.RDATE);
+ if (Propertys != null) {
+ Property property;
+ for (Object objProperty : Propertys){
+ property = (Property) objProperty;
+ Result.add(property.getValue());
+ }
+ }
+
+ return Result;
+ }
+
+ private String getExDate() {
+ String Result = null;
+
+ java.util.ArrayList ExDates = this.getExDates();
+ for (String Value: ExDates) {
+ if (Result == null)
+ Result = "";
+ if (!Result.isEmpty())
+ Result += ",";
+ Result += Value;
+ }
+
+ return Result;
+ }
+
+ private java.util.ArrayList getExDates() {
+ java.util.ArrayList Result = new java.util.ArrayList();
+ PropertyList Propertys = calendarComponent.getProperties(Property.EXDATE);
+ if (Propertys != null) {
+ Property property;
+ for (Object objProperty : Propertys){
+ property = (Property) objProperty;
+ Result.add(property.getValue());
+ }
+ }
+
+ return Result;
+ }
+
+ private String getUid() {
+ String Result = "";
+ Property prop = calendarComponent.getProperty(Property.UID);
+ if (prop != null) {
+ Result = prop.getValue();
+ }
+
+ return Result;
+ }
+
+ private Long getTimestamp(Property prop) {
+ Long Result = null;
+ String strTimeZone = "";
+ //TimeZone timeZone = null;
+
+ try {
+ String strDate = prop.getValue();
+
+ Parameter parAllDay = prop.getParameter("VALUE");
+ if (parAllDay != null) {
+ if (parAllDay.getValue().equals("DATE")) {
+ mAllDay = true;
+ strDate += "T000000Z";
+ }
+ }
+
+ Parameter propTZ = prop.getParameter(Property.TZID);
+ if (propTZ != null)
+ strTimeZone = propTZ.getValue();
+
+ //TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
+ //if (!strTimeZone.equals(""))
+ // timeZone = registry.getTimeZone(strTimeZone);
+
+ //if (timeZone != null) {
+ if (!strTimeZone.equals("")) {
+ //Result = new DateTime(strDate, timeZone);
+ //Result1 = Result.getTime();
+
+ //20130331T120000
+ int Year = Integer.parseInt(strDate.substring(0, 4));
+ int Month = Integer.parseInt(strDate.substring(4, 6)) - 1;
+ int Day = Integer.parseInt(strDate.substring(6, 8));
+ int Hour = Integer.parseInt(strDate.substring(9, 11));
+ int Minute = Integer.parseInt(strDate.substring(11, 13));
+ int Second = Integer.parseInt(strDate.substring(13, 15));
+
+ // time in UTC
+ java.util.TimeZone jtz = java.util.TimeZone.getTimeZone("UTC");
+ java.util.Calendar cal = java.util.GregorianCalendar.getInstance(jtz);
+ cal.set(Year, Month, Day, Hour, Minute, Second);
+ cal.set(java.util.Calendar.MILLISECOND, 0);
+ Result = cal.getTimeInMillis();
+
+ // get the timezone
+ String[] IDs = java.util.TimeZone.getAvailableIDs();
+ Boolean Found = false;
+ for (int i = 0; i < IDs.length; i++) {
+ Found = Found || IDs[i].equals(strTimeZone);
+ }
+ if (Found) {
+ jtz = java.util.TimeZone.getTimeZone(strTimeZone);
+
+ // subtract the offset
+ Result -= jtz.getRawOffset();
+
+ // remove dst
+ if (jtz.inDaylightTime(new java.util.Date(Result)))
+ Result -= jtz.getDSTSavings();
+
+ } else {
+ if (mTimeZone != null) {
+ // subtract the offset
+ Result -= mTimeZone.getRawOffset();
+
+ // remove dst
+ if (mTimeZone.inDaylightTime(new java.util.Date(Result)))
+ Result -= mTimeZone.getDSTSavings();
+ } else {
+ // unknown Time?
+ // treat as local time, should not happen too often :)
+ Result = new DateTime(strDate).getTime();
+ }
+ }
+ } else {
+ if (strDate.endsWith("Z")) {
+ // GMT or UTC
+ Result = new DateTime(strDate).getTime();
+ } else {
+ // unknown Time?
+ // treat as local time, should not happen too often :)
+ Result = new DateTime(strDate).getTime();
+ }
+ }
+
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ return Result;
+ }
+
+ private long getStartTime() {
+ long Result = 0;
+ Property prop;
+ /*
+ * DTSTART;TZID=Europe/Berlin:20120425T080000
+ * DTSTART;TZID=(GMT+01.00) Sarajevo/Warsaw/Zagreb:20120305T104500
+ * DTSTART:20120308T093000Z
+ * DTSTART;VALUE=DATE:20120709
+ * DTSTART;TZID=Europe/Berlin:20130330T100000
+ */
+
+ prop = calendarComponent.getProperty(Property.DTSTART);
+ if (prop != null) {
+ Parameter propTZ = prop.getParameter(Property.TZID);
+ if (propTZ != null)
+ mstrTimeZoneStart = propTZ.getValue();
+ Result = getTimestamp(prop);
+ }
+
+ return Result;
+ }
+
+ private long getEndTime() {
+ long Result = 0;
+ Property propDtEnd;
+ Property propDuration;
+
+ propDtEnd = calendarComponent.getProperty(Property.DTEND);
+ propDuration = calendarComponent.getProperty(Property.DURATION);
+ if (propDtEnd != null) {
+ Parameter propTZ = propDtEnd.getParameter(Property.TZID);
+ if (propTZ != null)
+ mstrTimeZoneEnd = propTZ.getValue();
+ Result = getTimestamp(propDtEnd);
+
+ } else if (propDuration != null) {
+ Result = 0;
+ long Start = this.getStartTime();
+ String strDuration = propDuration.getValue();
+ Dur dur = new Dur(strDuration);
+ Result = Start
+ + dur.getSeconds() * 1000
+ + dur.getMinutes() * 60 * 1000
+ + dur.getHours() * 60 * 60 * 1000
+ + dur.getDays() * 60 * 60 * 24 * 1000;
+
+ mstrTimeZoneEnd = mstrTimeZoneStart;
+ }
+
+
+ return Result;
+ }
+
+ private String getTimeZoneStart() {
+ String Result = "GMT";
+
+ if (!mstrTimeZoneStart.equals("")) {
+ Result = mstrTimeZoneStart;
+ }
+
+ return Result;
+ }
+
+ private String getTimeZoneEnd() {
+ String Result = "GMT";
+
+ if (!mstrTimeZoneEnd.equals("")) {
+ Result = mstrTimeZoneEnd;
+ }
+
+ return Result;
+ }
+
+
+ private String getDuration() {
+ String Result = "";
+ Property prop = calendarComponent.getProperty("DURATION");
+
+ if (prop != null) {
+ //DURATION:PT1H
+ Result = prop.getValue();
+ } else {
+ // no DURATION given by this event. we have to calculate it by ourself
+ Result = "P";
+ long Start = this.getStartTime();
+ long End = this.getEndTime();
+ long Duration = 0;
+ if (End != 0)
+ Duration = (End - Start) / 1000; // get rid of the milliseconds, they cann't be described with RFC2445-Duration
+
+ if (Duration < 0) {
+ Duration = 0;
+ }
+ int Days = (int) Math.ceil(Duration / 24 / 60 / 60);
+ int Hours = (int) Math.ceil((Duration - (Days * 24 * 60 * 60)) / 60 / 60);
+ int Minutes = (int) Math.ceil((Duration - (Days * 24 * 60 * 60) - (Hours * 60 * 60)) / 60);
+ int Seconds = (int) (Duration - (Days * 24 * 60 * 60) - (Hours * 60 * 60) - (Minutes * 60));
+
+ if (Days > 0)
+ Result += String.valueOf(Days) + "D";
+
+ if (!mAllDay) {
+ //if a ALL_DAY event occurs, there is no need for hours, minutes and seconds (Android doesn't understand them)
+ Result += "T";
+ Result += String.valueOf(Hours) + "H";
+ Result += String.valueOf(Minutes) + "M";
+ Result += String.valueOf(Seconds) + "S";
+ }
+ }
+
+ return Result;
+ }
+
+ private int getAllDay() {
+ int Result = 0;
+
+ if (mAllDay)
+ Result = 1;
+
+ return Result;
+ }
+
+ /**
+ * opens the first items of the event
+ * @return success of this function
+ * @see AndroidEvent#createIcs()
+ * @see CalendarEvent#fetchBody()
+ * @throws CaldavProtocolException
+ * @throws IOException
+ * @throws ParserException
+ */
+ private boolean parseIcs() throws CaldavProtocolException, IOException, ParserException {
+ boolean Error = false;
+
+ CalendarBuilder builder = new CalendarBuilder();
+ CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_RELAXED_UNFOLDING, true);
+ CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_RELAXED_PARSING, true);
+ CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_RELAXED_VALIDATION, true);
+ CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_OUTLOOK_COMPATIBILITY, true);
+
+ StringReader reader = new StringReader(this.stringIcs);
+ try {
+ this.calendar = builder.build(reader);
+ } catch (ParserException ex) {
+ // ical4j fails with this: "Cannot set timezone for UTC properties"
+ // CREATED;TZID=America/New_York:20130129T140250
+ Error = true;
+ }
+
+ if (!Error) {
+ ComponentList components = null;
+ components = this.calendar.getComponents(Component.VEVENT);
+ if (components.size() == 0) {
+ components = this.calendar.getComponents(Component.VTODO);
+ if (components.size() == 0) {
+ throw new CaldavProtocolException("unknown events in ICS");
+ } else {
+ Log.e(TAG, "unsupported event TODO in ICS");
+ Error = true;
+ }
+ } else if (components.size() > 1) {
+ Log.e(TAG, "Several events in ICS -> only first will be processed");
+ }
+
+ // get the TimeZone information
+ Component mCom = this.calendar.getComponent(Component.VTIMEZONE);
+ if (mCom != null)
+ mVTimeZone = (VTimeZone) this.calendar.getComponent(Component.VTIMEZONE);
+ if (mVTimeZone != null)
+ mTimeZone = new TimeZone(mVTimeZone);
+
+ if (!Error)
+ calendarComponent = (Component) components.get(0);
+ }
+
+ return !Error;
+ }
+
+ /**
+ * searches for an android event
+ * @param androidCalendar
+ * @return the android event
+ * @throws RemoteException
+ */
+ public AndroidEvent getAndroidEvent(DavCalendar androidCalendar) throws RemoteException {
+ boolean Error = false;
+ Uri uriEvents = Events.CONTENT_URI;
+ Uri uriAttendee = Attendees.CONTENT_URI;
+ Uri uriReminder = Reminders.CONTENT_URI;
+ AndroidEvent androidEvent = null;
+
+ String selection = "(" + Events._SYNC_ID + " = ?)";
+ String[] selectionArgs = new String[] {this.getUri().toString()};
+ Cursor curEvent = this.mProvider.query(uriEvents, null, selection, selectionArgs, null);
+
+ Cursor curAttendee = null;
+ Cursor curReminder = null;
+
+ if (curEvent == null) {
+ Error = true;
+ }
+ if (!Error) {
+ if (curEvent.getCount() == 0) {
+ Error = true;
+ }
+ }
+ if (!Error) {
+ curEvent.moveToNext();
+
+ long EventID = curEvent.getLong(curEvent.getColumnIndex(Events._ID));
+ Uri returnedUri = ContentUris.withAppendedId(uriEvents, EventID);
+
+ //androidEvent = new AndroidEvent(this.mAccount, this.mProvider, returnedUri, androidCalendar.getAndroidCalendarUri());
+ androidEvent = new AndroidEvent(returnedUri, androidCalendar.getAndroidCalendarUri());
+ androidEvent.readContentValues(curEvent);
+
+ selection = "(" + Attendees.EVENT_ID + " = ?)";
+ selectionArgs = new String[] {String.valueOf(EventID)};
+ curAttendee = this.mProvider.query(uriAttendee, null, selection, selectionArgs, null);
+ selection = "(" + Reminders.EVENT_ID + " = ?)";
+ selectionArgs = new String[] {String.valueOf(EventID)};
+ curReminder = this.mProvider.query(uriReminder, null, selection, selectionArgs, null);
+ androidEvent.readAttendees(curAttendee);
+ androidEvent.readReminder(curReminder);
+ curAttendee.close();
+ curReminder.close();
+ }
+ curEvent.close();
+
+ return androidEvent;
+ }
+
+ /**
+ * creates a new androidEvent from a given calendarEvent
+ * @param androidCalendar
+ * @return
+ * @throws ClientProtocolException
+ * @throws IOException
+ * @throws CaldavProtocolException
+ * @throws RemoteException
+ * @throws ParserException
+ * @see {@link SyncAdapter#synchroniseEvents(CaldavFacade, Account, ContentProviderClient, Uri, DavCalendar, SyncStats)}
+ */
+ public boolean createAndroidEvent(DavCalendar androidCalendar) throws ClientProtocolException, IOException, CaldavProtocolException, RemoteException, ParserException {
+ boolean Result = false;
+ boolean BodyFetched = this.fetchBody();
+ int CountAttendees = 0;
+ int CountReminders = 0;
+
+ if (BodyFetched) {
+ //calendarEvent.readContentValues(calendarUri);
+ this.readContentValues();
+ this.setAndroidCalendarId(ContentUris.parseId(androidCalendar.getAndroidCalendarUri()));
+
+ Uri uri = this.mProvider.insert(asSyncAdapter(Events.CONTENT_URI, this.mAccount.name, this.mAccount.type), this.ContentValues);
+ this.setAndroidEventUri(uri);
+
+ Log.d(TAG, "Creating calendar event for " + uri.toString());
+
+ //check the attendees
+ java.util.ArrayList AttendeeList = this.getAttandees();
+ for (ContentValues Attendee : AttendeeList) {
+ this.mProvider.insert(Attendees.CONTENT_URI, Attendee);
+ CountAttendees += 1;
+ }
+
+ //check the reminders
+ java.util.ArrayList ReminderList = this.getReminders();
+ for (ContentValues Reminder : ReminderList) {
+ this.mProvider.insert(Reminders.CONTENT_URI, Reminder);
+ CountReminders += 1;
+ }
+
+ if ((CountAttendees > 0) || (CountReminders > 0)) {
+ //the events gets dirty when attendees or reminders were added
+ AndroidEvent androidEvent = this.getAndroidEvent(androidCalendar);
+
+ androidEvent.ContentValues.put(Events.DIRTY, 0);
+ int RowCount = this.mProvider.update(asSyncAdapter(androidEvent.getUri(), this.mAccount.name, this.mAccount.type), androidEvent.ContentValues, null, null);
+ Result = (RowCount == 1);
+ } else {
+ Result = true;
+ }
+
+
+ }
+ return Result;
+ }
+
+ /**
+ * the android event is getting updated
+ * @param provider
+ * @param account
+ * @param androidEvent
+ * @param calendarEvent
+ * @return
+ * @throws ClientProtocolException
+ * @throws IOException
+ * @throws CaldavProtocolException
+ * @throws RemoteException
+ * @throws ParserException
+ * @see {@link SyncAdapter#synchroniseEvents(CaldavFacade, Account, ContentProviderClient, Uri, Calendar, SyncStats)}
+ */
+ public boolean updateAndroidEvent(AndroidEvent androidEvent) throws ClientProtocolException, IOException, CaldavProtocolException, RemoteException, ParserException {
+ boolean BodyFetched = this.fetchBody();
+ int Rows = 0;
+
+ if (BodyFetched) {
+ this.readContentValues();
+ this.setAndroidCalendarId(androidEvent.getAndroidCalendarId());
+ this.setAndroidEventUri(androidEvent.getUri());
+
+ Log.d(TAG, "AndroidEvent is dirty: " + androidEvent.ContentValues.getAsString(Events.DIRTY));
+
+ if (androidEvent.checkEventValuesChanged(this.ContentValues)) {
+ // just set the raw data from server event into android event
+ if (androidEvent.ContentValues.containsKey(Event.RAWDATA))
+ androidEvent.ContentValues.remove(Event.RAWDATA);
+ androidEvent.ContentValues.put(Event.RAWDATA, this.ContentValues.getAsString(Event.RAWDATA));
+
+ //update the attendees and reminders
+ this.updateAndroidAttendees();
+ this.updateAndroidReminder();
+
+ androidEvent.ContentValues.put(Events.DIRTY, 0); // the event is now in sync
+ Log.d(TAG, "Update calendar event: for "+androidEvent.getUri());
+
+ Rows = mProvider.update(asSyncAdapter(androidEvent.getUri(), mAccount.name, mAccount.type), androidEvent.ContentValues, null, null);
+ //Log.i(TAG, "Updated calendar event: rows effected " + Rows.toString());
+ } else {
+ Log.d(TAG, "Update calendar event not needed: for "+androidEvent.getUri());
+ }
+ }
+ return (Rows == 1);
+ }
+
+ /**
+ * updates the attendees from a calendarEvent to its androidEvent.
+ * the calendarEvent has to know its androidEvent via {@link CalendarEvent#setAndroidEventUri(Uri)}
+ * @param provider
+ * @return
+ * @see SyncAdapter#updateAndroidEvent(ContentProviderClient, Account, AndroidEvent, CalendarEvent)
+ */
+ private boolean updateAndroidAttendees() {
+ boolean Result = false;
+
+ try {
+ String mSelectionClause = "(" + Attendees.EVENT_ID + " = ?)";
+ String[] mSelectionArgs = {Long.toString(ContentUris.parseId(this.getAndroidEventUri())) };
+ int RowDelete;
+ RowDelete = this.mProvider.delete(Attendees.CONTENT_URI, mSelectionClause, mSelectionArgs);
+ Log.d(TAG, "Attendees Deleted:" + String.valueOf(RowDelete));
+
+ java.util.ArrayList AttendeeList = this.getAttandees();
+ for (ContentValues Attendee : AttendeeList) {
+ this.mProvider.insert(Attendees.CONTENT_URI, Attendee);
+ }
+ Log.d(TAG, "Attendees Inserted:" + String.valueOf(AttendeeList.size()));
+ Result = true;
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ return Result;
+ }
+
+ /**
+ * update the reminders from a calendarEvent to its androidEvent.
+ * the calendarEvent has to know its androidEvent via {@link CalendarEvent#setAndroidEventUri(Uri)}
+ * @param provider
+ * @return
+ * @see SyncAdapter#updateAndroidEvent(ContentProviderClient, Account, AndroidEvent, CalendarEvent)
+ */
+ private boolean updateAndroidReminder() {
+ boolean Result = false;
+
+ try {
+ String mSelectionClause = "(" + Reminders.EVENT_ID + " = ?)";
+ String[] mSelectionArgs = {Long.toString(ContentUris.parseId(this.getAndroidEventUri())) };
+ int RowDelete;
+ RowDelete = this.mProvider.delete(Reminders.CONTENT_URI, mSelectionClause, mSelectionArgs);
+ Log.d(TAG, "Reminders Deleted:" + String.valueOf(RowDelete));
+
+
+ Uri ReminderUri;
+ java.util.ArrayList ReminderList = this.getReminders();
+ for (ContentValues Reminder : ReminderList) {
+ ReminderUri = this.mProvider.insert(Reminders.CONTENT_URI, Reminder);
+ System.out.println(ReminderUri);
+ }
+ Log.d(TAG, "Reminders Inserted:" + String.valueOf(ReminderList.size()));
+
+ Result = true;
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ return Result;
+ }
+
+ private static Uri asSyncAdapter(Uri uri, String account, String accountType) {
+ return uri.buildUpon()
+ .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
+ .appendQueryParameter(Calendars.ACCOUNT_NAME, account)
+ .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
+ }
+}
+
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/entities/CalendarList.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/entities/CalendarList.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,155 @@
+package org.gege.caldavsyncadapter.caldav.entities;
+
+import java.net.URI;
+import java.util.ArrayList;
+
+//import org.gege.caldavsyncadapter.CalendarColors;
+import org.gege.caldavsyncadapter.caldav.entities.DavCalendar.CalendarSource;
+import org.gege.caldavsyncadapter.syncadapter.notifications.NotificationsHelper;
+
+import android.accounts.Account;
+import android.content.ContentProviderClient;
+//import android.content.ContentUris;
+//import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.RemoteException;
+import android.provider.CalendarContract.Calendars;
+//import android.util.Log;
+
+public class CalendarList {
+// private static final String TAG = "CalendarList";
+
+ private java.util.ArrayList mList = new java.util.ArrayList();
+
+ private Account mAccount = null;
+ private ContentProviderClient mProvider = null;
+
+ public CalendarSource Source = CalendarSource.undefined;
+
+ public String ServerUrl = "";
+
+ public CalendarList(Account account, ContentProviderClient provider, CalendarSource source, String serverUrl) {
+ this.mAccount = account;
+ this.mProvider = provider;
+ this.Source = source;
+ this.ServerUrl = serverUrl;
+ }
+
+/* public Calendar getCalendarByAndroidCalendarId(int calendarId) {
+ Calendar Result = null;
+
+ for (Calendar Item : mList) {
+ if (Item.getAndroidCalendarId() == calendarId)
+ Result = Item;
+ }
+
+ return Result;
+ }*/
+
+ public DavCalendar getCalendarByURI(URI calendarURI) {
+ DavCalendar Result = null;
+
+ for (DavCalendar Item : mList) {
+ if (Item.getURI().equals(calendarURI))
+ Result = Item;
+ }
+
+ return Result;
+ }
+
+ public DavCalendar getCalendarByAndroidUri(Uri androidCalendarUri) {
+ DavCalendar Result = null;
+
+ for (DavCalendar Item : mList) {
+ if (Item.getAndroidCalendarUri().equals(androidCalendarUri))
+ Result = Item;
+ }
+
+ return Result;
+ }
+
+ /**
+ * function to get all calendars from client side android
+ * @return
+ */
+ public boolean readCalendarFromClient() {
+ boolean Result = false;
+ Cursor cur = null;
+
+ Uri uri = Calendars.CONTENT_URI;
+
+ /* COMPAT: in the past, the serverurl was not stored within a calendar. (see #98)
+ * so there was no chance to see which calendars belongs to a named account.
+ * username + serverurl have to be unique
+ * ((DavCalendar.SERVERURL = ?) OR (DavCalendar.SERVERURL IS NULL))
+ */
+ String selection = "(" + "(" + Calendars.ACCOUNT_NAME + " = ?) AND " +
+ "(" + Calendars.ACCOUNT_TYPE + " = ?) AND " +
+ "((" + DavCalendar.SERVERURL + " = ?) OR " +
+ "(" + DavCalendar.SERVERURL + " IS NULL)) AND " +
+ "(" + Calendars.OWNER_ACCOUNT + " = ?)" +
+ ")";
+ String[] selectionArgs = new String[] { mAccount.name,
+ mAccount.type,
+ this.ServerUrl,
+ mAccount.name
+ };
+
+ // Submit the query and get a Cursor object back.
+ try {
+ cur = mProvider.query(uri, null, selection, selectionArgs, null);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ if (cur != null) {
+ while (cur.moveToNext()) {
+ mList.add(new DavCalendar(mAccount, mProvider, cur, this.Source, this.ServerUrl));
+ }
+ cur.close();
+ Result = true;
+ }
+
+ return Result;
+ }
+
+ public boolean deleteCalendarOnClientSideOnly(android.content.Context context) {
+ boolean Result = false;
+
+ for (DavCalendar androidCalendar : this.mList) {
+ if (!androidCalendar.foundServerSide) {
+ NotificationsHelper.signalSyncErrors(context, "CalDAV Sync Adapter", "calendar deleted: " + androidCalendar.getCalendarDisplayName());
+ androidCalendar.deleteAndroidCalendar();
+ }
+ }
+
+ return Result;
+ }
+
+ public void addCalendar(DavCalendar item) {
+ item.setAccount(this.mAccount);
+ item.setProvider(this.mProvider);
+ item.ServerUrl = this.ServerUrl;
+ this.mList.add(item);
+ }
+ public java.util.ArrayList getCalendarList() {
+ return this.mList;
+ }
+
+ public void setAccount(Account account) {
+ this.mAccount = account;
+ }
+ public void setProvider(ContentProviderClient provider) {
+ this.mProvider = provider;
+ }
+ public ArrayList getNotifyList() {
+ ArrayList Result = new ArrayList();
+
+ for (DavCalendar cal : this.mList) {
+ Result.addAll(cal.getNotifyList());
+ }
+
+ return Result;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/entities/DavCalendar.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/entities/DavCalendar.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,666 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia, Timo Berger
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav.entities;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.apache.http.client.ClientProtocolException;
+import org.gege.caldavsyncadapter.CalendarColors;
+import org.gege.caldavsyncadapter.Event;
+import org.gege.caldavsyncadapter.android.entities.AndroidEvent;
+import org.gege.caldavsyncadapter.caldav.CaldavFacade;
+import org.gege.caldavsyncadapter.syncadapter.SyncAdapter;
+import org.gege.caldavsyncadapter.syncadapter.notifications.NotificationsHelper;
+import org.xml.sax.SAXException;
+
+import android.accounts.Account;
+import android.content.ContentProviderClient;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.SyncStats;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.RemoteException;
+import android.provider.CalendarContract.Calendars;
+import android.provider.CalendarContract.Events;
+import android.util.Log;
+
+public class DavCalendar {
+ public enum CalendarSource {
+ undefined, Android, CalDAV
+ }
+
+ private static final String TAG = "Calendar";
+
+ /**
+ * stores the CTAG of a calendar
+ */
+ public static String CTAG = Calendars.CAL_SYNC1;
+
+ /**
+ * stores the URI of a calendar
+ * example: http://caldav.example.com/calendarserver.php/calendars/username/calendarname
+ */
+ public static String URI = Calendars._SYNC_ID;
+
+ public static String SERVERURL = Calendars.CAL_SYNC2;
+
+ private String strCalendarColor = "";
+
+ private ArrayList mNotifyList = new ArrayList();
+
+ /**
+ * the event transformed into ContentValues
+ */
+ public ContentValues ContentValues = new ContentValues();
+
+ private Account mAccount = null;
+ private ContentProviderClient mProvider = null;
+
+ public boolean foundServerSide = false;
+ public boolean foundClientSide = false;
+ public CalendarSource Source = CalendarSource.undefined;
+
+ public String ServerUrl = "";
+
+ private ArrayList mCalendarEvents = new ArrayList();
+
+ private int mTagCounter = 1;
+
+ /**
+ * example: http://caldav.example.com/calendarserver.php/calendars/username/calendarname
+ */
+ public URI getURI() {
+ String strUri = this.getContentValueAsString(DavCalendar.URI);
+ URI result = null;
+ try {
+ result = new URI(strUri);
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+ return result;
+ }
+
+ /**
+ * example: http://caldav.example.com/calendarserver.php/calendars/username/calendarname
+ */
+ public void setURI(URI uri) {
+ this.setContentValueAsString(DavCalendar.URI, uri.toString());
+ }
+
+ /**
+ * example: Cleartext Display Name
+ */
+ public String getCalendarDisplayName() {
+ return this.getContentValueAsString(Calendars.CALENDAR_DISPLAY_NAME);
+ }
+
+ /**
+ * example: Cleartext Display Name
+ */
+ public void setCalendarDisplayName(String displayName) {
+ this.setContentValueAsString(Calendars.CALENDAR_DISPLAY_NAME, displayName);
+ }
+
+
+ /**
+ * example: 1143
+ */
+ public void setCTag(String cTag, boolean Update) {
+ this.setContentValueAsString(DavCalendar.CTAG, cTag);
+ if (Update) {
+ //serverCalendar.updateAndroidCalendar(androidCalendarUri, Calendar.CTAG, serverCalendar.getcTag());
+ try {
+ this.updateAndroidCalendar(this.getAndroidCalendarUri(), CTAG, cTag);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * example: 1143
+ */
+ public String getcTag() {
+ return this.getContentValueAsString(DavCalendar.CTAG);
+ }
+
+ /**
+ * example: #FFCCAA
+ */
+ public void setCalendarColorAsString(String color) {
+ int maxlen = 6;
+
+ this.strCalendarColor = color;
+ if (!color.equals("")) {
+ String strColor = color.replace("#", "");
+ if (strColor.length() > maxlen)
+ strColor = strColor.substring(0, maxlen);
+ int intColor = Integer.parseInt(strColor, 16);
+ this.setContentValueAsInt(Calendars.CALENDAR_COLOR, intColor);
+ }
+ }
+
+ /**
+ * example: #FFCCAA
+ */
+ public String getCalendarColorAsString() {
+ return this.strCalendarColor;
+ }
+
+ /**
+ * example 12345
+ */
+ public int getCalendarColor() {
+ return this.getContentValueAsInt(Calendars.CALENDAR_COLOR);
+ }
+
+ /**
+ * example 12345
+ */
+ public void setCalendarColor(int color) {
+ this.setContentValueAsInt(Calendars.CALENDAR_COLOR, color);
+ }
+
+ /**
+ * example:
+ * should be: calendarname
+ * but is: http://caldav.example.com/calendarserver.php/calendars/username/calendarname/
+ */
+ public String getCalendarName() {
+ return this.getContentValueAsString(Calendars.NAME);
+ }
+
+ /**
+ * example:
+ * should be: calendarname
+ * but is: http://caldav.example.com/calendarserver.php/calendars/username/calendarname/
+ */
+ public void setCalendarName(String calendarName) {
+ this.setContentValueAsString(Calendars.NAME, calendarName);
+ }
+
+ /**
+ * example: 8
+ */
+ public int getAndroidCalendarId() {
+ return this.getContentValueAsInt(Calendars._ID);
+ }
+
+ /**
+ * example: 8
+ */
+ public void setAndroidCalendarId(int androidCalendarId) {
+ this.setContentValueAsInt(Calendars._ID, androidCalendarId);
+ }
+
+ /**
+ * example: content://com.android.calendar/calendars/8
+ */
+ public Uri getAndroidCalendarUri() {
+ return ContentUris.withAppendedId(Calendars.CONTENT_URI, this.getAndroidCalendarId());
+ }
+
+ /**
+ * empty constructor
+ */
+ public DavCalendar(CalendarSource source) {
+ this.Source = source;
+ }
+
+ /**
+ * creates an new instance from a cursor
+ * @param cur must be a cursor from "ContentProviderClient" with Uri Calendars.CONTENT_URI
+ */
+ public DavCalendar(Account account, ContentProviderClient provider, Cursor cur, CalendarSource source, String serverUrl) {
+ this.mAccount = account;
+ this.mProvider = provider;
+ this.foundClientSide = true;
+ this.Source = source;
+ this.ServerUrl = serverUrl;
+
+ String strSyncID = cur.getString(cur.getColumnIndex(Calendars._SYNC_ID));
+ String strName = cur.getString(cur.getColumnIndex(Calendars.NAME));
+ String strDisplayName = cur.getString(cur.getColumnIndex(Calendars.CALENDAR_DISPLAY_NAME));
+ String strCTAG = cur.getString(cur.getColumnIndex(DavCalendar.CTAG));
+ String strServerUrl = cur.getString(cur.getColumnIndex(DavCalendar.SERVERURL));
+ int intAndroidCalendarId = cur.getInt(cur.getColumnIndex(Calendars._ID));
+
+ this.setCalendarName(strName);
+ this.setCalendarDisplayName(strDisplayName);
+ this.setCTag(strCTAG, false);
+ this.setAndroidCalendarId(intAndroidCalendarId);
+
+ if (strSyncID == null) {
+ this.correctSyncID(strName);
+ strSyncID = strName;
+ }
+ if (strServerUrl == null) {
+ this.correctServerUrl(serverUrl);
+ }
+ URI uri = null;
+ try {
+ uri = new URI(strSyncID);
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ }
+ this.setURI(uri);
+ }
+
+ /**
+ * checks a given list of android calendars for a specific android calendar.
+ * this calendar should be a server calendar as it is searched for.
+ * if the calendar is not found, it will be created.
+ * @param androidCalList the list of android calendars
+ * @param context
+ * @return the found android calendar or null of fails
+ * @throws RemoteException
+ */
+ public Uri checkAndroidCalendarList(CalendarList androidCalList, android.content.Context context) throws RemoteException {
+ Uri androidCalendarUri = null;
+ boolean isCalendarExist = false;
+
+ DavCalendar androidCalendar = androidCalList.getCalendarByURI(this.getURI());
+ if (androidCalendar != null) {
+ isCalendarExist = true;
+ androidCalendar.foundServerSide = true;
+ }
+
+
+ if (!isCalendarExist) {
+ DavCalendar newCal = this.createNewAndroidCalendar(this, androidCalList.getCalendarList().size(), context);
+ if (newCal != null) {
+ androidCalList.addCalendar(newCal);
+ androidCalendarUri = newCal.getAndroidCalendarUri();
+ }
+ } else {
+ androidCalendarUri = androidCalendar.getAndroidCalendarUri();
+ if (!this.getCalendarColorAsString().equals("")) {
+ //serverCalendar.updateCalendarColor(returnedCalendarUri, serverCalendar);
+ this.updateAndroidCalendar(androidCalendarUri, Calendars.CALENDAR_COLOR, this.getCalendarColor());
+ }
+ if ((this.ContentValues.containsKey(Calendars.CALENDAR_DISPLAY_NAME)) &&
+ (androidCalendar.ContentValues.containsKey(Calendars.CALENDAR_DISPLAY_NAME))) {
+ String serverDisplayName = this.ContentValues.getAsString(Calendars.CALENDAR_DISPLAY_NAME);
+ String clientDisplayName = androidCalendar.ContentValues.getAsString(Calendars.CALENDAR_DISPLAY_NAME);
+ if (!serverDisplayName.equals(clientDisplayName))
+ this.updateAndroidCalendar(androidCalendarUri, Calendars.CALENDAR_DISPLAY_NAME, serverDisplayName);
+ }
+ }
+
+ return androidCalendarUri;
+ }
+
+ /**
+ * COMPAT: the calendar Uri was stored as calendar Name. this function updates the URI (_SYNC_ID)
+ * @param calendarUri the real calendarUri
+ * @return success of this function
+ */
+ private boolean correctSyncID(String calendarUri) {
+ boolean Result = false;
+ Log.v(TAG, "correcting SyncID for calendar:" + this.getContentValueAsString(Calendars.CALENDAR_DISPLAY_NAME));
+
+ ContentValues mUpdateValues = new ContentValues();
+ mUpdateValues.put(DavCalendar.URI, calendarUri);
+
+ try {
+ mProvider.update(this.SyncAdapterCalendar(), mUpdateValues, null, null);
+ Result = true;
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ return Result;
+ }
+
+ /**
+ * COMPAT: the serverurl (CAL_SYNC2) was not sored within a calendar. this fixes it. (see #98)
+ * @param serverUrl the current serverurl
+ * @return success of this function
+ */
+ private boolean correctServerUrl(String serverUrl) {
+ boolean Result = false;
+ Log.v(TAG, "correcting ServerUrl for calendar:" + this.getContentValueAsString(Calendars.CALENDAR_DISPLAY_NAME));
+
+ ContentValues mUpdateValues = new ContentValues();
+ mUpdateValues.put(DavCalendar.SERVERURL, serverUrl);
+
+ try {
+ mProvider.update(this.SyncAdapterCalendar(), mUpdateValues, null, null);
+ Result = true;
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ return Result;
+ }
+
+ /**
+ * creates a new androidCalendar
+ * @param serverCalendar
+ * @param index
+ * @param context
+ * @return the new androidCalendar or null if fails
+ */
+ private DavCalendar createNewAndroidCalendar(DavCalendar serverCalendar, int index, android.content.Context context) {
+ Uri newUri = null;
+ DavCalendar Result = null;
+
+ final ContentValues contentValues = new ContentValues();
+ contentValues.put(DavCalendar.URI, serverCalendar.getURI().toString());
+ contentValues.put(DavCalendar.SERVERURL, this.ServerUrl);
+
+ contentValues.put(Calendars.VISIBLE, 1);
+ contentValues.put(Calendars.CALENDAR_DISPLAY_NAME, serverCalendar.getCalendarDisplayName());
+ contentValues.put(Calendars.ACCOUNT_NAME, mAccount.name);
+ contentValues.put(Calendars.ACCOUNT_TYPE, mAccount.type);
+ contentValues.put(Calendars.OWNER_ACCOUNT, mAccount.name);
+ contentValues.put(Calendars.SYNC_EVENTS, 1);
+ contentValues.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER);
+
+ if (!serverCalendar.getCalendarColorAsString().equals("")) {
+ contentValues.put(Calendars.CALENDAR_COLOR, serverCalendar.getCalendarColor());
+ } else {
+ // find a color
+ //int index = mList.size();
+ index = index % CalendarColors.colors.length;
+ contentValues.put(Calendars.CALENDAR_COLOR, CalendarColors.colors[index]);
+ }
+
+ try {
+ newUri = mProvider.insert(asSyncAdapter(Calendars.CONTENT_URI, mAccount.name, mAccount.type), contentValues);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ // it is possible that this calendar already exists but the provider failed to find it within isCalendarExist()
+ // the adapter would try to create a new calendar but the provider fails again to create a new calendar.
+ if (newUri != null) {
+ long newCalendarId = ContentUris.parseId(newUri);
+
+ Cursor cur = null;
+ Uri uri = Calendars.CONTENT_URI;
+ String selection = "(" + Calendars._ID + " = ?)";
+ String[] selectionArgs = new String[] {String.valueOf(newCalendarId)};
+
+ // Submit the query and get a Cursor object back.
+ try {
+ cur = mProvider.query(uri, null, selection, selectionArgs, null);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+
+ if (cur != null) {
+ while (cur.moveToNext()) {
+ Result = new DavCalendar(mAccount, mProvider, cur, this.Source, this.ServerUrl);
+ Result.foundServerSide = true;
+ }
+ cur.close();
+ //if (Result != null)
+ // this.mList.add(Result);
+ }
+ Log.i(TAG, "New calendar created : URI=" + Result.getAndroidCalendarUri());
+ NotificationsHelper.signalSyncErrors(context, "CalDAV Sync Adapter", "new calendar found: " + Result.getCalendarDisplayName());
+ mNotifyList.add(Result.getAndroidCalendarUri());
+ }
+
+ return Result;
+ }
+
+ /**
+ * there is no corresponding calendar on server side. time to delete this calendar on android side.
+ * @return
+ */
+ public boolean deleteAndroidCalendar() {
+ boolean Result = false;
+
+ String mSelectionClause = "(" + Calendars._ID + " = ?)";
+ int calendarId = this.getAndroidCalendarId();
+ String[] mSelectionArgs = {Long.toString(calendarId)};
+
+ int CountDeleted = 0;
+ try {
+ CountDeleted = mProvider.delete(this.SyncAdapter(), mSelectionClause, mSelectionArgs);
+ Log.i(TAG,"Calendar deleted: " + String.valueOf(calendarId));
+ this.mNotifyList.add(this.getAndroidCalendarUri());
+ Result = true;
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ Log.d(TAG, "Android Calendars deleted: " + Integer.toString(CountDeleted));
+
+ return Result;
+ }
+
+ /**
+ * updates the android calendar
+ * @param calendarUri the uri of the androidCalendar
+ * @param target must be from android.provider.CalendarContract.Calendars
+ * @param value the new value for the target
+ * @throws RemoteException
+ */
+ private void updateAndroidCalendar(Uri calendarUri, String target, int value) throws RemoteException {
+ ContentValues mUpdateValues = new ContentValues();
+ mUpdateValues.put(target, value);
+
+ mProvider.update(asSyncAdapter(calendarUri, mAccount.name, mAccount.type), mUpdateValues, null, null);
+ }
+
+ /**
+ * updates the android calendar
+ * @param calendarUri the uri of the androidCalendar
+ * @param target must be from android.provider.CalendarContract.Calendars
+ * @param value the new value for the target
+ * @throws RemoteException
+ */
+ private void updateAndroidCalendar(Uri calendarUri, String target, String value) throws RemoteException {
+ ContentValues mUpdateValues = new ContentValues();
+ mUpdateValues.put(target, value);
+
+ mProvider.update(asSyncAdapter(calendarUri, mAccount.name, mAccount.type), mUpdateValues, null, null);
+ }
+
+ /**
+ * marks the android event as already handled
+ * @return
+ * @see AndroidEvent#cInternalTag
+ * @see SyncAdapter#synchroniseEvents(CaldavFacade, Account, ContentProviderClient, Uri, DavCalendar, SyncStats)
+ * @throws RemoteException
+ */
+ public boolean tagAndroidEvent(AndroidEvent androidEvent) throws RemoteException {
+ boolean Result = false;
+
+ ContentValues values = new ContentValues();
+ //values.put(Event.INTERNALTAG, 1);
+ values.put(Event.INTERNALTAG, mTagCounter);
+ //values.put(Event.INTERNALTAG, String.valueOf(mTagCounter));
+
+ int RowCount = this.mProvider.update(asSyncAdapter(androidEvent.getUri(), this.mAccount.name, this.mAccount.type), values, null, null);
+ //Log.v(TAG,"event tag nr: " + String.valueOf(mTagCounter));
+ //Log.v(TAG,"Rows updated: " + String.valueOf(RowCount));
+
+ if (RowCount == 1) {
+ Result = true;
+ mTagCounter += 1;
+ } else {
+ Log.v(TAG,"EVENT NOT TAGGED!");
+ }
+
+ return Result;
+ }
+
+ /**
+ * removes the tag of all android events
+ * @return
+ * @see AndroidEvent#cInternalTag
+ * @see SyncAdapter#synchroniseEvents(CaldavFacade, Account, ContentProviderClient, Uri, DavCalendar, SyncStats)
+ * @throws RemoteException
+ */
+ public int untagAndroidEvents() throws RemoteException {
+ int RowCount = 0;
+ int Steps = 100;
+ ContentValues values = new ContentValues();
+ values.put(Event.INTERNALTAG, 0);
+
+ for (int i=1; i < this.mTagCounter; i = i + Steps) {
+ String mSelectionClause = "(CAST(" + Event.INTERNALTAG + " AS INT) >= ?) AND (CAST(" + Event.INTERNALTAG + " AS INT) < ?) AND (" + Events.CALENDAR_ID + " = ?)";
+ String[] mSelectionArgs = {String.valueOf(i), String.valueOf(i + Steps), Long.toString(ContentUris.parseId(this.getAndroidCalendarUri()))};
+ RowCount += this.mProvider.update(asSyncAdapter(Events.CONTENT_URI, this.mAccount.name, this.mAccount.type), values, mSelectionClause, mSelectionArgs);
+ }
+ /*String mSelectionClause = "(" + Event.INTERNALTAG + " > ?) AND (" + Events.CALENDAR_ID + " = ?)";
+ String[] mSelectionArgs = {"0", Long.toString(ContentUris.parseId(this.getAndroidCalendarUri()))};
+ RowCount += this.mProvider.update(asSyncAdapter(Events.CONTENT_URI, this.mAccount.name, this.mAccount.type), values, mSelectionClause, mSelectionArgs);*/
+
+ //Log.d(TAG, "Rows reseted: " + RowCount.toString());
+ return RowCount;
+ }
+ /**
+ * Events not being tagged are for deletion
+ * @return
+ * @see AndroidEvent#cInternalTag
+ * @see SyncAdapter#synchroniseEvents(CaldavFacade, Account, ContentProviderClient, Uri, DavCalendar, SyncStats)
+ * @throws RemoteException
+ */
+ public int deleteUntaggedEvents() throws RemoteException {
+ String mSelectionClause = "(" + Event.INTERNALTAG + " < ?) AND (" + Events.CALENDAR_ID + " = ?)";
+ String[] mSelectionArgs = {"1", Long.toString(ContentUris.parseId(this.getAndroidCalendarUri()))};
+
+ int CountDeleted = this.mProvider.delete(asSyncAdapter(Events.CONTENT_URI, this.mAccount.name, this.mAccount.type), mSelectionClause, mSelectionArgs);
+ //Log.d(TAG, "Rows deleted: " + CountDeleted.toString());
+ return CountDeleted;
+ }
+
+ private Uri SyncAdapterCalendar() {
+ return asSyncAdapter(this.getAndroidCalendarUri(), mAccount.name, mAccount.type);
+ }
+ private Uri SyncAdapter() {
+ return asSyncAdapter(Calendars.CONTENT_URI, mAccount.name, mAccount.type);
+ }
+ private static Uri asSyncAdapter(Uri uri, String account, String accountType) {
+ return uri.buildUpon()
+ .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
+ .appendQueryParameter(Calendars.ACCOUNT_NAME, account)
+ .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
+ }
+
+ public void setAccount(Account account) {
+ this.mAccount = account;
+ }
+ public void setProvider(ContentProviderClient provider) {
+ this.mProvider = provider;
+ }
+
+ /**
+ * general access function to ContentValues
+ * @param Item the item name from Calendars.*
+ * @return the value for the item
+ */
+ private String getContentValueAsString(String Item) {
+ String Result = "";
+ if (this.ContentValues.containsKey(Item))
+ Result = this.ContentValues.getAsString(Item);
+ return Result;
+ }
+ /**
+ * general access function to ContentValues
+ * @param Item the item name from Calendars.*
+ * @return the value for the item
+ */
+ private int getContentValueAsInt(String Item) {
+ int Result = 0;
+ if (this.ContentValues.containsKey(Item))
+ Result = this.ContentValues.getAsInteger(Item);
+ return Result;
+ }
+
+ /**
+ * general access function to ContentValues
+ * @param Item the item name from Calendars.*
+ * @param Value the value for the item
+ * @return success of this function
+ */
+ private boolean setContentValueAsString(String Item, String Value) {
+ boolean Result = false;
+
+ if (this.ContentValues.containsKey(Item))
+ this.ContentValues.remove(Item);
+ this.ContentValues.put(Item, Value);
+
+ return Result;
+ }
+
+ /**
+ * general access function to ContentValues
+ * @param Item the item name from Calendars.*
+ * @param Value the value for the item
+ * @return success of this function
+ */
+ private boolean setContentValueAsInt(String Item, int Value) {
+ boolean Result = false;
+
+ if (this.ContentValues.containsKey(Item))
+ this.ContentValues.remove(Item);
+ this.ContentValues.put(Item, Value);
+
+ return Result;
+ }
+
+ public ArrayList getNotifyList() {
+ return this.mNotifyList;
+ }
+
+ public ArrayList getCalendarEvents() {
+ return this.mCalendarEvents;
+ }
+
+ public boolean readCalendarEvents(CaldavFacade facade) {
+ boolean Result = false;
+
+ try {
+ this.mCalendarEvents = facade.getCalendarEvents(this);
+ Result = true;
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ Result = false;
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ Result = false;
+ } catch (IOException e) {
+ e.printStackTrace();
+ Result = false;
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ Result = false;
+ } catch (SAXException e) {
+ e.printStackTrace();
+ Result = false;
+ }
+
+ return Result;
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/http/HttpDelete.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/http/HttpDelete.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,11 @@
+package org.gege.caldavsyncadapter.caldav.http;
+
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpUriRequest;
+
+public class HttpDelete extends HttpEntityEnclosingRequestBase implements HttpUriRequest {
+ @Override
+ public String getMethod() {
+ return "DELETE";
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/http/HttpPropFind.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/http/HttpPropFind.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,36 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav.http;
+
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpUriRequest;
+
+public class HttpPropFind extends HttpEntityEnclosingRequestBase implements HttpUriRequest {
+
+ @Override
+ public String getMethod() {
+ return "PROPFIND";
+ }
+
+
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/http/HttpPut.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/http/HttpPut.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,11 @@
+package org.gege.caldavsyncadapter.caldav.http;
+
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpUriRequest;
+
+public class HttpPut extends HttpEntityEnclosingRequestBase implements HttpUriRequest {
+ @Override
+ public String getMethod() {
+ return "PUT";
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/http/HttpReport.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/http/HttpReport.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,34 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav.http;
+
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpUriRequest;
+
+public class HttpReport extends HttpEntityEnclosingRequestBase implements HttpUriRequest {
+
+ @Override
+ public String getMethod() {
+ return "REPORT";
+ }
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/CalendarHomeHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/CalendarHomeHandler.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,94 @@
+/**
+ * Copyright (c) 2012-2013, David Wiesner
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav.xml;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gege.caldavsyncadapter.BuildConfig;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import android.util.Log;
+
+public class CalendarHomeHandler extends DefaultHandler {
+
+ private static final String HREF = "href";
+ private static final String CALENDAR_HOME_SET = "calendar-home-set";
+ private boolean isInCalendarHomeSet = false;
+ private StringBuilder stringBuilder = new StringBuilder();
+ private String currentElement;
+ private URI principalURI;
+
+ public List calendarHomeSet = new ArrayList();
+
+ public CalendarHomeHandler(URI principalURI) {
+ this.principalURI = principalURI;
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName,
+ Attributes attributes) throws SAXException {
+ if (CALENDAR_HOME_SET.equals(localName)) {
+ isInCalendarHomeSet = true;
+ }
+ currentElement = localName;
+ stringBuilder.setLength(0);
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length)
+ throws SAXException {
+ if (HREF.equals(currentElement) && isInCalendarHomeSet) {
+ stringBuilder.append(ch, start, length);
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName)
+ throws SAXException {
+ if (HREF.equals(localName) && isInCalendarHomeSet) {
+ String calendarHomeSet = stringBuilder.toString();
+ try {
+ URI calendarHomeSetURI = new URI(calendarHomeSet);
+ calendarHomeSetURI = principalURI.resolve(calendarHomeSetURI);
+ this.calendarHomeSet.add(calendarHomeSetURI);
+ } catch (URISyntaxException e) {
+ if (BuildConfig.DEBUG) {
+ Log.e(CalendarHomeHandler.class.getSimpleName(),
+ "uri malformed: " + calendarHomeSet);
+ } else {
+ Log.e(CalendarHomeHandler.class.getSimpleName(),
+ "uri malformed in calendar-home-set/href");
+ }
+ }
+ //stringBuilder.setLength(0);
+ }
+ if (CALENDAR_HOME_SET.equals(localName)) {
+ isInCalendarHomeSet = false;
+ }
+ currentElement=null;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/CalendarsHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/CalendarsHandler.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2012-2013, David Wiesner
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav.xml;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.gege.caldavsyncadapter.BuildConfig;
+import org.gege.caldavsyncadapter.caldav.entities.DavCalendar;
+import org.gege.caldavsyncadapter.caldav.entities.DavCalendar.CalendarSource;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import android.util.Log;
+
+public class CalendarsHandler extends DefaultHandler {
+
+ private static final String CALENDAR = "calendar";
+ private static final String RESOURCETYPE = "resourcetype";
+ private static final String CALENDAR_COLOR = "calendar-color";
+ private static final String GETCTAG = "getctag";
+ private static final String DISPLAYNAME = "displayname";
+ private URI homeURI;
+
+ public CalendarsHandler(URI homeURI) {
+ this.homeURI = homeURI;
+ }
+
+ private static final String RESPONSE = "response";
+ private static final String HREF = "href";
+
+ private StringBuilder stringBuilder = new StringBuilder();
+ private String currentElement;
+ private DavCalendar calendar;
+ public List calendars = new ArrayList();
+ private boolean isInResourceType = false;
+ private boolean isCalendarResource;
+
+ public final static List TAGS = Arrays.asList(HREF, RESOURCETYPE,
+ DISPLAYNAME, GETCTAG, CALENDAR_COLOR);
+
+ @Override
+ public void startElement(String uri, String localName, String qName,
+ Attributes attributes) throws SAXException {
+ if (RESPONSE.equals(localName)) {
+ calendar = new DavCalendar(CalendarSource.CalDAV);
+ isCalendarResource = false;
+ } else if (RESOURCETYPE.equals(localName)) {
+ isInResourceType = true;
+ } else if (isInResourceType && CALENDAR.equals(localName)) {
+ isCalendarResource = true;
+ }
+ currentElement = localName;
+ stringBuilder.setLength(0);
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length)
+ throws SAXException {
+ if (TAGS.contains(currentElement)) {
+ stringBuilder.append(ch, start, length);
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName)
+ throws SAXException {
+ if (TAGS.contains(localName)) {
+ if (calendar != null) {
+ if (HREF.equals(localName)) {
+ String calendarUrl = stringBuilder.toString();
+ calendarUrl = calendarUrl.trim();
+ try {
+ URI calendarURI = new URI(calendarUrl);
+ calendar.setURI(homeURI.resolve(calendarURI));
+ } catch (URISyntaxException e) {
+ if (BuildConfig.DEBUG) {
+ Log.e(CalendarsHandler.class.getSimpleName(),
+ "calendar-uri malformed: " + calendarUrl);
+ } else {
+ Log.e(CalendarsHandler.class.getSimpleName(),
+ "uri malformed in href");
+ }
+ }
+ } else if (DISPLAYNAME.equals(localName)) {
+ calendar.setCalendarDisplayName(stringBuilder.toString());
+ } else if (GETCTAG.equals(localName)) {
+ calendar.setCTag(stringBuilder.toString(), false);
+ } else if (CALENDAR_COLOR.equals(localName)) {
+ calendar.setCalendarColorAsString(stringBuilder.toString());
+ }
+ }
+ //stringBuilder.setLength(0);
+ } else if (RESPONSE.equals(localName)) {
+ if (isCalendarResource && isValidCalendar(calendar)) {
+ calendars.add(calendar);
+ }
+ }
+ currentElement=null;
+ }
+
+ private boolean isValidCalendar(DavCalendar calendar) {
+ return calendar != null && calendar.getURI() != null
+ && calendar.getcTag() != null
+ && calendar.getCalendarDisplayName() != null;
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/MultiStatusHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/MultiStatusHandler.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+package org.gege.caldavsyncadapter.caldav.xml;
+
+import org.gege.caldavsyncadapter.caldav.xml.sax.MultiStatus;
+import org.gege.caldavsyncadapter.caldav.xml.sax.Prop;
+import org.gege.caldavsyncadapter.caldav.xml.sax.PropStat;
+import org.gege.caldavsyncadapter.caldav.xml.sax.Response;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+
+public class MultiStatusHandler extends DefaultHandler {
+ public MultiStatus mMultiStatus;
+ private Response mResponse;
+ private PropStat mPropStat;
+ private Prop mProp;
+ private String mCurrentValue;
+
+ private String RESPONSE = "response";
+ private String HREF = "href";
+ private String PROPSTAT = "propstat";
+ private String PROP = "prop";
+ private String STATUS = "status";
+ private String CALENDARDATA = "calendar-data";
+ private String GETETAG = "getetag";
+
+ public MultiStatusHandler() {
+ mMultiStatus = new MultiStatus();
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length) throws SAXException {
+ mCurrentValue += new String(ch, start, length);
+ }
+
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+ mCurrentValue = "";
+ if (localName.equals(RESPONSE)) {
+ mResponse = new Response();
+ mMultiStatus.ResponseList.add(mResponse);
+ } else if (localName.equals(PROPSTAT)) {
+ mPropStat = new PropStat();
+ mResponse.propstat = mPropStat;
+ } else if (localName.equals(PROP)) {
+ mProp = new Prop();
+ mPropStat.prop = mProp;
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
+ if (localName.equals(HREF)) {
+ mResponse.href = mCurrentValue;
+ } else if (localName.equals(STATUS)) {
+ if (mPropStat != null)
+ mPropStat.status = mCurrentValue;
+ } else if (localName.equals(CALENDARDATA)) {
+ mProp.calendardata = mCurrentValue;
+ } else if (localName.equals(GETETAG)) {
+ mProp.getetag = mCurrentValue;
+ }
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/ServerInfoHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/ServerInfoHandler.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,81 @@
+/**
+ * Copyright (c) 2012-2013, David Wiesner
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.caldav.xml;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class ServerInfoHandler extends DefaultHandler {
+
+ private static final String HREF = "href";
+ private static final String PRINCIPAL_URL = "principal-URL";
+ private static final String CURRENT_USER_PRINCIPAL = "current-user-principal";
+ private final static List TAGS = Arrays.asList(
+ CURRENT_USER_PRINCIPAL, PRINCIPAL_URL);
+ private StringBuilder stringBuilder = new StringBuilder();
+ private String inParentElement;
+ private String currentElement;
+
+ public String currentUserPrincipal = null;
+ public String principalUrl = null;
+
+ @Override
+ public void startElement(String uri, String localName, String qName,
+ Attributes attributes) throws SAXException {
+ if (TAGS.contains(localName)) {
+ inParentElement = localName;
+ }
+ currentElement = localName;
+ stringBuilder.setLength(0);
+ }
+
+ @Override
+ public void characters(char[] ch, int start, int length)
+ throws SAXException {
+ if (HREF.equals(currentElement) && TAGS.contains(inParentElement)) {
+ stringBuilder.append(ch, start, length);
+ }
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName)
+ throws SAXException {
+ //if (TAGS.contains(inParentElement)) {
+ if (HREF.equals(currentElement) && TAGS.contains(inParentElement)) {
+ if (CURRENT_USER_PRINCIPAL.equals(inParentElement)) {
+ currentUserPrincipal = stringBuilder.toString();
+ } else {
+ principalUrl = stringBuilder.toString();
+ }
+ }
+ if(TAGS.contains(localName)){
+ inParentElement = null;
+ //stringBuilder.setLength(0);
+ }
+ currentElement=null;
+
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/sax/MultiStatus.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/sax/MultiStatus.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,7 @@
+package org.gege.caldavsyncadapter.caldav.xml.sax;
+
+import java.util.ArrayList;
+
+public class MultiStatus {
+ public ArrayList ResponseList = new ArrayList();
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/sax/Prop.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/sax/Prop.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,6 @@
+package org.gege.caldavsyncadapter.caldav.xml.sax;
+
+public class Prop {
+ public String calendardata = "";
+ public String getetag = "";
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/sax/PropStat.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/sax/PropStat.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,6 @@
+package org.gege.caldavsyncadapter.caldav.xml.sax;
+
+public class PropStat {
+ public Prop prop;
+ public String status = "";
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/caldav/xml/sax/Response.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/caldav/xml/sax/Response.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,6 @@
+package org.gege.caldavsyncadapter.caldav.xml.sax;
+
+public class Response {
+ public String href = "";
+ public PropStat propstat;
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/syncadapter/SyncAdapter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/syncadapter/SyncAdapter.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,636 @@
+/**
+ * Copyright (c) 2012-2013, Gerald Garcia, David Wiesner, Timo Berger
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.syncadapter;
+
+import java.io.IOException;
+import java.net.URI;
+//import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+//import java.security.GeneralSecurityException;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import net.fortuna.ical4j.data.ParserException;
+
+import org.apache.http.ParseException;
+import org.apache.http.client.ClientProtocolException;
+import org.gege.caldavsyncadapter.Event;
+import org.gege.caldavsyncadapter.android.entities.AndroidEvent;
+import org.gege.caldavsyncadapter.authenticator.AuthenticatorActivity;
+import org.gege.caldavsyncadapter.caldav.CaldavFacade;
+import org.gege.caldavsyncadapter.caldav.CaldavProtocolException;
+import org.gege.caldavsyncadapter.caldav.entities.DavCalendar;
+import org.gege.caldavsyncadapter.caldav.entities.CalendarEvent;
+import org.gege.caldavsyncadapter.caldav.entities.CalendarList;
+import org.gege.caldavsyncadapter.caldav.entities.DavCalendar.CalendarSource;
+import org.gege.caldavsyncadapter.syncadapter.notifications.NotificationsHelper;
+import org.xml.sax.SAXException;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.AbstractThreadedSyncAdapter;
+import android.content.ContentProviderClient;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.SyncResult;
+import android.content.SyncStats;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.provider.CalendarContract.Attendees;
+import android.provider.CalendarContract.Calendars;
+import android.provider.CalendarContract.Events;
+import android.provider.CalendarContract.Reminders;
+import android.util.Log;
+
+public class SyncAdapter extends AbstractThreadedSyncAdapter {
+
+ private static final String TAG = "SyncAdapter";
+ private AccountManager mAccountManager;
+ private String mVersion = "";
+ private int mCountPerformSync = 0;
+ private int mCountSyncCanceled = 0;
+ private int mCountProviderFailed = 0;
+
+ private int mCountProviderFailedMax = 3;
+// private Context mContext;
+
+
+/* private static final String[] CALENDAR_PROJECTION = new String[] {
+ Calendars._ID, // 0
+ Calendars.ACCOUNT_NAME, // 1
+ Calendars.CALENDAR_DISPLAY_NAME, // 2
+ Calendars.OWNER_ACCOUNT, // 3
+ Calendar.CTAG // 4
+ };*/
+
+/* // The indices for the projection array above.
+ private static final int PROJECTION_ID_INDEX = 0;
+ private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
+ private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;
+ private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;
+*/
+
+/*
+ private static final String[] EVENT_PROJECTION = new String[] {
+ Events._ID,
+ Events._SYNC_ID,
+ Events.SYNC_DATA1,
+ Events.CALENDAR_ID
+ };
+*/
+
+ // ignore same CTag
+ //private static final boolean FORCE_SYNCHRONIZE = false;
+ // drop all calendar before synchro
+ //private static final boolean DROP_CALENDAR_EVENTS = false;
+
+ public SyncAdapter(Context context, boolean autoInitialize) {
+ super(context, autoInitialize);
+ //android.os.Debug.waitForDebugger();
+ mAccountManager = AccountManager.get(context);
+ try {
+ mVersion = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
+ } catch (NameNotFoundException e) {
+ e.printStackTrace();
+ }
+// mContext = context;
+ }
+
+ @Override
+ public void onPerformSync(Account account, Bundle extras, String authority,
+ ContentProviderClient provider, SyncResult syncResult) {
+ boolean bolError = false;
+
+ String url = mAccountManager.getUserData(account, AuthenticatorActivity.USER_DATA_URL_KEY);
+ this.mCountPerformSync += 1;
+ Log.v(TAG, "onPerformSync() count:" + String.valueOf(this.mCountPerformSync) + " on " + account.name + " with URL " + url);
+
+ CalendarList serverCalList;
+
+ CalendarList androidCalList = new CalendarList(account, provider, CalendarSource.Android, url);
+ androidCalList.readCalendarFromClient();
+ ArrayList notifyList = new ArrayList();
+
+ try {
+ String Username = "";
+ String UserDataVersion = mAccountManager.getUserData(account, AuthenticatorActivity.USER_DATA_VERSION);
+ if (UserDataVersion == null) {
+ Username = account.name;
+ } else {
+ Username = mAccountManager.getUserData(account, AuthenticatorActivity.USER_DATA_USERNAME);
+ }
+
+ CaldavFacade facade = new CaldavFacade(Username, mAccountManager.getPassword(account), url);
+ facade.setAccount(account);
+ facade.setProvider(provider);
+ facade.setVersion(mVersion);
+ serverCalList = facade.getCalendarList(this.getContext());
+ //String davProperties = facade.getLastDav();
+ Log.i(TAG, String.valueOf(androidCalList.getCalendarList().size()) + " calendars found at android");
+
+ for (DavCalendar serverCalendar : serverCalList.getCalendarList()) {
+ Log.i(TAG, "Detected calendar name=" + serverCalendar.getCalendarDisplayName() + " URI=" + serverCalendar.getURI());
+
+ Uri androidCalendarUri = serverCalendar.checkAndroidCalendarList(androidCalList, this.getContext());
+
+ // check if the adapter was able to get an existing calendar or create a new one
+ if (androidCalendarUri != null) {
+ // the provider seems to work correct, reset the counter
+ mCountProviderFailed = 0;
+ DavCalendar androidCalendar = androidCalList.getCalendarByAndroidUri(androidCalendarUri);
+
+ //if ((FORCE_SYNCHRONIZE) || (androidCalendar.getcTag() == null) || (!androidCalendar.getcTag().equals(serverCalendar.getcTag()))) {
+ if ((androidCalendar.getcTag() == null) || (!androidCalendar.getcTag().equals(serverCalendar.getcTag()))) {
+ Log.d(TAG, "CTag has changed, something to synchronise");
+ if (serverCalendar.readCalendarEvents(facade)) {
+ this.synchroniseEvents(androidCalendar, serverCalendar, syncResult.stats, notifyList);
+
+ Log.d(TAG, "Updating stored CTag");
+ //serverCalendar.updateAndroidCalendar(androidCalendarUri, Calendar.CTAG, serverCalendar.getcTag());
+ androidCalendar.setCTag(serverCalendar.getcTag(), true);
+ } else {
+ Log.d(TAG, "unable to read events from server calendar");
+ }
+ } else {
+ Log.d(TAG, "CTag has not changed, nothing to do");
+
+ /* this is unnecessary. "SkippedEntries" are:
+ * Counter for tracking how many entries, either from the server or the local store,
+ * were ignored during the sync operation. This could happen if the SyncAdapter detected
+ * some unparsable data but decided to skip it and move on rather than failing immediately.
+ */
+
+ /*long CalendarID = ContentUris.parseId(androidCalendarUri);
+ String selection = "(" + Events.CALENDAR_ID + " = ?)";
+ String[] selectionArgs = new String[] {String.valueOf(CalendarID)};
+ Cursor countCursor = provider.query(Events.CONTENT_URI, new String[] {"count(*) AS count"},
+ selection,
+ selectionArgs,
+ null);
+
+ countCursor.moveToFirst();
+ int count = countCursor.getInt(0);
+ syncResult.stats.numSkippedEntries += count;
+ countCursor.close();*/
+
+ }
+
+ this.checkDirtyAndroidEvents(provider, account, androidCalendarUri, facade, serverCalendar.getURI(), syncResult.stats, notifyList);
+ } else {
+ // this happens if the data provider failes to get an existing or create a new calendar
+ mCountProviderFailed += 1;
+ Log.e(TAG, "failed to get an existing or create a new calendar");
+ syncResult.stats.numIoExceptions += 1;
+ if (mCountProviderFailed >= mCountProviderFailedMax) {
+ // see issue #96
+ NotificationsHelper.signalSyncErrors(this.getContext(), "Caldav sync error (provider failed)", "are you using CyanogenMod in Incognito Mode?");
+ } else {
+ NotificationsHelper.signalSyncErrors(this.getContext(), "Caldav sync error (provider failed)", "the provider failed to get an existing or create a new calendar");
+ }
+ bolError = true;
+ }
+ }
+
+ if (!bolError) {
+ // check whether a calendar is not synced -> delete it at android
+ androidCalList.deleteCalendarOnClientSideOnly(this.getContext());
+ }
+
+ // notify the ContentResolver
+ for (Uri uri : androidCalList.getNotifyList()) {
+ this.getContext().getContentResolver().notifyChange(uri, null);
+ }
+ for (Uri uri : serverCalList.getNotifyList()) {
+ this.getContext().getContentResolver().notifyChange(uri, null);
+ }
+ for (Uri uri : notifyList) {
+ this.getContext().getContentResolver().notifyChange(uri, null);
+ }
+
+ //Log.i(TAG,"Statistiks for Calendar: " + serverCalendar.getURI().toString());
+ //Log.i(TAG,"Statistiks for AndroidCalendar: " + androidCalendar.getAndroidCalendarUri().toString());
+ Log.i(TAG,"Entries: " + String.valueOf(syncResult.stats.numEntries));
+ Log.i(TAG,"Rows inserted: " + String.valueOf(syncResult.stats.numInserts));
+ Log.i(TAG,"Rows updated: " + String.valueOf(syncResult.stats.numUpdates));
+ Log.i(TAG,"Rows deleted: " + String.valueOf(syncResult.stats.numDeletes));
+ Log.i(TAG,"Rows skipped: " + String.valueOf(syncResult.stats.numSkippedEntries));
+ Log.i(TAG,"Io Exceptions: " + String.valueOf(syncResult.stats.numIoExceptions));
+ Log.i(TAG,"Parse Exceptions: " + String.valueOf(syncResult.stats.numParseExceptions));
+ Log.i(TAG,"Auth Exceptions: " + String.valueOf(syncResult.stats.numAuthExceptions));
+ Log.i(TAG,"Conflict Detected Exceptions: " + String.valueOf(syncResult.stats.numConflictDetectedExceptions));
+
+ /*} catch (final AuthenticatorException e) {
+ syncResult.stats.numParseExceptions++;
+ Log.e(TAG, "AuthenticatorException", e);*/
+ /*} catch (final OperationCanceledException e) {
+ Log.e(TAG, "OperationCanceledExcetpion", e);*/
+ } catch (final IOException e) {
+ Log.e(TAG, "IOException", e);
+ syncResult.stats.numIoExceptions++;
+ NotificationsHelper.signalSyncErrors(this.getContext(), "Caldav sync error (IO)", e.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(e);
+ /*} catch (final AuthenticationException e) {
+ //mAccountManager.invalidateAuthToken(Constants.ACCOUNT_TYPE, authtoken);
+ syncResult.stats.numAuthExceptions++;
+ Log.e(TAG, "AuthenticationException", e);*/
+ } catch (final ParseException e) {
+ syncResult.stats.numParseExceptions++;
+ Log.e(TAG, "ParseException", e);
+ NotificationsHelper.signalSyncErrors(this.getContext(), "Caldav sync error (parsing)", e.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(e);
+ /*} catch (final JSONException e) {
+ syncResult.stats.numParseExceptions++;
+ Log.e(TAG, "JSONException", e);*/
+ } catch (Exception e) {
+ Log.e(TAG, "Updating calendar exception " + e.getClass().getName(), e);
+ syncResult.stats.numParseExceptions++;
+ NotificationsHelper.signalSyncErrors(this.getContext(), "Caldav sync error (general)", e.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(e);
+ //throw new RuntimeException(e);
+ }
+ }
+
+ public void onSyncCanceled () {
+ //TODO: implement SyncCanceled
+ this.mCountSyncCanceled += 1;
+ Log.v(TAG, "onSyncCanceled() count:" + String.valueOf(this.mCountSyncCanceled));
+ }
+
+
+ /**
+ * both calender event and android event have been found.
+ * server wins always at the moment.
+ * @param androidCalendar
+ * @param serverCalendar
+ * @param stats
+ * @param notifyList
+ * @throws ClientProtocolException
+ * @throws URISyntaxException
+ * @throws IOException
+ * @throws ParserConfigurationException
+ * @throws SAXException
+ * @throws RemoteException
+ * @throws CaldavProtocolException
+ * @throws ParserException
+ * @see SyncAdapter#updateAndroidEvent(ContentProviderClient, Account, AndroidEvent, CalendarEvent)
+ * @see SyncAdapter#tagAndroidEvent(ContentProviderClient, Account, AndroidEvent)
+ * @see SyncAdapter#untagAndroidEvents(ContentProviderClient, Account, Uri)
+ * @see SyncAdapter#deleteUntaggedEvents(ContentProviderClient, Account, Uri)
+ */
+ private void synchroniseEvents(
+ DavCalendar androidCalendar,
+ DavCalendar serverCalendar,
+ SyncStats stats,
+ ArrayList notifyList
+ ) throws ClientProtocolException, URISyntaxException, IOException, ParserConfigurationException, SAXException, RemoteException, CaldavProtocolException, ParserException {
+
+ /*if (DROP_CALENDAR_EVENTS) {
+ dropAllEvents(account, provider, androidCalendar.getAndroidCalendarUri());
+ }*/
+
+ int rowInsert = 0;
+ int rowUpdate = 0;
+ int rowTag = 0;
+ int rowDelete = 0;
+ int rowUntag = 0;
+ int rowSkip = 0;
+
+ for (CalendarEvent calendarEvent : serverCalendar.getCalendarEvents()) {
+ try {
+ AndroidEvent androidEvent = calendarEvent.getAndroidEvent(androidCalendar);
+
+ Log.i(TAG, "Event " + calendarEvent.getUri().toString()+ " androidUri="+androidEvent);
+
+ if (androidEvent == null) {
+ /* new android event */
+ if (calendarEvent.createAndroidEvent(androidCalendar)) {
+ rowInsert += 1;
+ androidEvent = calendarEvent.getAndroidEvent(androidCalendar);
+ notifyList.add(androidEvent.getUri());
+ } else {
+ rowSkip += 1;
+ }
+ } else {
+ /* the android exists */
+ String androidETag = androidEvent.getETag();
+ if (androidETag == null)
+ androidETag = "";
+ Log.d(TAG, "Event compare: " + androidETag + " <> " + calendarEvent.getETag().toString());
+ if ((androidEvent.getETag() == null) || (!androidETag.equals(calendarEvent.getETag()))) {
+ /* the android event is getting updated */
+ if (calendarEvent.updateAndroidEvent(androidEvent)) {
+ rowUpdate += 1;
+ notifyList.add(androidEvent.getUri());
+ } else {
+ rowSkip += 1;
+ }
+ }
+ }
+ if (androidEvent != null)
+ //if (androidEvent.tagAndroidEvent())
+ if (androidCalendar.tagAndroidEvent(androidEvent))
+ rowTag += 1;
+
+
+ } catch (ParserException ex) {
+ Log.e(TAG, "Parser exception", ex);
+ stats.numParseExceptions++;
+
+ NotificationsHelper.signalSyncErrors(getContext(), "Caldav sync error (parsing)", ex.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(ex);
+ } catch (CaldavProtocolException ex) {
+ Log.e(TAG, "Caldav exception", ex);
+ stats.numParseExceptions++;
+
+ NotificationsHelper.signalSyncErrors(getContext(), "Caldav sync error (caldav)", ex.getMessage());
+ //NotificationsHelper.getCurrentSyncLog().addException(ex);
+ }
+ }
+
+ rowDelete = androidCalendar.deleteUntaggedEvents();
+ rowUntag = androidCalendar.untagAndroidEvents();
+
+ /*Log.i(TAG,"Statistiks for Calendar: " + serverCalendar.getURI().toString());
+ Log.i(TAG,"Statistiks for AndroidCalendar: " + androidCalendar.getAndroidCalendarUri().toString());
+ Log.i(TAG,"Rows inserted: " + String.valueOf(rowInsert));
+ Log.i(TAG,"Rows updated: " + String.valueOf(rowUpdate));
+ Log.i(TAG,"Rows deleted: " + String.valueOf(rowDelete));
+ Log.i(TAG,"Rows skipped: " + String.valueOf(rowSkip));*/
+ Log.i(TAG,"Rows tagged: " + String.valueOf(rowTag));
+ Log.i(TAG,"Rows untagged: " + String.valueOf(rowUntag));
+
+ stats.numInserts += rowInsert;
+ stats.numUpdates += rowUpdate;
+ stats.numDeletes += rowDelete;
+ stats.numSkippedEntries += rowSkip;
+ stats.numEntries += rowInsert + rowUpdate + rowDelete;
+
+ }
+
+ /**
+ * checks the android events for the dirty flag.
+ * the flag is set by android when the event has been changed.
+ * the dirty flag is removed when an android event has been updated from calendar event
+ * @param provider
+ * @param account
+ * @param calendarUri
+ * @param facade
+ * @param caldavCalendarUri
+ * @param stats
+ * @param notifyList
+ * @return count of dirty events
+ */
+ private int checkDirtyAndroidEvents(
+ ContentProviderClient provider,
+ Account account,
+ Uri calendarUri,
+ CaldavFacade facade,
+ URI caldavCalendarUri,
+ SyncStats stats,
+ ArrayList notifyList
+ ) {
+ Cursor curEvent = null;
+ Cursor curAttendee = null;
+ Cursor curReminder = null;
+ Long EventID;
+ Long CalendarID;
+ AndroidEvent androidEvent = null;
+ int rowDirty = 0;
+ int rowInsert = 0;
+ int rowUpdate = 0;
+ int rowDelete = 0;
+
+ try {
+ CalendarID = ContentUris.parseId(calendarUri);
+ String selection = "(" + Events.DIRTY + " = ?) AND (" + Events.CALENDAR_ID + " = ?)";
+ String[] selectionArgs = new String[] {"1", CalendarID.toString()};
+ curEvent = provider.query(Events.CONTENT_URI, null, selection, selectionArgs, null);
+
+ while (curEvent.moveToNext()) {
+ EventID = curEvent.getLong(curEvent.getColumnIndex(Events._ID));
+ Uri returnedUri = ContentUris.withAppendedId(Events.CONTENT_URI, EventID);
+
+ //androidEvent = new AndroidEvent(account, provider, returnedUri, calendarUri);
+ androidEvent = new AndroidEvent(returnedUri, calendarUri);
+ androidEvent.readContentValues(curEvent);
+
+ selection = "(" + Attendees.EVENT_ID + " = ?)";
+ selectionArgs = new String[] {String.valueOf(EventID)};
+ curAttendee = provider.query(Attendees.CONTENT_URI, null, selection, selectionArgs, null);
+ selection = "(" + Reminders.EVENT_ID + " = ?)";
+ selectionArgs = new String[] {String.valueOf(EventID)};
+ curReminder = provider.query(Reminders.CONTENT_URI, null, selection, selectionArgs, null);
+ androidEvent.readAttendees(curAttendee);
+ androidEvent.readReminder(curReminder);
+ curAttendee.close();
+ curReminder.close();
+
+ String SyncID = androidEvent.ContentValues.getAsString(Events._SYNC_ID);
+
+ boolean Deleted = false;
+ int intDeleted = 0;
+ intDeleted = curEvent.getInt(curEvent.getColumnIndex(Events.DELETED));
+ Deleted = (intDeleted == 1);
+
+ if (SyncID == null) {
+ // new Android event
+ String newGUID = java.util.UUID.randomUUID().toString() + "-caldavsyncadapter";
+ String calendarPath = caldavCalendarUri.getPath();
+ if (!calendarPath.endsWith("/"))
+ calendarPath += "/";
+
+ SyncID = calendarPath + newGUID + ".ics";
+
+ androidEvent.createIcs(newGUID);
+
+ if (facade.createEvent(URI.create(SyncID), androidEvent.getIcsEvent().toString())) {
+ //HINT: bugfix for google calendar replace("@", "%40")
+ if (SyncID.contains("@"))
+ SyncID = SyncID.replace("@", "%40");
+ ContentValues values = new ContentValues();
+ values.put(Events._SYNC_ID, SyncID);
+
+ //google doesn't send the etag after creation
+ //HINT: my SabreDAV send always the same etag after putting a new event
+ //String LastETag = facade.getLastETag();
+ //if (!LastETag.equals("")) {
+ // values.put(Event.ETAG, LastETag);
+ //} else {
+ //so get the etag with a new REPORT
+ CalendarEvent calendarEvent = new CalendarEvent(account, provider);
+ calendarEvent.calendarURL = caldavCalendarUri.toURL();
+ URI SyncURI = new URI(SyncID);
+ calendarEvent.setUri(SyncURI);
+ CaldavFacade.getEvent(calendarEvent);
+ values.put(Event.ETAG, calendarEvent.getETag());
+ //}
+ values.put(Event.UID, newGUID);
+ values.put(Events.DIRTY, 0);
+ values.put(Event.RAWDATA, androidEvent.getIcsEvent().toString());
+
+ int rowCount = provider.update(asSyncAdapter(androidEvent.getUri(), account.name, account.type), values, null, null);
+ if (rowCount == 1) {
+ rowInsert += 1;
+ notifyList.add(androidEvent.getUri());
+ }
+ }
+ } else if (Deleted) {
+ // deleted Android event
+ if (facade.deleteEvent(URI.create(SyncID), androidEvent.getETag())) {
+ String mSelectionClause = "(" + Events._ID + "= ?)";
+ String[] mSelectionArgs = {String.valueOf(EventID)};
+
+ int countDeleted = provider.delete(asSyncAdapter(Events.CONTENT_URI, account.name, account.type), mSelectionClause, mSelectionArgs);
+
+ if (countDeleted == 1) {
+ rowDelete += 1;
+ notifyList.add(androidEvent.getUri());
+ }
+ }
+ } else {
+ //update the android event to the server
+ String uid = androidEvent.getUID();
+ if ((uid == null) || (uid.equals(""))) {
+ //COMPAT: this is needed because in the past, the UID was not stored in the android event
+ CalendarEvent calendarEvent = new CalendarEvent(account, provider);
+ URI syncURI = new URI(SyncID);
+ calendarEvent.setUri(syncURI);
+ calendarEvent.calendarURL = caldavCalendarUri.toURL();
+ if (calendarEvent.fetchBody()) {
+ calendarEvent.readContentValues();
+ uid = calendarEvent.getUID();
+ }
+ }
+ if (uid != null) {
+ androidEvent.createIcs(uid);
+
+ if (facade.updateEvent(URI.create(SyncID), androidEvent.getIcsEvent().toString(), androidEvent.getETag())) {
+ selection = "(" + Events._ID + "= ?)";
+ selectionArgs = new String[] {EventID.toString()};
+ androidEvent.ContentValues.put(Events.DIRTY, 0);
+
+ //google doesn't send the etag after update
+ String LastETag = facade.getLastETag();
+ if (!LastETag.equals("")) {
+ androidEvent.ContentValues.put(Event.ETAG, LastETag);
+ } else {
+ //so get the etag with a new REPORT
+ CalendarEvent calendarEvent = new CalendarEvent(account, provider);
+ calendarEvent.calendarURL = caldavCalendarUri.toURL();
+ URI SyncURI = new URI(SyncID);
+ calendarEvent.setUri(SyncURI);
+ CaldavFacade.getEvent(calendarEvent);
+ androidEvent.ContentValues.put(Event.ETAG, calendarEvent.getETag());
+ }
+ androidEvent.ContentValues.put(Event.RAWDATA, androidEvent.getIcsEvent().toString());
+ int RowCount = provider.update(asSyncAdapter(androidEvent.getUri(), account.name, account.type), androidEvent.ContentValues, null, null);
+
+ if (RowCount == 1) {
+ rowUpdate += 1;
+ notifyList.add(androidEvent.getUri());
+ }
+ } else {
+ rowDirty += 1;
+ }
+ } else {
+ rowDirty += 1;
+ }
+ }
+ }
+ curEvent.close();
+
+ /*if ((rowInsert > 0) || (rowUpdate > 0) || (rowDelete > 0) || (rowDirty > 0)) {
+ Log.i(TAG,"Android Rows inserted: " + String.valueOf(rowInsert));
+ Log.i(TAG,"Android Rows updated: " + String.valueOf(rowUpdate));
+ Log.i(TAG,"Android Rows deleted: " + String.valueOf(rowDelete));
+ Log.i(TAG,"Android Rows dirty: " + String.valueOf(rowDirty));
+ }*/
+
+ stats.numInserts += rowInsert;
+ stats.numUpdates += rowUpdate;
+ stats.numDeletes += rowDelete;
+ stats.numSkippedEntries += rowDirty;
+ stats.numEntries += rowInsert + rowUpdate + rowDelete;
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ } catch (URISyntaxException e) {
+ // TODO Automatisch generierter Erfassungsblock
+ e.printStackTrace();
+ } catch (ClientProtocolException e) {
+ // TODO Automatisch generierter Erfassungsblock
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Automatisch generierter Erfassungsblock
+ e.printStackTrace();
+ } catch (CaldavProtocolException e) {
+ // TODO Automatisch generierter Erfassungsblock
+ e.printStackTrace();
+ } catch (ParserException e) {
+ // TODO Automatisch generierter Erfassungsblock
+ e.printStackTrace();
+ }
+
+ return rowDirty;
+ }
+
+/* private Account UpgradeAccount(Account OldAccount) {
+ String Username = OldAccount.name;
+ String Type = OldAccount.type;
+ String Password = this.mAccountManager.getPassword(OldAccount);
+ String Url = this.mAccountManager.getUserData(OldAccount, AuthenticatorActivity.USER_DATA_URL_KEY);
+
+ Account NewAccount = new Account(Username + AuthenticatorActivity.ACCOUNT_NAME_SPLITTER + Url, Type);
+ if (this.mAccountManager.addAccountExplicitly(NewAccount, Password, null)) {
+ this.mAccountManager.setUserData(NewAccount, AuthenticatorActivity.USER_DATA_URL_KEY, Url);
+ this.mAccountManager.setUserData(NewAccount, AuthenticatorActivity.USER_DATA_USERNAME, Username);
+ }
+ this.mAccountManager.removeAccount(OldAccount, null, null);
+
+ return NewAccount;
+ }*/
+
+/* private void dropAllEvents(Account account, ContentProviderClient provider, Uri calendarUri) throws RemoteException {
+
+ Log.i(TAG, "Deleting all calendar events for "+calendarUri);
+
+ String selection = "(" + Events.CALENDAR_ID + " = ?)";
+ String[] selectionArgs = new String[] {Long.toString(ContentUris.parseId(calendarUri))};
+
+ provider.delete(asSyncAdapter(Events.CONTENT_URI, account.name, account.type),
+ selection, selectionArgs);
+
+ }*/
+
+ private static Uri asSyncAdapter(Uri uri, String account, String accountType) {
+ return uri.buildUpon()
+ .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
+ .appendQueryParameter(Calendars.ACCOUNT_NAME, account)
+ .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
+ }
+
+}
+
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/syncadapter/SyncService.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/syncadapter/SyncService.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2012-2013, David Wiesner
+ *
+ * This file is part of Andoid Caldav Sync Adapter Free.
+ *
+ * Andoid Caldav Sync Adapter Free is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3 of the
+ * License, or at your option any later version.
+ *
+ * Andoid Caldav Sync Adapter Free is distributed in the hope that
+ * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Andoid Caldav Sync Adapter Free.
+ * If not, see .
+ *
+ */
+
+package org.gege.caldavsyncadapter.syncadapter;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+public class SyncService extends Service {
+ private static final Object sSyncAdapterLock = new Object();
+
+ private static SyncAdapter sSyncAdapter = null;
+
+ @Override
+ public void onCreate() {
+ synchronized (sSyncAdapterLock) {
+ if (sSyncAdapter == null) {
+ sSyncAdapter = new SyncAdapter(getApplicationContext(), true);
+ }
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return sSyncAdapter.getSyncAdapterBinder();
+ }
+}
diff -r 000000000000 -r fb9019fb1bf7 src/org/gege/caldavsyncadapter/syncadapter/notifications/NotificationsHelper.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/gege/caldavsyncadapter/syncadapter/notifications/NotificationsHelper.java Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,56 @@
+package org.gege.caldavsyncadapter.syncadapter.notifications;
+
+import org.gege.caldavsyncadapter.R;
+
+import android.app.NotificationManager;
+//import android.app.PendingIntent;
+import android.content.Context;
+//import android.content.Intent;
+import android.support.v4.app.NotificationCompat;
+//import android.support.v4.app.TaskStackBuilder;
+
+public class NotificationsHelper {
+
+ /*static SyncLog currentSyncLog = new SyncLog();
+ doesn't exist */
+
+ public static void signalSyncErrors(Context context, String title, String text) {
+ NotificationCompat.Builder mBuilder =
+ new NotificationCompat.Builder(context)
+ .setSmallIcon(R.drawable.icon)
+ .setContentTitle(title)
+ .setContentText(text);
+
+ // Creates an explicit intent for an Activity in your app
+/* Intent resultIntent = new Intent(context, SyncStatusReportActivity.class);
+
+ // The stack builder object will contain an artificial back stack for the
+ // started Activity.
+ // This ensures that navigating backward from the Activity leads out of
+ // your application to the Home screen.
+ TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
+ // Adds the back stack for the Intent (but not the Intent itself)
+ stackBuilder.addParentStack(SyncStatusReportActivity.class);
+ // Adds the Intent that starts the Activity to the top of the stack
+ stackBuilder.addNextIntent(resultIntent);
+ PendingIntent resultPendingIntent =
+ stackBuilder.getPendingIntent(
+ 0,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+ mBuilder.setContentIntent(resultPendingIntent);
+*/
+
+ NotificationManager mNotificationManager =
+ (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+
+ // mId allows you to update the notification later on.
+ int mId = 0;
+ mNotificationManager.notify(mId, mBuilder.build());
+ }
+
+ /*public static SyncLog getCurrentSyncLog() {
+ return currentSyncLog;
+ }*/
+
+}
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Abidjan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Abidjan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Abidjan
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Abidjan
+X-LIC-LOCATION:Africa/Abidjan
+BEGIN:STANDARD
+TZOFFSETFROM:-001608
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Accra.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Accra.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,42 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Accra
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Accra
+X-LIC-LOCATION:Africa/Accra
+BEGIN:STANDARD
+TZOFFSETFROM:-000052
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19180101T000000
+RDATE:19180101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0020
+TZNAME:GHST
+DTSTART:19360901T000000
+RDATE:19360901T000000
+RDATE:19370901T000000
+RDATE:19380901T000000
+RDATE:19390901T000000
+RDATE:19400901T000000
+RDATE:19410901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0020
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19361231T000000
+RDATE:19361231T000000
+RDATE:19371231T000000
+RDATE:19381231T000000
+RDATE:19391231T000000
+RDATE:19401231T000000
+RDATE:19411231T000000
+RDATE:19421231T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Addis_Ababa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Addis_Ababa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Addis_Ababa
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Addis_Ababa
+X-LIC-LOCATION:Africa/Addis_Ababa
+BEGIN:STANDARD
+TZOFFSETFROM:+023448
+TZOFFSETTO:+023520
+TZNAME:ADMT
+DTSTART:18700101T000000
+RDATE:18700101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+023520
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19360505T000000
+RDATE:19360505T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Algiers.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Algiers.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,91 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Algiers
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Algiers
+X-LIC-LOCATION:Africa/Algiers
+BEGIN:STANDARD
+TZOFFSETFROM:+001212
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18910315T000100
+RDATE:18910315T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19110311T000000
+RDATE:19110311T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160614T230000
+RDATE:19160614T230000
+RDATE:19170324T230000
+RDATE:19180309T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19390911T230000
+RDATE:19710425T230000
+RDATE:19770506T000000
+RDATE:19800425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161002T000000
+RDATE:19161002T000000
+RDATE:19171008T000000
+RDATE:19181007T000000
+RDATE:19191006T000000
+RDATE:19201024T000000
+RDATE:19210622T000000
+RDATE:19391119T010000
+RDATE:19461007T000000
+RDATE:19630414T000000
+RDATE:19710927T000000
+RDATE:19791026T000000
+RDATE:19801031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19400225T020000
+RDATE:19400225T020000
+RDATE:19560129T000000
+RDATE:19810501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440403T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19780324T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19441008T020000
+RDATE:19441008T020000
+RDATE:19450916T010000
+RDATE:19780922T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19771021T000000
+RDATE:19771021T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Asmara.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Asmara.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Asmara
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Asmara
+X-LIC-LOCATION:Africa/Asmara
+BEGIN:STANDARD
+TZOFFSETFROM:+023532
+TZOFFSETTO:+023532
+TZNAME:AMT
+DTSTART:18700101T000000
+RDATE:18700101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+023532
+TZOFFSETTO:+023520
+TZNAME:ADMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+023520
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19360505T000000
+RDATE:19360505T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Bamako.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Bamako.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bamako
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Bamako
+X-LIC-LOCATION:Africa/Bamako
+BEGIN:STANDARD
+TZOFFSETFROM:-0032
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19600620T000000
+RDATE:19600620T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Bangui.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Bangui.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bangui
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Bangui
+X-LIC-LOCATION:Africa/Bangui
+BEGIN:STANDARD
+TZOFFSETFROM:+011420
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Banjul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Banjul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Banjul
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Banjul
+X-LIC-LOCATION:Africa/Banjul
+BEGIN:STANDARD
+TZOFFSETFROM:-010636
+TZOFFSETTO:-010636
+TZNAME:BMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010636
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19350101T000000
+RDATE:19350101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Bissau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Bissau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bissau
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Bissau
+X-LIC-LOCATION:Africa/Bissau
+BEGIN:STANDARD
+TZOFFSETFROM:-010220
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19110526T000000
+RDATE:19110526T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19750101T000000
+RDATE:19750101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Blantyre.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Blantyre.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Blantyre
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Blantyre
+X-LIC-LOCATION:Africa/Blantyre
+BEGIN:STANDARD
+TZOFFSETFROM:+0220
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Brazzaville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Brazzaville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Brazzaville
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Brazzaville
+X-LIC-LOCATION:Africa/Brazzaville
+BEGIN:STANDARD
+TZOFFSETFROM:+010108
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Bujumbura.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Bujumbura.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bujumbura
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Bujumbura
+X-LIC-LOCATION:Africa/Bujumbura
+BEGIN:STANDARD
+TZOFFSETFROM:+015728
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Cairo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Cairo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,150 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Cairo
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Cairo
+X-LIC-LOCATION:Africa/Cairo
+BEGIN:STANDARD
+TZOFFSETFROM:+0205
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19001001T000000
+RDATE:19001001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19400715T000000
+RDATE:19400715T000000
+RDATE:19410415T000000
+RDATE:19420401T000000
+RDATE:19430401T000000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19590501T010000
+RDATE:19600501T010000
+RDATE:19610501T010000
+RDATE:19620501T010000
+RDATE:19630501T010000
+RDATE:19640501T010000
+RDATE:19650501T010000
+RDATE:19660501T010000
+RDATE:19670501T010000
+RDATE:19680501T010000
+RDATE:19690501T010000
+RDATE:19700501T010000
+RDATE:19710501T010000
+RDATE:19720501T010000
+RDATE:19730501T010000
+RDATE:19740501T010000
+RDATE:19750501T010000
+RDATE:19760501T010000
+RDATE:19770501T010000
+RDATE:19780501T010000
+RDATE:19790501T010000
+RDATE:19800501T010000
+RDATE:19810501T010000
+RDATE:19820725T010000
+RDATE:19830712T010000
+RDATE:19840501T010000
+RDATE:19850501T010000
+RDATE:19860501T010000
+RDATE:19870501T010000
+RDATE:19880501T010000
+RDATE:19890506T010000
+RDATE:19900501T010000
+RDATE:19910501T010000
+RDATE:19920501T010000
+RDATE:19930501T010000
+RDATE:19940501T010000
+RDATE:19950428T000000
+RDATE:19960426T000000
+RDATE:19970425T000000
+RDATE:19980424T000000
+RDATE:19990430T000000
+RDATE:20000428T000000
+RDATE:20010427T000000
+RDATE:20020426T000000
+RDATE:20030425T000000
+RDATE:20040430T000000
+RDATE:20050429T000000
+RDATE:20060428T000000
+RDATE:20070427T000000
+RDATE:20080425T000000
+RDATE:20090424T000000
+RDATE:20100430T000000
+RDATE:20100910T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19410916T000000
+RDATE:19421027T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19590930T030000
+RDATE:19600930T030000
+RDATE:19610930T030000
+RDATE:19620930T030000
+RDATE:19630930T030000
+RDATE:19640930T030000
+RDATE:19650930T030000
+RDATE:19661001T030000
+RDATE:19671001T030000
+RDATE:19681001T030000
+RDATE:19691001T030000
+RDATE:19701001T030000
+RDATE:19711001T030000
+RDATE:19721001T030000
+RDATE:19731001T030000
+RDATE:19741001T030000
+RDATE:19751001T030000
+RDATE:19761001T030000
+RDATE:19771001T030000
+RDATE:19781001T030000
+RDATE:19791001T030000
+RDATE:19801001T030000
+RDATE:19811001T030000
+RDATE:19821001T030000
+RDATE:19831001T030000
+RDATE:19841001T030000
+RDATE:19851001T030000
+RDATE:19861001T030000
+RDATE:19871001T030000
+RDATE:19881001T030000
+RDATE:19891001T030000
+RDATE:19901001T030000
+RDATE:19911001T030000
+RDATE:19921001T030000
+RDATE:19931001T030000
+RDATE:19941001T030000
+RDATE:19950929T000000
+RDATE:19960927T000000
+RDATE:19970926T000000
+RDATE:19980925T000000
+RDATE:19991001T000000
+RDATE:20000929T000000
+RDATE:20010928T000000
+RDATE:20020927T000000
+RDATE:20030926T000000
+RDATE:20041001T000000
+RDATE:20050930T000000
+RDATE:20060922T000000
+RDATE:20070907T000000
+RDATE:20080829T000000
+RDATE:20090821T000000
+RDATE:20100811T000000
+RDATE:20101001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Casablanca.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Casablanca.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,60 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Casablanca
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Casablanca
+X-LIC-LOCATION:Africa/Casablanca
+BEGIN:STANDARD
+TZOFFSETFROM:-003020
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19131026T000000
+RDATE:19131026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19390912T000000
+RDATE:19390912T000000
+RDATE:19400225T000000
+RDATE:19500611T000000
+RDATE:19670603T120000
+RDATE:19740624T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780601T000000
+RDATE:20080601T000000
+RDATE:20090601T000000
+RDATE:20100502T000000
+RDATE:20110403T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19391119T000000
+RDATE:19391119T000000
+RDATE:19451118T000000
+RDATE:19501029T000000
+RDATE:19671001T000000
+RDATE:19740901T000000
+RDATE:19760801T000000
+RDATE:19770928T000000
+RDATE:19780804T000000
+RDATE:19860101T000000
+RDATE:20080901T000000
+RDATE:20090821T000000
+RDATE:20100808T000000
+RDATE:20110731T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19840316T000000
+RDATE:19840316T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Ceuta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Ceuta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,100 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Ceuta
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Ceuta
+X-LIC-LOCATION:Africa/Ceuta
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002116
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19180506T230000
+RDATE:19180506T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19670603T120000
+RDATE:19740624T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780601T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19181007T230000
+RDATE:19181007T230000
+RDATE:19241005T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19671001T000000
+RDATE:19740901T000000
+RDATE:19760801T000000
+RDATE:19770928T000000
+RDATE:19780804T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19290101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19840316T000000
+RDATE:19840316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19860101T000000
+RDATE:19860101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19860928T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Conakry.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Conakry.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Conakry
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Conakry
+X-LIC-LOCATION:Africa/Conakry
+BEGIN:STANDARD
+TZOFFSETFROM:-005452
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Dakar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Dakar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Dakar
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Dakar
+X-LIC-LOCATION:Africa/Dakar
+BEGIN:STANDARD
+TZOFFSETFROM:-010944
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19410601T000000
+RDATE:19410601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Dar_es_Salaam.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Dar_es_Salaam.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Dar_es_Salaam
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Dar_es_Salaam
+X-LIC-LOCATION:Africa/Dar_es_Salaam
+BEGIN:STANDARD
+TZOFFSETFROM:+023708
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0245
+TZNAME:BEAUT
+DTSTART:19480101T000000
+RDATE:19480101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19610101T000000
+RDATE:19610101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Djibouti.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Djibouti.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Djibouti
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Djibouti
+X-LIC-LOCATION:Africa/Djibouti
+BEGIN:STANDARD
+TZOFFSETFROM:+025236
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Douala.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Douala.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Douala
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Douala
+X-LIC-LOCATION:Africa/Douala
+BEGIN:STANDARD
+TZOFFSETFROM:+003848
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/El_Aaiun.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/El_Aaiun.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/El_Aaiun
+TZURL:http://tzurl.org/zoneinfo-global/Africa/El_Aaiun
+X-LIC-LOCATION:Africa/El_Aaiun
+BEGIN:STANDARD
+TZOFFSETFROM:-005248
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340101T000000
+RDATE:19340101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19760414T000000
+RDATE:19760414T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Freetown.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Freetown.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,82 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Freetown
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Freetown
+X-LIC-LOCATION:Africa/Freetown
+BEGIN:STANDARD
+TZOFFSETFROM:-0053
+TZOFFSETTO:-0053
+TZNAME:FMT
+DTSTART:18820101T000000
+RDATE:18820101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0053
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19130601T000000
+RDATE:19130601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0020
+TZNAME:SLST
+DTSTART:19350601T000000
+RDATE:19350601T000000
+RDATE:19360601T000000
+RDATE:19370601T000000
+RDATE:19380601T000000
+RDATE:19390601T000000
+RDATE:19400601T000000
+RDATE:19410601T000000
+RDATE:19420601T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0020
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19351001T000000
+RDATE:19351001T000000
+RDATE:19361001T000000
+RDATE:19371001T000000
+RDATE:19381001T000000
+RDATE:19391001T000000
+RDATE:19401001T000000
+RDATE:19411001T000000
+RDATE:19421001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:SLST
+DTSTART:19570601T000000
+RDATE:19570601T000000
+RDATE:19580601T000000
+RDATE:19590601T000000
+RDATE:19600601T000000
+RDATE:19610601T000000
+RDATE:19620601T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19570901T000000
+RDATE:19570901T000000
+RDATE:19580901T000000
+RDATE:19590901T000000
+RDATE:19600901T000000
+RDATE:19610901T000000
+RDATE:19620901T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Gaborone.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Gaborone.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Gaborone
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Gaborone
+X-LIC-LOCATION:Africa/Gaborone
+BEGIN:STANDARD
+TZOFFSETFROM:+014340
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:18850101T000000
+RDATE:18850101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CAST
+DTSTART:19430919T020000
+RDATE:19430919T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19440319T020000
+RDATE:19440319T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Harare.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Harare.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Harare
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Harare
+X-LIC-LOCATION:Africa/Harare
+BEGIN:STANDARD
+TZOFFSETFROM:+020412
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Johannesburg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Johannesburg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,39 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Johannesburg
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Johannesburg
+X-LIC-LOCATION:Africa/Johannesburg
+BEGIN:STANDARD
+TZOFFSETFROM:+0152
+TZOFFSETTO:+0130
+TZNAME:SAST
+DTSTART:18920208T000000
+RDATE:18920208T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:SAST
+DTSTART:19420920T020000
+RDATE:19420920T020000
+RDATE:19430919T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19430321T020000
+RDATE:19430321T020000
+RDATE:19440319T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Juba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Juba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Juba
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Juba
+X-LIC-LOCATION:Africa/Juba
+BEGIN:STANDARD
+TZOFFSETFROM:+020624
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CAST
+DTSTART:19700501T000000
+RDATE:19700501T000000
+RDATE:19710430T000000
+RDATE:19720430T000000
+RDATE:19730429T000000
+RDATE:19740428T000000
+RDATE:19750427T000000
+RDATE:19760425T000000
+RDATE:19770424T000000
+RDATE:19780430T000000
+RDATE:19790429T000000
+RDATE:19800427T000000
+RDATE:19810426T000000
+RDATE:19820425T000000
+RDATE:19830424T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19701015T000000
+RDATE:19701015T000000
+RDATE:19711015T000000
+RDATE:19721015T000000
+RDATE:19731015T000000
+RDATE:19741015T000000
+RDATE:19751015T000000
+RDATE:19761015T000000
+RDATE:19771015T000000
+RDATE:19781015T000000
+RDATE:19791015T000000
+RDATE:19801015T000000
+RDATE:19811015T000000
+RDATE:19821015T000000
+RDATE:19831015T000000
+RDATE:19841015T000000
+RDATE:19851015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:20000115T120000
+RDATE:20000115T120000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Kampala.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Kampala.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Kampala
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Kampala
+X-LIC-LOCATION:Africa/Kampala
+BEGIN:STANDARD
+TZOFFSETFROM:+020940
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19280701T000000
+RDATE:19280701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+TZNAME:BEAT
+DTSTART:19300101T000000
+RDATE:19300101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0245
+TZNAME:BEAUT
+DTSTART:19480101T000000
+RDATE:19480101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Khartoum.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Khartoum.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Khartoum
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Khartoum
+X-LIC-LOCATION:Africa/Khartoum
+BEGIN:STANDARD
+TZOFFSETFROM:+021008
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CAST
+DTSTART:19700501T000000
+RDATE:19700501T000000
+RDATE:19710430T000000
+RDATE:19720430T000000
+RDATE:19730429T000000
+RDATE:19740428T000000
+RDATE:19750427T000000
+RDATE:19760425T000000
+RDATE:19770424T000000
+RDATE:19780430T000000
+RDATE:19790429T000000
+RDATE:19800427T000000
+RDATE:19810426T000000
+RDATE:19820425T000000
+RDATE:19830424T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19701015T000000
+RDATE:19701015T000000
+RDATE:19711015T000000
+RDATE:19721015T000000
+RDATE:19731015T000000
+RDATE:19741015T000000
+RDATE:19751015T000000
+RDATE:19761015T000000
+RDATE:19771015T000000
+RDATE:19781015T000000
+RDATE:19791015T000000
+RDATE:19801015T000000
+RDATE:19811015T000000
+RDATE:19821015T000000
+RDATE:19831015T000000
+RDATE:19841015T000000
+RDATE:19851015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:20000115T120000
+RDATE:20000115T120000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Kigali.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Kigali.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Kigali
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Kigali
+X-LIC-LOCATION:Africa/Kigali
+BEGIN:STANDARD
+TZOFFSETFROM:+020016
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19350601T000000
+RDATE:19350601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Kinshasa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Kinshasa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Kinshasa
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Kinshasa
+X-LIC-LOCATION:Africa/Kinshasa
+BEGIN:STANDARD
+TZOFFSETFROM:+010112
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:18971109T000000
+RDATE:18971109T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Lagos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Lagos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lagos
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Lagos
+X-LIC-LOCATION:Africa/Lagos
+BEGIN:STANDARD
+TZOFFSETFROM:+001336
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19190901T000000
+RDATE:19190901T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Libreville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Libreville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Libreville
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Libreville
+X-LIC-LOCATION:Africa/Libreville
+BEGIN:STANDARD
+TZOFFSETFROM:+003748
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Lome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Lome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lome
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Lome
+X-LIC-LOCATION:Africa/Lome
+BEGIN:STANDARD
+TZOFFSETFROM:+000452
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18930101T000000
+RDATE:18930101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Luanda.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Luanda.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Luanda
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Luanda
+X-LIC-LOCATION:Africa/Luanda
+BEGIN:STANDARD
+TZOFFSETFROM:+005256
+TZOFFSETTO:+005204
+TZNAME:AOT
+DTSTART:18920101T000000
+RDATE:18920101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005204
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19110526T000000
+RDATE:19110526T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Lubumbashi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Lubumbashi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lubumbashi
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Lubumbashi
+X-LIC-LOCATION:Africa/Lubumbashi
+BEGIN:STANDARD
+TZOFFSETFROM:+014952
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:18971109T000000
+RDATE:18971109T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Lusaka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Lusaka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lusaka
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Lusaka
+X-LIC-LOCATION:Africa/Lusaka
+BEGIN:STANDARD
+TZOFFSETFROM:+015308
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Malabo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Malabo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Malabo
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Malabo
+X-LIC-LOCATION:Africa/Malabo
+BEGIN:STANDARD
+TZOFFSETFROM:+003508
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19631215T000000
+RDATE:19631215T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Maputo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Maputo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Maputo
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Maputo
+X-LIC-LOCATION:Africa/Maputo
+BEGIN:STANDARD
+TZOFFSETFROM:+021020
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Maseru.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Maseru.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Maseru
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Maseru
+X-LIC-LOCATION:Africa/Maseru
+BEGIN:STANDARD
+TZOFFSETFROM:+0150
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:SAST
+DTSTART:19430919T020000
+RDATE:19430919T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19440319T020000
+RDATE:19440319T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Mbabane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Mbabane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Mbabane
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Mbabane
+X-LIC-LOCATION:Africa/Mbabane
+BEGIN:STANDARD
+TZOFFSETFROM:+020424
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Mogadishu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Mogadishu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Mogadishu
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Mogadishu
+X-LIC-LOCATION:Africa/Mogadishu
+BEGIN:STANDARD
+TZOFFSETFROM:+030128
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+TZNAME:BEAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Monrovia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Monrovia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Monrovia
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Monrovia
+X-LIC-LOCATION:Africa/Monrovia
+BEGIN:STANDARD
+TZOFFSETFROM:-004308
+TZOFFSETTO:-004308
+TZNAME:MMT
+DTSTART:18820101T000000
+RDATE:18820101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-004308
+TZOFFSETTO:-004430
+TZNAME:LRT
+DTSTART:19190301T000000
+RDATE:19190301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-004430
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19720501T000000
+RDATE:19720501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Nairobi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Nairobi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Nairobi
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Nairobi
+X-LIC-LOCATION:Africa/Nairobi
+BEGIN:STANDARD
+TZOFFSETFROM:+022716
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19280701T000000
+RDATE:19280701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+TZNAME:BEAT
+DTSTART:19300101T000000
+RDATE:19300101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0245
+TZNAME:BEAUT
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Ndjamena.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Ndjamena.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Ndjamena
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Ndjamena
+X-LIC-LOCATION:Africa/Ndjamena
+BEGIN:STANDARD
+TZOFFSETFROM:+010012
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WAST
+DTSTART:19791014T000000
+RDATE:19791014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19800308T000000
+RDATE:19800308T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Niamey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Niamey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Niamey
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Niamey
+X-LIC-LOCATION:Africa/Niamey
+BEGIN:STANDARD
+TZOFFSETFROM:+000828
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Nouakchott.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Nouakchott.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Nouakchott
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Nouakchott
+X-LIC-LOCATION:Africa/Nouakchott
+BEGIN:STANDARD
+TZOFFSETFROM:-010348
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19601128T000000
+RDATE:19601128T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Ouagadougou.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Ouagadougou.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Ouagadougou
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Ouagadougou
+X-LIC-LOCATION:Africa/Ouagadougou
+BEGIN:STANDARD
+TZOFFSETFROM:-000604
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Porto-Novo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Porto-Novo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Porto-Novo
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Porto-Novo
+X-LIC-LOCATION:Africa/Porto-Novo
+BEGIN:STANDARD
+TZOFFSETFROM:+001028
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Sao_Tome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Sao_Tome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Sao_Tome
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Sao_Tome
+X-LIC-LOCATION:Africa/Sao_Tome
+BEGIN:STANDARD
+TZOFFSETFROM:+002656
+TZOFFSETTO:-003632
+TZNAME:LMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-003632
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Tripoli.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Tripoli.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Tripoli
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Tripoli
+X-LIC-LOCATION:Africa/Tripoli
+BEGIN:STANDARD
+TZOFFSETFROM:+005244
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19511014T020000
+RDATE:19511014T020000
+RDATE:19531009T020000
+RDATE:19550930T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850406T000000
+RDATE:19860404T000000
+RDATE:19870401T000000
+RDATE:19880401T000000
+RDATE:19890401T000000
+RDATE:19970404T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19520101T000000
+RDATE:19520101T000000
+RDATE:19540101T000000
+RDATE:19560101T000000
+RDATE:19820101T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19841001T000000
+RDATE:19851001T000000
+RDATE:19861003T000000
+RDATE:19871001T000000
+RDATE:19881001T000000
+RDATE:19891001T000000
+RDATE:19960930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19590101T000000
+RDATE:19590101T000000
+RDATE:19900504T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971004T000000
+RDATE:19971004T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Tunis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Tunis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Tunis
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Tunis
+X-LIC-LOCATION:Africa/Tunis
+BEGIN:STANDARD
+TZOFFSETFROM:+004044
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18810512T000000
+RDATE:18810512T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19110311T000000
+RDATE:19110311T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19390415T230000
+RDATE:19390415T230000
+RDATE:19400225T230000
+RDATE:19420309T000000
+RDATE:19430329T020000
+RDATE:19430425T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19770430T000000
+RDATE:19780501T000000
+RDATE:19880601T000000
+RDATE:19890326T000000
+RDATE:19900501T000000
+RDATE:20050501T000000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19391119T000000
+RDATE:19391119T000000
+RDATE:19411006T000000
+RDATE:19421102T030000
+RDATE:19430417T020000
+RDATE:19431004T020000
+RDATE:19441008T000000
+RDATE:19450916T000000
+RDATE:19770924T010000
+RDATE:19781001T010000
+RDATE:19880925T010000
+RDATE:19890924T010000
+RDATE:19900930T010000
+RDATE:20050930T020000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Africa/Windhoek.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Africa/Windhoek.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Windhoek
+TZURL:http://tzurl.org/zoneinfo-global/Africa/Windhoek
+X-LIC-LOCATION:Africa/Windhoek
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WAST
+DTSTART:19940904T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19950402T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+010824
+TZOFFSETTO:+0130
+TZNAME:SWAT
+DTSTART:18920208T000000
+RDATE:18920208T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:SAST
+DTSTART:19420920T020000
+RDATE:19420920T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19430321T020000
+RDATE:19430321T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19900321T000000
+RDATE:19900321T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19940403T000000
+RDATE:19940403T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Adak.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Adak.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,187 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Adak
+TZURL:http://tzurl.org/zoneinfo-global/America/Adak
+X-LIC-LOCATION:America/Adak
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:HADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:HAST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+121321
+TZOFFSETTO:-114638
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-114638
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:NWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:NPT
+DTSTART:19450814T130000
+RDATE:19450814T130000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:BDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:AHST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:HAST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:HADT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:HAST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Anchorage.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Anchorage.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,187 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Anchorage
+TZURL:http://tzurl.org/zoneinfo-global/America/Anchorage
+X-LIC-LOCATION:America/Anchorage
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+140024
+TZOFFSETTO:-095936
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-095936
+TZOFFSETTO:-1000
+TZNAME:CAT
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:CAT
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:CAWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:CAPT
+DTSTART:19450814T140000
+RDATE:19450814T140000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:CAT
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:AHST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:AHDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:AHST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Anguilla.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Anguilla.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Anguilla
+TZURL:http://tzurl.org/zoneinfo-global/America/Anguilla
+X-LIC-LOCATION:America/Anguilla
+BEGIN:STANDARD
+TZOFFSETFROM:-041216
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Antigua.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Antigua.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Antigua
+TZURL:http://tzurl.org/zoneinfo-global/America/Antigua
+X-LIC-LOCATION:America/Antigua
+BEGIN:STANDARD
+TZOFFSETFROM:-040712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Araguaina.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Araguaina.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,85 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Araguaina
+TZURL:http://tzurl.org/zoneinfo-global/America/Araguaina
+X-LIC-LOCATION:America/Araguaina
+BEGIN:STANDARD
+TZOFFSETFROM:-031248
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19950914T000000
+RDATE:20030924T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Buenos_Aires.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Buenos_Aires.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,124 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Buenos_Aires
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Buenos_Aires
+X-LIC-LOCATION:America/Argentina/Buenos_Aires
+BEGIN:STANDARD
+TZOFFSETFROM:-035348
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+RDATE:20090315T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Catamarca.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Catamarca.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,143 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Catamarca
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Catamarca
+X-LIC-LOCATION:America/Argentina/Catamarca
+BEGIN:STANDARD
+TZOFFSETFROM:-042308
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Cordoba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Cordoba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,136 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Cordoba
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Cordoba
+X-LIC-LOCATION:America/Argentina/Cordoba
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+RDATE:20090315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Jujuy.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Jujuy.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Jujuy
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Jujuy
+X-LIC-LOCATION:America/Argentina/Jujuy
+BEGIN:STANDARD
+TZOFFSETFROM:-042112
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19900304T000000
+RDATE:19900304T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19901028T000000
+RDATE:19901028T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910317T000000
+RDATE:19910317T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911006T000000
+RDATE:19911006T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/La_Rioja.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/La_Rioja.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/La_Rioja
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/La_Rioja
+X-LIC-LOCATION:America/Argentina/La_Rioja
+BEGIN:STANDARD
+TZOFFSETFROM:-042724
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:19910507T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Mendoza.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Mendoza.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,149 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Mendoza
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Mendoza
+X-LIC-LOCATION:America/Argentina/Mendoza
+BEGIN:STANDARD
+TZOFFSETFROM:-043516
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040926T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19900304T000000
+RDATE:19900304T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19901015T000000
+RDATE:19901015T000000
+RDATE:19911015T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+RDATE:19920301T000000
+RDATE:20040523T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19921018T000000
+RDATE:19921018T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Rio_Gallegos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Rio_Gallegos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Rio_Gallegos
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Rio_Gallegos
+X-LIC-LOCATION:America/Argentina/Rio_Gallegos
+BEGIN:STANDARD
+TZOFFSETFROM:-043652
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Salta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Salta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Salta
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Salta
+X-LIC-LOCATION:America/Argentina/Salta
+BEGIN:STANDARD
+TZOFFSETFROM:-042140
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/San_Juan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/San_Juan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/San_Juan
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/San_Juan
+X-LIC-LOCATION:America/Argentina/San_Juan
+BEGIN:STANDARD
+TZOFFSETFROM:-043404
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:19910507T000000
+RDATE:20040725T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040531T000000
+RDATE:20040531T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/San_Luis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/San_Luis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,161 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/San_Luis
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/San_Luis
+X-LIC-LOCATION:America/Argentina/San_Luis
+BEGIN:STANDARD
+TZOFFSETFROM:-042524
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:19910601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19900314T000000
+RDATE:19900314T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19901015T000000
+RDATE:19901015T000000
+RDATE:20081012T000000
+RDATE:20091011T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+RDATE:20040531T000000
+RDATE:20080309T000000
+RDATE:20090308T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+DTSTART:20040725T000000
+RDATE:20040725T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:20080121T000000
+RDATE:20080121T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Tucuman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Tucuman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Tucuman
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Tucuman
+X-LIC-LOCATION:America/Argentina/Tucuman
+BEGIN:STANDARD
+TZOFFSETFROM:-042052
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040613T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+RDATE:20090315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Argentina/Ushuaia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Argentina/Ushuaia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Ushuaia
+TZURL:http://tzurl.org/zoneinfo-global/America/Argentina/Ushuaia
+X-LIC-LOCATION:America/Argentina/Ushuaia
+BEGIN:STANDARD
+TZOFFSETFROM:-043312
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040530T000000
+RDATE:20040530T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Aruba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Aruba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Aruba
+TZURL:http://tzurl.org/zoneinfo-global/America/Aruba
+X-LIC-LOCATION:America/Aruba
+BEGIN:STANDARD
+TZOFFSETFROM:-044024
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Asuncion.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Asuncion.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Asuncion
+TZURL:http://tzurl.org/zoneinfo-global/America/Asuncion
+X-LIC-LOCATION:America/Asuncion
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:20100411T000000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=2SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PYST
+DTSTART:20101003T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-035040
+TZOFFSETTO:-035040
+TZNAME:AMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035040
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:19311010T000000
+RDATE:19311010T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PYT
+DTSTART:19721001T000000
+RDATE:19721001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:19740401T000000
+RDATE:19740401T000000
+RDATE:19760301T000000
+RDATE:19770301T000000
+RDATE:19780301T000000
+RDATE:19790401T000000
+RDATE:19800401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850401T000000
+RDATE:19860401T000000
+RDATE:19870401T000000
+RDATE:19880401T000000
+RDATE:19890401T000000
+RDATE:19900401T000000
+RDATE:19910401T000000
+RDATE:19920301T000000
+RDATE:19930331T000000
+RDATE:19940227T000000
+RDATE:19950226T000000
+RDATE:19960301T000000
+RDATE:19970223T000000
+RDATE:19980301T000000
+RDATE:19990307T000000
+RDATE:20000305T000000
+RDATE:20010304T000000
+RDATE:20020407T000000
+RDATE:20030406T000000
+RDATE:20040404T000000
+RDATE:20050313T000000
+RDATE:20060312T000000
+RDATE:20070311T000000
+RDATE:20080309T000000
+RDATE:20090308T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:19750301T000000
+RDATE:19750301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PYST
+DTSTART:19751001T000000
+RDATE:19751001T000000
+RDATE:19761001T000000
+RDATE:19771001T000000
+RDATE:19781001T000000
+RDATE:19791001T000000
+RDATE:19801001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19841001T000000
+RDATE:19851001T000000
+RDATE:19861001T000000
+RDATE:19871001T000000
+RDATE:19881001T000000
+RDATE:19891022T000000
+RDATE:19901001T000000
+RDATE:19911006T000000
+RDATE:19921005T000000
+RDATE:19931001T000000
+RDATE:19941001T000000
+RDATE:19951001T000000
+RDATE:19961006T000000
+RDATE:19971005T000000
+RDATE:19981004T000000
+RDATE:19991003T000000
+RDATE:20001001T000000
+RDATE:20011007T000000
+RDATE:20020901T000000
+RDATE:20030907T000000
+RDATE:20041017T000000
+RDATE:20051016T000000
+RDATE:20061015T000000
+RDATE:20071021T000000
+RDATE:20081019T000000
+RDATE:20091018T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Atikokan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Atikokan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Atikokan
+TZURL:http://tzurl.org/zoneinfo-global/America/Atikokan
+X-LIC-LOCATION:America/Atikokan
+BEGIN:STANDARD
+TZOFFSETFROM:-060628
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19400929T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Bahia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Bahia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Bahia
+TZURL:http://tzurl.org/zoneinfo-global/America/Bahia
+X-LIC-LOCATION:America/Bahia
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:20111016T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-023404
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20030924T000000
+RDATE:20030924T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Bahia_Banderas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Bahia_Banderas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,103 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Bahia_Banderas
+TZURL:http://tzurl.org/zoneinfo-global/America/Bahia_Banderas
+X-LIC-LOCATION:America/Bahia_Banderas
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20101031T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20110403T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0701
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T235900
+RDATE:19211231T235900
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19420424T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19490114T000000
+RDATE:19490114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20100404T020000
+RDATE:20100404T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Barbados.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Barbados.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,43 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Barbados
+TZURL:http://tzurl.org/zoneinfo-global/America/Barbados
+X-LIC-LOCATION:America/Barbados
+BEGIN:STANDARD
+TZOFFSETFROM:-035828
+TZOFFSETTO:-035828
+TZNAME:BMT
+DTSTART:19240101T000000
+RDATE:19240101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035828
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19320101T000000
+RDATE:19320101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19770612T020000
+RDATE:19770612T020000
+RDATE:19780416T020000
+RDATE:19790415T020000
+RDATE:19800420T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19771002T020000
+RDATE:19771002T020000
+RDATE:19781001T020000
+RDATE:19790930T020000
+RDATE:19800925T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Belem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Belem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,63 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Belem
+TZURL:http://tzurl.org/zoneinfo-global/America/Belem
+X-LIC-LOCATION:America/Belem
+BEGIN:STANDARD
+TZOFFSETFROM:-031356
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Belize.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Belize.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,94 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Belize
+TZURL:http://tzurl.org/zoneinfo-global/America/Belize
+X-LIC-LOCATION:America/Belize
+BEGIN:STANDARD
+TZOFFSETFROM:-055248
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19120401T000000
+RDATE:19120401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0530
+TZNAME:CHDT
+DTSTART:19181006T000000
+RDATE:19181006T000000
+RDATE:19191005T000000
+RDATE:19201003T000000
+RDATE:19211002T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331008T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391008T000000
+RDATE:19401006T000000
+RDATE:19411005T000000
+RDATE:19421004T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0530
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19190209T000000
+RDATE:19190209T000000
+RDATE:19200215T000000
+RDATE:19210213T000000
+RDATE:19220212T000000
+RDATE:19230211T000000
+RDATE:19240210T000000
+RDATE:19250215T000000
+RDATE:19260214T000000
+RDATE:19270213T000000
+RDATE:19280212T000000
+RDATE:19290210T000000
+RDATE:19300209T000000
+RDATE:19310215T000000
+RDATE:19320214T000000
+RDATE:19330212T000000
+RDATE:19340211T000000
+RDATE:19350210T000000
+RDATE:19360209T000000
+RDATE:19370214T000000
+RDATE:19380213T000000
+RDATE:19390212T000000
+RDATE:19400211T000000
+RDATE:19410209T000000
+RDATE:19420215T000000
+RDATE:19430214T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19731205T000000
+RDATE:19731205T000000
+RDATE:19821218T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19740209T000000
+RDATE:19740209T000000
+RDATE:19830212T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Blanc-Sablon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Blanc-Sablon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Blanc-Sablon
+TZURL:http://tzurl.org/zoneinfo-global/America/Blanc-Sablon
+X-LIC-LOCATION:America/Blanc-Sablon
+BEGIN:STANDARD
+TZOFFSETFROM:-034828
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Boa_Vista.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Boa_Vista.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Boa_Vista
+TZURL:http://tzurl.org/zoneinfo-global/America/Boa_Vista
+X-LIC-LOCATION:America/Boa_Vista
+BEGIN:STANDARD
+TZOFFSETFROM:-040240
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:20000227T000000
+RDATE:20001015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+RDATE:19990930T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Bogota.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Bogota.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Bogota
+TZURL:http://tzurl.org/zoneinfo-global/America/Bogota
+X-LIC-LOCATION:America/Bogota
+BEGIN:STANDARD
+TZOFFSETFROM:-045620
+TZOFFSETTO:-045620
+TZNAME:BMT
+DTSTART:18840313T000000
+RDATE:18840313T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-045620
+TZOFFSETTO:-0500
+TZNAME:COT
+DTSTART:19141123T000000
+RDATE:19141123T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:COST
+DTSTART:19920503T000000
+RDATE:19920503T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:COT
+DTSTART:19930404T000000
+RDATE:19930404T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Boise.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Boise.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,167 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Boise
+TZURL:http://tzurl.org/zoneinfo-global/America/Boise
+X-LIC-LOCATION:America/Boise
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-074449
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18831118T121511
+RDATE:18831118T121511
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19230513T020000
+RDATE:19230513T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19670430T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740203T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19740101T000000
+RDATE:19740101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Cambridge_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Cambridge_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,156 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cambridge_Bay
+TZURL:http://tzurl.org/zoneinfo-global/America/Cambridge_Bay
+X-LIC-LOCATION:America/Cambridge_Bay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+TZNAME:MDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19991031T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20001105T000000
+RDATE:20001105T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Campo_Grande.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Campo_Grande.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,145 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Campo_Grande
+TZURL:http://tzurl.org/zoneinfo-global/America/Campo_Grande
+X-LIC-LOCATION:America/Campo_Grande
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033828
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20040215T000000
+RDATE:20050220T000000
+RDATE:20060219T000000
+RDATE:20070225T000000
+RDATE:20080217T000000
+RDATE:20090215T000000
+RDATE:20100221T000000
+RDATE:20110220T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20150222T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Cancun.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Cancun.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,80 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cancun
+TZURL:http://tzurl.org/zoneinfo-global/America/Cancun
+X-LIC-LOCATION:America/Cancun
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054704
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19220101T001256
+RDATE:19220101T001256
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19811223T000000
+RDATE:19811223T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19961027T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19980802T020000
+RDATE:19980802T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19981025T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Caracas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Caracas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Caracas
+TZURL:http://tzurl.org/zoneinfo-global/America/Caracas
+X-LIC-LOCATION:America/Caracas
+BEGIN:STANDARD
+TZOFFSETFROM:-042744
+TZOFFSETTO:-042740
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-042740
+TZOFFSETTO:-0430
+TZNAME:VET
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:VET
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0430
+TZNAME:VET
+DTSTART:20071209T030000
+RDATE:20071209T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Cayenne.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Cayenne.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cayenne
+TZURL:http://tzurl.org/zoneinfo-global/America/Cayenne
+X-LIC-LOCATION:America/Cayenne
+BEGIN:STANDARD
+TZOFFSETFROM:-032920
+TZOFFSETTO:-0400
+TZNAME:GFT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:GFT
+DTSTART:19671001T000000
+RDATE:19671001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Cayman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Cayman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cayman
+TZURL:http://tzurl.org/zoneinfo-global/America/Cayman
+X-LIC-LOCATION:America/Cayman
+BEGIN:STANDARD
+TZOFFSETFROM:-052532
+TZOFFSETTO:-050712
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120201T000000
+RDATE:19120201T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Chicago.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Chicago.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,243 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Chicago
+TZURL:http://tzurl.org/zoneinfo-global/America/Chicago
+X-LIC-LOCATION:America/Chicago
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055036
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T120924
+RDATE:18831118T120924
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200613T020000
+RDATE:19210327T020000
+RDATE:19220430T020000
+RDATE:19230429T020000
+RDATE:19240427T020000
+RDATE:19250426T020000
+RDATE:19260425T020000
+RDATE:19270424T020000
+RDATE:19280429T020000
+RDATE:19290428T020000
+RDATE:19300427T020000
+RDATE:19310426T020000
+RDATE:19320424T020000
+RDATE:19330430T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+RDATE:19410427T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19211030T020000
+RDATE:19220924T020000
+RDATE:19230930T020000
+RDATE:19240928T020000
+RDATE:19250927T020000
+RDATE:19260926T020000
+RDATE:19270925T020000
+RDATE:19280930T020000
+RDATE:19290929T020000
+RDATE:19300928T020000
+RDATE:19310927T020000
+RDATE:19320925T020000
+RDATE:19330924T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19361115T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19400929T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19360301T020000
+RDATE:19360301T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Chihuahua.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Chihuahua.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,91 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Chihuahua
+TZURL:http://tzurl.org/zoneinfo-global/America/Chihuahua
+X-LIC-LOCATION:America/Chihuahua
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-070420
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T235540
+RDATE:19211231T235540
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19960101T000000
+RDATE:19960101T000000
+RDATE:19980101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19961027T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19980405T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Costa_Rica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Costa_Rica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,43 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Costa_Rica
+TZURL:http://tzurl.org/zoneinfo-global/America/Costa_Rica
+X-LIC-LOCATION:America/Costa_Rica
+BEGIN:STANDARD
+TZOFFSETFROM:-053620
+TZOFFSETTO:-053620
+TZNAME:SJMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-053620
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210115T000000
+RDATE:19210115T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19790225T000000
+RDATE:19790225T000000
+RDATE:19800224T000000
+RDATE:19910119T000000
+RDATE:19920118T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19790603T000000
+RDATE:19790603T000000
+RDATE:19800601T000000
+RDATE:19910701T000000
+RDATE:19920315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Cuiaba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Cuiaba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,145 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cuiaba
+TZURL:http://tzurl.org/zoneinfo-global/America/Cuiaba
+X-LIC-LOCATION:America/Cuiaba
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034420
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20050220T000000
+RDATE:20060219T000000
+RDATE:20070225T000000
+RDATE:20080217T000000
+RDATE:20090215T000000
+RDATE:20100221T000000
+RDATE:20110220T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20030924T000000
+RDATE:20030924T000000
+RDATE:20041001T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Curacao.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Curacao.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Curacao
+TZURL:http://tzurl.org/zoneinfo-global/America/Curacao
+X-LIC-LOCATION:America/Curacao
+BEGIN:STANDARD
+TZOFFSETFROM:-043544
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Danmarkshavn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Danmarkshavn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Danmarkshavn
+TZURL:http://tzurl.org/zoneinfo-global/America/Danmarkshavn
+X-LIC-LOCATION:America/Danmarkshavn
+BEGIN:STANDARD
+TZOFFSETFROM:-011440
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:WGST
+DTSTART:19800406T020000
+RDATE:19800406T020000
+RDATE:19810328T220000
+RDATE:19820327T220000
+RDATE:19830326T220000
+RDATE:19840324T220000
+RDATE:19850330T220000
+RDATE:19860329T220000
+RDATE:19870328T220000
+RDATE:19880326T220000
+RDATE:19890325T220000
+RDATE:19900324T220000
+RDATE:19910330T220000
+RDATE:19920328T220000
+RDATE:19930327T220000
+RDATE:19940326T220000
+RDATE:19950325T220000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19800927T230000
+RDATE:19800927T230000
+RDATE:19810926T230000
+RDATE:19820925T230000
+RDATE:19830924T230000
+RDATE:19840929T230000
+RDATE:19850928T230000
+RDATE:19860927T230000
+RDATE:19870926T230000
+RDATE:19880924T230000
+RDATE:19890923T230000
+RDATE:19900929T230000
+RDATE:19910928T230000
+RDATE:19920926T230000
+RDATE:19930925T230000
+RDATE:19940924T230000
+RDATE:19950923T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Dawson.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Dawson.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Dawson
+TZURL:http://tzurl.org/zoneinfo-global/America/Dawson
+X-LIC-LOCATION:America/Dawson
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-091740
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19000820T000000
+RDATE:19000820T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190525T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191101T000000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YPT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0700
+TZNAME:YDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+DTSTART:19731028T000000
+RDATE:19731028T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Dawson_Creek.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Dawson_Creek.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,110 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Dawson_Creek
+TZURL:http://tzurl.org/zoneinfo-global/America/Dawson_Creek
+X-LIC-LOCATION:America/Dawson_Creek
+BEGIN:STANDARD
+TZOFFSETFROM:-080056
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19470101T000000
+RDATE:19470101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19720830T020000
+RDATE:19720830T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Denver.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Denver.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Denver
+TZURL:http://tzurl.org/zoneinfo-global/America/Denver
+X-LIC-LOCATION:America/Denver
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T120004
+RDATE:18831118T120004
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210327T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Detroit.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Detroit.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,146 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Detroit
+TZURL:http://tzurl.org/zoneinfo-global/America/Detroit
+X-LIC-LOCATION:America/Detroit
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-053211
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19050101T000000
+RDATE:19050101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19150515T020000
+RDATE:19150515T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19730101T000000
+RDATE:19750101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19480926T020000
+RDATE:19671029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19480425T020000
+RDATE:19480425T020000
+RDATE:19670614T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Dominica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Dominica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Dominica
+TZURL:http://tzurl.org/zoneinfo-global/America/Dominica
+X-LIC-LOCATION:America/Dominica
+BEGIN:STANDARD
+TZOFFSETFROM:-040536
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000100
+RDATE:19110701T000100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Edmonton.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Edmonton.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,152 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Edmonton
+TZURL:http://tzurl.org/zoneinfo-global/America/Edmonton
+X-LIC-LOCATION:America/Edmonton
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-073352
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19060901T000000
+RDATE:19060901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190413T020000
+RDATE:19200425T020000
+RDATE:19210424T020000
+RDATE:19220430T020000
+RDATE:19230429T020000
+RDATE:19470427T020000
+RDATE:19670430T020000
+RDATE:19690427T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19190527T020000
+RDATE:19201031T020000
+RDATE:19210925T020000
+RDATE:19220924T020000
+RDATE:19230930T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19671029T020000
+RDATE:19691026T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19870101T000000
+RDATE:19870101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Eirunepe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Eirunepe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,74 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Eirunepe
+TZURL:http://tzurl.org/zoneinfo-global/America/Eirunepe
+X-LIC-LOCATION:America/Eirunepe
+BEGIN:STANDARD
+TZOFFSETFROM:-043928
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:ACST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19931017T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19940220T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+RDATE:19930928T000000
+RDATE:19940922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20080624T000000
+RDATE:20080624T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/El_Salvador.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/El_Salvador.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,32 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/El_Salvador
+TZURL:http://tzurl.org/zoneinfo-global/America/El_Salvador
+X-LIC-LOCATION:America/El_Salvador
+BEGIN:STANDARD
+TZOFFSETFROM:-055648
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210101T000000
+RDATE:19210101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19870503T000000
+RDATE:19870503T000000
+RDATE:19880501T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19870927T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Fortaleza.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Fortaleza.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,76 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Fortaleza
+TZURL:http://tzurl.org/zoneinfo-global/America/Fortaleza
+X-LIC-LOCATION:America/Fortaleza
+BEGIN:STANDARD
+TZOFFSETFROM:-0234
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:20000227T000000
+RDATE:20001022T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Glace_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Glace_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,141 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Glace_Bay
+TZURL:http://tzurl.org/zoneinfo-global/America/Glace_Bay
+X-LIC-LOCATION:America/Glace_Bay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035948
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19020615T000000
+RDATE:19020615T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19530426T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19530927T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19530101T000000
+RDATE:19530101T000000
+RDATE:19540101T000000
+RDATE:19720101T000000
+RDATE:19740101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Godthab.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Godthab.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,59 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Godthab
+TZURL:http://tzurl.org/zoneinfo-global/America/Godthab
+X-LIC-LOCATION:America/Godthab
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:WGST
+DTSTART:19810328T220000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19961026T230000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-032656
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:WGST
+DTSTART:19800406T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19800927T230000
+RDATE:19800927T230000
+RDATE:19810926T230000
+RDATE:19820925T230000
+RDATE:19830924T230000
+RDATE:19840929T230000
+RDATE:19850928T230000
+RDATE:19860927T230000
+RDATE:19870926T230000
+RDATE:19880924T230000
+RDATE:19890923T230000
+RDATE:19900929T230000
+RDATE:19910928T230000
+RDATE:19920926T230000
+RDATE:19930925T230000
+RDATE:19940924T230000
+RDATE:19950923T230000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Goose_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Goose_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,275 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Goose_Bay
+TZURL:http://tzurl.org/zoneinfo-global/America/Goose_Bay
+X-LIC-LOCATION:America/Goose_Bay
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20120311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-040140
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+TZNAME:NDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19350330T000000
+RDATE:19350330T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19360101T000000
+RDATE:19360101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:19360511T000000
+RDATE:19360511T000000
+RDATE:19370510T000000
+RDATE:19380509T000000
+RDATE:19390515T000000
+RDATE:19400513T000000
+RDATE:19410512T000000
+RDATE:19460512T020000
+RDATE:19470511T020000
+RDATE:19480509T020000
+RDATE:19490508T020000
+RDATE:19500514T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19361005T000000
+RDATE:19361005T000000
+RDATE:19371004T000000
+RDATE:19381003T000000
+RDATE:19391002T000000
+RDATE:19401007T000000
+RDATE:19411006T000000
+RDATE:19450930T020000
+RDATE:19461006T020000
+RDATE:19471005T020000
+RDATE:19481003T020000
+RDATE:19491002T020000
+RDATE:19501008T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NWT
+DTSTART:19420511T000000
+RDATE:19420511T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+TZNAME:NPT
+DTSTART:19450814T203000
+RDATE:19450814T203000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19660315T020000
+RDATE:19660315T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19660424T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T000100
+RDATE:19890402T000100
+RDATE:19900401T000100
+RDATE:19910407T000100
+RDATE:19920405T000100
+RDATE:19930404T000100
+RDATE:19940403T000100
+RDATE:19950402T000100
+RDATE:19960407T000100
+RDATE:19970406T000100
+RDATE:19980405T000100
+RDATE:19990404T000100
+RDATE:20000402T000100
+RDATE:20010401T000100
+RDATE:20020407T000100
+RDATE:20030406T000100
+RDATE:20040404T000100
+RDATE:20050403T000100
+RDATE:20060402T000100
+RDATE:20070311T000100
+RDATE:20080309T000100
+RDATE:20090308T000100
+RDATE:20100314T000100
+RDATE:20110313T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19661030T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T000100
+RDATE:19891029T000100
+RDATE:19901028T000100
+RDATE:19911027T000100
+RDATE:19921025T000100
+RDATE:19931031T000100
+RDATE:19941030T000100
+RDATE:19951029T000100
+RDATE:19961027T000100
+RDATE:19971026T000100
+RDATE:19981025T000100
+RDATE:19991031T000100
+RDATE:20001029T000100
+RDATE:20011028T000100
+RDATE:20021027T000100
+RDATE:20031026T000100
+RDATE:20041031T000100
+RDATE:20051030T000100
+RDATE:20061029T000100
+RDATE:20071104T000100
+RDATE:20081102T000100
+RDATE:20091101T000100
+RDATE:20101107T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ADDT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19881030T000100
+RDATE:19881030T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20111101T000000
+RDATE:20111101T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Grand_Turk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Grand_Turk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,105 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Grand_Turk
+TZURL:http://tzurl.org/zoneinfo-global/America/Grand_Turk
+X-LIC-LOCATION:America/Grand_Turk
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-044432
+TZOFFSETTO:-050712
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120201T000000
+RDATE:19120201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19790429T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19791028T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Grenada.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Grenada.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Grenada
+TZURL:http://tzurl.org/zoneinfo-global/America/Grenada
+X-LIC-LOCATION:America/Grenada
+BEGIN:STANDARD
+TZOFFSETFROM:-0407
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Guadeloupe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Guadeloupe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guadeloupe
+TZURL:http://tzurl.org/zoneinfo-global/America/Guadeloupe
+X-LIC-LOCATION:America/Guadeloupe
+BEGIN:STANDARD
+TZOFFSETFROM:-040608
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110608T000000
+RDATE:19110608T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Guatemala.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Guatemala.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,36 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guatemala
+TZURL:http://tzurl.org/zoneinfo-global/America/Guatemala
+X-LIC-LOCATION:America/Guatemala
+BEGIN:STANDARD
+TZOFFSETFROM:-060204
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181005T000000
+RDATE:19181005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19731125T000000
+RDATE:19731125T000000
+RDATE:19830521T000000
+RDATE:19910323T000000
+RDATE:20060430T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19740224T000000
+RDATE:19740224T000000
+RDATE:19830922T000000
+RDATE:19910907T000000
+RDATE:20061001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Guayaquil.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Guayaquil.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guayaquil
+TZURL:http://tzurl.org/zoneinfo-global/America/Guayaquil
+X-LIC-LOCATION:America/Guayaquil
+BEGIN:STANDARD
+TZOFFSETFROM:-051920
+TZOFFSETTO:-0514
+TZNAME:QMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0514
+TZOFFSETTO:-0500
+TZNAME:ECT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Guyana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Guyana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guyana
+TZURL:http://tzurl.org/zoneinfo-global/America/Guyana
+X-LIC-LOCATION:America/Guyana
+BEGIN:STANDARD
+TZOFFSETFROM:-035240
+TZOFFSETTO:-0345
+TZNAME:GBGT
+DTSTART:19150301T000000
+RDATE:19150301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0345
+TZOFFSETTO:-0345
+TZNAME:GYT
+DTSTART:19660526T000000
+RDATE:19660526T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0345
+TZOFFSETTO:-0300
+TZNAME:GYT
+DTSTART:19750731T000000
+RDATE:19750731T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:GYT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Halifax.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Halifax.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,229 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Halifax
+TZURL:http://tzurl.org/zoneinfo-global/America/Halifax
+X-LIC-LOCATION:America/Halifax
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041424
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19020615T000000
+RDATE:19020615T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19160401T000000
+RDATE:19160401T000000
+RDATE:19180414T020000
+RDATE:19200509T000000
+RDATE:19210506T000000
+RDATE:19220430T000000
+RDATE:19230506T000000
+RDATE:19240504T000000
+RDATE:19250503T000000
+RDATE:19260516T000000
+RDATE:19270501T000000
+RDATE:19280513T000000
+RDATE:19290512T000000
+RDATE:19300511T000000
+RDATE:19310510T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340520T000000
+RDATE:19350602T000000
+RDATE:19360601T000000
+RDATE:19370502T000000
+RDATE:19380501T000000
+RDATE:19390528T000000
+RDATE:19400505T000000
+RDATE:19410504T000000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19181031T020000
+RDATE:19200829T000000
+RDATE:19210905T000000
+RDATE:19220905T000000
+RDATE:19230904T000000
+RDATE:19240915T000000
+RDATE:19250928T000000
+RDATE:19260913T000000
+RDATE:19270926T000000
+RDATE:19280909T000000
+RDATE:19290903T000000
+RDATE:19300915T000000
+RDATE:19310928T000000
+RDATE:19320926T000000
+RDATE:19331002T000000
+RDATE:19340916T000000
+RDATE:19350930T000000
+RDATE:19360914T000000
+RDATE:19370927T000000
+RDATE:19380926T000000
+RDATE:19390925T000000
+RDATE:19400930T000000
+RDATE:19410929T000000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Havana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Havana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,151 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Havana
+TZURL:http://tzurl.org/zoneinfo-global/America/Havana
+X-LIC-LOCATION:America/Havana
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CDT
+DTSTART:20120311T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CST
+DTSTART:20121028T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-052928
+TZOFFSETTO:-052936
+TZNAME:HMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-052936
+TZOFFSETTO:-0500
+TZNAME:CST
+DTSTART:19250719T120000
+RDATE:19250719T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CDT
+DTSTART:19280610T000000
+RDATE:19280610T000000
+RDATE:19400602T000000
+RDATE:19410601T000000
+RDATE:19420607T000000
+RDATE:19450603T000000
+RDATE:19460602T000000
+RDATE:19650601T000000
+RDATE:19660529T000000
+RDATE:19670408T000000
+RDATE:19680414T000000
+RDATE:19690427T000000
+RDATE:19700426T000000
+RDATE:19710425T000000
+RDATE:19720430T000000
+RDATE:19730429T000000
+RDATE:19740428T000000
+RDATE:19750427T000000
+RDATE:19760425T000000
+RDATE:19770424T000000
+RDATE:19780507T000000
+RDATE:19790318T000000
+RDATE:19800316T000000
+RDATE:19810510T000000
+RDATE:19820509T000000
+RDATE:19830508T000000
+RDATE:19840506T000000
+RDATE:19850505T000000
+RDATE:19860316T000000
+RDATE:19870315T000000
+RDATE:19880320T000000
+RDATE:19890319T000000
+RDATE:19900401T000000
+RDATE:19910407T000000
+RDATE:19920405T000000
+RDATE:19930404T000000
+RDATE:19940403T000000
+RDATE:19950402T000000
+RDATE:19960407T000000
+RDATE:19970406T000000
+RDATE:19980329T000000
+RDATE:19990328T000000
+RDATE:20000402T000000
+RDATE:20010401T000000
+RDATE:20020407T000000
+RDATE:20030406T000000
+RDATE:20040404T000000
+RDATE:20070311T000000
+RDATE:20080316T000000
+RDATE:20090308T000000
+RDATE:20100314T000000
+RDATE:20110320T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CST
+DTSTART:19281010T000000
+RDATE:19281010T000000
+RDATE:19400901T000000
+RDATE:19410907T000000
+RDATE:19420906T000000
+RDATE:19450902T000000
+RDATE:19460901T000000
+RDATE:19650930T000000
+RDATE:19661002T000000
+RDATE:19670910T000000
+RDATE:19680908T000000
+RDATE:19691026T000000
+RDATE:19701025T000000
+RDATE:19711031T000000
+RDATE:19721008T000000
+RDATE:19731008T000000
+RDATE:19741008T000000
+RDATE:19751026T000000
+RDATE:19761031T000000
+RDATE:19771030T000000
+RDATE:19781008T000000
+RDATE:19791014T000000
+RDATE:19801012T000000
+RDATE:19811011T000000
+RDATE:19821010T000000
+RDATE:19831009T000000
+RDATE:19841014T000000
+RDATE:19851013T000000
+RDATE:19861012T000000
+RDATE:19871011T000000
+RDATE:19881009T000000
+RDATE:19891008T000000
+RDATE:19901014T000000
+RDATE:19911013T010000
+RDATE:19921011T010000
+RDATE:19931010T010000
+RDATE:19941009T010000
+RDATE:19951008T010000
+RDATE:19961006T010000
+RDATE:19971012T010000
+RDATE:19981025T010000
+RDATE:19991031T010000
+RDATE:20001029T010000
+RDATE:20011028T010000
+RDATE:20021027T010000
+RDATE:20031026T010000
+RDATE:20061029T010000
+RDATE:20071028T010000
+RDATE:20081026T010000
+RDATE:20091025T010000
+RDATE:20101031T010000
+RDATE:20111113T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Hermosillo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Hermosillo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Hermosillo
+TZURL:http://tzurl.org/zoneinfo-global/America/Hermosillo
+X-LIC-LOCATION:America/Hermosillo
+BEGIN:STANDARD
+TZOFFSETFROM:-072352
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T233608
+RDATE:19211231T233608
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19420424T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19490114T000000
+RDATE:19490114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19990101T000000
+RDATE:19990101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Indianapolis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Indianapolis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,126 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Indianapolis
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Indianapolis
+X-LIC-LOCATION:America/Indiana/Indianapolis
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054438
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121522
+RDATE:18831118T121522
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19410622T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19570929T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19550424T020000
+RDATE:19550424T020000
+RDATE:19580427T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+RDATE:20060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Knox.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Knox.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,170 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Knox
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Knox
+X-LIC-LOCATION:America/Indiana/Knox
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054630
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121330
+RDATE:18831118T121330
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19631027T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19470101T000000
+RDATE:19470101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19620429T020000
+RDATE:19620429T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19911027T020000
+RDATE:19911027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Marengo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Marengo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,134 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Marengo
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Marengo
+X-LIC-LOCATION:America/Indiana/Marengo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054523
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121437
+RDATE:18831118T121437
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19510429T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19510930T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19610430T020000
+RDATE:19610430T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19741027T020000
+RDATE:19760101T000000
+RDATE:20060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19750223T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19751026T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Petersburg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Petersburg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,134 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Petersburg
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Petersburg
+X-LIC-LOCATION:America/Indiana/Petersburg
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20081102T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054907
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121053
+RDATE:18831118T121053
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19550501T000000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19550101T000000
+RDATE:19550101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19650425T020000
+RDATE:19650425T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19771030T020000
+RDATE:19771030T020000
+RDATE:20071104T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Tell_City.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Tell_City.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Tell_City
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Tell_City
+X-LIC-LOCATION:America/Indiana/Tell_City
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054703
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121257
+RDATE:18831118T121257
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550501T000000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19640426T020000
+RDATE:19640426T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Vevay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Vevay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,99 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Vevay
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Vevay
+X-LIC-LOCATION:America/Indiana/Vevay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054016
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121944
+RDATE:18831118T121944
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19540425T020000
+RDATE:19540425T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19730101T000000
+RDATE:20060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Vincennes.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Vincennes.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Vincennes
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Vincennes
+X-LIC-LOCATION:America/Indiana/Vincennes
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20081102T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055007
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T120953
+RDATE:18831118T120953
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550501T000000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19640426T020000
+RDATE:19640426T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+RDATE:20071104T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Indiana/Winamac.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Indiana/Winamac.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Winamac
+TZURL:http://tzurl.org/zoneinfo-global/America/Indiana/Winamac
+X-LIC-LOCATION:America/Indiana/Winamac
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-054625
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121335
+RDATE:18831118T121335
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19610430T020000
+RDATE:19610430T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Inuvik.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Inuvik.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,123 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Inuvik
+TZURL:http://tzurl.org/zoneinfo-global/America/Inuvik
+X-LIC-LOCATION:America/Inuvik
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19530101T000000
+RDATE:19530101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0600
+TZNAME:PDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+DTSTART:19790429T020000
+RDATE:19790429T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Iqaluit.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Iqaluit.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,136 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Iqaluit
+TZURL:http://tzurl.org/zoneinfo-global/America/Iqaluit
+X-LIC-LOCATION:America/Iqaluit
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420801T000000
+RDATE:19420801T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0300
+TZNAME:EDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19991031T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Jamaica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Jamaica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Jamaica
+TZURL:http://tzurl.org/zoneinfo-global/America/Jamaica
+X-LIC-LOCATION:America/Jamaica
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-050712
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120201T000000
+RDATE:19120201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19740428T020000
+RDATE:19740428T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19741027T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19840101T000000
+RDATE:19840101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Juneau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Juneau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,180 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Juneau
+TZURL:http://tzurl.org/zoneinfo-global/America/Juneau
+X-LIC-LOCATION:America/Juneau
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+150219
+TZOFFSETTO:-085741
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-085741
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+RDATE:19801026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Kentucky/Louisville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Kentucky/Louisville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,206 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Kentucky/Louisville
+TZURL:http://tzurl.org/zoneinfo-global/America/Kentucky/Louisville
+X-LIC-LOCATION:America/Kentucky/Louisville
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054302
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121658
+RDATE:18831118T121658
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19210501T020000
+RDATE:19410427T020000
+RDATE:19460101T000000
+RDATE:19470427T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19210901T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460602T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210101T000000
+RDATE:19210101T000000
+RDATE:19420101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19460428T020000
+RDATE:19460428T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19740106T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19610723T020000
+RDATE:19610723T020000
+RDATE:19680101T000000
+RDATE:19741027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19680428T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19681027T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Kentucky/Monticello.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Kentucky/Monticello.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Kentucky/Monticello
+TZURL:http://tzurl.org/zoneinfo-global/America/Kentucky/Monticello
+X-LIC-LOCATION:America/Kentucky/Monticello
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-053924
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T122036
+RDATE:18831118T122036
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19680101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20011028T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Kralendijk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Kralendijk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Kralendijk
+TZURL:http://tzurl.org/zoneinfo-global/America/Kralendijk
+X-LIC-LOCATION:America/Kralendijk
+BEGIN:STANDARD
+TZOFFSETFROM:-043544
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/La_Paz.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/La_Paz.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/La_Paz
+TZURL:http://tzurl.org/zoneinfo-global/America/La_Paz
+X-LIC-LOCATION:America/La_Paz
+BEGIN:STANDARD
+TZOFFSETFROM:-043236
+TZOFFSETTO:-043236
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-043236
+TZOFFSETTO:-033236
+TZNAME:BOST
+DTSTART:19311015T000000
+RDATE:19311015T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-033236
+TZOFFSETTO:-0400
+TZNAME:BOT
+DTSTART:19320321T000000
+RDATE:19320321T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Lima.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Lima.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,49 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Lima
+TZURL:http://tzurl.org/zoneinfo-global/America/Lima
+X-LIC-LOCATION:America/Lima
+BEGIN:STANDARD
+TZOFFSETFROM:-050812
+TZOFFSETTO:-050836
+TZNAME:LMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050836
+TZOFFSETTO:-0500
+TZNAME:PET
+DTSTART:19080728T000000
+RDATE:19080728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:PEST
+DTSTART:19380101T000000
+RDATE:19380101T000000
+RDATE:19380925T000000
+RDATE:19390924T000000
+RDATE:19860101T000000
+RDATE:19870101T000000
+RDATE:19900101T000000
+RDATE:19940101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:PET
+DTSTART:19380401T000000
+RDATE:19380401T000000
+RDATE:19390326T000000
+RDATE:19400324T000000
+RDATE:19860401T000000
+RDATE:19870401T000000
+RDATE:19900401T000000
+RDATE:19940401T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Los_Angeles.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Los_Angeles.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,185 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Los_Angeles
+TZURL:http://tzurl.org/zoneinfo-global/America/Los_Angeles
+X-LIC-LOCATION:America/Los_Angeles
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-075258
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18831118T120702
+RDATE:18831118T120702
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19480314T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19490101T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Lower_Princes.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Lower_Princes.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Lower_Princes
+TZURL:http://tzurl.org/zoneinfo-global/America/Lower_Princes
+X-LIC-LOCATION:America/Lower_Princes
+BEGIN:STANDARD
+TZOFFSETFROM:-043544
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Maceio.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Maceio.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,80 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Maceio
+TZURL:http://tzurl.org/zoneinfo-global/America/Maceio
+X-LIC-LOCATION:America/Maceio
+BEGIN:STANDARD
+TZOFFSETFROM:-022252
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19951015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19960211T000000
+RDATE:20000227T000000
+RDATE:20001022T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19951013T000000
+RDATE:19960904T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Managua.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Managua.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,55 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Managua
+TZURL:http://tzurl.org/zoneinfo-global/America/Managua
+X-LIC-LOCATION:America/Managua
+BEGIN:STANDARD
+TZOFFSETFROM:-054508
+TZOFFSETTO:-054512
+TZNAME:MMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054512
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19340623T000000
+RDATE:19340623T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19730501T000000
+RDATE:19730501T000000
+RDATE:19920101T040000
+RDATE:19930101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19750216T000000
+RDATE:19750216T000000
+RDATE:19790625T000000
+RDATE:19800623T000000
+RDATE:19920924T000000
+RDATE:19970101T000000
+RDATE:20051002T000000
+RDATE:20061001T010000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19790318T000000
+RDATE:19790318T000000
+RDATE:19800316T000000
+RDATE:20050410T000000
+RDATE:20060430T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Manaus.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Manaus.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Manaus
+TZURL:http://tzurl.org/zoneinfo-global/America/Manaus
+X-LIC-LOCATION:America/Manaus
+BEGIN:STANDARD
+TZOFFSETFROM:-040004
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19931017T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19940220T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+RDATE:19930928T000000
+RDATE:19940922T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Marigot.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Marigot.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Marigot
+TZURL:http://tzurl.org/zoneinfo-global/America/Marigot
+X-LIC-LOCATION:America/Marigot
+BEGIN:STANDARD
+TZOFFSETFROM:-040608
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110608T000000
+RDATE:19110608T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Martinique.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Martinique.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Martinique
+TZURL:http://tzurl.org/zoneinfo-global/America/Martinique
+X-LIC-LOCATION:America/Martinique
+BEGIN:STANDARD
+TZOFFSETFROM:-040420
+TZOFFSETTO:-040420
+TZNAME:FFMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-040420
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110501T000000
+RDATE:19110501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19800406T000000
+RDATE:19800406T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19800928T000000
+RDATE:19800928T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Matamoros.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Matamoros.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,81 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Matamoros
+TZURL:http://tzurl.org/zoneinfo-global/America/Matamoros
+X-LIC-LOCATION:America/Matamoros
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0640
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19211231T232000
+RDATE:19211231T232000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19880101T000000
+RDATE:19880101T000000
+RDATE:19890101T000000
+RDATE:20100101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19880403T020000
+RDATE:19880403T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19881030T020000
+RDATE:19881030T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Mazatlan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Mazatlan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,80 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Mazatlan
+TZURL:http://tzurl.org/zoneinfo-global/America/Mazatlan
+X-LIC-LOCATION:America/Mazatlan
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-070540
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T235420
+RDATE:19211231T235420
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19420424T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19490114T000000
+RDATE:19490114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Menominee.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Menominee.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,153 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Menominee
+TZURL:http://tzurl.org/zoneinfo-global/America/Menominee
+X-LIC-LOCATION:America/Menominee
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055027
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18850918T120000
+RDATE:18850918T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19660424T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19661030T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690427T020000
+RDATE:19690427T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19730429T020000
+RDATE:19730429T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Merida.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Merida.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Merida
+TZURL:http://tzurl.org/zoneinfo-global/America/Merida
+X-LIC-LOCATION:America/Merida
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055828
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19220101T000132
+RDATE:19220101T000132
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19811223T000000
+RDATE:19811223T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19821202T000000
+RDATE:19821202T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Metlakatla.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Metlakatla.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,95 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Metlakatla
+TZURL:http://tzurl.org/zoneinfo-global/America/Metlakatla
+X-LIC-LOCATION:America/Metlakatla
+BEGIN:STANDARD
+TZOFFSETFROM:+151342
+TZOFFSETTO:-084618
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-084618
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:MeST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Mexico_City.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Mexico_City.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,92 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Mexico_City
+TZURL:http://tzurl.org/zoneinfo-global/America/Mexico_City
+X-LIC-LOCATION:America/Mexico_City
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-063636
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T002324
+RDATE:19220101T002324
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19390205T000000
+RDATE:19390205T000000
+RDATE:19401209T000000
+RDATE:19500212T000000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19390625T000000
+RDATE:19390625T000000
+RDATE:19410401T000000
+RDATE:19440501T000000
+RDATE:19500730T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19431216T000000
+RDATE:19431216T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20020220T000000
+RDATE:20020220T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Miquelon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Miquelon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,96 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Miquelon
+TZURL:http://tzurl.org/zoneinfo-global/America/Miquelon
+X-LIC-LOCATION:America/Miquelon
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:PMDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034440
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110515T000000
+RDATE:19110515T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:19870101T000000
+RDATE:19870101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:PMDT
+DTSTART:19870405T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:19871025T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Moncton.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Moncton.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,216 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Moncton
+TZURL:http://tzurl.org/zoneinfo-global/America/Moncton
+X-LIC-LOCATION:America/Moncton
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041908
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18831209T000000
+RDATE:18831209T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19020615T000000
+RDATE:19020615T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19330611T010000
+RDATE:19340610T010000
+RDATE:19350609T010000
+RDATE:19360607T010000
+RDATE:19370606T010000
+RDATE:19380605T010000
+RDATE:19390527T010000
+RDATE:19400519T010000
+RDATE:19410504T010000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T000100
+RDATE:19940403T000100
+RDATE:19950402T000100
+RDATE:19960407T000100
+RDATE:19970406T000100
+RDATE:19980405T000100
+RDATE:19990404T000100
+RDATE:20000402T000100
+RDATE:20010401T000100
+RDATE:20020407T000100
+RDATE:20030406T000100
+RDATE:20040404T000100
+RDATE:20050403T000100
+RDATE:20060402T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19330910T010000
+RDATE:19340909T010000
+RDATE:19350908T010000
+RDATE:19360906T010000
+RDATE:19370905T010000
+RDATE:19380904T010000
+RDATE:19390923T010000
+RDATE:19400921T010000
+RDATE:19410927T010000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T000100
+RDATE:19941030T000100
+RDATE:19951029T000100
+RDATE:19961027T000100
+RDATE:19971026T000100
+RDATE:19981025T000100
+RDATE:19991031T000100
+RDATE:20001029T000100
+RDATE:20011028T000100
+RDATE:20021027T000100
+RDATE:20031026T000100
+RDATE:20041031T000100
+RDATE:20051030T000100
+RDATE:20061029T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19330101T000000
+RDATE:19330101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19730101T000000
+RDATE:19930101T000000
+RDATE:20070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Monterrey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Monterrey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Monterrey
+TZURL:http://tzurl.org/zoneinfo-global/America/Monterrey
+X-LIC-LOCATION:America/Monterrey
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064116
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19211231T231844
+RDATE:19211231T231844
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19880101T000000
+RDATE:19880101T000000
+RDATE:19890101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19880403T020000
+RDATE:19880403T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19881030T020000
+RDATE:19881030T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Montevideo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Montevideo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,152 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Montevideo
+TZURL:http://tzurl.org/zoneinfo-global/America/Montevideo
+X-LIC-LOCATION:America/Montevideo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:20061001T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:UYT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034444
+TZOFFSETTO:-034444
+TZNAME:MMT
+DTSTART:18980628T000000
+RDATE:18980628T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034444
+TZOFFSETTO:-0330
+TZNAME:UYT
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+TZNAME:UYHST
+DTSTART:19231002T000000
+RDATE:19231002T000000
+RDATE:19241001T000000
+RDATE:19251001T000000
+RDATE:19331029T000000
+RDATE:19341028T000000
+RDATE:19351027T000000
+RDATE:19361101T000000
+RDATE:19371031T000000
+RDATE:19381030T000000
+RDATE:19391029T000000
+RDATE:19401027T000000
+RDATE:19410801T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+TZNAME:UYT
+DTSTART:19240401T000000
+RDATE:19240401T000000
+RDATE:19250401T000000
+RDATE:19260401T000000
+RDATE:19340401T000000
+RDATE:19350331T000000
+RDATE:19360329T000000
+RDATE:19370328T000000
+RDATE:19380327T000000
+RDATE:19390326T000000
+RDATE:19400331T000000
+RDATE:19410330T000000
+RDATE:19420101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:19421214T000000
+RDATE:19421214T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:UYT
+DTSTART:19430314T000000
+RDATE:19430314T000000
+RDATE:19591115T000000
+RDATE:19600306T000000
+RDATE:19650926T000000
+RDATE:19661031T000000
+RDATE:19671031T000000
+RDATE:19720815T000000
+RDATE:19761001T000000
+RDATE:19780401T000000
+RDATE:19800501T000000
+RDATE:19880314T000000
+RDATE:19890312T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930228T000000
+RDATE:20050327T020000
+RDATE:20060312T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:19590524T000000
+RDATE:19590524T000000
+RDATE:19600117T000000
+RDATE:19650404T000000
+RDATE:19660403T000000
+RDATE:19670402T000000
+RDATE:19720424T000000
+RDATE:19771204T000000
+RDATE:19791001T000000
+RDATE:19871214T000000
+RDATE:19881211T000000
+RDATE:19891029T000000
+RDATE:19901021T000000
+RDATE:19911027T000000
+RDATE:19921018T000000
+RDATE:20040919T000000
+RDATE:20051009T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0230
+TZNAME:UYHST
+DTSTART:19680527T000000
+RDATE:19680527T000000
+RDATE:19690527T000000
+RDATE:19700527T000000
+RDATE:19740310T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0300
+TZNAME:UYT
+DTSTART:19681202T000000
+RDATE:19681202T000000
+RDATE:19691202T000000
+RDATE:19701202T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:19741222T000000
+RDATE:19741222T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Montreal.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Montreal.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,234 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Montreal
+TZURL:http://tzurl.org/zoneinfo-global/America/Montreal
+X-LIC-LOCATION:America/Montreal
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-045416
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19180414T020000
+RDATE:19190331T023000
+RDATE:19200502T023000
+RDATE:19210501T020000
+RDATE:19220430T020000
+RDATE:19240517T020000
+RDATE:19250503T020000
+RDATE:19260502T020000
+RDATE:19270501T000000
+RDATE:19280429T000000
+RDATE:19290428T000000
+RDATE:19300427T000000
+RDATE:19310426T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340429T000000
+RDATE:19350428T000000
+RDATE:19360426T000000
+RDATE:19370425T000000
+RDATE:19380424T000000
+RDATE:19390430T000000
+RDATE:19400428T000000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19170424T000000
+RDATE:19170424T000000
+RDATE:19181031T020000
+RDATE:19191025T023000
+RDATE:19201003T023000
+RDATE:19211002T023000
+RDATE:19221001T023000
+RDATE:19240928T023000
+RDATE:19250927T023000
+RDATE:19260926T023000
+RDATE:19270925T000000
+RDATE:19280930T000000
+RDATE:19290929T000000
+RDATE:19300928T000000
+RDATE:19310927T000000
+RDATE:19320925T000000
+RDATE:19331001T000000
+RDATE:19340930T000000
+RDATE:19350929T000000
+RDATE:19360927T000000
+RDATE:19370926T000000
+RDATE:19380925T000000
+RDATE:19390924T000000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19491030T020000
+RDATE:19501029T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Montserrat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Montserrat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Montserrat
+TZURL:http://tzurl.org/zoneinfo-global/America/Montserrat
+X-LIC-LOCATION:America/Montserrat
+BEGIN:STANDARD
+TZOFFSETFROM:-040852
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000100
+RDATE:19110701T000100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Nassau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Nassau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Nassau
+TZURL:http://tzurl.org/zoneinfo-global/America/Nassau
+X-LIC-LOCATION:America/Nassau
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050924
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19640426T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19641025T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19760101T000000
+RDATE:19760101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/New_York.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/New_York.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,237 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/New_York
+TZURL:http://tzurl.org/zoneinfo-global/America/New_York
+X-LIC-LOCATION:America/New_York
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18831118T120358
+RDATE:18831118T120358
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210424T020000
+RDATE:19220430T020000
+RDATE:19230429T020000
+RDATE:19240427T020000
+RDATE:19250426T020000
+RDATE:19260425T020000
+RDATE:19270424T020000
+RDATE:19280429T020000
+RDATE:19290428T020000
+RDATE:19300427T020000
+RDATE:19310426T020000
+RDATE:19320424T020000
+RDATE:19330430T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19360426T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+RDATE:19410427T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19210925T020000
+RDATE:19220924T020000
+RDATE:19230930T020000
+RDATE:19240928T020000
+RDATE:19250927T020000
+RDATE:19260926T020000
+RDATE:19270925T020000
+RDATE:19280930T020000
+RDATE:19290929T020000
+RDATE:19300928T020000
+RDATE:19310927T020000
+RDATE:19320925T020000
+RDATE:19330924T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19360927T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19400929T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Nipigon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Nipigon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,126 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Nipigon
+TZURL:http://tzurl.org/zoneinfo-global/America/Nipigon
+X-LIC-LOCATION:America/Nipigon
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055304
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19400929T000000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Nome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Nome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,187 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Nome
+TZURL:http://tzurl.org/zoneinfo-global/America/Nome
+X-LIC-LOCATION:America/Nome
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+125821
+TZOFFSETTO:-110138
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-110138
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:NWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:NPT
+DTSTART:19450814T130000
+RDATE:19450814T130000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:BDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Noronha.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Noronha.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,76 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Noronha
+TZURL:http://tzurl.org/zoneinfo-global/America/Noronha
+X-LIC-LOCATION:America/Noronha
+BEGIN:STANDARD
+TZOFFSETFROM:-020940
+TZOFFSETTO:-0200
+TZNAME:FNT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:FNST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:FNT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:20000227T000000
+RDATE:20001015T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:FNT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/North_Dakota/Beulah.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/North_Dakota/Beulah.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,155 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/North_Dakota/Beulah
+TZURL:http://tzurl.org/zoneinfo-global/America/North_Dakota/Beulah
+X-LIC-LOCATION:America/North_Dakota/Beulah
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20110313T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064707
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T121253
+RDATE:18831118T121253
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070311T020000
+RDATE:20080309T020000
+RDATE:20090308T020000
+RDATE:20100314T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071104T020000
+RDATE:20081102T020000
+RDATE:20091101T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20101107T020000
+RDATE:20101107T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/North_Dakota/Center.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/North_Dakota/Center.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/North_Dakota/Center
+TZURL:http://tzurl.org/zoneinfo-global/America/North_Dakota/Center
+X-LIC-LOCATION:America/North_Dakota/Center
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064512
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T121448
+RDATE:18831118T121448
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19921025T020000
+RDATE:19921025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19930404T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19931031T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/North_Dakota/New_Salem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/North_Dakota/New_Salem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/North_Dakota/New_Salem
+TZURL:http://tzurl.org/zoneinfo-global/America/North_Dakota/New_Salem
+X-LIC-LOCATION:America/North_Dakota/New_Salem
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064539
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T121421
+RDATE:18831118T121421
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20031026T020000
+RDATE:20031026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20040404T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20041031T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Ojinaga.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Ojinaga.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,114 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Ojinaga
+TZURL:http://tzurl.org/zoneinfo-global/America/Ojinaga
+X-LIC-LOCATION:America/Ojinaga
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-065740
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T000220
+RDATE:19220101T000220
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19960101T000000
+RDATE:19960101T000000
+RDATE:19980101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19961027T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19980405T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20100101T000000
+RDATE:20100101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Panama.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Panama.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Panama
+TZURL:http://tzurl.org/zoneinfo-global/America/Panama
+X-LIC-LOCATION:America/Panama
+BEGIN:STANDARD
+TZOFFSETFROM:-051808
+TZOFFSETTO:-051936
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-051936
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19080422T000000
+RDATE:19080422T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Pangnirtung.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Pangnirtung.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,161 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Pangnirtung
+TZURL:http://tzurl.org/zoneinfo-global/America/Pangnirtung
+X-LIC-LOCATION:America/Pangnirtung
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19210101T000000
+RDATE:19210101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ADDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19950402T020000
+RDATE:19950402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19951029T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19991031T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Paramaribo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Paramaribo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Paramaribo
+TZURL:http://tzurl.org/zoneinfo-global/America/Paramaribo
+X-LIC-LOCATION:America/Paramaribo
+BEGIN:STANDARD
+TZOFFSETFROM:-034040
+TZOFFSETTO:-034052
+TZNAME:PMT
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034052
+TZOFFSETTO:-034036
+TZNAME:PMT
+DTSTART:19350101T000000
+RDATE:19350101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034036
+TZOFFSETTO:-0330
+TZNAME:NEGT
+DTSTART:19451001T000000
+RDATE:19451001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+TZNAME:SRT
+DTSTART:19751120T000000
+RDATE:19751120T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+TZNAME:SRT
+DTSTART:19841001T000000
+RDATE:19841001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Phoenix.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Phoenix.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Phoenix
+TZURL:http://tzurl.org/zoneinfo-global/America/Phoenix
+X-LIC-LOCATION:America/Phoenix
+BEGIN:STANDARD
+TZOFFSETFROM:-072818
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T113142
+RDATE:18831118T113142
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19440101T000100
+RDATE:19441001T000100
+RDATE:19671029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+RDATE:19440401T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19670101T000000
+RDATE:19670101T000000
+RDATE:19680321T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Port-au-Prince.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Port-au-Prince.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,69 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Port-au-Prince
+TZURL:http://tzurl.org/zoneinfo-global/America/Port-au-Prince
+X-LIC-LOCATION:America/Port-au-Prince
+BEGIN:STANDARD
+TZOFFSETFROM:-044920
+TZOFFSETTO:-0449
+TZNAME:PPMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0449
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19170124T120000
+RDATE:19170124T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19830508T000000
+RDATE:19830508T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+RDATE:19860427T000000
+RDATE:19870426T000000
+RDATE:19880403T010000
+RDATE:19890402T010000
+RDATE:19900401T010000
+RDATE:19910407T010000
+RDATE:19920405T010000
+RDATE:19930404T010000
+RDATE:19940403T010000
+RDATE:19950402T010000
+RDATE:19960407T010000
+RDATE:19970406T010000
+RDATE:20050403T000000
+RDATE:20060402T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19831030T000000
+RDATE:19831030T000000
+RDATE:19841028T000000
+RDATE:19851027T000000
+RDATE:19861026T000000
+RDATE:19871025T000000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:20051030T000000
+RDATE:20061029T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Port_of_Spain.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Port_of_Spain.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Port_of_Spain
+TZURL:http://tzurl.org/zoneinfo-global/America/Port_of_Spain
+X-LIC-LOCATION:America/Port_of_Spain
+BEGIN:STANDARD
+TZOFFSETFROM:-040604
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Porto_Velho.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Porto_Velho.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,63 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Porto_Velho
+TZURL:http://tzurl.org/zoneinfo-global/America/Porto_Velho
+X-LIC-LOCATION:America/Porto_Velho
+BEGIN:STANDARD
+TZOFFSETFROM:-041536
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Puerto_Rico.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Puerto_Rico.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Puerto_Rico
+TZURL:http://tzurl.org/zoneinfo-global/America/Puerto_Rico
+X-LIC-LOCATION:America/Puerto_Rico
+BEGIN:STANDARD
+TZOFFSETFROM:-042425
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:18990328T120000
+RDATE:18990328T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420503T000000
+RDATE:19420503T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Rainy_River.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Rainy_River.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,126 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Rainy_River
+TZURL:http://tzurl.org/zoneinfo-global/America/Rainy_River
+X-LIC-LOCATION:America/Rainy_River
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-061816
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19400929T000000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Rankin_Inlet.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Rankin_Inlet.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Rankin_Inlet
+TZURL:http://tzurl.org/zoneinfo-global/America/Rankin_Inlet
+X-LIC-LOCATION:America/Rankin_Inlet
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0400
+TZNAME:CDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Recife.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Recife.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,76 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Recife
+TZURL:http://tzurl.org/zoneinfo-global/America/Recife
+X-LIC-LOCATION:America/Recife
+BEGIN:STANDARD
+TZOFFSETFROM:-021936
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:20000227T000000
+RDATE:20001015T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Regina.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Regina.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,98 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Regina
+TZURL:http://tzurl.org/zoneinfo-global/America/Regina
+X-LIC-LOCATION:America/Regina
+BEGIN:STANDARD
+TZOFFSETFROM:-065836
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19050901T000000
+RDATE:19050901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19300504T000000
+RDATE:19310503T000000
+RDATE:19320501T000000
+RDATE:19330507T000000
+RDATE:19340506T000000
+RDATE:19370411T000000
+RDATE:19380410T000000
+RDATE:19390409T000000
+RDATE:19400414T000000
+RDATE:19410413T000000
+RDATE:19460414T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19590426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331001T000000
+RDATE:19341007T000000
+RDATE:19371010T000000
+RDATE:19381002T000000
+RDATE:19391008T000000
+RDATE:19401013T000000
+RDATE:19411012T000000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19591025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19600424T020000
+RDATE:19600424T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Resolute.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Resolute.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,123 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Resolute
+TZURL:http://tzurl.org/zoneinfo-global/America/Resolute
+X-LIC-LOCATION:America/Resolute
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19470831T000000
+RDATE:19470831T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0400
+TZNAME:CDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Rio_Branco.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Rio_Branco.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Rio_Branco
+TZURL:http://tzurl.org/zoneinfo-global/America/Rio_Branco
+X-LIC-LOCATION:America/Rio_Branco
+BEGIN:STANDARD
+TZOFFSETFROM:-043112
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:ACST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20080624T000000
+RDATE:20080624T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Santa_Isabel.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Santa_Isabel.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,107 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santa_Isabel
+TZURL:http://tzurl.org/zoneinfo-global/America/Santa_Isabel
+X-LIC-LOCATION:America/Santa_Isabel
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-073928
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T002032
+RDATE:19220101T002032
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420424T000000
+RDATE:19420424T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Santarem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Santarem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santarem
+TZURL:http://tzurl.org/zoneinfo-global/America/Santarem
+X-LIC-LOCATION:America/Santarem
+BEGIN:STANDARD
+TZOFFSETFROM:-033848
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20080624T000000
+RDATE:20080624T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Santiago.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Santiago.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,210 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santiago
+TZURL:http://tzurl.org/zoneinfo-global/America/Santiago
+X-LIC-LOCATION:America/Santiago
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:20120311T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:20121014T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-044246
+TZOFFSETTO:-044246
+TZNAME:SMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0500
+TZNAME:CLT
+DTSTART:19100101T000000
+RDATE:19100101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-044246
+TZNAME:SMT
+DTSTART:19160701T000000
+RDATE:19160701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19180901T000000
+RDATE:19180901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-044246
+TZNAME:SMT
+DTSTART:19190701T000000
+RDATE:19190701T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+TZNAME:CLST
+DTSTART:19270901T000000
+RDATE:19270901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CLT
+DTSTART:19280401T000000
+RDATE:19280401T000000
+RDATE:19290401T000000
+RDATE:19300401T000000
+RDATE:19310401T000000
+RDATE:19320401T000000
+RDATE:19420601T000000
+RDATE:19460831T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CLST
+DTSTART:19280901T000000
+RDATE:19280901T000000
+RDATE:19290901T000000
+RDATE:19300901T000000
+RDATE:19310901T000000
+RDATE:19320901T000000
+RDATE:19420801T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:CLST
+DTSTART:19460715T000000
+RDATE:19460715T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CLT
+DTSTART:19470331T230000
+RDATE:19470331T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19470522T000000
+RDATE:19470522T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:19681103T000000
+RDATE:19681103T000000
+RDATE:19691123T000000
+RDATE:19701011T000000
+RDATE:19711010T000000
+RDATE:19721015T000000
+RDATE:19730930T000000
+RDATE:19741013T000000
+RDATE:19751012T000000
+RDATE:19761010T000000
+RDATE:19771009T000000
+RDATE:19781015T000000
+RDATE:19791014T000000
+RDATE:19801012T000000
+RDATE:19811011T000000
+RDATE:19821010T000000
+RDATE:19831009T000000
+RDATE:19841014T000000
+RDATE:19851013T000000
+RDATE:19861012T000000
+RDATE:19871011T000000
+RDATE:19881002T000000
+RDATE:19891015T000000
+RDATE:19900916T000000
+RDATE:19911013T000000
+RDATE:19921011T000000
+RDATE:19931010T000000
+RDATE:19941009T000000
+RDATE:19951015T000000
+RDATE:19961013T000000
+RDATE:19971012T000000
+RDATE:19980927T000000
+RDATE:19991010T000000
+RDATE:20001015T000000
+RDATE:20011014T000000
+RDATE:20021013T000000
+RDATE:20031012T000000
+RDATE:20041010T000000
+RDATE:20051009T000000
+RDATE:20061015T000000
+RDATE:20071014T000000
+RDATE:20081012T000000
+RDATE:20091011T000000
+RDATE:20101010T000000
+RDATE:20110821T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19690330T000000
+RDATE:19690330T000000
+RDATE:19700329T000000
+RDATE:19710314T000000
+RDATE:19720312T000000
+RDATE:19730311T000000
+RDATE:19740310T000000
+RDATE:19750309T000000
+RDATE:19760314T000000
+RDATE:19770313T000000
+RDATE:19780312T000000
+RDATE:19790311T000000
+RDATE:19800309T000000
+RDATE:19810315T000000
+RDATE:19820314T000000
+RDATE:19830313T000000
+RDATE:19840311T000000
+RDATE:19850310T000000
+RDATE:19860309T000000
+RDATE:19870412T000000
+RDATE:19880313T000000
+RDATE:19890312T000000
+RDATE:19900318T000000
+RDATE:19910310T000000
+RDATE:19920315T000000
+RDATE:19930314T000000
+RDATE:19940313T000000
+RDATE:19950312T000000
+RDATE:19960310T000000
+RDATE:19970330T000000
+RDATE:19980315T000000
+RDATE:19990404T000000
+RDATE:20000312T000000
+RDATE:20010311T000000
+RDATE:20020310T000000
+RDATE:20030309T000000
+RDATE:20040314T000000
+RDATE:20050313T000000
+RDATE:20060312T000000
+RDATE:20070311T000000
+RDATE:20080330T000000
+RDATE:20090315T000000
+RDATE:20100404T000000
+RDATE:20110508T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Santo_Domingo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Santo_Domingo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santo_Domingo
+TZURL:http://tzurl.org/zoneinfo-global/America/Santo_Domingo
+X-LIC-LOCATION:America/Santo_Domingo
+BEGIN:STANDARD
+TZOFFSETFROM:-043936
+TZOFFSETTO:-0440
+TZNAME:SDMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0440
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19330401T120000
+RDATE:19330401T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19661030T000000
+RDATE:19661030T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19670228T000000
+RDATE:19670228T000000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0430
+TZNAME:EHDT
+DTSTART:19691026T000000
+RDATE:19691026T000000
+RDATE:19701025T000000
+RDATE:19711031T000000
+RDATE:19721029T000000
+RDATE:19731028T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19700221T000000
+RDATE:19700221T000000
+RDATE:19710120T000000
+RDATE:19720121T000000
+RDATE:19730121T000000
+RDATE:19740121T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19741027T000000
+RDATE:19741027T000000
+RDATE:20001203T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Sao_Paulo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Sao_Paulo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,152 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Sao_Paulo
+TZURL:http://tzurl.org/zoneinfo-global/America/Sao_Paulo
+X-LIC-LOCATION:America/Sao_Paulo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-030628
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631023T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20040215T000000
+RDATE:20050220T000000
+RDATE:20060219T000000
+RDATE:20070225T000000
+RDATE:20080217T000000
+RDATE:20090215T000000
+RDATE:20100221T000000
+RDATE:20110220T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20150222T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Scoresbysund.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Scoresbysund.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,72 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Scoresbysund
+TZURL:http://tzurl.org/zoneinfo-global/America/Scoresbysund
+X-LIC-LOCATION:America/Scoresbysund
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:EGST
+DTSTART:19820328T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:EGT
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-012752
+TZOFFSETTO:-0200
+TZNAME:CGT
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:CGST
+DTSTART:19800406T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:CGT
+DTSTART:19800928T030000
+RDATE:19800928T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:+0000
+TZNAME:EGST
+DTSTART:19810329T000000
+RDATE:19810329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:EGT
+DTSTART:19810927T010000
+RDATE:19810927T010000
+RDATE:19820926T010000
+RDATE:19830925T010000
+RDATE:19840930T010000
+RDATE:19850929T010000
+RDATE:19860928T010000
+RDATE:19870927T010000
+RDATE:19880925T010000
+RDATE:19890924T010000
+RDATE:19900930T010000
+RDATE:19910929T010000
+RDATE:19920927T010000
+RDATE:19930926T010000
+RDATE:19940925T010000
+RDATE:19950924T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Shiprock.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Shiprock.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Shiprock
+TZURL:http://tzurl.org/zoneinfo-global/America/Shiprock
+X-LIC-LOCATION:America/Shiprock
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T120004
+RDATE:18831118T120004
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210327T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Sitka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Sitka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,174 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Sitka
+TZURL:http://tzurl.org/zoneinfo-global/America/Sitka
+X-LIC-LOCATION:America/Sitka
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+145847
+TZOFFSETTO:-090113
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-090113
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/St_Barthelemy.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/St_Barthelemy.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Barthelemy
+TZURL:http://tzurl.org/zoneinfo-global/America/St_Barthelemy
+X-LIC-LOCATION:America/St_Barthelemy
+BEGIN:STANDARD
+TZOFFSETFROM:-040608
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110608T000000
+RDATE:19110608T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/St_Johns.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/St_Johns.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,285 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Johns
+TZURL:http://tzurl.org/zoneinfo-global/America/St_Johns
+X-LIC-LOCATION:America/St_Johns
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:20120311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+TZNAME:NDT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180414T020000
+RDATE:19190505T230000
+RDATE:19200502T230000
+RDATE:19210501T230000
+RDATE:19220507T230000
+RDATE:19230506T230000
+RDATE:19240504T230000
+RDATE:19250503T230000
+RDATE:19260502T230000
+RDATE:19270501T230000
+RDATE:19280506T230000
+RDATE:19290505T230000
+RDATE:19300504T230000
+RDATE:19310503T230000
+RDATE:19320501T230000
+RDATE:19330507T230000
+RDATE:19340506T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:19170917T020000
+RDATE:19170917T020000
+RDATE:19181031T020000
+RDATE:19190812T230000
+RDATE:19201031T230000
+RDATE:19211030T230000
+RDATE:19221029T230000
+RDATE:19231028T230000
+RDATE:19241026T230000
+RDATE:19251025T230000
+RDATE:19261031T230000
+RDATE:19271030T230000
+RDATE:19281028T230000
+RDATE:19291027T230000
+RDATE:19301026T230000
+RDATE:19311025T230000
+RDATE:19321030T230000
+RDATE:19331029T230000
+RDATE:19341028T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19350330T000000
+RDATE:19350330T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:19350505T230000
+RDATE:19350505T230000
+RDATE:19360511T000000
+RDATE:19370510T000000
+RDATE:19380509T000000
+RDATE:19390515T000000
+RDATE:19400513T000000
+RDATE:19410512T000000
+RDATE:19460512T020000
+RDATE:19470511T020000
+RDATE:19480509T020000
+RDATE:19490508T020000
+RDATE:19500514T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T000100
+RDATE:19890402T000100
+RDATE:19900401T000100
+RDATE:19910407T000100
+RDATE:19920405T000100
+RDATE:19930404T000100
+RDATE:19940403T000100
+RDATE:19950402T000100
+RDATE:19960407T000100
+RDATE:19970406T000100
+RDATE:19980405T000100
+RDATE:19990404T000100
+RDATE:20000402T000100
+RDATE:20010401T000100
+RDATE:20020407T000100
+RDATE:20030406T000100
+RDATE:20040404T000100
+RDATE:20050403T000100
+RDATE:20060402T000100
+RDATE:20070311T000100
+RDATE:20080309T000100
+RDATE:20090308T000100
+RDATE:20100314T000100
+RDATE:20110313T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19351027T230000
+RDATE:19351027T230000
+RDATE:19361005T000000
+RDATE:19371004T000000
+RDATE:19381003T000000
+RDATE:19391002T000000
+RDATE:19401007T000000
+RDATE:19411006T000000
+RDATE:19450930T020000
+RDATE:19461006T020000
+RDATE:19471005T020000
+RDATE:19481003T020000
+RDATE:19491002T020000
+RDATE:19501008T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T000100
+RDATE:19891029T000100
+RDATE:19901028T000100
+RDATE:19911027T000100
+RDATE:19921025T000100
+RDATE:19931031T000100
+RDATE:19941030T000100
+RDATE:19951029T000100
+RDATE:19961027T000100
+RDATE:19971026T000100
+RDATE:19981025T000100
+RDATE:19991031T000100
+RDATE:20001029T000100
+RDATE:20011028T000100
+RDATE:20021027T000100
+RDATE:20031026T000100
+RDATE:20041031T000100
+RDATE:20051030T000100
+RDATE:20061029T000100
+RDATE:20071104T000100
+RDATE:20081102T000100
+RDATE:20091101T000100
+RDATE:20101107T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NWT
+DTSTART:19420511T000000
+RDATE:19420511T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+TZNAME:NPT
+DTSTART:19450814T203000
+RDATE:19450814T203000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0130
+TZNAME:NDDT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0130
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19881030T000100
+RDATE:19881030T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:20111101T000000
+RDATE:20111101T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/St_Kitts.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/St_Kitts.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Kitts
+TZURL:http://tzurl.org/zoneinfo-global/America/St_Kitts
+X-LIC-LOCATION:America/St_Kitts
+BEGIN:STANDARD
+TZOFFSETFROM:-041052
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/St_Lucia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/St_Lucia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Lucia
+TZURL:http://tzurl.org/zoneinfo-global/America/St_Lucia
+X-LIC-LOCATION:America/St_Lucia
+BEGIN:STANDARD
+TZOFFSETFROM:-0404
+TZOFFSETTO:-0404
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0404
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/St_Thomas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/St_Thomas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Thomas
+TZURL:http://tzurl.org/zoneinfo-global/America/St_Thomas
+X-LIC-LOCATION:America/St_Thomas
+BEGIN:STANDARD
+TZOFFSETFROM:-041944
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/St_Vincent.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/St_Vincent.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Vincent
+TZURL:http://tzurl.org/zoneinfo-global/America/St_Vincent
+X-LIC-LOCATION:America/St_Vincent
+BEGIN:STANDARD
+TZOFFSETFROM:-040456
+TZOFFSETTO:-040456
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-040456
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Swift_Current.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Swift_Current.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Swift_Current
+TZURL:http://tzurl.org/zoneinfo-global/America/Swift_Current
+X-LIC-LOCATION:America/Swift_Current
+BEGIN:STANDARD
+TZOFFSETFROM:-071120
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19050901T000000
+RDATE:19050901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19570428T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19571027T020000
+RDATE:19591025T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19720430T020000
+RDATE:19720430T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Tegucigalpa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Tegucigalpa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,34 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Tegucigalpa
+TZURL:http://tzurl.org/zoneinfo-global/America/Tegucigalpa
+X-LIC-LOCATION:America/Tegucigalpa
+BEGIN:STANDARD
+TZOFFSETFROM:-054852
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210401T000000
+RDATE:19210401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19870503T000000
+RDATE:19870503T000000
+RDATE:19880501T000000
+RDATE:20060507T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19870927T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:20060807T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Thule.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Thule.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,74 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Thule
+TZURL:http://tzurl.org/zoneinfo-global/America/Thule
+X-LIC-LOCATION:America/Thule
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-043508
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:19920329T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19910929T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Thunder_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Thunder_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,146 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Thunder_Bay
+TZURL:http://tzurl.org/zoneinfo-global/America/Thunder_Bay
+X-LIC-LOCATION:America/Thunder_Bay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0557
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19100101T000000
+RDATE:19100101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19700101T000000
+RDATE:19730101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19700426T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Tijuana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Tijuana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Tijuana
+TZURL:http://tzurl.org/zoneinfo-global/America/Tijuana
+X-LIC-LOCATION:America/Tijuana
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-074804
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T001156
+RDATE:19220101T001156
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420424T000000
+RDATE:19420424T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+RDATE:20100101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Toronto.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Toronto.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,233 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Toronto
+TZURL:http://tzurl.org/zoneinfo-global/America/Toronto
+X-LIC-LOCATION:America/Toronto
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-051732
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190330T233000
+RDATE:19200502T020000
+RDATE:19210515T020000
+RDATE:19220514T020000
+RDATE:19230513T020000
+RDATE:19240504T020000
+RDATE:19250503T020000
+RDATE:19260502T020000
+RDATE:19270501T020000
+RDATE:19280429T020000
+RDATE:19290428T020000
+RDATE:19300427T020000
+RDATE:19310426T020000
+RDATE:19320501T020000
+RDATE:19330430T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19360426T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+RDATE:19460428T020000
+RDATE:19470427T000000
+RDATE:19480425T000000
+RDATE:19490424T000000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19191026T000000
+RDATE:19200926T000000
+RDATE:19210915T020000
+RDATE:19220917T020000
+RDATE:19230916T020000
+RDATE:19240921T020000
+RDATE:19250920T020000
+RDATE:19260919T020000
+RDATE:19270925T020000
+RDATE:19280930T020000
+RDATE:19290929T020000
+RDATE:19300928T020000
+RDATE:19310927T020000
+RDATE:19320925T020000
+RDATE:19331001T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19360927T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T000000
+RDATE:19480926T000000
+RDATE:19491127T000000
+RDATE:19501126T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19190101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Tortola.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Tortola.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Tortola
+TZURL:http://tzurl.org/zoneinfo-global/America/Tortola
+X-LIC-LOCATION:America/Tortola
+BEGIN:STANDARD
+TZOFFSETFROM:-041828
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Vancouver.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Vancouver.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,188 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Vancouver
+TZURL:http://tzurl.org/zoneinfo-global/America/Vancouver
+X-LIC-LOCATION:America/Vancouver
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-081228
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19870101T000000
+RDATE:19870101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Whitehorse.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Whitehorse.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Whitehorse
+TZURL:http://tzurl.org/zoneinfo-global/America/Whitehorse
+X-LIC-LOCATION:America/Whitehorse
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-090012
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19000820T000000
+RDATE:19000820T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190525T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191101T000000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YPT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0700
+TZNAME:YDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+DTSTART:19660701T020000
+RDATE:19660701T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Winnipeg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Winnipeg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,184 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Winnipeg
+TZURL:http://tzurl.org/zoneinfo-global/America/Winnipeg
+X-LIC-LOCATION:America/Winnipeg
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-062836
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18870716T000000
+RDATE:18870716T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19160423T000000
+RDATE:19160423T000000
+RDATE:19180414T020000
+RDATE:19370516T020000
+RDATE:19460512T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500501T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19630428T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19160917T000000
+RDATE:19160917T000000
+RDATE:19181031T020000
+RDATE:19370926T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500930T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19591025T020000
+RDATE:19600925T020000
+RDATE:19630922T020000
+RDATE:19661030T030000
+RDATE:19671029T030000
+RDATE:19681027T030000
+RDATE:19691026T030000
+RDATE:19701025T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761031T030000
+RDATE:19771030T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T030000
+RDATE:19821031T030000
+RDATE:19831030T030000
+RDATE:19841028T030000
+RDATE:19851027T030000
+RDATE:19861026T030000
+RDATE:19871025T030000
+RDATE:19881030T030000
+RDATE:19891029T030000
+RDATE:19901028T030000
+RDATE:19911027T030000
+RDATE:19921025T030000
+RDATE:19931031T030000
+RDATE:19941030T030000
+RDATE:19951029T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20060101T000000
+RDATE:20060101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Yakutat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Yakutat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,168 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Yakutat
+TZURL:http://tzurl.org/zoneinfo-global/America/Yakutat
+X-LIC-LOCATION:America/Yakutat
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+144105
+TZOFFSETTO:-091855
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-091855
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YPT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/America/Yellowknife.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/America/Yellowknife.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Yellowknife
+TZURL:http://tzurl.org/zoneinfo-global/America/Yellowknife
+X-LIC-LOCATION:America/Yellowknife
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19350101T000000
+RDATE:19350101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+TZNAME:MDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Casey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Casey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Casey
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Casey
+X-LIC-LOCATION:Antarctica/Casey
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+1100
+TZNAME:CAST
+DTSTART:20091018T020000
+RDATE:20091018T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:20100305T020000
+RDATE:20100305T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Davis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Davis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,38 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Davis
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Davis
+X-LIC-LOCATION:Antarctica/Davis
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0700
+TZNAME:DAVT
+DTSTART:19570113T000000
+RDATE:19570113T000000
+RDATE:19690201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0000
+TZNAME:zzz
+DTSTART:19641101T000000
+RDATE:19641101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0500
+TZNAME:DAVT
+DTSTART:20091018T020000
+RDATE:20091018T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0700
+TZNAME:DAVT
+DTSTART:20100311T010000
+RDATE:20100311T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/DumontDUrville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/DumontDUrville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/DumontDUrville
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/DumontDUrville
+X-LIC-LOCATION:Antarctica/DumontDUrville
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1000
+TZNAME:PMT
+DTSTART:19470101T000000
+RDATE:19470101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0000
+TZNAME:zzz
+DTSTART:19520114T000000
+RDATE:19520114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1000
+TZNAME:DDUT
+DTSTART:19561101T000000
+RDATE:19561101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Macquarie.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Macquarie.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,142 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Macquarie
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Macquarie
+X-LIC-LOCATION:Antarctica/Macquarie
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19161001T020000
+RDATE:19161001T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20000827T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+RDATE:20071007T020000
+RDATE:20081005T020000
+RDATE:20091004T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170201T000000
+RDATE:19170201T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19680331T030000
+RDATE:19690309T030000
+RDATE:19700308T030000
+RDATE:19710314T030000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820328T030000
+RDATE:19830327T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910331T030000
+RDATE:19920329T030000
+RDATE:19930328T030000
+RDATE:19940327T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+RDATE:20080406T030000
+RDATE:20090405T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19670101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:MIST
+DTSTART:20100404T030000
+RDATE:20100404T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Mawson.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Mawson.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Mawson
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Mawson
+X-LIC-LOCATION:Antarctica/Mawson
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0600
+TZNAME:MAWT
+DTSTART:19540213T000000
+RDATE:19540213T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:MAWT
+DTSTART:20091018T020000
+RDATE:20091018T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/McMurdo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/McMurdo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/McMurdo
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/McMurdo
+X-LIC-LOCATION:Antarctica/McMurdo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19560101T000000
+RDATE:19560101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891008T020000
+RDATE:19901007T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20001001T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19750223T030000
+RDATE:19750223T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870301T030000
+RDATE:19880306T030000
+RDATE:19890305T030000
+RDATE:19900318T030000
+RDATE:19910317T030000
+RDATE:19920315T030000
+RDATE:19930321T030000
+RDATE:19940320T030000
+RDATE:19950319T030000
+RDATE:19960317T030000
+RDATE:19970316T030000
+RDATE:19980315T030000
+RDATE:19990321T030000
+RDATE:20000319T030000
+RDATE:20010318T030000
+RDATE:20020317T030000
+RDATE:20030316T030000
+RDATE:20040321T030000
+RDATE:20050320T030000
+RDATE:20060319T030000
+RDATE:20070318T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Palmer.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Palmer.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,119 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Palmer
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Palmer
+X-LIC-LOCATION:Antarctica/Palmer
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:19991010T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:20000312T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19650301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19651015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19820501T000000
+RDATE:19820501T000000
+RDATE:19830313T000000
+RDATE:19840311T000000
+RDATE:19850310T000000
+RDATE:19860309T000000
+RDATE:19870412T000000
+RDATE:19880313T000000
+RDATE:19890312T000000
+RDATE:19900318T000000
+RDATE:19910310T000000
+RDATE:19920315T000000
+RDATE:19930314T000000
+RDATE:19940313T000000
+RDATE:19950312T000000
+RDATE:19960310T000000
+RDATE:19970330T000000
+RDATE:19980315T000000
+RDATE:19990404T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:19821010T000000
+RDATE:19821010T000000
+RDATE:19831009T000000
+RDATE:19841014T000000
+RDATE:19851013T000000
+RDATE:19861012T000000
+RDATE:19871011T000000
+RDATE:19881002T000000
+RDATE:19891015T000000
+RDATE:19900916T000000
+RDATE:19911013T000000
+RDATE:19921011T000000
+RDATE:19931010T000000
+RDATE:19941009T000000
+RDATE:19951015T000000
+RDATE:19961013T000000
+RDATE:19971012T000000
+RDATE:19980927T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Rothera.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Rothera.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Rothera
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Rothera
+X-LIC-LOCATION:Antarctica/Rothera
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0300
+TZNAME:ROTT
+DTSTART:19761201T000000
+RDATE:19761201T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/South_Pole.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/South_Pole.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/South_Pole
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/South_Pole
+X-LIC-LOCATION:Antarctica/South_Pole
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19560101T000000
+RDATE:19560101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891008T020000
+RDATE:19901007T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20001001T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19750223T030000
+RDATE:19750223T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870301T030000
+RDATE:19880306T030000
+RDATE:19890305T030000
+RDATE:19900318T030000
+RDATE:19910317T030000
+RDATE:19920315T030000
+RDATE:19930321T030000
+RDATE:19940320T030000
+RDATE:19950319T030000
+RDATE:19960317T030000
+RDATE:19970316T030000
+RDATE:19980315T030000
+RDATE:19990321T030000
+RDATE:20000319T030000
+RDATE:20010318T030000
+RDATE:20020317T030000
+RDATE:20030316T030000
+RDATE:20040321T030000
+RDATE:20050320T030000
+RDATE:20060319T030000
+RDATE:20070318T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Syowa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Syowa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Syowa
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Syowa
+X-LIC-LOCATION:Antarctica/Syowa
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0300
+TZNAME:SYOT
+DTSTART:19570129T000000
+RDATE:19570129T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Antarctica/Vostok.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Antarctica/Vostok.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Vostok
+TZURL:http://tzurl.org/zoneinfo-global/Antarctica/Vostok
+X-LIC-LOCATION:Antarctica/Vostok
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0600
+TZNAME:VOST
+DTSTART:19571216T000000
+RDATE:19571216T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Arctic/Longyearbyen.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Arctic/Longyearbyen.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Arctic/Longyearbyen
+TZURL:http://tzurl.org/zoneinfo-global/Arctic/Longyearbyen
+X-LIC-LOCATION:Arctic/Longyearbyen
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0043
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160522T010000
+RDATE:19160522T010000
+RDATE:19400810T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19590315T020000
+RDATE:19600320T020000
+RDATE:19610319T020000
+RDATE:19620318T020000
+RDATE:19630317T020000
+RDATE:19640315T020000
+RDATE:19650425T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19160930T000000
+RDATE:19160930T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451001T030000
+RDATE:19590920T030000
+RDATE:19600918T030000
+RDATE:19610917T030000
+RDATE:19620916T030000
+RDATE:19630915T030000
+RDATE:19640920T030000
+RDATE:19650919T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Aden.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Aden.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Aden
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Aden
+X-LIC-LOCATION:Asia/Aden
+BEGIN:STANDARD
+TZOFFSETFROM:+030048
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Almaty.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Almaty.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Almaty
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Almaty
+X-LIC-LOCATION:Asia/Almaty
+BEGIN:STANDARD
+TZOFFSETFROM:+050748
+TZOFFSETTO:+0500
+TZNAME:ALMT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:ALMT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:ALMST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:ALMT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:ALMT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19920101T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Amman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Amman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,92 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Amman
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Amman
+X-LIC-LOCATION:Asia/Amman
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20020328T235959
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20061027T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+022344
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19730606T000000
+RDATE:19730606T000000
+RDATE:19740501T000000
+RDATE:19750501T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780430T000000
+RDATE:19850401T000000
+RDATE:19860404T000000
+RDATE:19870403T000000
+RDATE:19880401T000000
+RDATE:19890508T000000
+RDATE:19900427T000000
+RDATE:19910417T000000
+RDATE:19920410T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950407T000000
+RDATE:19960405T000000
+RDATE:19970404T000000
+RDATE:19980403T000000
+RDATE:19990701T000000
+RDATE:20000330T000000
+RDATE:20010329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19731001T000000
+RDATE:19731001T000000
+RDATE:19741001T000000
+RDATE:19751001T000000
+RDATE:19761101T000000
+RDATE:19771001T000000
+RDATE:19780930T000000
+RDATE:19851001T000000
+RDATE:19861003T000000
+RDATE:19871002T000000
+RDATE:19881007T000000
+RDATE:19891006T000000
+RDATE:19901005T000000
+RDATE:19910927T000000
+RDATE:19921002T000000
+RDATE:19931001T000000
+RDATE:19940916T000000
+RDATE:19950915T010000
+RDATE:19960920T010000
+RDATE:19970919T010000
+RDATE:19980918T010000
+RDATE:19990924T010000
+RDATE:20000929T010000
+RDATE:20010928T010000
+RDATE:20020927T010000
+RDATE:20031024T010000
+RDATE:20041015T010000
+RDATE:20050930T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Anadyr.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Anadyr.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Anadyr
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Anadyr
+X-LIC-LOCATION:Asia/Anadyr
+BEGIN:STANDARD
+TZOFFSETFROM:+114956
+TZOFFSETTO:+1200
+TZNAME:ANAT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:ANAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+TZNAME:ANAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+TZNAME:ANAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+TZNAME:ANAST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:ANAT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:ANAST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+TZNAME:ANAST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:ANAT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:ANAT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Aqtau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Aqtau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Aqtau
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Aqtau
+X-LIC-LOCATION:Asia/Aqtau
+BEGIN:STANDARD
+TZOFFSETFROM:+032104
+TZOFFSETTO:+0400
+TZNAME:FORT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:FORT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:SHET
+DTSTART:19630101T000000
+RDATE:19630101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SHET
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:SHEST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:SHET
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SHEST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:AQTST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AQTST
+DTSTART:19950326T020000
+RDATE:19950326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AQTT
+DTSTART:19950924T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AQTST
+DTSTART:19960331T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:20050315T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Aqtobe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Aqtobe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,120 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Aqtobe
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Aqtobe
+X-LIC-LOCATION:Asia/Aqtobe
+BEGIN:STANDARD
+TZOFFSETFROM:+034840
+TZOFFSETTO:+0400
+TZNAME:AKTT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AKTT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:AKTST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:AKTT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:AKTST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:AKTT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AKTT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+RDATE:20050315T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:AQTST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Ashgabat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Ashgabat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Ashgabat
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Ashgabat
+X-LIC-LOCATION:Asia/Ashgabat
+BEGIN:STANDARD
+TZOFFSETFROM:+035332
+TZOFFSETTO:+0400
+TZNAME:ASHT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:ASHT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:ASHST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:ASHT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:ASHST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:ASHT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TMT
+DTSTART:19911027T000000
+RDATE:19911027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:TMT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Baghdad.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Baghdad.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,87 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Baghdad
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Baghdad
+X-LIC-LOCATION:Asia/Baghdad
+BEGIN:STANDARD
+TZOFFSETFROM:+025740
+TZOFFSETTO:+025736
+TZNAME:BMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+025736
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:ADT
+DTSTART:19820501T000000
+RDATE:19820501T000000
+RDATE:19830331T000000
+RDATE:19840401T000000
+RDATE:19850401T000000
+RDATE:19860330T010000
+RDATE:19870329T010000
+RDATE:19880327T010000
+RDATE:19890326T010000
+RDATE:19900325T010000
+RDATE:19910401T030000
+RDATE:19920401T030000
+RDATE:19930401T030000
+RDATE:19940401T030000
+RDATE:19950401T030000
+RDATE:19960401T030000
+RDATE:19970401T030000
+RDATE:19980401T030000
+RDATE:19990401T030000
+RDATE:20000401T030000
+RDATE:20010401T030000
+RDATE:20020401T030000
+RDATE:20030401T030000
+RDATE:20040401T030000
+RDATE:20050401T030000
+RDATE:20060401T030000
+RDATE:20070401T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19841001T000000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19911001T040000
+RDATE:19921001T040000
+RDATE:19931001T040000
+RDATE:19941001T040000
+RDATE:19951001T040000
+RDATE:19961001T040000
+RDATE:19971001T040000
+RDATE:19981001T040000
+RDATE:19991001T040000
+RDATE:20001001T040000
+RDATE:20011001T040000
+RDATE:20021001T040000
+RDATE:20031001T040000
+RDATE:20041001T040000
+RDATE:20051001T040000
+RDATE:20061001T040000
+RDATE:20071001T040000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Bahrain.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Bahrain.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Bahrain
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Bahrain
+X-LIC-LOCATION:Asia/Bahrain
+BEGIN:STANDARD
+TZOFFSETFROM:+032220
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19720601T000000
+RDATE:19720601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Baku.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Baku.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,120 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Baku
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Baku
+X-LIC-LOCATION:Asia/Baku
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AZST
+DTSTART:19970330T040000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AZT
+DTSTART:19971026T050000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+031924
+TZOFFSETTO:+0300
+TZNAME:BAKT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:BAKT
+DTSTART:19570301T000000
+RDATE:19570301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:BAKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:BAKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:BAKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AZST
+DTSTART:19910830T000000
+RDATE:19910830T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AZT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:AZST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AZT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19960101T000000
+RDATE:19970101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AZST
+DTSTART:19960331T050000
+RDATE:19960331T050000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AZT
+DTSTART:19961027T060000
+RDATE:19961027T060000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Bangkok.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Bangkok.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Bangkok
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Bangkok
+X-LIC-LOCATION:Asia/Bangkok
+BEGIN:STANDARD
+TZOFFSETFROM:+064204
+TZOFFSETTO:+064204
+TZNAME:BMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+064204
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19200401T000000
+RDATE:19200401T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Beirut.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Beirut.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,98 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Beirut
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Beirut
+X-LIC-LOCATION:Asia/Beirut
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19930328T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19991031T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0222
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19200328T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19230422T000000
+RDATE:19570501T000000
+RDATE:19580501T000000
+RDATE:19590501T000000
+RDATE:19600501T000000
+RDATE:19610501T000000
+RDATE:19720622T000000
+RDATE:19730501T000000
+RDATE:19740501T000000
+RDATE:19750501T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780430T000000
+RDATE:19840501T000000
+RDATE:19850501T000000
+RDATE:19860501T000000
+RDATE:19870501T000000
+RDATE:19880601T000000
+RDATE:19890510T000000
+RDATE:19900501T000000
+RDATE:19910501T000000
+RDATE:19920501T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19201025T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19230916T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19591001T000000
+RDATE:19601001T000000
+RDATE:19611001T000000
+RDATE:19721001T000000
+RDATE:19731001T000000
+RDATE:19741001T000000
+RDATE:19751001T000000
+RDATE:19761001T000000
+RDATE:19771001T000000
+RDATE:19780930T000000
+RDATE:19841016T000000
+RDATE:19851016T000000
+RDATE:19861016T000000
+RDATE:19871016T000000
+RDATE:19881016T000000
+RDATE:19891016T000000
+RDATE:19901016T000000
+RDATE:19911016T000000
+RDATE:19921004T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Bishkek.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Bishkek.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Bishkek
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Bishkek
+X-LIC-LOCATION:Asia/Bishkek
+BEGIN:STANDARD
+TZOFFSETFROM:+045824
+TZOFFSETTO:+0500
+TZNAME:FRUT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:FRUT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:FRUST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:FRUT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:FRUST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:KGT
+DTSTART:19910831T020000
+RDATE:19910831T020000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19971026T023000
+RDATE:19981025T023000
+RDATE:19991031T023000
+RDATE:20001029T023000
+RDATE:20011028T023000
+RDATE:20021027T023000
+RDATE:20031026T023000
+RDATE:20041031T023000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:KGST
+DTSTART:19920412T000000
+RDATE:19920412T000000
+RDATE:19930411T000000
+RDATE:19940410T000000
+RDATE:19950409T000000
+RDATE:19960407T000000
+RDATE:19970330T023000
+RDATE:19980329T023000
+RDATE:19990328T023000
+RDATE:20000326T023000
+RDATE:20010325T023000
+RDATE:20020331T023000
+RDATE:20030330T023000
+RDATE:20040328T023000
+RDATE:20050327T023000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:KGT
+DTSTART:20050812T000000
+RDATE:20050812T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Brunei.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Brunei.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Brunei
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Brunei
+X-LIC-LOCATION:Asia/Brunei
+BEGIN:STANDARD
+TZOFFSETFROM:+073940
+TZOFFSETTO:+0730
+TZNAME:BNT
+DTSTART:19260301T000000
+RDATE:19260301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:BNT
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Choibalsan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Choibalsan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,91 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Choibalsan
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Choibalsan
+X-LIC-LOCATION:Asia/Choibalsan
+BEGIN:STANDARD
+TZOFFSETFROM:+0738
+TZOFFSETTO:+0700
+TZNAME:ULAT
+DTSTART:19050801T000000
+RDATE:19050801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ULAT
+DTSTART:19780101T000000
+RDATE:19780101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+1000
+TZNAME:CHOST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:CHOT
+DTSTART:19831001T000000
+RDATE:19831001T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+RDATE:20010929T020000
+RDATE:20020928T020000
+RDATE:20030927T020000
+RDATE:20040925T020000
+RDATE:20050924T020000
+RDATE:20060930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:CHOST
+DTSTART:19840401T000000
+RDATE:19840401T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+RDATE:20010428T020000
+RDATE:20020330T020000
+RDATE:20030329T020000
+RDATE:20040327T020000
+RDATE:20050326T020000
+RDATE:20060325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+DTSTART:20080331T000000
+RDATE:20080331T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Chongqing.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Chongqing.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,47 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Chongqing
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Chongqing
+X-LIC-LOCATION:Asia/Chongqing
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:LONT
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Colombo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Colombo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Colombo
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Colombo
+X-LIC-LOCATION:Asia/Colombo
+BEGIN:STANDARD
+TZOFFSETFROM:+051924
+TZOFFSETTO:+051932
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+051932
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19060101T000000
+RDATE:19060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0600
+TZNAME:IHST
+DTSTART:19420105T000000
+RDATE:19420105T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0630
+TZNAME:IST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19451016T020000
+RDATE:19451016T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:LKT
+DTSTART:19960525T000000
+RDATE:19960525T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+TZNAME:LKT
+DTSTART:19961026T003000
+RDATE:19961026T003000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:20060415T003000
+RDATE:20060415T003000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Damascus.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Damascus.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Damascus
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Damascus
+X-LIC-LOCATION:Asia/Damascus
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20091030T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20100402T000000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1FR
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+022512
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19200418T020000
+RDATE:19200418T020000
+RDATE:19210417T020000
+RDATE:19220416T020000
+RDATE:19230415T020000
+RDATE:19620429T020000
+RDATE:19630501T020000
+RDATE:19640501T020000
+RDATE:19650501T020000
+RDATE:19660424T020000
+RDATE:19670501T020000
+RDATE:19680501T020000
+RDATE:19690501T020000
+RDATE:19700501T020000
+RDATE:19710501T020000
+RDATE:19720501T020000
+RDATE:19730501T020000
+RDATE:19740501T020000
+RDATE:19750501T020000
+RDATE:19760501T020000
+RDATE:19770501T020000
+RDATE:19780501T020000
+RDATE:19830409T020000
+RDATE:19840409T020000
+RDATE:19860216T020000
+RDATE:19870301T020000
+RDATE:19880315T020000
+RDATE:19890331T020000
+RDATE:19900401T020000
+RDATE:19910401T000000
+RDATE:19920408T000000
+RDATE:19930326T000000
+RDATE:19940401T000000
+RDATE:19950401T000000
+RDATE:19960401T000000
+RDATE:19970331T000000
+RDATE:19980330T000000
+RDATE:19990401T000000
+RDATE:20000401T000000
+RDATE:20010401T000000
+RDATE:20020401T000000
+RDATE:20030401T000000
+RDATE:20040401T000000
+RDATE:20050401T000000
+RDATE:20060401T000000
+RDATE:20070330T000000
+RDATE:20080404T000000
+RDATE:20090327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19201003T020000
+RDATE:19201003T020000
+RDATE:19211002T020000
+RDATE:19221001T020000
+RDATE:19231007T020000
+RDATE:19621001T020000
+RDATE:19630930T020000
+RDATE:19641001T020000
+RDATE:19650930T020000
+RDATE:19661001T020000
+RDATE:19671001T020000
+RDATE:19681001T020000
+RDATE:19691001T020000
+RDATE:19701001T020000
+RDATE:19711001T020000
+RDATE:19721001T020000
+RDATE:19731001T020000
+RDATE:19741001T020000
+RDATE:19751001T020000
+RDATE:19761001T020000
+RDATE:19770901T020000
+RDATE:19780901T020000
+RDATE:19831001T020000
+RDATE:19841001T020000
+RDATE:19861009T020000
+RDATE:19871031T020000
+RDATE:19881031T020000
+RDATE:19891001T020000
+RDATE:19900930T020000
+RDATE:19911001T000000
+RDATE:19921001T000000
+RDATE:19930925T000000
+RDATE:19941001T000000
+RDATE:19951001T000000
+RDATE:19961001T000000
+RDATE:19971001T000000
+RDATE:19981001T000000
+RDATE:19991001T000000
+RDATE:20001001T000000
+RDATE:20011001T000000
+RDATE:20021001T000000
+RDATE:20031001T000000
+RDATE:20041001T000000
+RDATE:20051001T000000
+RDATE:20060922T000000
+RDATE:20071102T000000
+RDATE:20081101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Dhaka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Dhaka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,66 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dhaka
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Dhaka
+X-LIC-LOCATION:Asia/Dhaka
+BEGIN:STANDARD
+TZOFFSETFROM:+060140
+TZOFFSETTO:+055320
+TZNAME:HMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19411001T000000
+RDATE:19411001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19420515T000000
+RDATE:19420515T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+TZNAME:DACT
+DTSTART:19510930T000000
+RDATE:19510930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:BDT
+DTSTART:19710326T000000
+RDATE:19710326T000000
+RDATE:20090101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:BDST
+DTSTART:20090619T230000
+RDATE:20090619T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:BDT
+DTSTART:20091231T235900
+RDATE:20091231T235900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Dili.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Dili.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dili
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Dili
+X-LIC-LOCATION:Asia/Dili
+BEGIN:STANDARD
+TZOFFSETFROM:+082220
+TZOFFSETTO:+0800
+TZNAME:TLT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420221T230000
+RDATE:19420221T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:TLT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19760503T000000
+RDATE:19760503T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:TLT
+DTSTART:20000917T000000
+RDATE:20000917T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Dubai.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Dubai.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dubai
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Dubai
+X-LIC-LOCATION:Asia/Dubai
+BEGIN:STANDARD
+TZOFFSETFROM:+034112
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Dushanbe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Dushanbe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,69 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dushanbe
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Dushanbe
+X-LIC-LOCATION:Asia/Dushanbe
+BEGIN:STANDARD
+TZOFFSETFROM:+043512
+TZOFFSETTO:+0500
+TZNAME:DUST
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:DUST
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:DUSST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:DUST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:DUSST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:TJT
+DTSTART:19910909T030000
+RDATE:19910909T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Gaza.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Gaza.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,145 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Gaza
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Gaza
+X-LIC-LOCATION:Asia/Gaza
+BEGIN:STANDARD
+TZOFFSETFROM:+021752
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19001001T000000
+RDATE:19001001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EET
+DTSTART:19400601T000000
+RDATE:19400601T000000
+RDATE:19430401T020000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19460416T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421101T000000
+RDATE:19421101T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T020000
+RDATE:19461101T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19590930T030000
+RDATE:19600930T030000
+RDATE:19610930T030000
+RDATE:19620930T030000
+RDATE:19630930T030000
+RDATE:19640930T030000
+RDATE:19650930T030000
+RDATE:19661001T030000
+RDATE:19960920T010000
+RDATE:19970919T010000
+RDATE:19980918T010000
+RDATE:19991015T000000
+RDATE:20001020T000000
+RDATE:20011019T000000
+RDATE:20021018T000000
+RDATE:20031017T000000
+RDATE:20041001T010000
+RDATE:20051004T020000
+RDATE:20060922T000000
+RDATE:20070913T020000
+RDATE:20080829T000000
+RDATE:20090904T020000
+RDATE:20100811T000000
+RDATE:20110801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19480515T000000
+RDATE:19480515T000000
+RDATE:19960101T000000
+RDATE:19990101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19570510T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19590501T010000
+RDATE:19600501T010000
+RDATE:19610501T010000
+RDATE:19620501T010000
+RDATE:19630501T010000
+RDATE:19640501T010000
+RDATE:19650501T010000
+RDATE:19660501T010000
+RDATE:19670501T010000
+RDATE:19960405T000000
+RDATE:19970404T000000
+RDATE:19980403T000000
+RDATE:19990416T000000
+RDATE:20000421T000000
+RDATE:20010420T000000
+RDATE:20020419T000000
+RDATE:20030418T000000
+RDATE:20040416T000000
+RDATE:20050415T000000
+RDATE:20060401T000000
+RDATE:20070401T000000
+RDATE:20080401T000000
+RDATE:20090327T000000
+RDATE:20100327T000100
+RDATE:20110402T120100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19670605T000000
+RDATE:19670605T000000
+RDATE:19741013T000000
+RDATE:19750831T000000
+RDATE:19850915T000000
+RDATE:19860907T000000
+RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
+RDATE:19900826T000000
+RDATE:19910901T000000
+RDATE:19920906T000000
+RDATE:19930905T000000
+RDATE:19940828T000000
+RDATE:19950903T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19740707T000000
+RDATE:19740707T000000
+RDATE:19750420T000000
+RDATE:19850414T000000
+RDATE:19860518T000000
+RDATE:19870415T000000
+RDATE:19880409T000000
+RDATE:19890430T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920329T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950331T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Harbin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Harbin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Harbin
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Harbin
+X-LIC-LOCATION:Asia/Harbin
+BEGIN:STANDARD
+TZOFFSETFROM:+082644
+TZOFFSETTO:+0830
+TZNAME:CHAT
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19320301T000000
+RDATE:19320301T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CHAT
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+TZNAME:CHAT
+DTSTART:19660501T000000
+RDATE:19660501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Hebron.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Hebron.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Hebron
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Hebron
+X-LIC-LOCATION:Asia/Hebron
+BEGIN:STANDARD
+TZOFFSETFROM:+022023
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19001001T000000
+RDATE:19001001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EET
+DTSTART:19400601T000000
+RDATE:19400601T000000
+RDATE:19430401T020000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19460416T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421101T000000
+RDATE:19421101T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T020000
+RDATE:19461101T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19590930T030000
+RDATE:19600930T030000
+RDATE:19610930T030000
+RDATE:19620930T030000
+RDATE:19630930T030000
+RDATE:19640930T030000
+RDATE:19650930T030000
+RDATE:19661001T030000
+RDATE:19960920T010000
+RDATE:19970919T010000
+RDATE:19980918T010000
+RDATE:19991015T000000
+RDATE:20001020T000000
+RDATE:20011019T000000
+RDATE:20021018T000000
+RDATE:20031017T000000
+RDATE:20041001T010000
+RDATE:20051004T020000
+RDATE:20060922T000000
+RDATE:20070913T020000
+RDATE:20080901T000000
+RDATE:20090904T020000
+RDATE:20100811T000000
+RDATE:20110801T000000
+RDATE:20110930T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19480515T000000
+RDATE:19480515T000000
+RDATE:19960101T000000
+RDATE:19990101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19570510T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19590501T010000
+RDATE:19600501T010000
+RDATE:19610501T010000
+RDATE:19620501T010000
+RDATE:19630501T010000
+RDATE:19640501T010000
+RDATE:19650501T010000
+RDATE:19660501T010000
+RDATE:19670501T010000
+RDATE:19960405T000000
+RDATE:19970404T000000
+RDATE:19980403T000000
+RDATE:19990416T000000
+RDATE:20000421T000000
+RDATE:20010420T000000
+RDATE:20020419T000000
+RDATE:20030418T000000
+RDATE:20040416T000000
+RDATE:20050415T000000
+RDATE:20060401T000000
+RDATE:20070401T000000
+RDATE:20080401T000000
+RDATE:20090327T000000
+RDATE:20100327T000100
+RDATE:20110401T120100
+RDATE:20110830T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19670605T000000
+RDATE:19670605T000000
+RDATE:19741013T000000
+RDATE:19750831T000000
+RDATE:19850915T000000
+RDATE:19860907T000000
+RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
+RDATE:19900826T000000
+RDATE:19910901T000000
+RDATE:19920906T000000
+RDATE:19930905T000000
+RDATE:19940828T000000
+RDATE:19950903T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19740707T000000
+RDATE:19740707T000000
+RDATE:19750420T000000
+RDATE:19850414T000000
+RDATE:19860518T000000
+RDATE:19870415T000000
+RDATE:19880409T000000
+RDATE:19890430T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920329T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950331T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20080801T000000
+RDATE:20080801T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Ho_Chi_Minh.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Ho_Chi_Minh.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Ho_Chi_Minh
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Ho_Chi_Minh
+X-LIC-LOCATION:Asia/Ho_Chi_Minh
+BEGIN:STANDARD
+TZOFFSETFROM:+070640
+TZOFFSETTO:+070620
+TZNAME:SMT
+DTSTART:19060609T000000
+RDATE:19060609T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ICT
+DTSTART:19120501T000000
+RDATE:19120501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19310501T000000
+RDATE:19310501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Hong_Kong.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Hong_Kong.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Hong_Kong
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Hong_Kong
+X-LIC-LOCATION:Asia/Hong_Kong
+BEGIN:STANDARD
+TZOFFSETFROM:+073636
+TZOFFSETTO:+0800
+TZNAME:HKT
+DTSTART:19041030T000000
+RDATE:19041030T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:HKST
+DTSTART:19410401T033000
+RDATE:19410401T033000
+RDATE:19460420T033000
+RDATE:19470413T033000
+RDATE:19480502T033000
+RDATE:19490403T033000
+RDATE:19500402T033000
+RDATE:19510401T033000
+RDATE:19520406T033000
+RDATE:19530405T033000
+RDATE:19540321T033000
+RDATE:19550320T033000
+RDATE:19560318T033000
+RDATE:19570324T033000
+RDATE:19580323T033000
+RDATE:19590322T033000
+RDATE:19600320T033000
+RDATE:19610319T033000
+RDATE:19620318T033000
+RDATE:19630324T033000
+RDATE:19640322T033000
+RDATE:19650418T033000
+RDATE:19660417T033000
+RDATE:19670416T033000
+RDATE:19680421T033000
+RDATE:19690420T033000
+RDATE:19700419T033000
+RDATE:19710418T033000
+RDATE:19720416T033000
+RDATE:19730422T033000
+RDATE:19731230T033000
+RDATE:19750420T033000
+RDATE:19760418T033000
+RDATE:19790513T033000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:HKT
+DTSTART:19410930T033000
+RDATE:19410930T033000
+RDATE:19450915T000000
+RDATE:19461201T033000
+RDATE:19471230T033000
+RDATE:19481031T033000
+RDATE:19491030T033000
+RDATE:19501029T033000
+RDATE:19511028T033000
+RDATE:19521025T033000
+RDATE:19531101T033000
+RDATE:19541031T033000
+RDATE:19551106T033000
+RDATE:19561104T033000
+RDATE:19571103T033000
+RDATE:19581102T033000
+RDATE:19591101T033000
+RDATE:19601106T033000
+RDATE:19611105T033000
+RDATE:19621104T033000
+RDATE:19631103T033000
+RDATE:19641101T033000
+RDATE:19651017T033000
+RDATE:19661016T033000
+RDATE:19671022T033000
+RDATE:19681020T033000
+RDATE:19691019T033000
+RDATE:19701018T033000
+RDATE:19711017T033000
+RDATE:19721022T033000
+RDATE:19731021T033000
+RDATE:19741020T033000
+RDATE:19751019T033000
+RDATE:19761017T033000
+RDATE:19791021T033000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19411225T000000
+RDATE:19411225T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:HKST
+DTSTART:19740421T033000
+RDATE:19740421T033000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Hovd.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Hovd.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Hovd
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Hovd
+X-LIC-LOCATION:Asia/Hovd
+BEGIN:STANDARD
+TZOFFSETFROM:+060636
+TZOFFSETTO:+0600
+TZNAME:HOVT
+DTSTART:19050801T000000
+RDATE:19050801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:HOVT
+DTSTART:19780101T000000
+RDATE:19780101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:HOVST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+RDATE:20010428T020000
+RDATE:20020330T020000
+RDATE:20030329T020000
+RDATE:20040327T020000
+RDATE:20050326T020000
+RDATE:20060325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:HOVT
+DTSTART:19831001T000000
+RDATE:19831001T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+RDATE:20010929T020000
+RDATE:20020928T020000
+RDATE:20030927T020000
+RDATE:20040925T020000
+RDATE:20050924T020000
+RDATE:20060930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Irkutsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Irkutsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Irkutsk
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Irkutsk
+X-LIC-LOCATION:Asia/Irkutsk
+BEGIN:STANDARD
+TZOFFSETFROM:+065720
+TZOFFSETTO:+065720
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+065720
+TZOFFSETTO:+0700
+TZNAME:IRKT
+DTSTART:19200125T000000
+RDATE:19200125T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:IRKT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:IRKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:IRKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:IRKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:IRKT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:IRKT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Istanbul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Istanbul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,194 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Istanbul
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Istanbul
+X-LIC-LOCATION:Asia/Istanbul
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20120325T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+015552
+TZOFFSETTO:+015656
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19101001T000000
+RDATE:19101001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19240513T000000
+RDATE:19250501T000000
+RDATE:19400630T000000
+RDATE:19401201T000000
+RDATE:19420401T000000
+RDATE:19450402T000000
+RDATE:19460601T000000
+RDATE:19470420T000000
+RDATE:19480418T000000
+RDATE:19490410T000000
+RDATE:19500419T000000
+RDATE:19510422T000000
+RDATE:19620715T000000
+RDATE:19640515T000000
+RDATE:19700503T000000
+RDATE:19710502T000000
+RDATE:19720507T000000
+RDATE:19730603T010000
+RDATE:19740331T020000
+RDATE:19750330T000000
+RDATE:19760601T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T010000
+RDATE:19920329T010000
+RDATE:19930328T010000
+RDATE:19940327T010000
+RDATE:19950326T010000
+RDATE:19960331T010000
+RDATE:19970330T010000
+RDATE:19980329T010000
+RDATE:19990328T010000
+RDATE:20000326T010000
+RDATE:20010325T010000
+RDATE:20020331T010000
+RDATE:20030330T010000
+RDATE:20040328T010000
+RDATE:20050327T010000
+RDATE:20060326T010000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+RDATE:20100328T030000
+RDATE:20110328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19241001T000000
+RDATE:19251001T000000
+RDATE:19401005T000000
+RDATE:19410921T000000
+RDATE:19421101T000000
+RDATE:19451008T000000
+RDATE:19461001T000000
+RDATE:19471005T000000
+RDATE:19481003T000000
+RDATE:19491002T000000
+RDATE:19501008T000000
+RDATE:19511008T000000
+RDATE:19621008T000000
+RDATE:19641001T000000
+RDATE:19701004T000000
+RDATE:19711003T000000
+RDATE:19721008T000000
+RDATE:19731104T030000
+RDATE:19741103T050000
+RDATE:19751026T000000
+RDATE:19761031T000000
+RDATE:19771016T000000
+RDATE:19850928T000000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19781015T000000
+RDATE:19781015T000000
+RDATE:19800406T030000
+RDATE:19810329T030000
+RDATE:19820328T030000
+RDATE:19830731T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19790401T030000
+RDATE:19790401T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:TRT
+DTSTART:19791015T000000
+RDATE:19791015T000000
+RDATE:19801013T000000
+RDATE:19811012T000000
+RDATE:19821011T000000
+RDATE:19831002T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19850420T000000
+RDATE:19850420T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20070101T000000
+RDATE:20070101T000000
+RDATE:20110327T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Jakarta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Jakarta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Jakarta
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Jakarta
+X-LIC-LOCATION:Asia/Jakarta
+BEGIN:STANDARD
+TZOFFSETFROM:+070712
+TZOFFSETTO:+070712
+TZNAME:JMT
+DTSTART:18670810T000000
+RDATE:18670810T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070712
+TZOFFSETTO:+0720
+TZNAME:JAVT
+DTSTART:19231231T234712
+RDATE:19231231T234712
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420323T000000
+RDATE:19420323T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:WIT
+DTSTART:19480501T000000
+RDATE:19480501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19500501T000000
+RDATE:19500501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0700
+TZNAME:WIT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Jayapura.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Jayapura.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Jayapura
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Jayapura
+X-LIC-LOCATION:Asia/Jayapura
+BEGIN:STANDARD
+TZOFFSETFROM:+092248
+TZOFFSETTO:+0900
+TZNAME:EIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19440901T000000
+RDATE:19440901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0900
+TZNAME:EIT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Jerusalem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Jerusalem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,188 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Jerusalem
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Jerusalem
+X-LIC-LOCATION:Asia/Jerusalem
+BEGIN:STANDARD
+TZOFFSETFROM:+022056
+TZOFFSETTO:+022040
+TZNAME:JMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19400601T000000
+RDATE:19400601T000000
+RDATE:19430401T020000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19460416T020000
+RDATE:19490501T000000
+RDATE:19500416T000000
+RDATE:19510401T000000
+RDATE:19520420T020000
+RDATE:19530412T020000
+RDATE:19540613T000000
+RDATE:19550611T020000
+RDATE:19560603T000000
+RDATE:19570429T020000
+RDATE:19740707T000000
+RDATE:19750420T000000
+RDATE:19850414T000000
+RDATE:19860518T000000
+RDATE:19870415T000000
+RDATE:19880409T000000
+RDATE:19890430T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920329T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950331T000000
+RDATE:19960315T000000
+RDATE:19970321T000000
+RDATE:19980320T000000
+RDATE:19990402T020000
+RDATE:20000414T020000
+RDATE:20010409T010000
+RDATE:20020329T010000
+RDATE:20030328T010000
+RDATE:20040407T010000
+RDATE:20050401T020000
+RDATE:20060331T020000
+RDATE:20070330T020000
+RDATE:20080328T020000
+RDATE:20090327T020000
+RDATE:20100326T020000
+RDATE:20110401T020000
+RDATE:20120330T020000
+RDATE:20130329T020000
+RDATE:20140328T020000
+RDATE:20150327T020000
+RDATE:20160401T020000
+RDATE:20170331T020000
+RDATE:20180330T020000
+RDATE:20190329T020000
+RDATE:20200327T020000
+RDATE:20210326T020000
+RDATE:20220401T020000
+RDATE:20230331T020000
+RDATE:20240329T020000
+RDATE:20250328T020000
+RDATE:20260327T020000
+RDATE:20270326T020000
+RDATE:20280331T020000
+RDATE:20290330T020000
+RDATE:20300329T020000
+RDATE:20310328T020000
+RDATE:20320326T020000
+RDATE:20330401T020000
+RDATE:20340331T020000
+RDATE:20350330T020000
+RDATE:20360328T020000
+RDATE:20370327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19421101T000000
+RDATE:19421101T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T020000
+RDATE:19461101T000000
+RDATE:19481101T020000
+RDATE:19491101T020000
+RDATE:19500915T030000
+RDATE:19511111T030000
+RDATE:19521019T030000
+RDATE:19530913T030000
+RDATE:19540912T000000
+RDATE:19550911T000000
+RDATE:19560930T030000
+RDATE:19570922T000000
+RDATE:19741013T000000
+RDATE:19750831T000000
+RDATE:19850915T000000
+RDATE:19860907T000000
+RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
+RDATE:19900826T000000
+RDATE:19910901T000000
+RDATE:19920906T000000
+RDATE:19930905T000000
+RDATE:19940828T000000
+RDATE:19950903T000000
+RDATE:19960916T000000
+RDATE:19970914T000000
+RDATE:19980906T000000
+RDATE:19990903T020000
+RDATE:20001006T010000
+RDATE:20010924T010000
+RDATE:20021007T010000
+RDATE:20031003T010000
+RDATE:20040922T010000
+RDATE:20051009T020000
+RDATE:20061001T020000
+RDATE:20070916T020000
+RDATE:20081005T020000
+RDATE:20090927T020000
+RDATE:20100912T020000
+RDATE:20111002T020000
+RDATE:20120923T020000
+RDATE:20130908T020000
+RDATE:20140928T020000
+RDATE:20150920T020000
+RDATE:20161009T020000
+RDATE:20170924T020000
+RDATE:20180916T020000
+RDATE:20191006T020000
+RDATE:20200927T020000
+RDATE:20210912T020000
+RDATE:20221002T020000
+RDATE:20230924T020000
+RDATE:20241006T020000
+RDATE:20250928T020000
+RDATE:20260920T020000
+RDATE:20271010T020000
+RDATE:20280924T020000
+RDATE:20290916T020000
+RDATE:20301006T020000
+RDATE:20310921T020000
+RDATE:20320912T020000
+RDATE:20331002T020000
+RDATE:20340917T020000
+RDATE:20351007T020000
+RDATE:20360928T020000
+RDATE:20370913T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0400
+TZNAME:IDDT
+DTSTART:19480523T000000
+RDATE:19480523T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19480901T000000
+RDATE:19480901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kabul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kabul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kabul
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kabul
+X-LIC-LOCATION:Asia/Kabul
+BEGIN:STANDARD
+TZOFFSETFROM:+043648
+TZOFFSETTO:+0400
+TZNAME:AFT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0430
+TZNAME:AFT
+DTSTART:19450101T000000
+RDATE:19450101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kamchatka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kamchatka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kamchatka
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kamchatka
+X-LIC-LOCATION:Asia/Kamchatka
+BEGIN:STANDARD
+TZOFFSETFROM:+103436
+TZOFFSETTO:+1100
+TZNAME:PETT
+DTSTART:19221110T000000
+RDATE:19221110T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:PETT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:PETST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:PETT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+TZNAME:PETST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:PETT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:20101031T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Karachi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Karachi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Karachi
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Karachi
+X-LIC-LOCATION:Asia/Karachi
+BEGIN:STANDARD
+TZOFFSETFROM:+042812
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:IST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19451015T000000
+RDATE:19451015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0500
+TZNAME:KART
+DTSTART:19510930T000000
+RDATE:19510930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:PKT
+DTSTART:19710326T000000
+RDATE:19710326T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:PKST
+DTSTART:20020407T000100
+RDATE:20020407T000100
+RDATE:20080601T000000
+RDATE:20090415T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:PKT
+DTSTART:20021006T000100
+RDATE:20021006T000100
+RDATE:20081101T000000
+RDATE:20091101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kashgar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kashgar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,54 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kashgar
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kashgar
+X-LIC-LOCATION:Asia/Kashgar
+BEGIN:STANDARD
+TZOFFSETFROM:+050356
+TZOFFSETTO:+0530
+TZNAME:KAST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0500
+TZNAME:KAST
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kathmandu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kathmandu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kathmandu
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kathmandu
+X-LIC-LOCATION:Asia/Kathmandu
+BEGIN:STANDARD
+TZOFFSETFROM:+054116
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0545
+TZNAME:NPT
+DTSTART:19860101T000000
+RDATE:19860101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kolkata.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kolkata.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,38 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kolkata
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kolkata
+X-LIC-LOCATION:Asia/Kolkata
+BEGIN:STANDARD
+TZOFFSETFROM:+055328
+TZOFFSETTO:+055320
+TZNAME:HMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19411001T000000
+RDATE:19411001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19420515T000000
+RDATE:19420515T000000
+RDATE:19451015T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:IST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Krasnoyarsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Krasnoyarsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Krasnoyarsk
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Krasnoyarsk
+X-LIC-LOCATION:Asia/Krasnoyarsk
+BEGIN:STANDARD
+TZOFFSETFROM:+061120
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19200106T000000
+RDATE:19200106T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:KRAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:KRAST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:KRAT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kuala_Lumpur.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kuala_Lumpur.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kuala_Lumpur
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kuala_Lumpur
+X-LIC-LOCATION:Asia/Kuala_Lumpur
+BEGIN:STANDARD
+TZOFFSETFROM:+064646
+TZOFFSETTO:+065525
+TZNAME:SMT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+065525
+TZOFFSETTO:+0700
+TZNAME:MALT
+DTSTART:19050601T000000
+RDATE:19050601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0720
+TZNAME:MALST
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0720
+TZNAME:MALT
+DTSTART:19360101T000000
+RDATE:19360101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19410901T000000
+RDATE:19410901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420216T000000
+RDATE:19420216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19450912T000000
+RDATE:19450912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:MYT
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kuching.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kuching.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kuching
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kuching
+X-LIC-LOCATION:Asia/Kuching
+BEGIN:STANDARD
+TZOFFSETFROM:+072120
+TZOFFSETTO:+0730
+TZNAME:BORT
+DTSTART:19260301T000000
+RDATE:19260301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:BORT
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0820
+TZNAME:BORTST
+DTSTART:19350914T000000
+RDATE:19350914T000000
+RDATE:19360914T000000
+RDATE:19370914T000000
+RDATE:19380914T000000
+RDATE:19390914T000000
+RDATE:19400914T000000
+RDATE:19410914T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0820
+TZOFFSETTO:+0800
+TZNAME:BORT
+DTSTART:19351214T000000
+RDATE:19351214T000000
+RDATE:19361214T000000
+RDATE:19371214T000000
+RDATE:19381214T000000
+RDATE:19391214T000000
+RDATE:19401214T000000
+RDATE:19411214T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420216T000000
+RDATE:19420216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:BORT
+DTSTART:19450912T000000
+RDATE:19450912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:MYT
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Kuwait.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Kuwait.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kuwait
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Kuwait
+X-LIC-LOCATION:Asia/Kuwait
+BEGIN:STANDARD
+TZOFFSETFROM:+031156
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Macau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Macau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Macau
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Macau
+X-LIC-LOCATION:Asia/Macau
+BEGIN:STANDARD
+TZOFFSETFROM:+073420
+TZOFFSETTO:+0800
+TZNAME:MOT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:MOST
+DTSTART:19610319T033000
+RDATE:19610319T033000
+RDATE:19620318T033000
+RDATE:19630317T000000
+RDATE:19640322T033000
+RDATE:19650321T000000
+RDATE:19660417T033000
+RDATE:19670416T033000
+RDATE:19680421T033000
+RDATE:19690420T033000
+RDATE:19700419T033000
+RDATE:19710418T033000
+RDATE:19720416T000000
+RDATE:19730415T000000
+RDATE:19740421T000000
+RDATE:19750420T033000
+RDATE:19760418T033000
+RDATE:19770417T033000
+RDATE:19780416T000000
+RDATE:19790415T000000
+RDATE:19800420T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:MOT
+DTSTART:19611105T033000
+RDATE:19611105T033000
+RDATE:19621104T033000
+RDATE:19631103T033000
+RDATE:19641101T033000
+RDATE:19651031T000000
+RDATE:19661016T033000
+RDATE:19671022T033000
+RDATE:19681020T033000
+RDATE:19691019T033000
+RDATE:19701018T033000
+RDATE:19711017T033000
+RDATE:19721015T000000
+RDATE:19731021T000000
+RDATE:19741020T033000
+RDATE:19751019T033000
+RDATE:19761017T033000
+RDATE:19771016T033000
+RDATE:19781015T000000
+RDATE:19791021T000000
+RDATE:19801019T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19991220T000000
+RDATE:19991220T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Magadan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Magadan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Magadan
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Magadan
+X-LIC-LOCATION:Asia/Magadan
+BEGIN:STANDARD
+TZOFFSETFROM:+100312
+TZOFFSETTO:+1000
+TZNAME:MAGT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:MAGT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:MAGST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:MAGT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:MAGST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:MAGT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:MAGT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Makassar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Makassar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Makassar
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Makassar
+X-LIC-LOCATION:Asia/Makassar
+BEGIN:STANDARD
+TZOFFSETFROM:+075736
+TZOFFSETTO:+075736
+TZNAME:MMT
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+075736
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420209T000000
+RDATE:19420209T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Manila.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Manila.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,49 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Manila
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Manila
+X-LIC-LOCATION:Asia/Manila
+BEGIN:STANDARD
+TZOFFSETFROM:-1556
+TZOFFSETTO:+0804
+TZNAME:LMT
+DTSTART:18441231T000000
+RDATE:18441231T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0804
+TZOFFSETTO:+0800
+TZNAME:PHT
+DTSTART:18990511T000000
+RDATE:18990511T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:PHST
+DTSTART:19361101T000000
+RDATE:19361101T000000
+RDATE:19540412T000000
+RDATE:19780322T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:PHT
+DTSTART:19370201T000000
+RDATE:19370201T000000
+RDATE:19441101T000000
+RDATE:19540701T000000
+RDATE:19780921T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420501T000000
+RDATE:19420501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Muscat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Muscat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Muscat
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Muscat
+X-LIC-LOCATION:Asia/Muscat
+BEGIN:STANDARD
+TZOFFSETFROM:+035420
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Nicosia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Nicosia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,96 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Nicosia
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Nicosia
+X-LIC-LOCATION:Asia/Nicosia
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19981025T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19990328T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+021328
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19211114T000000
+RDATE:19211114T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19750413T000000
+RDATE:19750413T000000
+RDATE:19760515T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800406T000000
+RDATE:19810329T000000
+RDATE:19820328T000000
+RDATE:19830327T000000
+RDATE:19840325T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19751012T000000
+RDATE:19751012T000000
+RDATE:19761011T000000
+RDATE:19770925T000000
+RDATE:19781002T000000
+RDATE:19790930T000000
+RDATE:19800928T000000
+RDATE:19810927T000000
+RDATE:19820926T000000
+RDATE:19830925T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19980901T000000
+RDATE:19980901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Novokuznetsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Novokuznetsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,127 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Novokuznetsk
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Novokuznetsk
+X-LIC-LOCATION:Asia/Novokuznetsk
+BEGIN:STANDARD
+TZOFFSETFROM:+054848
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19200106T000000
+RDATE:19200106T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:KRAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:KRAST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:20100328T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:NOVT
+DTSTART:20101031T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:NOVT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Novosibirsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Novosibirsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Novosibirsk
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Novosibirsk
+X-LIC-LOCATION:Asia/Novosibirsk
+BEGIN:STANDARD
+TZOFFSETFROM:+053140
+TZOFFSETTO:+0600
+TZNAME:NOVT
+DTSTART:19191214T060000
+RDATE:19191214T060000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:NOVT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:NOVST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:NOVT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:NOVT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:19930523T000000
+RDATE:19930523T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:19940327T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Omsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Omsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Omsk
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Omsk
+X-LIC-LOCATION:Asia/Omsk
+BEGIN:STANDARD
+TZOFFSETFROM:+045336
+TZOFFSETTO:+0500
+TZNAME:OMST
+DTSTART:19191114T000000
+RDATE:19191114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:OMST
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:OMSST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:OMST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:OMSST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:OMST
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:OMST
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Oral.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Oral.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Oral
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Oral
+X-LIC-LOCATION:Asia/Oral
+BEGIN:STANDARD
+TZOFFSETFROM:+032524
+TZOFFSETTO:+0400
+TZNAME:URAT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:URAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:URAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:URAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:URAST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:URAT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:URAST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:URAT
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:URAST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:URAT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:ORAT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:ORAST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:ORAT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:ORAT
+DTSTART:20050315T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Phnom_Penh.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Phnom_Penh.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Phnom_Penh
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Phnom_Penh
+X-LIC-LOCATION:Asia/Phnom_Penh
+BEGIN:STANDARD
+TZOFFSETFROM:+065940
+TZOFFSETTO:+070620
+TZNAME:SMT
+DTSTART:19060609T000000
+RDATE:19060609T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ICT
+DTSTART:19120501T000000
+RDATE:19120501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19310501T000000
+RDATE:19310501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Pontianak.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Pontianak.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Pontianak
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Pontianak
+X-LIC-LOCATION:Asia/Pontianak
+BEGIN:STANDARD
+TZOFFSETFROM:+071720
+TZOFFSETTO:+071720
+TZNAME:PMT
+DTSTART:19080501T000000
+RDATE:19080501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+071720
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420129T000000
+RDATE:19420129T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:WIT
+DTSTART:19480501T000000
+RDATE:19480501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19500501T000000
+RDATE:19500501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:WIT
+DTSTART:19880101T000000
+RDATE:19880101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Pyongyang.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Pyongyang.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,45 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Pyongyang
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Pyongyang
+X-LIC-LOCATION:Asia/Pyongyang
+BEGIN:STANDARD
+TZOFFSETFROM:+0823
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19041201T000000
+RDATE:19041201T000000
+RDATE:19320101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:KST
+DTSTART:19540321T000000
+RDATE:19540321T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19610810T000000
+RDATE:19610810T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Qatar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Qatar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Qatar
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Qatar
+X-LIC-LOCATION:Asia/Qatar
+BEGIN:STANDARD
+TZOFFSETFROM:+032608
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19720601T000000
+RDATE:19720601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Qyzylorda.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Qyzylorda.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Qyzylorda
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Qyzylorda
+X-LIC-LOCATION:Asia/Qyzylorda
+BEGIN:STANDARD
+TZOFFSETFROM:+042152
+TZOFFSETTO:+0400
+TZNAME:KIZT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:KIZT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:KIZST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:KIZT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:KIZST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:KIZT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:KIZT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:QYZT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:QYZT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:QYZST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:QYZT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:QYZT
+DTSTART:20050315T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Rangoon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Rangoon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Rangoon
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Rangoon
+X-LIC-LOCATION:Asia/Rangoon
+BEGIN:STANDARD
+TZOFFSETFROM:+062440
+TZOFFSETTO:+062436
+TZNAME:RMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+062436
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420501T000000
+RDATE:19420501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0630
+TZNAME:MMT
+DTSTART:19450503T000000
+RDATE:19450503T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Riyadh.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Riyadh.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Riyadh
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Riyadh
+X-LIC-LOCATION:Asia/Riyadh
+BEGIN:STANDARD
+TZOFFSETFROM:+030652
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Sakhalin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Sakhalin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,128 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Sakhalin
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Sakhalin
+X-LIC-LOCATION:Asia/Sakhalin
+BEGIN:STANDARD
+TZOFFSETFROM:+093048
+TZOFFSETTO:+0900
+TZNAME:CJT
+DTSTART:19050823T000000
+RDATE:19050823T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19380101T000000
+RDATE:19380101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1100
+TZNAME:SAKT
+DTSTART:19450825T000000
+RDATE:19450825T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:SAKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:SAKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:SAKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:19970330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:SAKT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:SAKT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:SAKST
+DTSTART:19980329T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Samarkand.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Samarkand.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,89 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Samarkand
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Samarkand
+X-LIC-LOCATION:Asia/Samarkand
+BEGIN:STANDARD
+TZOFFSETFROM:+042712
+TZOFFSETTO:+0400
+TZNAME:SAMT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:SAMT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SAMST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:TAST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:SAMST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:SAMT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:UZST
+DTSTART:19910901T000000
+RDATE:19910901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Seoul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Seoul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Seoul
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Seoul
+X-LIC-LOCATION:Asia/Seoul
+BEGIN:STANDARD
+TZOFFSETFROM:+082752
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19041201T000000
+RDATE:19041201T000000
+RDATE:19320101T000000
+RDATE:19681001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:KST
+DTSTART:19540321T000000
+RDATE:19540321T000000
+RDATE:19600913T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:KDT
+DTSTART:19600515T000000
+RDATE:19600515T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:19610810T000000
+RDATE:19610810T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:KDT
+DTSTART:19870510T000000
+RDATE:19870510T000000
+RDATE:19880508T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19871011T000000
+RDATE:19871011T000000
+RDATE:19881009T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Shanghai.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Shanghai.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,51 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Shanghai
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Shanghai
+X-LIC-LOCATION:Asia/Shanghai
+BEGIN:STANDARD
+TZOFFSETFROM:+080552
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19400603T000000
+RDATE:19400603T000000
+RDATE:19410316T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19411001T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19490101T000000
+RDATE:19490101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Singapore.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Singapore.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,72 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Singapore
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Singapore
+X-LIC-LOCATION:Asia/Singapore
+BEGIN:STANDARD
+TZOFFSETFROM:+065525
+TZOFFSETTO:+065525
+TZNAME:SMT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+065525
+TZOFFSETTO:+0700
+TZNAME:MALT
+DTSTART:19050601T000000
+RDATE:19050601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0720
+TZNAME:MALST
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0720
+TZNAME:MALT
+DTSTART:19360101T000000
+RDATE:19360101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19410901T000000
+RDATE:19410901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420216T000000
+RDATE:19420216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19450912T000000
+RDATE:19450912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0730
+TZNAME:SGT
+DTSTART:19650809T000000
+RDATE:19650809T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:SGT
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Taipei.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Taipei.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Taipei
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Taipei
+X-LIC-LOCATION:Asia/Taipei
+BEGIN:STANDARD
+TZOFFSETFROM:+0806
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:18960101T000000
+RDATE:18960101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19450501T000000
+RDATE:19450501T000000
+RDATE:19460501T000000
+RDATE:19470501T000000
+RDATE:19480501T000000
+RDATE:19490501T000000
+RDATE:19500501T000000
+RDATE:19510501T000000
+RDATE:19520301T000000
+RDATE:19530401T000000
+RDATE:19540401T000000
+RDATE:19550401T000000
+RDATE:19560401T000000
+RDATE:19570401T000000
+RDATE:19580401T000000
+RDATE:19590401T000000
+RDATE:19600601T000000
+RDATE:19610601T000000
+RDATE:19740401T000000
+RDATE:19750401T000000
+RDATE:19790630T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19451001T000000
+RDATE:19451001T000000
+RDATE:19461001T000000
+RDATE:19471001T000000
+RDATE:19481001T000000
+RDATE:19491001T000000
+RDATE:19501001T000000
+RDATE:19511001T000000
+RDATE:19521101T000000
+RDATE:19531101T000000
+RDATE:19541101T000000
+RDATE:19551001T000000
+RDATE:19561001T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19591001T000000
+RDATE:19601001T000000
+RDATE:19611001T000000
+RDATE:19741001T000000
+RDATE:19751001T000000
+RDATE:19790930T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Tashkent.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Tashkent.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tashkent
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Tashkent
+X-LIC-LOCATION:Asia/Tashkent
+BEGIN:STANDARD
+TZOFFSETFROM:+043712
+TZOFFSETTO:+0500
+TZNAME:TAST
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:TAST
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:TASST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:TAST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:TASST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:UZST
+DTSTART:19910901T000000
+RDATE:19910901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Tbilisi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Tbilisi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,160 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tbilisi
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Tbilisi
+X-LIC-LOCATION:Asia/Tbilisi
+BEGIN:STANDARD
+TZOFFSETFROM:+025916
+TZOFFSETTO:+025916
+TZNAME:TBMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+025916
+TZOFFSETTO:+0300
+TZNAME:TBIT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:TBIT
+DTSTART:19570301T000000
+RDATE:19570301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:TBIST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:TBIT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TBIST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:GEST
+DTSTART:19910409T000000
+RDATE:19910409T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:GET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:GET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:GEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:GET
+DTSTART:19940925T000000
+RDATE:19940925T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:GEST
+DTSTART:19950326T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19980329T000000
+RDATE:19990328T000000
+RDATE:20000326T000000
+RDATE:20010325T000000
+RDATE:20020331T000000
+RDATE:20030330T000000
+RDATE:20040328T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:GET
+DTSTART:19950924T000000
+RDATE:19950924T000000
+RDATE:19971026T000000
+RDATE:19981025T000000
+RDATE:19991031T000000
+RDATE:20001029T000000
+RDATE:20011028T000000
+RDATE:20021027T000000
+RDATE:20031026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:GEST
+DTSTART:19961027T000000
+RDATE:19961027T000000
+RDATE:19970330T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:GEST
+DTSTART:20040627T000000
+RDATE:20040627T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:GET
+DTSTART:20050327T020000
+RDATE:20050327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Tehran.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Tehran.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,157 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tehran
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Tehran
+X-LIC-LOCATION:Asia/Tehran
+BEGIN:STANDARD
+TZOFFSETFROM:+032544
+TZOFFSETTO:+032544
+TZNAME:TMT
+DTSTART:19160101T000000
+RDATE:19160101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+032544
+TZOFFSETTO:+0330
+TZNAME:IRST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0400
+TZNAME:IRST
+DTSTART:19771101T000000
+RDATE:19771101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:IRDT
+DTSTART:19780321T000000
+RDATE:19780321T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:IRST
+DTSTART:19781021T000000
+RDATE:19781021T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0330
+TZNAME:IRST
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+TZNAME:IRDT
+DTSTART:19790321T000000
+RDATE:19790321T000000
+RDATE:19800321T000000
+RDATE:19910503T000000
+RDATE:19920322T000000
+RDATE:19930322T000000
+RDATE:19940322T000000
+RDATE:19950322T000000
+RDATE:19960321T000000
+RDATE:19970322T000000
+RDATE:19980322T000000
+RDATE:19990322T000000
+RDATE:20000321T000000
+RDATE:20010322T000000
+RDATE:20020322T000000
+RDATE:20030322T000000
+RDATE:20040321T000000
+RDATE:20050322T000000
+RDATE:20080321T000000
+RDATE:20090322T000000
+RDATE:20100322T000000
+RDATE:20110322T000000
+RDATE:20120321T000000
+RDATE:20130322T000000
+RDATE:20140322T000000
+RDATE:20150322T000000
+RDATE:20160321T000000
+RDATE:20170322T000000
+RDATE:20180322T000000
+RDATE:20190322T000000
+RDATE:20200321T000000
+RDATE:20210322T000000
+RDATE:20220322T000000
+RDATE:20230322T000000
+RDATE:20240321T000000
+RDATE:20250322T000000
+RDATE:20260322T000000
+RDATE:20270322T000000
+RDATE:20280321T000000
+RDATE:20290321T000000
+RDATE:20300322T000000
+RDATE:20310322T000000
+RDATE:20320321T000000
+RDATE:20330321T000000
+RDATE:20340322T000000
+RDATE:20350322T000000
+RDATE:20360321T000000
+RDATE:20370321T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+TZNAME:IRST
+DTSTART:19790919T000000
+RDATE:19790919T000000
+RDATE:19800923T000000
+RDATE:19910922T000000
+RDATE:19920922T000000
+RDATE:19930922T000000
+RDATE:19940922T000000
+RDATE:19950922T000000
+RDATE:19960921T000000
+RDATE:19970922T000000
+RDATE:19980922T000000
+RDATE:19990922T000000
+RDATE:20000921T000000
+RDATE:20010922T000000
+RDATE:20020922T000000
+RDATE:20030922T000000
+RDATE:20040921T000000
+RDATE:20050922T000000
+RDATE:20080921T000000
+RDATE:20090922T000000
+RDATE:20100922T000000
+RDATE:20110922T000000
+RDATE:20120921T000000
+RDATE:20130922T000000
+RDATE:20140922T000000
+RDATE:20150922T000000
+RDATE:20160921T000000
+RDATE:20170922T000000
+RDATE:20180922T000000
+RDATE:20190922T000000
+RDATE:20200921T000000
+RDATE:20210922T000000
+RDATE:20220922T000000
+RDATE:20230922T000000
+RDATE:20240921T000000
+RDATE:20250922T000000
+RDATE:20260922T000000
+RDATE:20270922T000000
+RDATE:20280921T000000
+RDATE:20290921T000000
+RDATE:20300922T000000
+RDATE:20310922T000000
+RDATE:20320921T000000
+RDATE:20330921T000000
+RDATE:20340922T000000
+RDATE:20350922T000000
+RDATE:20360921T000000
+RDATE:20370921T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Thimphu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Thimphu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Thimphu
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Thimphu
+X-LIC-LOCATION:Asia/Thimphu
+BEGIN:STANDARD
+TZOFFSETFROM:+055836
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19470815T000000
+RDATE:19470815T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0600
+TZNAME:BTT
+DTSTART:19871001T000000
+RDATE:19871001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Tokyo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Tokyo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,50 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tokyo
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Tokyo
+X-LIC-LOCATION:Asia/Tokyo
+BEGIN:STANDARD
+TZOFFSETFROM:+091859
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:18880101T001859
+RDATE:18880101T001859
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:CJT
+DTSTART:18960101T000000
+RDATE:18960101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19380101T000000
+RDATE:19380101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:JDT
+DTSTART:19480502T020000
+RDATE:19480502T020000
+RDATE:19490403T020000
+RDATE:19500507T020000
+RDATE:19510506T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19480911T020000
+RDATE:19480911T020000
+RDATE:19490910T020000
+RDATE:19500909T020000
+RDATE:19510908T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Ulaanbaatar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Ulaanbaatar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Ulaanbaatar
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Ulaanbaatar
+X-LIC-LOCATION:Asia/Ulaanbaatar
+BEGIN:STANDARD
+TZOFFSETFROM:+070732
+TZOFFSETTO:+0700
+TZNAME:ULAT
+DTSTART:19050801T000000
+RDATE:19050801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ULAT
+DTSTART:19780101T000000
+RDATE:19780101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:ULAST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+RDATE:20010428T020000
+RDATE:20020330T020000
+RDATE:20030329T020000
+RDATE:20040327T020000
+RDATE:20050326T020000
+RDATE:20060325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:ULAT
+DTSTART:19831001T000000
+RDATE:19831001T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+RDATE:20010929T020000
+RDATE:20020928T020000
+RDATE:20030927T020000
+RDATE:20040925T020000
+RDATE:20050924T020000
+RDATE:20060930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Urumqi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Urumqi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,47 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Urumqi
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Urumqi
+X-LIC-LOCATION:Asia/Urumqi
+BEGIN:STANDARD
+TZOFFSETFROM:+055020
+TZOFFSETTO:+0600
+TZNAME:URUT
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Vientiane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Vientiane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Vientiane
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Vientiane
+X-LIC-LOCATION:Asia/Vientiane
+BEGIN:STANDARD
+TZOFFSETFROM:+065024
+TZOFFSETTO:+070620
+TZNAME:SMT
+DTSTART:19060609T000000
+RDATE:19060609T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ICT
+DTSTART:19120501T000000
+RDATE:19120501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19310501T000000
+RDATE:19310501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Vladivostok.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Vladivostok.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Vladivostok
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Vladivostok
+X-LIC-LOCATION:Asia/Vladivostok
+BEGIN:STANDARD
+TZOFFSETFROM:+084744
+TZOFFSETTO:+0900
+TZNAME:VLAT
+DTSTART:19221115T000000
+RDATE:19221115T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:VLAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:VLAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:VLAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:VLASST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:VLAST
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:VLAT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Yakutsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Yakutsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Yakutsk
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Yakutsk
+X-LIC-LOCATION:Asia/Yakutsk
+BEGIN:STANDARD
+TZOFFSETFROM:+083840
+TZOFFSETTO:+0800
+TZNAME:YAKT
+DTSTART:19191215T000000
+RDATE:19191215T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:YAKT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:YAKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:YAKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:YAKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:YAKT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:YAKT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Yekaterinburg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Yekaterinburg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Yekaterinburg
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Yekaterinburg
+X-LIC-LOCATION:Asia/Yekaterinburg
+BEGIN:STANDARD
+TZOFFSETFROM:+040224
+TZOFFSETTO:+0400
+TZNAME:SVET
+DTSTART:19190715T040000
+RDATE:19190715T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:SVET
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SVEST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:SVET
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:SVEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:SVET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:YEKT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:YEKST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:YEKT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:YEKT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Asia/Yerevan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Asia/Yerevan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,111 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Yerevan
+TZURL:http://tzurl.org/zoneinfo-global/Asia/Yerevan
+X-LIC-LOCATION:Asia/Yerevan
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AMST
+DTSTART:19970330T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AMT
+DTSTART:19971026T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0258
+TZOFFSETTO:+0300
+TZNAME:YERT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:YERT
+DTSTART:19570301T000000
+RDATE:19570301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:YERST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:YERT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:YERST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AMST
+DTSTART:19910923T000000
+RDATE:19910923T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AMT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:AMST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AMT
+DTSTART:19950924T030000
+RDATE:19950924T030000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Azores.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Azores.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,224 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Azores
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Azores
+X-LIC-LOCATION:Atlantic/Azores
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:AZOST
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:AZOT
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-014240
+TZOFFSETTO:-015432
+TZNAME:HMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-015432
+TZOFFSETTO:-0200
+TZNAME:AZOT
+DTSTART:19110524T000000
+RDATE:19110524T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:AZOST
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19420314T230000
+RDATE:19430313T230000
+RDATE:19440311T230000
+RDATE:19450310T230000
+RDATE:19460406T230000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490403T020000
+RDATE:19510401T020000
+RDATE:19520406T020000
+RDATE:19530405T020000
+RDATE:19540404T020000
+RDATE:19550403T020000
+RDATE:19560401T020000
+RDATE:19570407T020000
+RDATE:19580406T020000
+RDATE:19590405T020000
+RDATE:19600403T020000
+RDATE:19610402T020000
+RDATE:19620401T020000
+RDATE:19630407T020000
+RDATE:19640405T020000
+RDATE:19650404T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:AZOT
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19171015T000000
+RDATE:19181015T000000
+RDATE:19191015T000000
+RDATE:19201015T000000
+RDATE:19211015T000000
+RDATE:19241015T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+RDATE:19401006T000000
+RDATE:19411006T000000
+RDATE:19421025T000000
+RDATE:19431031T000000
+RDATE:19441029T000000
+RDATE:19451028T000000
+RDATE:19461006T000000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19511007T030000
+RDATE:19521005T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611001T030000
+RDATE:19621007T030000
+RDATE:19631006T030000
+RDATE:19641004T030000
+RDATE:19651003T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:AZOMT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+RDATE:19440422T230000
+RDATE:19450421T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:AZOST
+DTSTART:19420816T000000
+RDATE:19420816T000000
+RDATE:19430829T000000
+RDATE:19440827T000000
+RDATE:19450826T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:AZOT
+DTSTART:19660403T020000
+RDATE:19660403T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:AZOST
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800330T000000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T020000
+RDATE:19840325T010000
+RDATE:19850331T010000
+RDATE:19860330T010000
+RDATE:19870329T010000
+RDATE:19880327T010000
+RDATE:19890326T010000
+RDATE:19900325T010000
+RDATE:19910331T010000
+RDATE:19920329T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:AZOT
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19930926T010000
+RDATE:19940925T010000
+RDATE:19950924T010000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19920927T020000
+RDATE:19920927T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:AZOST
+DTSTART:19930328T010000
+RDATE:19930328T010000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Bermuda.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Bermuda.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Bermuda
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Bermuda
+X-LIC-LOCATION:Atlantic/Bermuda
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041904
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19300101T020000
+RDATE:19300101T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19740428T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19741027T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19760101T000000
+RDATE:19760101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Canary.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Canary.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,73 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Canary
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Canary
+X-LIC-LOCATION:Atlantic/Canary
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010136
+TZOFFSETTO:-0100
+TZNAME:CANT
+DTSTART:19220301T000000
+RDATE:19220301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19460930T010000
+RDATE:19460930T010000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19800406T000000
+RDATE:19800406T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19800928T010000
+RDATE:19800928T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19800928T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Cape_Verde.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Cape_Verde.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Cape_Verde
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Cape_Verde
+X-LIC-LOCATION:Atlantic/Cape_Verde
+BEGIN:STANDARD
+TZOFFSETFROM:-013404
+TZOFFSETTO:-0200
+TZNAME:CVT
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:CVST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:CVT
+DTSTART:19451015T000000
+RDATE:19451015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:CVT
+DTSTART:19751125T020000
+RDATE:19751125T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Faroe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Faroe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,58 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Faroe
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Faroe
+X-LIC-LOCATION:Atlantic/Faroe
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002704
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19080111T000000
+RDATE:19080111T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19810927T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Madeira.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Madeira.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,202 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Madeira
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Madeira
+X-LIC-LOCATION:Atlantic/Madeira
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010736
+TZOFFSETTO:-010736
+TZNAME:FMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010736
+TZOFFSETTO:-0100
+TZNAME:MADT
+DTSTART:19110524T000000
+RDATE:19110524T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:MADST
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19420314T230000
+RDATE:19430313T230000
+RDATE:19440311T230000
+RDATE:19450310T230000
+RDATE:19460406T230000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490403T020000
+RDATE:19510401T020000
+RDATE:19520406T020000
+RDATE:19530405T020000
+RDATE:19540404T020000
+RDATE:19550403T020000
+RDATE:19560401T020000
+RDATE:19570407T020000
+RDATE:19580406T020000
+RDATE:19590405T020000
+RDATE:19600403T020000
+RDATE:19610402T020000
+RDATE:19620401T020000
+RDATE:19630407T020000
+RDATE:19640405T020000
+RDATE:19650404T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:MADT
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19171015T000000
+RDATE:19181015T000000
+RDATE:19191015T000000
+RDATE:19201015T000000
+RDATE:19211015T000000
+RDATE:19241015T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+RDATE:19401006T000000
+RDATE:19411006T000000
+RDATE:19421025T000000
+RDATE:19431031T000000
+RDATE:19441029T000000
+RDATE:19451028T000000
+RDATE:19461006T000000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19511007T030000
+RDATE:19521005T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611001T030000
+RDATE:19621007T030000
+RDATE:19631006T030000
+RDATE:19641004T030000
+RDATE:19651003T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:MADMT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+RDATE:19440422T230000
+RDATE:19450421T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:MADST
+DTSTART:19420816T000000
+RDATE:19420816T000000
+RDATE:19430829T000000
+RDATE:19440827T000000
+RDATE:19450826T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19660403T020000
+RDATE:19660403T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800330T000000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Reykjavik.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Reykjavik.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,104 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Reykjavik
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Reykjavik
+X-LIC-LOCATION:Atlantic/Reykjavik
+BEGIN:STANDARD
+TZOFFSETFROM:-012724
+TZOFFSETTO:-012748
+TZNAME:RMT
+DTSTART:18370101T000000
+RDATE:18370101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-012748
+TZOFFSETTO:-0100
+TZNAME:IST
+DTSTART:19080101T000000
+RDATE:19080101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:ISST
+DTSTART:19170219T230000
+RDATE:19170219T230000
+RDATE:19180219T230000
+RDATE:19390429T230000
+RDATE:19400225T020000
+RDATE:19410302T010000
+RDATE:19420308T010000
+RDATE:19430307T010000
+RDATE:19440305T010000
+RDATE:19450304T010000
+RDATE:19460303T010000
+RDATE:19470406T010000
+RDATE:19480404T010000
+RDATE:19490403T010000
+RDATE:19500402T010000
+RDATE:19510401T010000
+RDATE:19520406T010000
+RDATE:19530405T010000
+RDATE:19540404T010000
+RDATE:19550403T010000
+RDATE:19560401T010000
+RDATE:19570407T010000
+RDATE:19580406T010000
+RDATE:19590405T010000
+RDATE:19600403T010000
+RDATE:19610402T010000
+RDATE:19620401T010000
+RDATE:19630407T010000
+RDATE:19640405T010000
+RDATE:19650404T010000
+RDATE:19660403T010000
+RDATE:19670402T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:IST
+DTSTART:19171021T010000
+RDATE:19171021T010000
+RDATE:19181116T010000
+RDATE:19391129T020000
+RDATE:19401103T020000
+RDATE:19411102T020000
+RDATE:19421025T020000
+RDATE:19431024T020000
+RDATE:19441022T020000
+RDATE:19451028T020000
+RDATE:19461027T020000
+RDATE:19471026T020000
+RDATE:19481024T020000
+RDATE:19491030T020000
+RDATE:19501022T020000
+RDATE:19511028T020000
+RDATE:19521026T020000
+RDATE:19531025T020000
+RDATE:19541024T020000
+RDATE:19551023T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601023T020000
+RDATE:19611022T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651024T020000
+RDATE:19661023T020000
+RDATE:19671029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19680407T010000
+RDATE:19680407T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/South_Georgia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/South_Georgia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/South_Georgia
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/South_Georgia
+X-LIC-LOCATION:Atlantic/South_Georgia
+BEGIN:STANDARD
+TZOFFSETFROM:-022608
+TZOFFSETTO:-0200
+TZNAME:GST
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/St_Helena.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/St_Helena.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/St_Helena
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/St_Helena
+X-LIC-LOCATION:Atlantic/St_Helena
+BEGIN:STANDARD
+TZOFFSETFROM:-002248
+TZOFFSETTO:-002248
+TZNAME:JMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002248
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Atlantic/Stanley.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Atlantic/Stanley.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,142 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Stanley
+TZURL:http://tzurl.org/zoneinfo-global/Atlantic/Stanley
+X-LIC-LOCATION:Atlantic/Stanley
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:FKT
+DTSTART:20120415T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:FKST
+DTSTART:20120902T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-035124
+TZOFFSETTO:-035124
+TZNAME:SMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035124
+TZOFFSETTO:-0400
+TZNAME:FKT
+DTSTART:19120312T000000
+RDATE:19120312T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:FKST
+DTSTART:19370926T000000
+RDATE:19370926T000000
+RDATE:19380925T000000
+RDATE:19391001T000000
+RDATE:19400929T000000
+RDATE:19410928T000000
+RDATE:19420927T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890910T000000
+RDATE:19900909T000000
+RDATE:19910915T000000
+RDATE:19920913T000000
+RDATE:19930912T000000
+RDATE:19940911T000000
+RDATE:19950910T000000
+RDATE:19960915T000000
+RDATE:19970914T000000
+RDATE:19980913T000000
+RDATE:19990912T000000
+RDATE:20000910T000000
+RDATE:20010902T020000
+RDATE:20020901T020000
+RDATE:20030907T020000
+RDATE:20040905T020000
+RDATE:20050904T020000
+RDATE:20060903T020000
+RDATE:20070902T020000
+RDATE:20080907T020000
+RDATE:20090906T020000
+RDATE:20100905T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:FKT
+DTSTART:19380320T000000
+RDATE:19380320T000000
+RDATE:19390319T000000
+RDATE:19400324T000000
+RDATE:19410323T000000
+RDATE:19420322T000000
+RDATE:19430101T000000
+RDATE:19860420T000000
+RDATE:19870419T000000
+RDATE:19880417T000000
+RDATE:19890416T000000
+RDATE:19900422T000000
+RDATE:19910421T000000
+RDATE:19920419T000000
+RDATE:19930418T000000
+RDATE:19940417T000000
+RDATE:19950416T000000
+RDATE:19960421T000000
+RDATE:19970420T000000
+RDATE:19980419T000000
+RDATE:19990418T000000
+RDATE:20000416T000000
+RDATE:20010415T020000
+RDATE:20020421T020000
+RDATE:20030420T020000
+RDATE:20040418T020000
+RDATE:20050417T020000
+RDATE:20060416T020000
+RDATE:20070415T020000
+RDATE:20080420T020000
+RDATE:20090419T020000
+RDATE:20100418T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:FKT
+DTSTART:19830501T000000
+RDATE:19830501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:FKST
+DTSTART:19830925T000000
+RDATE:19830925T000000
+RDATE:19840916T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:FKT
+DTSTART:19840429T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:FKST
+DTSTART:19850915T000000
+RDATE:19850915T000000
+RDATE:20110904T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Adelaide.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Adelaide.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,137 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Adelaide
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Adelaide
+X-LIC-LOCATION:Australia/Adelaide
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+091420
+TZOFFSETTO:+0900
+TZNAME:CST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:18990501T000000
+RDATE:18990501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910303T030000
+RDATE:19920322T030000
+RDATE:19930307T030000
+RDATE:19940320T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Brisbane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Brisbane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,51 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Brisbane
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Brisbane
+X-LIC-LOCATION:Australia/Brisbane
+BEGIN:STANDARD
+TZOFFSETFROM:+101208
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Broken_Hill.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Broken_Hill.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,151 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Broken_Hill
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Broken_Hill
+X-LIC-LOCATION:Australia/Broken_Hill
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+092548
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:CST
+DTSTART:18960823T000000
+RDATE:18960823T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:18990501T000000
+RDATE:18990501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820404T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+RDATE:19950305T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:20000101T000000
+RDATE:20000101T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Currie.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Currie.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,130 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Currie
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Currie
+X-LIC-LOCATION:Australia/Currie
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+093528
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950901T000000
+RDATE:18950901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19161001T020000
+RDATE:19161001T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20000827T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170201T000000
+RDATE:19170201T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820328T030000
+RDATE:19830327T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910331T030000
+RDATE:19920329T030000
+RDATE:19930328T030000
+RDATE:19940327T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710701T000000
+RDATE:19710701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Darwin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Darwin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,43 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Darwin
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Darwin
+X-LIC-LOCATION:Australia/Darwin
+BEGIN:STANDARD
+TZOFFSETFROM:+084320
+TZOFFSETTO:+0900
+TZNAME:CST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:18990501T000000
+RDATE:18990501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Eucla.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Eucla.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,53 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Eucla
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Eucla
+X-LIC-LOCATION:Australia/Eucla
+BEGIN:STANDARD
+TZOFFSETFROM:+083528
+TZOFFSETTO:+0845
+TZNAME:CWST
+DTSTART:18951201T000000
+RDATE:18951201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0845
+TZOFFSETTO:+0945
+TZNAME:CWST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19741027T020000
+RDATE:19831030T020000
+RDATE:19911117T020000
+RDATE:20061203T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0945
+TZOFFSETTO:+0845
+TZNAME:CWST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19750302T030000
+RDATE:19840304T030000
+RDATE:19920301T030000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0845
+TZOFFSETTO:+0845
+TZNAME:CWST
+DTSTART:19430701T000000
+RDATE:19430701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Hobart.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Hobart.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Hobart
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Hobart
+X-LIC-LOCATION:Australia/Hobart
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+094916
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950901T000000
+RDATE:18950901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19161001T020000
+RDATE:19161001T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20000827T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170201T000000
+RDATE:19170201T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19680331T030000
+RDATE:19690309T030000
+RDATE:19700308T030000
+RDATE:19710314T030000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820328T030000
+RDATE:19830327T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910331T030000
+RDATE:19920329T030000
+RDATE:19930328T030000
+RDATE:19940327T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19670101T000000
+RDATE:19670101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Lindeman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Lindeman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,56 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Lindeman
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Lindeman
+X-LIC-LOCATION:Australia/Lindeman
+BEGIN:STANDARD
+TZOFFSETFROM:+095556
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+RDATE:19920701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Lord_Howe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Lord_Howe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,114 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Lord_Howe
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Lord_Howe
+X-LIC-LOCATION:Australia/Lord_Howe
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:20080406T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1100
+TZNAME:LHST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+103620
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:19810301T000000
+RDATE:19810301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1130
+TZNAME:LHST
+DTSTART:19811025T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:19820307T020000
+RDATE:19820307T020000
+RDATE:19830306T020000
+RDATE:19840304T020000
+RDATE:19850303T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1100
+TZNAME:LHST
+DTSTART:19851027T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20000827T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:19860316T020000
+RDATE:19860316T020000
+RDATE:19870315T020000
+RDATE:19880320T020000
+RDATE:19890319T020000
+RDATE:19900304T020000
+RDATE:19910303T020000
+RDATE:19920301T020000
+RDATE:19930307T020000
+RDATE:19940306T020000
+RDATE:19950305T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060402T020000
+RDATE:20070325T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Melbourne.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Melbourne.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,130 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Melbourne
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Melbourne
+X-LIC-LOCATION:Australia/Melbourne
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+093952
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871018T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20000827T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Perth.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Perth.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,53 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Perth
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Perth
+X-LIC-LOCATION:Australia/Perth
+BEGIN:STANDARD
+TZOFFSETFROM:+074324
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:18951201T000000
+RDATE:18951201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:WST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19741027T020000
+RDATE:19831030T020000
+RDATE:19911117T020000
+RDATE:20061203T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19750302T030000
+RDATE:19840304T030000
+RDATE:19920301T030000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:19430701T000000
+RDATE:19430701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Australia/Sydney.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Australia/Sydney.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,130 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Sydney
+TZURL:http://tzurl.org/zoneinfo-global/Australia/Sydney
+X-LIC-LOCATION:Australia/Sydney
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+100452
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20000827T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820404T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+RDATE:19950305T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Amsterdam.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Amsterdam.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Amsterdam
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Amsterdam
+X-LIC-LOCATION:Europe/Amsterdam
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+001932
+TZOFFSETTO:+001932
+TZNAME:AMT
+DTSTART:18350101T000000
+RDATE:18350101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+001932
+TZOFFSETTO:+011932
+TZNAME:NST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19170416T020000
+RDATE:19180401T020000
+RDATE:19190407T020000
+RDATE:19200405T020000
+RDATE:19210404T020000
+RDATE:19220326T020000
+RDATE:19230601T020000
+RDATE:19240330T020000
+RDATE:19250605T020000
+RDATE:19260515T020000
+RDATE:19270515T020000
+RDATE:19280515T020000
+RDATE:19290515T020000
+RDATE:19300515T020000
+RDATE:19310515T020000
+RDATE:19320522T020000
+RDATE:19330515T020000
+RDATE:19340515T020000
+RDATE:19350515T020000
+RDATE:19360515T020000
+RDATE:19370522T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+011932
+TZOFFSETTO:+001932
+TZNAME:AMT
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19200927T030000
+RDATE:19210926T030000
+RDATE:19221008T030000
+RDATE:19231007T030000
+RDATE:19241005T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+011932
+TZOFFSETTO:+0120
+TZNAME:NEST
+DTSTART:19370701T000000
+RDATE:19370701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0120
+TZOFFSETTO:+0020
+TZNAME:NET
+DTSTART:19371003T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391008T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0020
+TZOFFSETTO:+0120
+TZNAME:NEST
+DTSTART:19380515T020000
+RDATE:19380515T020000
+RDATE:19390515T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0020
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400516T000000
+RDATE:19400516T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Andorra.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Andorra.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,54 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Andorra
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Andorra
+X-LIC-LOCATION:Europe/Andorra
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000604
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19460930T000000
+RDATE:19460930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19850929T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Athens.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Athens.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,117 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Athens
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Athens
+X-LIC-LOCATION:Europe/Athens
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013452
+TZOFFSETTO:+013452
+TZNAME:AMT
+DTSTART:18950914T000000
+RDATE:18950914T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013452
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19160728T000100
+RDATE:19160728T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19320707T000000
+RDATE:19320707T000000
+RDATE:19410407T000000
+RDATE:19520701T000000
+RDATE:19750412T000000
+RDATE:19760411T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T090000
+RDATE:19800401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19320901T000000
+RDATE:19320901T000000
+RDATE:19521102T000000
+RDATE:19751126T010000
+RDATE:19761010T030000
+RDATE:19770926T030000
+RDATE:19780924T040000
+RDATE:19790929T020000
+RDATE:19800928T000000
+RDATE:19810927T040000
+RDATE:19820926T040000
+RDATE:19830925T040000
+RDATE:19840930T040000
+RDATE:19850929T040000
+RDATE:19860928T040000
+RDATE:19870927T040000
+RDATE:19880925T040000
+RDATE:19890924T040000
+RDATE:19900930T040000
+RDATE:19910929T040000
+RDATE:19920927T040000
+RDATE:19930926T040000
+RDATE:19940925T040000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410430T000000
+RDATE:19410430T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430330T000000
+RDATE:19430330T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19440404T000000
+RDATE:19440404T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Belgrade.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Belgrade.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Belgrade
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Belgrade
+X-LIC-LOCATION:Europe/Belgrade
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Berlin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Berlin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,105 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Berlin
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Berlin
+X-LIC-LOCATION:Europe/Berlin
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005328
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18930401T000000
+RDATE:18930401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460414T020000
+RDATE:19470406T030000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451118T030000
+RDATE:19461007T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CEMT
+DTSTART:19450524T020000
+RDATE:19450524T020000
+RDATE:19470511T030000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19450924T030000
+RDATE:19450924T030000
+RDATE:19470629T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Bratislava.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Bratislava.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,97 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Bratislava
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Bratislava
+X-LIC-LOCATION:Europe/Bratislava
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+005744
+TZNAME:PMT
+DTSTART:18500101T000000
+RDATE:18500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18911001T000000
+RDATE:18911001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450408T020000
+RDATE:19460506T020000
+RDATE:19470420T020000
+RDATE:19480418T020000
+RDATE:19490409T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T030000
+RDATE:19451118T030000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Brussels.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Brussels.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Brussels
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Brussels
+X-LIC-LOCATION:Europe/Brussels
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+001730
+TZOFFSETTO:+001730
+TZNAME:BMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+001730
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:18920501T120000
+RDATE:18920501T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19141108T000000
+RDATE:19141108T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400520T030000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460519T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T030000
+RDATE:19450916T030000
+RDATE:19461007T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19181111T120000
+RDATE:19181111T120000
+RDATE:19191005T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19190301T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230421T230000
+RDATE:19240329T230000
+RDATE:19250404T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320403T020000
+RDATE:19330326T020000
+RDATE:19340408T020000
+RDATE:19350331T020000
+RDATE:19360419T020000
+RDATE:19370404T020000
+RDATE:19380327T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440903T000000
+RDATE:19440903T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Bucharest.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Bucharest.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,110 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Bucharest
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Bucharest
+X-LIC-LOCATION:Europe/Bucharest
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014424
+TZOFFSETTO:+014424
+TZNAME:BMT
+DTSTART:18911001T000000
+RDATE:18911001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014424
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19310724T000000
+RDATE:19310724T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19330402T000000
+RDATE:19340408T000000
+RDATE:19350407T000000
+RDATE:19360405T000000
+RDATE:19370404T000000
+RDATE:19380403T000000
+RDATE:19390402T000000
+RDATE:19790527T000000
+RDATE:19800405T230000
+RDATE:19810329T020000
+RDATE:19820328T020000
+RDATE:19830327T020000
+RDATE:19840325T020000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19321002T010000
+RDATE:19321002T010000
+RDATE:19331001T010000
+RDATE:19341007T010000
+RDATE:19351006T010000
+RDATE:19361004T010000
+RDATE:19371003T010000
+RDATE:19381002T010000
+RDATE:19391001T010000
+RDATE:19790930T000000
+RDATE:19800928T010000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T010000
+RDATE:19920927T010000
+RDATE:19930926T010000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19940101T000000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Budapest.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Budapest.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,103 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Budapest
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Budapest
+X-LIC-LOCATION:Europe/Budapest
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+011620
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18901001T000000
+RDATE:18901001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180401T030000
+RDATE:19190415T030000
+RDATE:19200405T030000
+RDATE:19410406T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450501T230000
+RDATE:19460331T020000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490410T020000
+RDATE:19500417T020000
+RDATE:19540523T000000
+RDATE:19550523T000000
+RDATE:19560603T000000
+RDATE:19570602T010000
+RDATE:19800406T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180929T030000
+RDATE:19190915T030000
+RDATE:19200930T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451103T000000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19501023T030000
+RDATE:19541003T000000
+RDATE:19551003T000000
+RDATE:19560930T000000
+RDATE:19570929T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19450101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Chisinau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Chisinau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,162 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Chisinau
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Chisinau
+X-LIC-LOCATION:Europe/Chisinau
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015520
+TZOFFSETTO:+0155
+TZNAME:CMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0155
+TZOFFSETTO:+014424
+TZNAME:BMT
+DTSTART:19180215T000000
+RDATE:19180215T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014424
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19310724T000000
+RDATE:19310724T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19330402T000000
+RDATE:19340408T000000
+RDATE:19350407T000000
+RDATE:19360405T000000
+RDATE:19370404T000000
+RDATE:19380403T000000
+RDATE:19390402T000000
+RDATE:19400815T000000
+RDATE:19910331T020000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19321002T010000
+RDATE:19321002T010000
+RDATE:19331001T010000
+RDATE:19341007T010000
+RDATE:19351006T010000
+RDATE:19361004T010000
+RDATE:19371003T010000
+RDATE:19381002T010000
+RDATE:19391001T010000
+RDATE:19900506T000000
+RDATE:19910929T030000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410717T000000
+RDATE:19410717T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19440824T000000
+RDATE:19440824T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19920101T000000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Copenhagen.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Copenhagen.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,89 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Copenhagen
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Copenhagen
+X-LIC-LOCATION:Europe/Copenhagen
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005020
+TZOFFSETTO:+005020
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005020
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18940101T000000
+RDATE:18940101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160514T230000
+RDATE:19160514T230000
+RDATE:19400515T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460501T020000
+RDATE:19470504T020000
+RDATE:19480509T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19160930T230000
+RDATE:19160930T230000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450815T030000
+RDATE:19460901T030000
+RDATE:19470810T030000
+RDATE:19480808T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Dublin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Dublin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,202 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Dublin
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Dublin
+X-LIC-LOCATION:Europe/Dublin
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:IST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0025
+TZOFFSETTO:-002521
+TZNAME:DMT
+DTSTART:18800802T000000
+RDATE:18800802T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-002521
+TZOFFSETTO:+003439
+TZNAME:IST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+003439
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19170917T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19461006T020000
+RDATE:19471102T020000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19211206T000000
+RDATE:19211206T000000
+RDATE:19960101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:IST
+DTSTART:19220326T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19470316T020000
+RDATE:19480418T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:IST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Gibraltar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Gibraltar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,172 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Gibraltar
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Gibraltar
+X-LIC-LOCATION:Europe/Gibraltar
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19820328T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002124
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18800802T000000
+RDATE:18800802T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19570414T020000
+RDATE:19570414T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19820926T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Guernsey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Guernsey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Guernsey
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Guernsey
+X-LIC-LOCATION:Europe/Guernsey
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Helsinki.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Helsinki.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Helsinki
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Helsinki
+X-LIC-LOCATION:Europe/Helsinki
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19830327T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+013952
+TZNAME:HMT
+DTSTART:18780531T000000
+RDATE:18780531T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19210501T000000
+RDATE:19210501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19420403T000000
+RDATE:19420403T000000
+RDATE:19810329T020000
+RDATE:19820328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421003T000000
+RDATE:19421003T000000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T040000
+RDATE:19840930T040000
+RDATE:19850929T040000
+RDATE:19860928T040000
+RDATE:19870927T040000
+RDATE:19880925T040000
+RDATE:19890924T040000
+RDATE:19900930T040000
+RDATE:19910929T040000
+RDATE:19920927T040000
+RDATE:19930926T040000
+RDATE:19940925T040000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19830101T000000
+RDATE:19830101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Isle_of_Man.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Isle_of_Man.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Isle_of_Man
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Isle_of_Man
+X-LIC-LOCATION:Europe/Isle_of_Man
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Istanbul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Istanbul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,194 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Istanbul
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Istanbul
+X-LIC-LOCATION:Europe/Istanbul
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20120325T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+015552
+TZOFFSETTO:+015656
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19101001T000000
+RDATE:19101001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19240513T000000
+RDATE:19250501T000000
+RDATE:19400630T000000
+RDATE:19401201T000000
+RDATE:19420401T000000
+RDATE:19450402T000000
+RDATE:19460601T000000
+RDATE:19470420T000000
+RDATE:19480418T000000
+RDATE:19490410T000000
+RDATE:19500419T000000
+RDATE:19510422T000000
+RDATE:19620715T000000
+RDATE:19640515T000000
+RDATE:19700503T000000
+RDATE:19710502T000000
+RDATE:19720507T000000
+RDATE:19730603T010000
+RDATE:19740331T020000
+RDATE:19750330T000000
+RDATE:19760601T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T010000
+RDATE:19920329T010000
+RDATE:19930328T010000
+RDATE:19940327T010000
+RDATE:19950326T010000
+RDATE:19960331T010000
+RDATE:19970330T010000
+RDATE:19980329T010000
+RDATE:19990328T010000
+RDATE:20000326T010000
+RDATE:20010325T010000
+RDATE:20020331T010000
+RDATE:20030330T010000
+RDATE:20040328T010000
+RDATE:20050327T010000
+RDATE:20060326T010000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+RDATE:20100328T030000
+RDATE:20110328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19241001T000000
+RDATE:19251001T000000
+RDATE:19401005T000000
+RDATE:19410921T000000
+RDATE:19421101T000000
+RDATE:19451008T000000
+RDATE:19461001T000000
+RDATE:19471005T000000
+RDATE:19481003T000000
+RDATE:19491002T000000
+RDATE:19501008T000000
+RDATE:19511008T000000
+RDATE:19621008T000000
+RDATE:19641001T000000
+RDATE:19701004T000000
+RDATE:19711003T000000
+RDATE:19721008T000000
+RDATE:19731104T030000
+RDATE:19741103T050000
+RDATE:19751026T000000
+RDATE:19761031T000000
+RDATE:19771016T000000
+RDATE:19850928T000000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19781015T000000
+RDATE:19781015T000000
+RDATE:19800406T030000
+RDATE:19810329T030000
+RDATE:19820328T030000
+RDATE:19830731T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19790401T030000
+RDATE:19790401T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:TRT
+DTSTART:19791015T000000
+RDATE:19791015T000000
+RDATE:19801013T000000
+RDATE:19811012T000000
+RDATE:19821011T000000
+RDATE:19831002T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19850420T000000
+RDATE:19850420T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20070101T000000
+RDATE:20070101T000000
+RDATE:20110327T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Jersey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Jersey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Jersey
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Jersey
+X-LIC-LOCATION:Europe/Jersey
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Kaliningrad.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Kaliningrad.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Kaliningrad
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Kaliningrad
+X-LIC-LOCATION:Europe/Kaliningrad
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18930401T000000
+RDATE:18930401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CEST
+DTSTART:19450429T000000
+RDATE:19450429T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CET
+DTSTART:19451101T000000
+RDATE:19451101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:FET
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Kiev.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Kiev.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Kiev
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Kiev
+X-LIC-LOCATION:Europe/Kiev
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+020204
+TZOFFSETTO:+020204
+TZNAME:KMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+020204
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410920T000000
+RDATE:19410920T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19431106T000000
+RDATE:19431106T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19900701T020000
+RDATE:19900701T020000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+RDATE:19950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Lisbon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Lisbon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,228 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Lisbon
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Lisbon
+X-LIC-LOCATION:Europe/Lisbon
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19970330T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-003632
+TZOFFSETTO:-003632
+TZNAME:LMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-003632
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19420314T230000
+RDATE:19430313T230000
+RDATE:19440311T230000
+RDATE:19450310T230000
+RDATE:19460406T230000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490403T020000
+RDATE:19510401T020000
+RDATE:19520406T020000
+RDATE:19530405T020000
+RDATE:19540404T020000
+RDATE:19550403T020000
+RDATE:19560401T020000
+RDATE:19570407T020000
+RDATE:19580406T020000
+RDATE:19590405T020000
+RDATE:19600403T020000
+RDATE:19610402T020000
+RDATE:19620401T020000
+RDATE:19630407T020000
+RDATE:19640405T020000
+RDATE:19650404T020000
+RDATE:19770327T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800330T000000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T020000
+RDATE:19840325T010000
+RDATE:19850331T010000
+RDATE:19860330T010000
+RDATE:19870329T010000
+RDATE:19880327T010000
+RDATE:19890326T010000
+RDATE:19900325T010000
+RDATE:19910331T010000
+RDATE:19920329T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19171015T000000
+RDATE:19181015T000000
+RDATE:19191015T000000
+RDATE:19201015T000000
+RDATE:19211015T000000
+RDATE:19241015T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+RDATE:19401006T000000
+RDATE:19411006T000000
+RDATE:19421025T000000
+RDATE:19431031T000000
+RDATE:19441029T000000
+RDATE:19451028T000000
+RDATE:19461006T000000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19511007T030000
+RDATE:19521005T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611001T030000
+RDATE:19621007T030000
+RDATE:19631006T030000
+RDATE:19641004T030000
+RDATE:19651003T030000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+RDATE:19440422T230000
+RDATE:19450421T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19420816T000000
+RDATE:19420816T000000
+RDATE:19430829T000000
+RDATE:19440827T000000
+RDATE:19450826T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19660403T020000
+RDATE:19660403T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19920927T020000
+RDATE:19920927T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19930328T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19930926T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19960331T020000
+RDATE:19960331T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Ljubljana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Ljubljana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Ljubljana
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Ljubljana
+X-LIC-LOCATION:Europe/Ljubljana
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/London.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/London.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/London
+TZURL:http://tzurl.org/zoneinfo-global/Europe/London
+X-LIC-LOCATION:Europe/London
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Luxembourg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Luxembourg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,156 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Luxembourg
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Luxembourg
+X-LIC-LOCATION:Europe/Luxembourg
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+002436
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19040601T000000
+RDATE:19040601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160514T230000
+RDATE:19160514T230000
+RDATE:19170428T230000
+RDATE:19180415T020000
+RDATE:19450402T020000
+RDATE:19460519T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T010000
+RDATE:19180916T030000
+RDATE:19440918T030000
+RDATE:19450916T030000
+RDATE:19461007T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19181125T000000
+RDATE:19181125T000000
+RDATE:19191005T030000
+RDATE:19201024T020000
+RDATE:19211026T020000
+RDATE:19221008T010000
+RDATE:19231007T020000
+RDATE:19241005T010000
+RDATE:19251004T010000
+RDATE:19261003T010000
+RDATE:19271002T010000
+RDATE:19281007T010000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19190301T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230421T230000
+RDATE:19240329T230000
+RDATE:19250405T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320403T020000
+RDATE:19330326T020000
+RDATE:19340408T020000
+RDATE:19350331T020000
+RDATE:19360419T020000
+RDATE:19370404T020000
+RDATE:19380327T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEST
+DTSTART:19400514T030000
+RDATE:19400514T030000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Madrid.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Madrid.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,137 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Madrid
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Madrid
+X-LIC-LOCATION:Europe/Madrid
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-001444
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19170505T230000
+RDATE:19170505T230000
+RDATE:19180415T230000
+RDATE:19190405T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19370522T230000
+RDATE:19380322T230000
+RDATE:19390415T230000
+RDATE:19400316T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19171007T000000
+RDATE:19171007T000000
+RDATE:19181007T000000
+RDATE:19191007T000000
+RDATE:19241005T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391008T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19420502T230000
+RDATE:19420502T230000
+RDATE:19430417T230000
+RDATE:19440415T230000
+RDATE:19450414T230000
+RDATE:19460413T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19420902T000000
+RDATE:19420902T000000
+RDATE:19431004T000000
+RDATE:19441011T000000
+RDATE:19450930T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19460930T000000
+RDATE:19460930T000000
+RDATE:19490930T010000
+RDATE:19741006T010000
+RDATE:19751005T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19490430T230000
+RDATE:19490430T230000
+RDATE:19740413T230000
+RDATE:19750419T230000
+RDATE:19760327T230000
+RDATE:19770402T230000
+RDATE:19780402T230000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Malta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Malta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,118 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Malta
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Malta
+X-LIC-LOCATION:Europe/Malta
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005804
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931102T000000
+RDATE:18931102T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730331T000000
+RDATE:19740421T000000
+RDATE:19750420T020000
+RDATE:19760418T020000
+RDATE:19770417T020000
+RDATE:19780416T020000
+RDATE:19790415T020000
+RDATE:19800331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730929T010000
+RDATE:19740916T010000
+RDATE:19750921T020000
+RDATE:19760919T020000
+RDATE:19770918T020000
+RDATE:19780917T020000
+RDATE:19790916T020000
+RDATE:19800921T020000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Mariehamn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Mariehamn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Mariehamn
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Mariehamn
+X-LIC-LOCATION:Europe/Mariehamn
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19830327T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+013952
+TZNAME:HMT
+DTSTART:18780531T000000
+RDATE:18780531T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19210501T000000
+RDATE:19210501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19420403T000000
+RDATE:19420403T000000
+RDATE:19810329T020000
+RDATE:19820328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421003T000000
+RDATE:19421003T000000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T040000
+RDATE:19840930T040000
+RDATE:19850929T040000
+RDATE:19860928T040000
+RDATE:19870927T040000
+RDATE:19880925T040000
+RDATE:19890924T040000
+RDATE:19900930T040000
+RDATE:19910929T040000
+RDATE:19920927T040000
+RDATE:19930926T040000
+RDATE:19940925T040000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19830101T000000
+RDATE:19830101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Minsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Minsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,156 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Minsk
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Minsk
+X-LIC-LOCATION:Europe/Minsk
+BEGIN:STANDARD
+TZOFFSETFROM:+015016
+TZOFFSETTO:+0150
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0150
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19440703T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410628T000000
+RDATE:19410628T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920927T010000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:FET
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Monaco.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Monaco.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,164 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Monaco
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Monaco
+X-LIC-LOCATION:Europe/Monaco
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+002932
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18910315T000000
+RDATE:18910315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19110311T000000
+RDATE:19110311T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160614T230000
+RDATE:19160614T230000
+RDATE:19170324T230000
+RDATE:19180309T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230526T230000
+RDATE:19240329T230000
+RDATE:19250404T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19300412T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19330325T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161002T000000
+RDATE:19161002T000000
+RDATE:19171008T000000
+RDATE:19181007T000000
+RDATE:19191006T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331008T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19410505T000000
+RDATE:19410505T000000
+RDATE:19420309T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19411006T000000
+RDATE:19411006T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441008T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450916T030000
+RDATE:19450916T030000
+RDATE:19760926T010000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19760328T010000
+RDATE:19760328T010000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Moscow.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Moscow.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,182 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Moscow
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Moscow
+X-LIC-LOCATION:Europe/Moscow
+BEGIN:STANDARD
+TZOFFSETFROM:+023020
+TZOFFSETTO:+0230
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+023048
+TZNAME:MMT
+DTSTART:19160703T000000
+RDATE:19160703T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+023048
+TZOFFSETTO:+033048
+TZNAME:MST
+DTSTART:19170701T230000
+RDATE:19170701T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+033048
+TZOFFSETTO:+023048
+TZNAME:MMT
+DTSTART:19171228T000000
+RDATE:19171228T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+023048
+TZOFFSETTO:+043048
+TZNAME:MDST
+DTSTART:19180531T220000
+RDATE:19180531T220000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+043048
+TZOFFSETTO:+033048
+TZNAME:MST
+DTSTART:19180916T010000
+RDATE:19180916T010000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+033048
+TZOFFSETTO:+043048
+TZNAME:MDST
+DTSTART:19190531T230000
+RDATE:19190531T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+043048
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19190701T020000
+RDATE:19190701T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19190816T000000
+RDATE:19190816T000000
+RDATE:19211001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19210214T230000
+RDATE:19210214T230000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:MSD
+DTSTART:19210320T230000
+RDATE:19210320T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19210901T000000
+RDATE:19210901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19221001T000000
+RDATE:19221001T000000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSK
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Nicosia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Nicosia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,96 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Nicosia
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Nicosia
+X-LIC-LOCATION:Europe/Nicosia
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19981025T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19990328T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+021328
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19211114T000000
+RDATE:19211114T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19750413T000000
+RDATE:19750413T000000
+RDATE:19760515T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800406T000000
+RDATE:19810329T000000
+RDATE:19820328T000000
+RDATE:19830327T000000
+RDATE:19840325T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19751012T000000
+RDATE:19751012T000000
+RDATE:19761011T000000
+RDATE:19770925T000000
+RDATE:19781002T000000
+RDATE:19790930T000000
+RDATE:19800928T000000
+RDATE:19810927T000000
+RDATE:19820926T000000
+RDATE:19830925T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19980901T000000
+RDATE:19980901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Oslo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Oslo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Oslo
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Oslo
+X-LIC-LOCATION:Europe/Oslo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0043
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160522T010000
+RDATE:19160522T010000
+RDATE:19400810T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19590315T020000
+RDATE:19600320T020000
+RDATE:19610319T020000
+RDATE:19620318T020000
+RDATE:19630317T020000
+RDATE:19640315T020000
+RDATE:19650425T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19160930T000000
+RDATE:19160930T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451001T030000
+RDATE:19590920T030000
+RDATE:19600918T030000
+RDATE:19610917T030000
+RDATE:19620916T030000
+RDATE:19630915T030000
+RDATE:19640920T030000
+RDATE:19650919T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Paris.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Paris.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,169 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Paris
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Paris
+X-LIC-LOCATION:Europe/Paris
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18910315T000100
+RDATE:18910315T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160614T230000
+RDATE:19160614T230000
+RDATE:19170324T230000
+RDATE:19180309T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230526T230000
+RDATE:19240329T230000
+RDATE:19250404T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19300412T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19330325T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161002T000000
+RDATE:19161002T000000
+RDATE:19171008T000000
+RDATE:19181007T000000
+RDATE:19191006T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331008T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400614T230000
+RDATE:19400614T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19760328T010000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19450916T030000
+RDATE:19760926T010000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19440825T000000
+RDATE:19440825T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19441008T010000
+RDATE:19441008T010000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19450402T020000
+RDATE:19450402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Podgorica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Podgorica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Podgorica
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Podgorica
+X-LIC-LOCATION:Europe/Podgorica
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Prague.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Prague.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,97 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Prague
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Prague
+X-LIC-LOCATION:Europe/Prague
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+005744
+TZNAME:PMT
+DTSTART:18500101T000000
+RDATE:18500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18911001T000000
+RDATE:18911001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450408T020000
+RDATE:19460506T020000
+RDATE:19470420T020000
+RDATE:19480418T020000
+RDATE:19490409T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T030000
+RDATE:19451118T030000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Riga.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Riga.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,168 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Riga
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Riga
+X-LIC-LOCATION:Europe/Riga
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20010325T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20011028T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013624
+TZOFFSETTO:+013624
+TZNAME:RMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+013624
+TZOFFSETTO:+023624
+TZNAME:LST
+DTSTART:19180415T020000
+RDATE:19180415T020000
+RDATE:19190401T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+023624
+TZOFFSETTO:+013624
+TZNAME:RMT
+DTSTART:19180916T030000
+RDATE:19180916T030000
+RDATE:19190522T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013624
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19260511T000000
+RDATE:19260511T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19400805T000000
+RDATE:19400805T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410701T000000
+RDATE:19410701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19441013T000000
+RDATE:19441013T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19960929T030000
+RDATE:19971026T040000
+RDATE:19981025T040000
+RDATE:19991031T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+RDATE:19910331T020000
+RDATE:19920329T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19970121T000000
+RDATE:19970121T000000
+RDATE:20000229T000000
+RDATE:20010102T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Rome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Rome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Rome
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Rome
+X-LIC-LOCATION:Europe/Rome
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+004956
+TZNAME:RMT
+DTSTART:18660922T000000
+RDATE:18660922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730603T000000
+RDATE:19740526T000000
+RDATE:19750601T000000
+RDATE:19760530T000000
+RDATE:19770522T000000
+RDATE:19780528T000000
+RDATE:19790527T000000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T010000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730930T000000
+RDATE:19740929T000000
+RDATE:19750928T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440701T000000
+RDATE:19440701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Samara.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Samara.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,158 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Samara
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Samara
+X-LIC-LOCATION:Europe/Samara
+BEGIN:STANDARD
+TZOFFSETFROM:+032036
+TZOFFSETTO:+0300
+TZNAME:SAMT
+DTSTART:19190701T020000
+RDATE:19190701T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:SAMT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19911020T030000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:KUYT
+DTSTART:19350127T000000
+RDATE:19350127T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:KUYST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:KUYT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:KUYST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:KUYT
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:KUYST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:KUYST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:KUYT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:SAMST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:SAMT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:SAMST
+DTSTART:20100328T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:SAMT
+DTSTART:20101031T030000
+RDATE:20101031T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/San_Marino.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/San_Marino.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/San_Marino
+TZURL:http://tzurl.org/zoneinfo-global/Europe/San_Marino
+X-LIC-LOCATION:Europe/San_Marino
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+004956
+TZNAME:RMT
+DTSTART:18660922T000000
+RDATE:18660922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730603T000000
+RDATE:19740526T000000
+RDATE:19750601T000000
+RDATE:19760530T000000
+RDATE:19770522T000000
+RDATE:19780528T000000
+RDATE:19790527T000000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T010000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730930T000000
+RDATE:19740929T000000
+RDATE:19750928T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440701T000000
+RDATE:19440701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Sarajevo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Sarajevo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Sarajevo
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Sarajevo
+X-LIC-LOCATION:Europe/Sarajevo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Simferopol.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Simferopol.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,151 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Simferopol
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Simferopol
+X-LIC-LOCATION:Europe/Simferopol
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19980329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+021624
+TZOFFSETTO:+0216
+TZNAME:SMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0216
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19440413T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19411101T000000
+RDATE:19411101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19940501T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+RDATE:19970101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19900701T020000
+RDATE:19900701T020000
+RDATE:19920927T000000
+RDATE:19930926T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19960331T040000
+RDATE:19960331T040000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T040000
+RDATE:19970330T040000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Skopje.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Skopje.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Skopje
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Skopje
+X-LIC-LOCATION:Europe/Skopje
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Sofia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Sofia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Sofia
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Sofia
+X-LIC-LOCATION:Europe/Sofia
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013316
+TZOFFSETTO:+015656
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:18941130T000000
+RDATE:18941130T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T020000
+RDATE:19421102T020000
+RDATE:19431004T030000
+RDATE:19441002T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19450402T030000
+RDATE:19450402T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19790331T230000
+RDATE:19790331T230000
+RDATE:19800405T230000
+RDATE:19810404T230000
+RDATE:19820403T230000
+RDATE:19830327T020000
+RDATE:19840325T020000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19791001T010000
+RDATE:19791001T010000
+RDATE:19800929T010000
+RDATE:19810927T020000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19820926T020000
+RDATE:19820926T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Stockholm.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Stockholm.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Stockholm
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Stockholm
+X-LIC-LOCATION:Europe/Stockholm
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+011212
+TZOFFSETTO:+010014
+TZNAME:SET
+DTSTART:18790101T000000
+RDATE:18790101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+010014
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19000101T000000
+RDATE:19000101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160514T230000
+RDATE:19160514T230000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Tallinn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Tallinn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,161 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Tallinn
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Tallinn
+X-LIC-LOCATION:Europe/Tallinn
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20020331T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20021027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0139
+TZOFFSETTO:+0139
+TZNAME:TMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0139
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19180201T000000
+RDATE:19180201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19180415T020000
+RDATE:19180415T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19180916T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0139
+TZNAME:TMT
+DTSTART:19190701T000000
+RDATE:19190701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0139
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19210501T000000
+RDATE:19210501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19400806T000000
+RDATE:19400806T000000
+RDATE:19440922T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410915T000000
+RDATE:19410915T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+RDATE:19980922T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T040000
+RDATE:19991031T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+RDATE:19910331T020000
+RDATE:19920329T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19991101T000000
+RDATE:19991101T000000
+RDATE:20020221T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Tirane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Tirane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,86 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Tirane
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Tirane
+X-LIC-LOCATION:Europe/Tirane
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+011920
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400616T000000
+RDATE:19400616T000000
+RDATE:19430329T020000
+RDATE:19740504T000000
+RDATE:19750501T000000
+RDATE:19760502T000000
+RDATE:19770508T000000
+RDATE:19780506T000000
+RDATE:19790505T000000
+RDATE:19800503T000000
+RDATE:19810426T000000
+RDATE:19820502T000000
+RDATE:19830418T000000
+RDATE:19840401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19430410T030000
+RDATE:19741002T000000
+RDATE:19751002T000000
+RDATE:19761003T000000
+RDATE:19771002T000000
+RDATE:19781001T000000
+RDATE:19790930T000000
+RDATE:19801004T000000
+RDATE:19810927T000000
+RDATE:19821003T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19840701T000000
+RDATE:19840701T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Uzhgorod.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Uzhgorod.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,147 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Uzhgorod
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Uzhgorod
+X-LIC-LOCATION:Europe/Uzhgorod
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+012912
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18901001T000000
+RDATE:18901001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400401T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19441001T000000
+RDATE:19441001T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19450629T000000
+RDATE:19450629T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19900701T020000
+RDATE:19900701T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910331T030000
+RDATE:19910331T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+RDATE:19950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920927T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T040000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Vaduz.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Vaduz.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,58 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vaduz
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Vaduz
+X-LIC-LOCATION:Europe/Vaduz
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+003804
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18940601T000000
+RDATE:18940601T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810927T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Vatican.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Vatican.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vatican
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Vatican
+X-LIC-LOCATION:Europe/Vatican
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+004956
+TZNAME:RMT
+DTSTART:18660922T000000
+RDATE:18660922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730603T000000
+RDATE:19740526T000000
+RDATE:19750601T000000
+RDATE:19760530T000000
+RDATE:19770522T000000
+RDATE:19780528T000000
+RDATE:19790527T000000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T010000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730930T000000
+RDATE:19740929T000000
+RDATE:19750928T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440701T000000
+RDATE:19440701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Vienna.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Vienna.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vienna
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Vienna
+X-LIC-LOCATION:Europe/Vienna
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+010520
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18930401T000000
+RDATE:18930401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19200405T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460414T020000
+RDATE:19470406T020000
+RDATE:19480418T020000
+RDATE:19800406T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19200913T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450412T030000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19800928T000000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19460101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Vilnius.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Vilnius.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,171 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vilnius
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Vilnius
+X-LIC-LOCATION:Europe/Vilnius
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20030330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20031026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014116
+TZOFFSETTO:+0124
+TZNAME:WMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0124
+TZOFFSETTO:+013536
+TZNAME:KMT
+DTSTART:19170101T000000
+RDATE:19170101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013536
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19191010T000000
+RDATE:19191010T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19200712T000000
+RDATE:19200712T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19201009T000000
+RDATE:19201009T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19981025T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19400803T000000
+RDATE:19400803T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410624T000000
+RDATE:19410624T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19990328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19440801T000000
+RDATE:19440801T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T020000
+RDATE:19920329T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19980101T000000
+RDATE:19980101T000000
+RDATE:19991031T030000
+RDATE:20030101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19980329T030000
+RDATE:19980329T030000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Volgograd.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Volgograd.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Volgograd
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Volgograd
+X-LIC-LOCATION:Europe/Volgograd
+BEGIN:STANDARD
+TZOFFSETFROM:+025740
+TZOFFSETTO:+0300
+TZNAME:TSAT
+DTSTART:19200103T000000
+RDATE:19200103T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:STAT
+DTSTART:19250406T000000
+RDATE:19250406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:STAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:VOLT
+DTSTART:19611111T000000
+RDATE:19611111T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:VOLST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:VOLT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:VOLST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+RDATE:19920329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:VOLT
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:VOLST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:VOLT
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Warsaw.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Warsaw.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,153 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Warsaw
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Warsaw
+X-LIC-LOCATION:Europe/Warsaw
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19880327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0124
+TZNAME:WMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19150805T000000
+RDATE:19150805T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400623T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450429T000000
+RDATE:19460414T000000
+RDATE:19470504T020000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19570602T010000
+RDATE:19580330T010000
+RDATE:19590531T010000
+RDATE:19600403T010000
+RDATE:19610528T010000
+RDATE:19620527T010000
+RDATE:19630526T010000
+RDATE:19640531T010000
+RDATE:19770403T010000
+RDATE:19780402T010000
+RDATE:19790401T010000
+RDATE:19800406T010000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T010000
+RDATE:19840325T010000
+RDATE:19850331T010000
+RDATE:19860330T010000
+RDATE:19870329T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19220601T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441004T020000
+RDATE:19451101T000000
+RDATE:19461007T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19591004T020000
+RDATE:19601002T020000
+RDATE:19611001T020000
+RDATE:19620930T020000
+RDATE:19630929T020000
+RDATE:19640927T020000
+RDATE:19770925T020000
+RDATE:19781001T020000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19180916T030000
+RDATE:19180916T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19190415T020000
+RDATE:19190415T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19190916T030000
+RDATE:19190916T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19441001T000000
+RDATE:19441001T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+RDATE:19880101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Zagreb.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Zagreb.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Zagreb
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Zagreb
+X-LIC-LOCATION:Europe/Zagreb
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Zaporozhye.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Zaporozhye.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,139 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Zaporozhye
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Zaporozhye
+X-LIC-LOCATION:Europe/Zaporozhye
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0220
+TZNAME:CUT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0220
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410825T000000
+RDATE:19410825T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19431025T000000
+RDATE:19431025T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19950101T000000
+RDATE:19950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Europe/Zurich.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Europe/Zurich.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Zurich
+TZURL:http://tzurl.org/zoneinfo-global/Europe/Zurich
+X-LIC-LOCATION:Europe/Zurich
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+003408
+TZOFFSETTO:+002944
+TZNAME:BMT
+DTSTART:18480912T000000
+RDATE:18480912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+002944
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18940601T000000
+RDATE:18940601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410505T010000
+RDATE:19410505T010000
+RDATE:19420504T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19411006T020000
+RDATE:19411006T020000
+RDATE:19421005T020000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Antananarivo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Antananarivo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Antananarivo
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Antananarivo
+X-LIC-LOCATION:Indian/Antananarivo
+BEGIN:STANDARD
+TZOFFSETFROM:+031004
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:EAST
+DTSTART:19540227T230000
+RDATE:19540227T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19540530T000000
+RDATE:19540530T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Chagos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Chagos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Chagos
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Chagos
+X-LIC-LOCATION:Indian/Chagos
+BEGIN:STANDARD
+TZOFFSETFROM:+044940
+TZOFFSETTO:+0500
+TZNAME:IOT
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:IOT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Christmas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Christmas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Christmas
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Christmas
+X-LIC-LOCATION:Indian/Christmas
+BEGIN:STANDARD
+TZOFFSETFROM:+070252
+TZOFFSETTO:+0700
+TZNAME:CXT
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Cocos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Cocos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Cocos
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Cocos
+X-LIC-LOCATION:Indian/Cocos
+BEGIN:STANDARD
+TZOFFSETFROM:+062740
+TZOFFSETTO:+0630
+TZNAME:CCT
+DTSTART:19000101T000000
+RDATE:19000101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Comoro.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Comoro.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Comoro
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Comoro
+X-LIC-LOCATION:Indian/Comoro
+BEGIN:STANDARD
+TZOFFSETFROM:+025304
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Kerguelen.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Kerguelen.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Kerguelen
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Kerguelen
+X-LIC-LOCATION:Indian/Kerguelen
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0500
+TZNAME:TFT
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Mahe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Mahe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Mahe
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Mahe
+X-LIC-LOCATION:Indian/Mahe
+BEGIN:STANDARD
+TZOFFSETFROM:+034148
+TZOFFSETTO:+0400
+TZNAME:SCT
+DTSTART:19060601T000000
+RDATE:19060601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Maldives.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Maldives.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Maldives
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Maldives
+X-LIC-LOCATION:Indian/Maldives
+BEGIN:STANDARD
+TZOFFSETFROM:+0454
+TZOFFSETTO:+0454
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0454
+TZOFFSETTO:+0500
+TZNAME:MVT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Mauritius.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Mauritius.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,32 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Mauritius
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Mauritius
+X-LIC-LOCATION:Indian/Mauritius
+BEGIN:STANDARD
+TZOFFSETFROM:+0350
+TZOFFSETTO:+0400
+TZNAME:MUT
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:MUST
+DTSTART:19821010T000000
+RDATE:19821010T000000
+RDATE:20081026T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:MUT
+DTSTART:19830321T000000
+RDATE:19830321T000000
+RDATE:20090329T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Mayotte.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Mayotte.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Mayotte
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Mayotte
+X-LIC-LOCATION:Indian/Mayotte
+BEGIN:STANDARD
+TZOFFSETFROM:+030056
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Indian/Reunion.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Indian/Reunion.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Reunion
+TZURL:http://tzurl.org/zoneinfo-global/Indian/Reunion
+X-LIC-LOCATION:Indian/Reunion
+BEGIN:STANDARD
+TZOFFSETFROM:+034152
+TZOFFSETTO:+0400
+TZNAME:RET
+DTSTART:19110601T000000
+RDATE:19110601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Apia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Apia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,59 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Apia
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Apia
+X-LIC-LOCATION:Pacific/Apia
+BEGIN:STANDARD
+TZOFFSETFROM:+123304
+TZOFFSETTO:-112656
+TZNAME:LMT
+DTSTART:18790705T000000
+RDATE:18790705T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-112656
+TZOFFSETTO:-1130
+TZNAME:SAMT
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+TZNAME:WST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:WSDT
+DTSTART:20100926T000000
+RDATE:20100926T000000
+RDATE:20110924T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:WST
+DTSTART:20110402T040000
+RDATE:20110402T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:+1400
+TZNAME:WSDT
+DTSTART:20111230T000000
+RDATE:20111230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+TZNAME:WST
+DTSTART:20120401T040000
+RDATE:20120401T040000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Auckland.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Auckland.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,166 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Auckland
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Auckland
+X-LIC-LOCATION:Pacific/Auckland
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+113904
+TZOFFSETTO:+1130
+TZNAME:NZMT
+DTSTART:18681102T000000
+RDATE:18681102T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1230
+TZNAME:NZST
+DTSTART:19271106T020000
+RDATE:19271106T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1230
+TZOFFSETTO:+1130
+TZNAME:NZMT
+DTSTART:19280304T020000
+RDATE:19280304T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19281014T020000
+RDATE:19281014T020000
+RDATE:19291013T020000
+RDATE:19301012T020000
+RDATE:19311011T020000
+RDATE:19321009T020000
+RDATE:19331008T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19360927T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19400929T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1130
+TZNAME:NZMT
+DTSTART:19290317T020000
+RDATE:19290317T020000
+RDATE:19300316T020000
+RDATE:19310315T020000
+RDATE:19320320T020000
+RDATE:19330319T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19360426T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891008T020000
+RDATE:19901007T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20001001T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19750223T030000
+RDATE:19750223T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870301T030000
+RDATE:19880306T030000
+RDATE:19890305T030000
+RDATE:19900318T030000
+RDATE:19910317T030000
+RDATE:19920315T030000
+RDATE:19930321T030000
+RDATE:19940320T030000
+RDATE:19950319T030000
+RDATE:19960317T030000
+RDATE:19970316T030000
+RDATE:19980315T030000
+RDATE:19990321T030000
+RDATE:20000319T030000
+RDATE:20010318T030000
+RDATE:20020317T030000
+RDATE:20030316T030000
+RDATE:20040321T030000
+RDATE:20050320T030000
+RDATE:20060319T030000
+RDATE:20070318T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Chatham.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Chatham.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Chatham
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Chatham
+X-LIC-LOCATION:Pacific/Chatham
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
+TZNAME:CHADT
+DTSTART:20070930T024500
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1345
+TZOFFSETTO:+1245
+TZNAME:CHAST
+DTSTART:20080406T034500
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+121348
+TZOFFSETTO:+1245
+TZNAME:CHAST
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
+TZNAME:CHADT
+DTSTART:19741103T024500
+RDATE:19741103T024500
+RDATE:19751026T024500
+RDATE:19761031T024500
+RDATE:19771030T024500
+RDATE:19781029T024500
+RDATE:19791028T024500
+RDATE:19801026T024500
+RDATE:19811025T024500
+RDATE:19821031T024500
+RDATE:19831030T024500
+RDATE:19841028T024500
+RDATE:19851027T024500
+RDATE:19861026T024500
+RDATE:19871025T024500
+RDATE:19881030T024500
+RDATE:19891008T024500
+RDATE:19901007T024500
+RDATE:19911006T024500
+RDATE:19921004T024500
+RDATE:19931003T024500
+RDATE:19941002T024500
+RDATE:19951001T024500
+RDATE:19961006T024500
+RDATE:19971005T024500
+RDATE:19981004T024500
+RDATE:19991003T024500
+RDATE:20001001T024500
+RDATE:20011007T024500
+RDATE:20021006T024500
+RDATE:20031005T024500
+RDATE:20041003T024500
+RDATE:20051002T024500
+RDATE:20061001T024500
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1345
+TZOFFSETTO:+1245
+TZNAME:CHAST
+DTSTART:19750223T034500
+RDATE:19750223T034500
+RDATE:19760307T034500
+RDATE:19770306T034500
+RDATE:19780305T034500
+RDATE:19790304T034500
+RDATE:19800302T034500
+RDATE:19810301T034500
+RDATE:19820307T034500
+RDATE:19830306T034500
+RDATE:19840304T034500
+RDATE:19850303T034500
+RDATE:19860302T034500
+RDATE:19870301T034500
+RDATE:19880306T034500
+RDATE:19890305T034500
+RDATE:19900318T034500
+RDATE:19910317T034500
+RDATE:19920315T034500
+RDATE:19930321T034500
+RDATE:19940320T034500
+RDATE:19950319T034500
+RDATE:19960317T034500
+RDATE:19970316T034500
+RDATE:19980315T034500
+RDATE:19990321T034500
+RDATE:20000319T034500
+RDATE:20010318T034500
+RDATE:20020317T034500
+RDATE:20030316T034500
+RDATE:20040321T034500
+RDATE:20050320T034500
+RDATE:20060319T034500
+RDATE:20070318T034500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Chuuk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Chuuk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Chuuk
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Chuuk
+X-LIC-LOCATION:Pacific/Chuuk
+BEGIN:STANDARD
+TZOFFSETFROM:+100708
+TZOFFSETTO:+1000
+TZNAME:CHUT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Easter.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Easter.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,171 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Easter
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Easter
+X-LIC-LOCATION:Pacific/Easter
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:EAST
+DTSTART:20120310T220000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EASST
+DTSTART:20121013T220000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-071744
+TZOFFSETTO:-071728
+TZNAME:EMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-071728
+TZOFFSETTO:-0600
+TZNAME:EASST
+DTSTART:19320901T000000
+RDATE:19320901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:EAST
+DTSTART:19420531T220000
+RDATE:19420531T220000
+RDATE:19460831T210000
+RDATE:19690329T210000
+RDATE:19700328T210000
+RDATE:19710313T210000
+RDATE:19720311T210000
+RDATE:19730310T210000
+RDATE:19740309T210000
+RDATE:19750308T210000
+RDATE:19760313T210000
+RDATE:19770312T210000
+RDATE:19780311T210000
+RDATE:19790310T210000
+RDATE:19800308T210000
+RDATE:19810314T210000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:EASST
+DTSTART:19420731T220000
+RDATE:19420731T220000
+RDATE:19681102T210000
+RDATE:19691122T210000
+RDATE:19701010T210000
+RDATE:19711009T210000
+RDATE:19721014T210000
+RDATE:19730929T210000
+RDATE:19741012T210000
+RDATE:19751011T210000
+RDATE:19761009T210000
+RDATE:19771008T210000
+RDATE:19781014T210000
+RDATE:19791013T210000
+RDATE:19801011T210000
+RDATE:19811010T210000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:EASST
+DTSTART:19460714T220000
+RDATE:19460714T220000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:EAST
+DTSTART:19470331T210000
+RDATE:19470331T210000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:EAST
+DTSTART:19820313T210000
+RDATE:19820313T210000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EASST
+DTSTART:19821009T220000
+RDATE:19821009T220000
+RDATE:19831008T220000
+RDATE:19841013T220000
+RDATE:19851012T220000
+RDATE:19861011T220000
+RDATE:19871010T220000
+RDATE:19881001T220000
+RDATE:19891014T220000
+RDATE:19900915T220000
+RDATE:19911012T220000
+RDATE:19921010T220000
+RDATE:19931009T220000
+RDATE:19941008T220000
+RDATE:19951014T220000
+RDATE:19961012T220000
+RDATE:19971011T220000
+RDATE:19980926T220000
+RDATE:19991009T220000
+RDATE:20001014T220000
+RDATE:20011013T220000
+RDATE:20021012T220000
+RDATE:20031011T220000
+RDATE:20041009T220000
+RDATE:20051008T220000
+RDATE:20061014T220000
+RDATE:20071013T220000
+RDATE:20081011T220000
+RDATE:20091010T220000
+RDATE:20101009T220000
+RDATE:20110820T220000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:EAST
+DTSTART:19830312T220000
+RDATE:19830312T220000
+RDATE:19840310T220000
+RDATE:19850309T220000
+RDATE:19860308T220000
+RDATE:19870411T220000
+RDATE:19880312T220000
+RDATE:19890311T220000
+RDATE:19900317T220000
+RDATE:19910309T220000
+RDATE:19920314T220000
+RDATE:19930313T220000
+RDATE:19940312T220000
+RDATE:19950311T220000
+RDATE:19960309T220000
+RDATE:19970329T220000
+RDATE:19980314T220000
+RDATE:19990403T220000
+RDATE:20000311T220000
+RDATE:20010310T220000
+RDATE:20020309T220000
+RDATE:20030308T220000
+RDATE:20040313T220000
+RDATE:20050312T220000
+RDATE:20060311T220000
+RDATE:20070310T220000
+RDATE:20080329T220000
+RDATE:20090314T220000
+RDATE:20100403T220000
+RDATE:20110507T220000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Efate.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Efate.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,48 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Efate
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Efate
+X-LIC-LOCATION:Pacific/Efate
+BEGIN:STANDARD
+TZOFFSETFROM:+111316
+TZOFFSETTO:+1100
+TZNAME:VUT
+DTSTART:19120113T000000
+RDATE:19120113T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:VUST
+DTSTART:19830925T000000
+RDATE:19830925T000000
+RDATE:19841023T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900923T000000
+RDATE:19910929T000000
+RDATE:19921025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:VUT
+DTSTART:19840325T000000
+RDATE:19840325T000000
+RDATE:19850324T000000
+RDATE:19860323T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920126T000000
+RDATE:19930124T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Enderbury.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Enderbury.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Enderbury
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Enderbury
+X-LIC-LOCATION:Pacific/Enderbury
+BEGIN:STANDARD
+TZOFFSETFROM:-112420
+TZOFFSETTO:-1200
+TZNAME:PHOT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1200
+TZOFFSETTO:-1100
+TZNAME:PHOT
+DTSTART:19791001T000000
+RDATE:19791001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:+1300
+TZNAME:PHOT
+DTSTART:19950101T000000
+RDATE:19950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Fakaofo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Fakaofo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Fakaofo
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Fakaofo
+X-LIC-LOCATION:Pacific/Fakaofo
+BEGIN:STANDARD
+TZOFFSETFROM:-112456
+TZOFFSETTO:-1000
+TZNAME:TKT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Fiji.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Fiji.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,38 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Fiji
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Fiji
+X-LIC-LOCATION:Pacific/Fiji
+BEGIN:STANDARD
+TZOFFSETFROM:+115340
+TZOFFSETTO:+1200
+TZNAME:FJT
+DTSTART:19151026T000000
+RDATE:19151026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:FJST
+DTSTART:19981101T020000
+RDATE:19981101T020000
+RDATE:19991107T020000
+RDATE:20091129T020000
+RDATE:20101024T020000
+RDATE:20111023T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:FJT
+DTSTART:19990228T030000
+RDATE:19990228T030000
+RDATE:20000227T030000
+RDATE:20100328T030000
+RDATE:20110306T030000
+RDATE:20120122T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Funafuti.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Funafuti.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Funafuti
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Funafuti
+X-LIC-LOCATION:Pacific/Funafuti
+BEGIN:STANDARD
+TZOFFSETFROM:+115652
+TZOFFSETTO:+1200
+TZNAME:TVT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Galapagos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Galapagos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Galapagos
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Galapagos
+X-LIC-LOCATION:Pacific/Galapagos
+BEGIN:STANDARD
+TZOFFSETFROM:-055824
+TZOFFSETTO:-0500
+TZNAME:ECT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:GALT
+DTSTART:19860101T000000
+RDATE:19860101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Gambier.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Gambier.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Gambier
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Gambier
+X-LIC-LOCATION:Pacific/Gambier
+BEGIN:STANDARD
+TZOFFSETFROM:-085948
+TZOFFSETTO:-0900
+TZNAME:GAMT
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Guadalcanal.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Guadalcanal.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Guadalcanal
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Guadalcanal
+X-LIC-LOCATION:Pacific/Guadalcanal
+BEGIN:STANDARD
+TZOFFSETFROM:+103948
+TZOFFSETTO:+1100
+TZNAME:SBT
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Guam.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Guam.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Guam
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Guam
+X-LIC-LOCATION:Pacific/Guam
+BEGIN:STANDARD
+TZOFFSETFROM:-1421
+TZOFFSETTO:+0939
+TZNAME:LMT
+DTSTART:18441231T000000
+RDATE:18441231T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0939
+TZOFFSETTO:+1000
+TZNAME:GST
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:ChST
+DTSTART:20001223T000000
+RDATE:20001223T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Honolulu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Honolulu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,39 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Honolulu
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Honolulu
+X-LIC-LOCATION:Pacific/Honolulu
+BEGIN:STANDARD
+TZOFFSETFROM:-103126
+TZOFFSETTO:-1030
+TZNAME:HST
+DTSTART:18960113T120000
+RDATE:18960113T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+TZNAME:HDT
+DTSTART:19330430T020000
+RDATE:19330430T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0930
+TZOFFSETTO:-1030
+TZNAME:HST
+DTSTART:19330521T120000
+RDATE:19330521T120000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1030
+TZOFFSETTO:-1000
+TZNAME:HST
+DTSTART:19470608T020000
+RDATE:19470608T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Johnston.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Johnston.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Johnston
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Johnston
+X-LIC-LOCATION:Pacific/Johnston
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:HST
+DTSTART:16010101T000000
+RDATE:16010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Kiritimati.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Kiritimati.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Kiritimati
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Kiritimati
+X-LIC-LOCATION:Pacific/Kiritimati
+BEGIN:STANDARD
+TZOFFSETFROM:-102920
+TZOFFSETTO:-1040
+TZNAME:LINT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1040
+TZOFFSETTO:-1000
+TZNAME:LINT
+DTSTART:19791001T000000
+RDATE:19791001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:+1400
+TZNAME:LINT
+DTSTART:19950101T000000
+RDATE:19950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Kosrae.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Kosrae.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Kosrae
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Kosrae
+X-LIC-LOCATION:Pacific/Kosrae
+BEGIN:STANDARD
+TZOFFSETFROM:+105156
+TZOFFSETTO:+1100
+TZNAME:KOST
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:KOST
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:KOST
+DTSTART:19990101T000000
+RDATE:19990101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Kwajalein.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Kwajalein.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Kwajalein
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Kwajalein
+X-LIC-LOCATION:Pacific/Kwajalein
+BEGIN:STANDARD
+TZOFFSETFROM:+110920
+TZOFFSETTO:+1100
+TZNAME:MHT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:-1200
+TZNAME:KWAT
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1200
+TZOFFSETTO:+1200
+TZNAME:MHT
+DTSTART:19930820T000000
+RDATE:19930820T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Majuro.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Majuro.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Majuro
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Majuro
+X-LIC-LOCATION:Pacific/Majuro
+BEGIN:STANDARD
+TZOFFSETFROM:+112448
+TZOFFSETTO:+1100
+TZNAME:MHT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:MHT
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Marquesas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Marquesas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Marquesas
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Marquesas
+X-LIC-LOCATION:Pacific/Marquesas
+BEGIN:STANDARD
+TZOFFSETFROM:-0918
+TZOFFSETTO:-0930
+TZNAME:MART
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Midway.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Midway.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Midway
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Midway
+X-LIC-LOCATION:Pacific/Midway
+BEGIN:STANDARD
+TZOFFSETFROM:-114928
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:NDT
+DTSTART:19560603T000000
+RDATE:19560603T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19560902T000000
+RDATE:19560902T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:SST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Nauru.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Nauru.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Nauru
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Nauru
+X-LIC-LOCATION:Pacific/Nauru
+BEGIN:STANDARD
+TZOFFSETFROM:+110740
+TZOFFSETTO:+1130
+TZNAME:NRT
+DTSTART:19210115T000000
+RDATE:19210115T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1130
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420315T000000
+RDATE:19420315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1130
+TZNAME:NRT
+DTSTART:19440815T000000
+RDATE:19440815T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+TZNAME:NRT
+DTSTART:19790501T000000
+RDATE:19790501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Niue.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Niue.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Niue
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Niue
+X-LIC-LOCATION:Pacific/Niue
+BEGIN:STANDARD
+TZOFFSETFROM:-111940
+TZOFFSETTO:-1120
+TZNAME:NUT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1120
+TZOFFSETTO:-1130
+TZNAME:NUT
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+TZNAME:NUT
+DTSTART:19781001T000000
+RDATE:19781001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Norfolk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Norfolk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Norfolk
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Norfolk
+X-LIC-LOCATION:Pacific/Norfolk
+BEGIN:STANDARD
+TZOFFSETFROM:+111152
+TZOFFSETTO:+1112
+TZNAME:NMT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1112
+TZOFFSETTO:+1130
+TZNAME:NFT
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Noumea.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Noumea.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,34 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Noumea
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Noumea
+X-LIC-LOCATION:Pacific/Noumea
+BEGIN:STANDARD
+TZOFFSETFROM:+110548
+TZOFFSETTO:+1100
+TZNAME:NCT
+DTSTART:19120113T000000
+RDATE:19120113T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:NCST
+DTSTART:19771204T000000
+RDATE:19771204T000000
+RDATE:19781203T000000
+RDATE:19961201T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:NCT
+DTSTART:19780227T000000
+RDATE:19780227T000000
+RDATE:19790227T000000
+RDATE:19970302T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Pago_Pago.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Pago_Pago.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Pago_Pago
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Pago_Pago
+X-LIC-LOCATION:Pacific/Pago_Pago
+BEGIN:STANDARD
+TZOFFSETFROM:+123712
+TZOFFSETTO:-112248
+TZNAME:LMT
+DTSTART:18790705T000000
+RDATE:18790705T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-112248
+TZOFFSETTO:-1130
+TZNAME:SAMT
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:SST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Palau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Palau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Palau
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Palau
+X-LIC-LOCATION:Pacific/Palau
+BEGIN:STANDARD
+TZOFFSETFROM:+085756
+TZOFFSETTO:+0900
+TZNAME:PWT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Pitcairn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Pitcairn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Pitcairn
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Pitcairn
+X-LIC-LOCATION:Pacific/Pitcairn
+BEGIN:STANDARD
+TZOFFSETFROM:-084020
+TZOFFSETTO:-0830
+TZNAME:PNT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0830
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19980427T000000
+RDATE:19980427T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Pohnpei.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Pohnpei.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Pohnpei
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Pohnpei
+X-LIC-LOCATION:Pacific/Pohnpei
+BEGIN:STANDARD
+TZOFFSETFROM:+103252
+TZOFFSETTO:+1100
+TZNAME:PONT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Port_Moresby.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Port_Moresby.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Port_Moresby
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Port_Moresby
+X-LIC-LOCATION:Pacific/Port_Moresby
+BEGIN:STANDARD
+TZOFFSETFROM:+094840
+TZOFFSETTO:+094832
+TZNAME:PMMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+094832
+TZOFFSETTO:+1000
+TZNAME:PGT
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Rarotonga.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Rarotonga.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,60 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Rarotonga
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Rarotonga
+X-LIC-LOCATION:Pacific/Rarotonga
+BEGIN:STANDARD
+TZOFFSETFROM:-103904
+TZOFFSETTO:-1030
+TZNAME:CKT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+TZNAME:CKHST
+DTSTART:19781112T000000
+RDATE:19781112T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0930
+TZOFFSETTO:-1000
+TZNAME:CKT
+DTSTART:19790304T000000
+RDATE:19790304T000000
+RDATE:19800302T000000
+RDATE:19810301T000000
+RDATE:19820307T000000
+RDATE:19830306T000000
+RDATE:19840304T000000
+RDATE:19850303T000000
+RDATE:19860302T000000
+RDATE:19870301T000000
+RDATE:19880306T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0930
+TZNAME:CKHST
+DTSTART:19791028T000000
+RDATE:19791028T000000
+RDATE:19801026T000000
+RDATE:19811025T000000
+RDATE:19821031T000000
+RDATE:19831030T000000
+RDATE:19841028T000000
+RDATE:19851027T000000
+RDATE:19861026T000000
+RDATE:19871025T000000
+RDATE:19881030T000000
+RDATE:19891029T000000
+RDATE:19901028T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Saipan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Saipan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Saipan
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Saipan
+X-LIC-LOCATION:Pacific/Saipan
+BEGIN:STANDARD
+TZOFFSETFROM:-1417
+TZOFFSETTO:+0943
+TZNAME:LMT
+DTSTART:18441231T000000
+RDATE:18441231T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0943
+TZOFFSETTO:+0900
+TZNAME:MPT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:MPT
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:ChST
+DTSTART:20001223T000000
+RDATE:20001223T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Tahiti.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Tahiti.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Tahiti
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Tahiti
+X-LIC-LOCATION:Pacific/Tahiti
+BEGIN:STANDARD
+TZOFFSETFROM:-095816
+TZOFFSETTO:-1000
+TZNAME:TAHT
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Tarawa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Tarawa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Tarawa
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Tarawa
+X-LIC-LOCATION:Pacific/Tarawa
+BEGIN:STANDARD
+TZOFFSETFROM:+113204
+TZOFFSETTO:+1200
+TZNAME:GILT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Tongatapu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Tongatapu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,48 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Tongatapu
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Tongatapu
+X-LIC-LOCATION:Pacific/Tongatapu
+BEGIN:STANDARD
+TZOFFSETFROM:+121920
+TZOFFSETTO:+1220
+TZNAME:TOT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1220
+TZOFFSETTO:+1300
+TZNAME:TOT
+DTSTART:19410101T000000
+RDATE:19410101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+TZNAME:TOT
+DTSTART:19990101T000000
+RDATE:19990101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+TZNAME:TOST
+DTSTART:19991007T020000
+RDATE:19991007T020000
+RDATE:20001105T020000
+RDATE:20011104T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+TZNAME:TOT
+DTSTART:20000319T030000
+RDATE:20000319T030000
+RDATE:20010128T020000
+RDATE:20020127T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Wake.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Wake.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Wake
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Wake
+X-LIC-LOCATION:Pacific/Wake
+BEGIN:STANDARD
+TZOFFSETFROM:+110628
+TZOFFSETTO:+1200
+TZNAME:WAKT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo-global/Pacific/Wallis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo-global/Pacific/Wallis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Wallis
+TZURL:http://tzurl.org/zoneinfo-global/Pacific/Wallis
+X-LIC-LOCATION:Pacific/Wallis
+BEGIN:STANDARD
+TZOFFSETFROM:+121520
+TZOFFSETTO:+1200
+TZNAME:WFT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Abidjan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Abidjan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Abidjan
+TZURL:http://tzurl.org/zoneinfo/Africa/Abidjan
+X-LIC-LOCATION:Africa/Abidjan
+BEGIN:STANDARD
+TZOFFSETFROM:-001608
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Accra.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Accra.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,42 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Accra
+TZURL:http://tzurl.org/zoneinfo/Africa/Accra
+X-LIC-LOCATION:Africa/Accra
+BEGIN:STANDARD
+TZOFFSETFROM:-000052
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19180101T000000
+RDATE:19180101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0020
+TZNAME:GHST
+DTSTART:19360901T000000
+RDATE:19360901T000000
+RDATE:19370901T000000
+RDATE:19380901T000000
+RDATE:19390901T000000
+RDATE:19400901T000000
+RDATE:19410901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0020
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19361231T000000
+RDATE:19361231T000000
+RDATE:19371231T000000
+RDATE:19381231T000000
+RDATE:19391231T000000
+RDATE:19401231T000000
+RDATE:19411231T000000
+RDATE:19421231T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Addis_Ababa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Addis_Ababa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Addis_Ababa
+TZURL:http://tzurl.org/zoneinfo/Africa/Addis_Ababa
+X-LIC-LOCATION:Africa/Addis_Ababa
+BEGIN:STANDARD
+TZOFFSETFROM:+023448
+TZOFFSETTO:+023520
+TZNAME:ADMT
+DTSTART:18700101T000000
+RDATE:18700101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+023520
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19360505T000000
+RDATE:19360505T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Algiers.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Algiers.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,91 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Algiers
+TZURL:http://tzurl.org/zoneinfo/Africa/Algiers
+X-LIC-LOCATION:Africa/Algiers
+BEGIN:STANDARD
+TZOFFSETFROM:+001212
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18910315T000100
+RDATE:18910315T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19110311T000000
+RDATE:19110311T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160614T230000
+RDATE:19160614T230000
+RDATE:19170324T230000
+RDATE:19180309T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19390911T230000
+RDATE:19710425T230000
+RDATE:19770506T000000
+RDATE:19800425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161002T000000
+RDATE:19161002T000000
+RDATE:19171008T000000
+RDATE:19181007T000000
+RDATE:19191006T000000
+RDATE:19201024T000000
+RDATE:19210622T000000
+RDATE:19391119T010000
+RDATE:19461007T000000
+RDATE:19630414T000000
+RDATE:19710927T000000
+RDATE:19791026T000000
+RDATE:19801031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19400225T020000
+RDATE:19400225T020000
+RDATE:19560129T000000
+RDATE:19810501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440403T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19780324T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19441008T020000
+RDATE:19441008T020000
+RDATE:19450916T010000
+RDATE:19780922T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19771021T000000
+RDATE:19771021T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Asmara.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Asmara.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Asmara
+TZURL:http://tzurl.org/zoneinfo/Africa/Asmara
+X-LIC-LOCATION:Africa/Asmara
+BEGIN:STANDARD
+TZOFFSETFROM:+023532
+TZOFFSETTO:+023532
+TZNAME:AMT
+DTSTART:18700101T000000
+RDATE:18700101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+023532
+TZOFFSETTO:+023520
+TZNAME:ADMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+023520
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19360505T000000
+RDATE:19360505T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Bamako.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Bamako.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bamako
+TZURL:http://tzurl.org/zoneinfo/Africa/Bamako
+X-LIC-LOCATION:Africa/Bamako
+BEGIN:STANDARD
+TZOFFSETFROM:-0032
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19600620T000000
+RDATE:19600620T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Bangui.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Bangui.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bangui
+TZURL:http://tzurl.org/zoneinfo/Africa/Bangui
+X-LIC-LOCATION:Africa/Bangui
+BEGIN:STANDARD
+TZOFFSETFROM:+011420
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Banjul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Banjul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Banjul
+TZURL:http://tzurl.org/zoneinfo/Africa/Banjul
+X-LIC-LOCATION:Africa/Banjul
+BEGIN:STANDARD
+TZOFFSETFROM:-010636
+TZOFFSETTO:-010636
+TZNAME:BMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010636
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19350101T000000
+RDATE:19350101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Bissau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Bissau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bissau
+TZURL:http://tzurl.org/zoneinfo/Africa/Bissau
+X-LIC-LOCATION:Africa/Bissau
+BEGIN:STANDARD
+TZOFFSETFROM:-010220
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19110526T000000
+RDATE:19110526T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19750101T000000
+RDATE:19750101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Blantyre.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Blantyre.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Blantyre
+TZURL:http://tzurl.org/zoneinfo/Africa/Blantyre
+X-LIC-LOCATION:Africa/Blantyre
+BEGIN:STANDARD
+TZOFFSETFROM:+0220
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Brazzaville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Brazzaville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Brazzaville
+TZURL:http://tzurl.org/zoneinfo/Africa/Brazzaville
+X-LIC-LOCATION:Africa/Brazzaville
+BEGIN:STANDARD
+TZOFFSETFROM:+010108
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Bujumbura.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Bujumbura.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Bujumbura
+TZURL:http://tzurl.org/zoneinfo/Africa/Bujumbura
+X-LIC-LOCATION:Africa/Bujumbura
+BEGIN:STANDARD
+TZOFFSETFROM:+015728
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Cairo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Cairo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,150 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Cairo
+TZURL:http://tzurl.org/zoneinfo/Africa/Cairo
+X-LIC-LOCATION:Africa/Cairo
+BEGIN:STANDARD
+TZOFFSETFROM:+0205
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19001001T000000
+RDATE:19001001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19400715T000000
+RDATE:19400715T000000
+RDATE:19410415T000000
+RDATE:19420401T000000
+RDATE:19430401T000000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19590501T010000
+RDATE:19600501T010000
+RDATE:19610501T010000
+RDATE:19620501T010000
+RDATE:19630501T010000
+RDATE:19640501T010000
+RDATE:19650501T010000
+RDATE:19660501T010000
+RDATE:19670501T010000
+RDATE:19680501T010000
+RDATE:19690501T010000
+RDATE:19700501T010000
+RDATE:19710501T010000
+RDATE:19720501T010000
+RDATE:19730501T010000
+RDATE:19740501T010000
+RDATE:19750501T010000
+RDATE:19760501T010000
+RDATE:19770501T010000
+RDATE:19780501T010000
+RDATE:19790501T010000
+RDATE:19800501T010000
+RDATE:19810501T010000
+RDATE:19820725T010000
+RDATE:19830712T010000
+RDATE:19840501T010000
+RDATE:19850501T010000
+RDATE:19860501T010000
+RDATE:19870501T010000
+RDATE:19880501T010000
+RDATE:19890506T010000
+RDATE:19900501T010000
+RDATE:19910501T010000
+RDATE:19920501T010000
+RDATE:19930501T010000
+RDATE:19940501T010000
+RDATE:19950428T000000
+RDATE:19960426T000000
+RDATE:19970425T000000
+RDATE:19980424T000000
+RDATE:19990430T000000
+RDATE:20000428T000000
+RDATE:20010427T000000
+RDATE:20020426T000000
+RDATE:20030425T000000
+RDATE:20040430T000000
+RDATE:20050429T000000
+RDATE:20060428T000000
+RDATE:20070427T000000
+RDATE:20080425T000000
+RDATE:20090424T000000
+RDATE:20100430T000000
+RDATE:20100910T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19410916T000000
+RDATE:19421027T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19590930T030000
+RDATE:19600930T030000
+RDATE:19610930T030000
+RDATE:19620930T030000
+RDATE:19630930T030000
+RDATE:19640930T030000
+RDATE:19650930T030000
+RDATE:19661001T030000
+RDATE:19671001T030000
+RDATE:19681001T030000
+RDATE:19691001T030000
+RDATE:19701001T030000
+RDATE:19711001T030000
+RDATE:19721001T030000
+RDATE:19731001T030000
+RDATE:19741001T030000
+RDATE:19751001T030000
+RDATE:19761001T030000
+RDATE:19771001T030000
+RDATE:19781001T030000
+RDATE:19791001T030000
+RDATE:19801001T030000
+RDATE:19811001T030000
+RDATE:19821001T030000
+RDATE:19831001T030000
+RDATE:19841001T030000
+RDATE:19851001T030000
+RDATE:19861001T030000
+RDATE:19871001T030000
+RDATE:19881001T030000
+RDATE:19891001T030000
+RDATE:19901001T030000
+RDATE:19911001T030000
+RDATE:19921001T030000
+RDATE:19931001T030000
+RDATE:19941001T030000
+RDATE:19950929T000000
+RDATE:19960927T000000
+RDATE:19970926T000000
+RDATE:19980925T000000
+RDATE:19991001T000000
+RDATE:20000929T000000
+RDATE:20010928T000000
+RDATE:20020927T000000
+RDATE:20030926T000000
+RDATE:20041001T000000
+RDATE:20050930T000000
+RDATE:20060922T000000
+RDATE:20070907T000000
+RDATE:20080829T000000
+RDATE:20090821T000000
+RDATE:20100811T000000
+RDATE:20101001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Casablanca.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Casablanca.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,60 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Casablanca
+TZURL:http://tzurl.org/zoneinfo/Africa/Casablanca
+X-LIC-LOCATION:Africa/Casablanca
+BEGIN:STANDARD
+TZOFFSETFROM:-003020
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19131026T000000
+RDATE:19131026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19390912T000000
+RDATE:19390912T000000
+RDATE:19400225T000000
+RDATE:19500611T000000
+RDATE:19670603T120000
+RDATE:19740624T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780601T000000
+RDATE:20080601T000000
+RDATE:20090601T000000
+RDATE:20100502T000000
+RDATE:20110403T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19391119T000000
+RDATE:19391119T000000
+RDATE:19451118T000000
+RDATE:19501029T000000
+RDATE:19671001T000000
+RDATE:19740901T000000
+RDATE:19760801T000000
+RDATE:19770928T000000
+RDATE:19780804T000000
+RDATE:19860101T000000
+RDATE:20080901T000000
+RDATE:20090821T000000
+RDATE:20100808T000000
+RDATE:20110731T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19840316T000000
+RDATE:19840316T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Ceuta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Ceuta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,100 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Ceuta
+TZURL:http://tzurl.org/zoneinfo/Africa/Ceuta
+X-LIC-LOCATION:Africa/Ceuta
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002116
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19180506T230000
+RDATE:19180506T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19670603T120000
+RDATE:19740624T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780601T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19181007T230000
+RDATE:19181007T230000
+RDATE:19241005T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19671001T000000
+RDATE:19740901T000000
+RDATE:19760801T000000
+RDATE:19770928T000000
+RDATE:19780804T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19290101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19840316T000000
+RDATE:19840316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19860101T000000
+RDATE:19860101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19860928T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Conakry.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Conakry.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Conakry
+TZURL:http://tzurl.org/zoneinfo/Africa/Conakry
+X-LIC-LOCATION:Africa/Conakry
+BEGIN:STANDARD
+TZOFFSETFROM:-005452
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Dakar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Dakar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Dakar
+TZURL:http://tzurl.org/zoneinfo/Africa/Dakar
+X-LIC-LOCATION:Africa/Dakar
+BEGIN:STANDARD
+TZOFFSETFROM:-010944
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19410601T000000
+RDATE:19410601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Dar_es_Salaam.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Dar_es_Salaam.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Dar_es_Salaam
+TZURL:http://tzurl.org/zoneinfo/Africa/Dar_es_Salaam
+X-LIC-LOCATION:Africa/Dar_es_Salaam
+BEGIN:STANDARD
+TZOFFSETFROM:+023708
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0245
+TZNAME:BEAUT
+DTSTART:19480101T000000
+RDATE:19480101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19610101T000000
+RDATE:19610101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Djibouti.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Djibouti.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Djibouti
+TZURL:http://tzurl.org/zoneinfo/Africa/Djibouti
+X-LIC-LOCATION:Africa/Djibouti
+BEGIN:STANDARD
+TZOFFSETFROM:+025236
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Douala.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Douala.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Douala
+TZURL:http://tzurl.org/zoneinfo/Africa/Douala
+X-LIC-LOCATION:Africa/Douala
+BEGIN:STANDARD
+TZOFFSETFROM:+003848
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/El_Aaiun.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/El_Aaiun.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/El_Aaiun
+TZURL:http://tzurl.org/zoneinfo/Africa/El_Aaiun
+X-LIC-LOCATION:Africa/El_Aaiun
+BEGIN:STANDARD
+TZOFFSETFROM:-005248
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340101T000000
+RDATE:19340101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19760414T000000
+RDATE:19760414T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Freetown.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Freetown.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,82 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Freetown
+TZURL:http://tzurl.org/zoneinfo/Africa/Freetown
+X-LIC-LOCATION:Africa/Freetown
+BEGIN:STANDARD
+TZOFFSETFROM:-0053
+TZOFFSETTO:-0053
+TZNAME:FMT
+DTSTART:18820101T000000
+RDATE:18820101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0053
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19130601T000000
+RDATE:19130601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0020
+TZNAME:SLST
+DTSTART:19350601T000000
+RDATE:19350601T000000
+RDATE:19360601T000000
+RDATE:19370601T000000
+RDATE:19380601T000000
+RDATE:19390601T000000
+RDATE:19400601T000000
+RDATE:19410601T000000
+RDATE:19420601T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0020
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19351001T000000
+RDATE:19351001T000000
+RDATE:19361001T000000
+RDATE:19371001T000000
+RDATE:19381001T000000
+RDATE:19391001T000000
+RDATE:19401001T000000
+RDATE:19411001T000000
+RDATE:19421001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:SLST
+DTSTART:19570601T000000
+RDATE:19570601T000000
+RDATE:19580601T000000
+RDATE:19590601T000000
+RDATE:19600601T000000
+RDATE:19610601T000000
+RDATE:19620601T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19570901T000000
+RDATE:19570901T000000
+RDATE:19580901T000000
+RDATE:19590901T000000
+RDATE:19600901T000000
+RDATE:19610901T000000
+RDATE:19620901T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Gaborone.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Gaborone.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Gaborone
+TZURL:http://tzurl.org/zoneinfo/Africa/Gaborone
+X-LIC-LOCATION:Africa/Gaborone
+BEGIN:STANDARD
+TZOFFSETFROM:+014340
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:18850101T000000
+RDATE:18850101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CAST
+DTSTART:19430919T020000
+RDATE:19430919T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19440319T020000
+RDATE:19440319T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Harare.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Harare.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Harare
+TZURL:http://tzurl.org/zoneinfo/Africa/Harare
+X-LIC-LOCATION:Africa/Harare
+BEGIN:STANDARD
+TZOFFSETFROM:+020412
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Johannesburg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Johannesburg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,39 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Johannesburg
+TZURL:http://tzurl.org/zoneinfo/Africa/Johannesburg
+X-LIC-LOCATION:Africa/Johannesburg
+BEGIN:STANDARD
+TZOFFSETFROM:+0152
+TZOFFSETTO:+0130
+TZNAME:SAST
+DTSTART:18920208T000000
+RDATE:18920208T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:SAST
+DTSTART:19420920T020000
+RDATE:19420920T020000
+RDATE:19430919T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19430321T020000
+RDATE:19430321T020000
+RDATE:19440319T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Juba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Juba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Juba
+TZURL:http://tzurl.org/zoneinfo/Africa/Juba
+X-LIC-LOCATION:Africa/Juba
+BEGIN:STANDARD
+TZOFFSETFROM:+020624
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CAST
+DTSTART:19700501T000000
+RDATE:19700501T000000
+RDATE:19710430T000000
+RDATE:19720430T000000
+RDATE:19730429T000000
+RDATE:19740428T000000
+RDATE:19750427T000000
+RDATE:19760425T000000
+RDATE:19770424T000000
+RDATE:19780430T000000
+RDATE:19790429T000000
+RDATE:19800427T000000
+RDATE:19810426T000000
+RDATE:19820425T000000
+RDATE:19830424T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19701015T000000
+RDATE:19701015T000000
+RDATE:19711015T000000
+RDATE:19721015T000000
+RDATE:19731015T000000
+RDATE:19741015T000000
+RDATE:19751015T000000
+RDATE:19761015T000000
+RDATE:19771015T000000
+RDATE:19781015T000000
+RDATE:19791015T000000
+RDATE:19801015T000000
+RDATE:19811015T000000
+RDATE:19821015T000000
+RDATE:19831015T000000
+RDATE:19841015T000000
+RDATE:19851015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:20000115T120000
+RDATE:20000115T120000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Kampala.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Kampala.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Kampala
+TZURL:http://tzurl.org/zoneinfo/Africa/Kampala
+X-LIC-LOCATION:Africa/Kampala
+BEGIN:STANDARD
+TZOFFSETFROM:+020940
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19280701T000000
+RDATE:19280701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+TZNAME:BEAT
+DTSTART:19300101T000000
+RDATE:19300101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0245
+TZNAME:BEAUT
+DTSTART:19480101T000000
+RDATE:19480101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Khartoum.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Khartoum.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Khartoum
+TZURL:http://tzurl.org/zoneinfo/Africa/Khartoum
+X-LIC-LOCATION:Africa/Khartoum
+BEGIN:STANDARD
+TZOFFSETFROM:+021008
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CAST
+DTSTART:19700501T000000
+RDATE:19700501T000000
+RDATE:19710430T000000
+RDATE:19720430T000000
+RDATE:19730429T000000
+RDATE:19740428T000000
+RDATE:19750427T000000
+RDATE:19760425T000000
+RDATE:19770424T000000
+RDATE:19780430T000000
+RDATE:19790429T000000
+RDATE:19800427T000000
+RDATE:19810426T000000
+RDATE:19820425T000000
+RDATE:19830424T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19701015T000000
+RDATE:19701015T000000
+RDATE:19711015T000000
+RDATE:19721015T000000
+RDATE:19731015T000000
+RDATE:19741015T000000
+RDATE:19751015T000000
+RDATE:19761015T000000
+RDATE:19771015T000000
+RDATE:19781015T000000
+RDATE:19791015T000000
+RDATE:19801015T000000
+RDATE:19811015T000000
+RDATE:19821015T000000
+RDATE:19831015T000000
+RDATE:19841015T000000
+RDATE:19851015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:20000115T120000
+RDATE:20000115T120000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Kigali.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Kigali.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Kigali
+TZURL:http://tzurl.org/zoneinfo/Africa/Kigali
+X-LIC-LOCATION:Africa/Kigali
+BEGIN:STANDARD
+TZOFFSETFROM:+020016
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19350601T000000
+RDATE:19350601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Kinshasa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Kinshasa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Kinshasa
+TZURL:http://tzurl.org/zoneinfo/Africa/Kinshasa
+X-LIC-LOCATION:Africa/Kinshasa
+BEGIN:STANDARD
+TZOFFSETFROM:+010112
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:18971109T000000
+RDATE:18971109T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Lagos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Lagos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lagos
+TZURL:http://tzurl.org/zoneinfo/Africa/Lagos
+X-LIC-LOCATION:Africa/Lagos
+BEGIN:STANDARD
+TZOFFSETFROM:+001336
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19190901T000000
+RDATE:19190901T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Libreville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Libreville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Libreville
+TZURL:http://tzurl.org/zoneinfo/Africa/Libreville
+X-LIC-LOCATION:Africa/Libreville
+BEGIN:STANDARD
+TZOFFSETFROM:+003748
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Lome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Lome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lome
+TZURL:http://tzurl.org/zoneinfo/Africa/Lome
+X-LIC-LOCATION:Africa/Lome
+BEGIN:STANDARD
+TZOFFSETFROM:+000452
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18930101T000000
+RDATE:18930101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Luanda.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Luanda.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Luanda
+TZURL:http://tzurl.org/zoneinfo/Africa/Luanda
+X-LIC-LOCATION:Africa/Luanda
+BEGIN:STANDARD
+TZOFFSETFROM:+005256
+TZOFFSETTO:+005204
+TZNAME:AOT
+DTSTART:18920101T000000
+RDATE:18920101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005204
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19110526T000000
+RDATE:19110526T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Lubumbashi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Lubumbashi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lubumbashi
+TZURL:http://tzurl.org/zoneinfo/Africa/Lubumbashi
+X-LIC-LOCATION:Africa/Lubumbashi
+BEGIN:STANDARD
+TZOFFSETFROM:+014952
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:18971109T000000
+RDATE:18971109T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Lusaka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Lusaka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Lusaka
+TZURL:http://tzurl.org/zoneinfo/Africa/Lusaka
+X-LIC-LOCATION:Africa/Lusaka
+BEGIN:STANDARD
+TZOFFSETFROM:+015308
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Malabo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Malabo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Malabo
+TZURL:http://tzurl.org/zoneinfo/Africa/Malabo
+X-LIC-LOCATION:Africa/Malabo
+BEGIN:STANDARD
+TZOFFSETFROM:+003508
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19631215T000000
+RDATE:19631215T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Maputo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Maputo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Maputo
+TZURL:http://tzurl.org/zoneinfo/Africa/Maputo
+X-LIC-LOCATION:Africa/Maputo
+BEGIN:STANDARD
+TZOFFSETFROM:+021020
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Maseru.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Maseru.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Maseru
+TZURL:http://tzurl.org/zoneinfo/Africa/Maseru
+X-LIC-LOCATION:Africa/Maseru
+BEGIN:STANDARD
+TZOFFSETFROM:+0150
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:SAST
+DTSTART:19430919T020000
+RDATE:19430919T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19440319T020000
+RDATE:19440319T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Mbabane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Mbabane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Mbabane
+TZURL:http://tzurl.org/zoneinfo/Africa/Mbabane
+X-LIC-LOCATION:Africa/Mbabane
+BEGIN:STANDARD
+TZOFFSETFROM:+020424
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Mogadishu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Mogadishu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Mogadishu
+TZURL:http://tzurl.org/zoneinfo/Africa/Mogadishu
+X-LIC-LOCATION:Africa/Mogadishu
+BEGIN:STANDARD
+TZOFFSETFROM:+030128
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+TZNAME:BEAT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Monrovia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Monrovia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Monrovia
+TZURL:http://tzurl.org/zoneinfo/Africa/Monrovia
+X-LIC-LOCATION:Africa/Monrovia
+BEGIN:STANDARD
+TZOFFSETFROM:-004308
+TZOFFSETTO:-004308
+TZNAME:MMT
+DTSTART:18820101T000000
+RDATE:18820101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-004308
+TZOFFSETTO:-004430
+TZNAME:LRT
+DTSTART:19190301T000000
+RDATE:19190301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-004430
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19720501T000000
+RDATE:19720501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Nairobi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Nairobi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Nairobi
+TZURL:http://tzurl.org/zoneinfo/Africa/Nairobi
+X-LIC-LOCATION:Africa/Nairobi
+BEGIN:STANDARD
+TZOFFSETFROM:+022716
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19280701T000000
+RDATE:19280701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+TZNAME:BEAT
+DTSTART:19300101T000000
+RDATE:19300101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0245
+TZNAME:BEAUT
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Ndjamena.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Ndjamena.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Ndjamena
+TZURL:http://tzurl.org/zoneinfo/Africa/Ndjamena
+X-LIC-LOCATION:Africa/Ndjamena
+BEGIN:STANDARD
+TZOFFSETFROM:+010012
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WAST
+DTSTART:19791014T000000
+RDATE:19791014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19800308T000000
+RDATE:19800308T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Niamey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Niamey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Niamey
+TZURL:http://tzurl.org/zoneinfo/Africa/Niamey
+X-LIC-LOCATION:Africa/Niamey
+BEGIN:STANDARD
+TZOFFSETFROM:+000828
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Nouakchott.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Nouakchott.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Nouakchott
+TZURL:http://tzurl.org/zoneinfo/Africa/Nouakchott
+X-LIC-LOCATION:Africa/Nouakchott
+BEGIN:STANDARD
+TZOFFSETFROM:-010348
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19601128T000000
+RDATE:19601128T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Ouagadougou.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Ouagadougou.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Ouagadougou
+TZURL:http://tzurl.org/zoneinfo/Africa/Ouagadougou
+X-LIC-LOCATION:Africa/Ouagadougou
+BEGIN:STANDARD
+TZOFFSETFROM:-000604
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Porto-Novo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Porto-Novo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Porto-Novo
+TZURL:http://tzurl.org/zoneinfo/Africa/Porto-Novo
+X-LIC-LOCATION:Africa/Porto-Novo
+BEGIN:STANDARD
+TZOFFSETFROM:+001028
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19340226T000000
+RDATE:19340226T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Sao_Tome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Sao_Tome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Sao_Tome
+TZURL:http://tzurl.org/zoneinfo/Africa/Sao_Tome
+X-LIC-LOCATION:Africa/Sao_Tome
+BEGIN:STANDARD
+TZOFFSETFROM:+002656
+TZOFFSETTO:-003632
+TZNAME:LMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-003632
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Tripoli.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Tripoli.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Tripoli
+TZURL:http://tzurl.org/zoneinfo/Africa/Tripoli
+X-LIC-LOCATION:Africa/Tripoli
+BEGIN:STANDARD
+TZOFFSETFROM:+005244
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19511014T020000
+RDATE:19511014T020000
+RDATE:19531009T020000
+RDATE:19550930T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850406T000000
+RDATE:19860404T000000
+RDATE:19870401T000000
+RDATE:19880401T000000
+RDATE:19890401T000000
+RDATE:19970404T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19520101T000000
+RDATE:19520101T000000
+RDATE:19540101T000000
+RDATE:19560101T000000
+RDATE:19820101T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19841001T000000
+RDATE:19851001T000000
+RDATE:19861003T000000
+RDATE:19871001T000000
+RDATE:19881001T000000
+RDATE:19891001T000000
+RDATE:19960930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19590101T000000
+RDATE:19590101T000000
+RDATE:19900504T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971004T000000
+RDATE:19971004T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Tunis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Tunis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Tunis
+TZURL:http://tzurl.org/zoneinfo/Africa/Tunis
+X-LIC-LOCATION:Africa/Tunis
+BEGIN:STANDARD
+TZOFFSETFROM:+004044
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18810512T000000
+RDATE:18810512T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19110311T000000
+RDATE:19110311T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19390415T230000
+RDATE:19390415T230000
+RDATE:19400225T230000
+RDATE:19420309T000000
+RDATE:19430329T020000
+RDATE:19430425T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19770430T000000
+RDATE:19780501T000000
+RDATE:19880601T000000
+RDATE:19890326T000000
+RDATE:19900501T000000
+RDATE:20050501T000000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19391119T000000
+RDATE:19391119T000000
+RDATE:19411006T000000
+RDATE:19421102T030000
+RDATE:19430417T020000
+RDATE:19431004T020000
+RDATE:19441008T000000
+RDATE:19450916T000000
+RDATE:19770924T010000
+RDATE:19781001T010000
+RDATE:19880925T010000
+RDATE:19890924T010000
+RDATE:19900930T010000
+RDATE:20050930T020000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Africa/Windhoek.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Africa/Windhoek.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Africa/Windhoek
+TZURL:http://tzurl.org/zoneinfo/Africa/Windhoek
+X-LIC-LOCATION:Africa/Windhoek
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WAST
+DTSTART:19940904T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19950402T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+010824
+TZOFFSETTO:+0130
+TZNAME:SWAT
+DTSTART:18920208T000000
+RDATE:18920208T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19030301T000000
+RDATE:19030301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:SAST
+DTSTART:19420920T020000
+RDATE:19420920T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:SAST
+DTSTART:19430321T020000
+RDATE:19430321T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CAT
+DTSTART:19900321T000000
+RDATE:19900321T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WAT
+DTSTART:19940403T000000
+RDATE:19940403T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Adak.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Adak.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,187 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Adak
+TZURL:http://tzurl.org/zoneinfo/America/Adak
+X-LIC-LOCATION:America/Adak
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:HADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:HAST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+121321
+TZOFFSETTO:-114638
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-114638
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:NWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:NPT
+DTSTART:19450814T130000
+RDATE:19450814T130000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:BDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:AHST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:HAST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:HADT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:HAST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Anchorage.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Anchorage.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,187 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Anchorage
+TZURL:http://tzurl.org/zoneinfo/America/Anchorage
+X-LIC-LOCATION:America/Anchorage
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+140024
+TZOFFSETTO:-095936
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-095936
+TZOFFSETTO:-1000
+TZNAME:CAT
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:CAT
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:CAWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:CAPT
+DTSTART:19450814T140000
+RDATE:19450814T140000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:CAT
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:AHST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:AHDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+TZNAME:AHST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Anguilla.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Anguilla.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Anguilla
+TZURL:http://tzurl.org/zoneinfo/America/Anguilla
+X-LIC-LOCATION:America/Anguilla
+BEGIN:STANDARD
+TZOFFSETFROM:-041216
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Antigua.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Antigua.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Antigua
+TZURL:http://tzurl.org/zoneinfo/America/Antigua
+X-LIC-LOCATION:America/Antigua
+BEGIN:STANDARD
+TZOFFSETFROM:-040712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Araguaina.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Araguaina.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,85 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Araguaina
+TZURL:http://tzurl.org/zoneinfo/America/Araguaina
+X-LIC-LOCATION:America/Araguaina
+BEGIN:STANDARD
+TZOFFSETFROM:-031248
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19950914T000000
+RDATE:20030924T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Buenos_Aires.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Buenos_Aires.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,124 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Buenos_Aires
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Buenos_Aires
+X-LIC-LOCATION:America/Argentina/Buenos_Aires
+BEGIN:STANDARD
+TZOFFSETFROM:-035348
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+RDATE:20090315T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Catamarca.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Catamarca.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,143 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Catamarca
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Catamarca
+X-LIC-LOCATION:America/Argentina/Catamarca
+BEGIN:STANDARD
+TZOFFSETFROM:-042308
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Cordoba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Cordoba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,136 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Cordoba
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Cordoba
+X-LIC-LOCATION:America/Argentina/Cordoba
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+RDATE:20090315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Jujuy.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Jujuy.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Jujuy
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Jujuy
+X-LIC-LOCATION:America/Argentina/Jujuy
+BEGIN:STANDARD
+TZOFFSETFROM:-042112
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19900304T000000
+RDATE:19900304T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19901028T000000
+RDATE:19901028T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910317T000000
+RDATE:19910317T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911006T000000
+RDATE:19911006T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/La_Rioja.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/La_Rioja.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/La_Rioja
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/La_Rioja
+X-LIC-LOCATION:America/Argentina/La_Rioja
+BEGIN:STANDARD
+TZOFFSETFROM:-042724
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:19910507T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Mendoza.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Mendoza.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,149 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Mendoza
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Mendoza
+X-LIC-LOCATION:America/Argentina/Mendoza
+BEGIN:STANDARD
+TZOFFSETFROM:-043516
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040926T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19900304T000000
+RDATE:19900304T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19901015T000000
+RDATE:19901015T000000
+RDATE:19911015T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+RDATE:19920301T000000
+RDATE:20040523T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19921018T000000
+RDATE:19921018T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Rio_Gallegos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Rio_Gallegos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Rio_Gallegos
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Rio_Gallegos
+X-LIC-LOCATION:America/Argentina/Rio_Gallegos
+BEGIN:STANDARD
+TZOFFSETFROM:-043652
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Salta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Salta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Salta
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Salta
+X-LIC-LOCATION:America/Argentina/Salta
+BEGIN:STANDARD
+TZOFFSETFROM:-042140
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/San_Juan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/San_Juan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/San_Juan
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/San_Juan
+X-LIC-LOCATION:America/Argentina/San_Juan
+BEGIN:STANDARD
+TZOFFSETFROM:-043404
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:19910507T000000
+RDATE:20040725T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040531T000000
+RDATE:20040531T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/San_Luis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/San_Luis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,161 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/San_Luis
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/San_Luis
+X-LIC-LOCATION:America/Argentina/San_Luis
+BEGIN:STANDARD
+TZOFFSETFROM:-042524
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:19910601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19900314T000000
+RDATE:19900314T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19901015T000000
+RDATE:19901015T000000
+RDATE:20081012T000000
+RDATE:20091011T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910301T000000
+RDATE:19910301T000000
+RDATE:20040531T000000
+RDATE:20080309T000000
+RDATE:20090308T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+DTSTART:20040725T000000
+RDATE:20040725T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WARST
+DTSTART:20080121T000000
+RDATE:20080121T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Tucuman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Tucuman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Tucuman
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Tucuman
+X-LIC-LOCATION:America/Argentina/Tucuman
+BEGIN:STANDARD
+TZOFFSETFROM:-042052
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040613T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+RDATE:20090315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:19910303T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19911020T000000
+RDATE:19911020T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040601T000000
+RDATE:20040601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Argentina/Ushuaia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Argentina/Ushuaia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Argentina/Ushuaia
+TZURL:http://tzurl.org/zoneinfo/America/Argentina/Ushuaia
+X-LIC-LOCATION:America/Argentina/Ushuaia
+BEGIN:STANDARD
+TZOFFSETFROM:-043312
+TZOFFSETTO:-041648
+TZNAME:CMT
+DTSTART:18941031T000000
+RDATE:18941031T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19321101T000000
+RDATE:19331101T000000
+RDATE:19341101T000000
+RDATE:19351101T000000
+RDATE:19361101T000000
+RDATE:19371101T000000
+RDATE:19381101T000000
+RDATE:19391101T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+RDATE:19641015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19320301T000000
+RDATE:19330301T000000
+RDATE:19340301T000000
+RDATE:19350301T000000
+RDATE:19360301T000000
+RDATE:19370301T000000
+RDATE:19380301T000000
+RDATE:19390301T000000
+RDATE:19400301T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19640301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+RDATE:20040620T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921018T000000
+RDATE:20071230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930307T000000
+RDATE:20080316T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19991003T000000
+RDATE:19991003T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:20000303T000000
+RDATE:20000303T000000
+RDATE:20081018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:WART
+DTSTART:20040530T000000
+RDATE:20040530T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Aruba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Aruba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Aruba
+TZURL:http://tzurl.org/zoneinfo/America/Aruba
+X-LIC-LOCATION:America/Aruba
+BEGIN:STANDARD
+TZOFFSETFROM:-044024
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Asuncion.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Asuncion.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Asuncion
+TZURL:http://tzurl.org/zoneinfo/America/Asuncion
+X-LIC-LOCATION:America/Asuncion
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:20100411T000000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=2SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PYST
+DTSTART:20101003T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-035040
+TZOFFSETTO:-035040
+TZNAME:AMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035040
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:19311010T000000
+RDATE:19311010T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PYT
+DTSTART:19721001T000000
+RDATE:19721001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:19740401T000000
+RDATE:19740401T000000
+RDATE:19760301T000000
+RDATE:19770301T000000
+RDATE:19780301T000000
+RDATE:19790401T000000
+RDATE:19800401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850401T000000
+RDATE:19860401T000000
+RDATE:19870401T000000
+RDATE:19880401T000000
+RDATE:19890401T000000
+RDATE:19900401T000000
+RDATE:19910401T000000
+RDATE:19920301T000000
+RDATE:19930331T000000
+RDATE:19940227T000000
+RDATE:19950226T000000
+RDATE:19960301T000000
+RDATE:19970223T000000
+RDATE:19980301T000000
+RDATE:19990307T000000
+RDATE:20000305T000000
+RDATE:20010304T000000
+RDATE:20020407T000000
+RDATE:20030406T000000
+RDATE:20040404T000000
+RDATE:20050313T000000
+RDATE:20060312T000000
+RDATE:20070311T000000
+RDATE:20080309T000000
+RDATE:20090308T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:PYT
+DTSTART:19750301T000000
+RDATE:19750301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PYST
+DTSTART:19751001T000000
+RDATE:19751001T000000
+RDATE:19761001T000000
+RDATE:19771001T000000
+RDATE:19781001T000000
+RDATE:19791001T000000
+RDATE:19801001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19841001T000000
+RDATE:19851001T000000
+RDATE:19861001T000000
+RDATE:19871001T000000
+RDATE:19881001T000000
+RDATE:19891022T000000
+RDATE:19901001T000000
+RDATE:19911006T000000
+RDATE:19921005T000000
+RDATE:19931001T000000
+RDATE:19941001T000000
+RDATE:19951001T000000
+RDATE:19961006T000000
+RDATE:19971005T000000
+RDATE:19981004T000000
+RDATE:19991003T000000
+RDATE:20001001T000000
+RDATE:20011007T000000
+RDATE:20020901T000000
+RDATE:20030907T000000
+RDATE:20041017T000000
+RDATE:20051016T000000
+RDATE:20061015T000000
+RDATE:20071021T000000
+RDATE:20081019T000000
+RDATE:20091018T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Atikokan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Atikokan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Atikokan
+TZURL:http://tzurl.org/zoneinfo/America/Atikokan
+X-LIC-LOCATION:America/Atikokan
+BEGIN:STANDARD
+TZOFFSETFROM:-060628
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19400929T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Bahia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Bahia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Bahia
+TZURL:http://tzurl.org/zoneinfo/America/Bahia
+X-LIC-LOCATION:America/Bahia
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:20111016T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-023404
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20030924T000000
+RDATE:20030924T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Bahia_Banderas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Bahia_Banderas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,103 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Bahia_Banderas
+TZURL:http://tzurl.org/zoneinfo/America/Bahia_Banderas
+X-LIC-LOCATION:America/Bahia_Banderas
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20101031T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20110403T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0701
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T235900
+RDATE:19211231T235900
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19420424T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19490114T000000
+RDATE:19490114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20100404T020000
+RDATE:20100404T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Barbados.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Barbados.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,43 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Barbados
+TZURL:http://tzurl.org/zoneinfo/America/Barbados
+X-LIC-LOCATION:America/Barbados
+BEGIN:STANDARD
+TZOFFSETFROM:-035828
+TZOFFSETTO:-035828
+TZNAME:BMT
+DTSTART:19240101T000000
+RDATE:19240101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035828
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19320101T000000
+RDATE:19320101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19770612T020000
+RDATE:19770612T020000
+RDATE:19780416T020000
+RDATE:19790415T020000
+RDATE:19800420T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19771002T020000
+RDATE:19771002T020000
+RDATE:19781001T020000
+RDATE:19790930T020000
+RDATE:19800925T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Belem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Belem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,63 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Belem
+TZURL:http://tzurl.org/zoneinfo/America/Belem
+X-LIC-LOCATION:America/Belem
+BEGIN:STANDARD
+TZOFFSETFROM:-031356
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Belize.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Belize.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,94 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Belize
+TZURL:http://tzurl.org/zoneinfo/America/Belize
+X-LIC-LOCATION:America/Belize
+BEGIN:STANDARD
+TZOFFSETFROM:-055248
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19120401T000000
+RDATE:19120401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0530
+TZNAME:CHDT
+DTSTART:19181006T000000
+RDATE:19181006T000000
+RDATE:19191005T000000
+RDATE:19201003T000000
+RDATE:19211002T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331008T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391008T000000
+RDATE:19401006T000000
+RDATE:19411005T000000
+RDATE:19421004T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0530
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19190209T000000
+RDATE:19190209T000000
+RDATE:19200215T000000
+RDATE:19210213T000000
+RDATE:19220212T000000
+RDATE:19230211T000000
+RDATE:19240210T000000
+RDATE:19250215T000000
+RDATE:19260214T000000
+RDATE:19270213T000000
+RDATE:19280212T000000
+RDATE:19290210T000000
+RDATE:19300209T000000
+RDATE:19310215T000000
+RDATE:19320214T000000
+RDATE:19330212T000000
+RDATE:19340211T000000
+RDATE:19350210T000000
+RDATE:19360209T000000
+RDATE:19370214T000000
+RDATE:19380213T000000
+RDATE:19390212T000000
+RDATE:19400211T000000
+RDATE:19410209T000000
+RDATE:19420215T000000
+RDATE:19430214T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19731205T000000
+RDATE:19731205T000000
+RDATE:19821218T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19740209T000000
+RDATE:19740209T000000
+RDATE:19830212T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Blanc-Sablon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Blanc-Sablon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Blanc-Sablon
+TZURL:http://tzurl.org/zoneinfo/America/Blanc-Sablon
+X-LIC-LOCATION:America/Blanc-Sablon
+BEGIN:STANDARD
+TZOFFSETFROM:-034828
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Boa_Vista.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Boa_Vista.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Boa_Vista
+TZURL:http://tzurl.org/zoneinfo/America/Boa_Vista
+X-LIC-LOCATION:America/Boa_Vista
+BEGIN:STANDARD
+TZOFFSETFROM:-040240
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:20000227T000000
+RDATE:20001015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+RDATE:19990930T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Bogota.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Bogota.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Bogota
+TZURL:http://tzurl.org/zoneinfo/America/Bogota
+X-LIC-LOCATION:America/Bogota
+BEGIN:STANDARD
+TZOFFSETFROM:-045620
+TZOFFSETTO:-045620
+TZNAME:BMT
+DTSTART:18840313T000000
+RDATE:18840313T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-045620
+TZOFFSETTO:-0500
+TZNAME:COT
+DTSTART:19141123T000000
+RDATE:19141123T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:COST
+DTSTART:19920503T000000
+RDATE:19920503T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:COT
+DTSTART:19930404T000000
+RDATE:19930404T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Boise.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Boise.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,167 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Boise
+TZURL:http://tzurl.org/zoneinfo/America/Boise
+X-LIC-LOCATION:America/Boise
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-074449
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18831118T121511
+RDATE:18831118T121511
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19230513T020000
+RDATE:19230513T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19670430T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740203T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19740101T000000
+RDATE:19740101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Cambridge_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Cambridge_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,156 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cambridge_Bay
+TZURL:http://tzurl.org/zoneinfo/America/Cambridge_Bay
+X-LIC-LOCATION:America/Cambridge_Bay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+TZNAME:MDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19991031T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20001105T000000
+RDATE:20001105T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Campo_Grande.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Campo_Grande.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,145 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Campo_Grande
+TZURL:http://tzurl.org/zoneinfo/America/Campo_Grande
+X-LIC-LOCATION:America/Campo_Grande
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033828
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20040215T000000
+RDATE:20050220T000000
+RDATE:20060219T000000
+RDATE:20070225T000000
+RDATE:20080217T000000
+RDATE:20090215T000000
+RDATE:20100221T000000
+RDATE:20110220T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20150222T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Cancun.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Cancun.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,80 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cancun
+TZURL:http://tzurl.org/zoneinfo/America/Cancun
+X-LIC-LOCATION:America/Cancun
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054704
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19220101T001256
+RDATE:19220101T001256
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19811223T000000
+RDATE:19811223T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19961027T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19980802T020000
+RDATE:19980802T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19981025T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Caracas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Caracas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Caracas
+TZURL:http://tzurl.org/zoneinfo/America/Caracas
+X-LIC-LOCATION:America/Caracas
+BEGIN:STANDARD
+TZOFFSETFROM:-042744
+TZOFFSETTO:-042740
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-042740
+TZOFFSETTO:-0430
+TZNAME:VET
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:VET
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0430
+TZNAME:VET
+DTSTART:20071209T030000
+RDATE:20071209T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Cayenne.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Cayenne.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cayenne
+TZURL:http://tzurl.org/zoneinfo/America/Cayenne
+X-LIC-LOCATION:America/Cayenne
+BEGIN:STANDARD
+TZOFFSETFROM:-032920
+TZOFFSETTO:-0400
+TZNAME:GFT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:GFT
+DTSTART:19671001T000000
+RDATE:19671001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Cayman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Cayman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cayman
+TZURL:http://tzurl.org/zoneinfo/America/Cayman
+X-LIC-LOCATION:America/Cayman
+BEGIN:STANDARD
+TZOFFSETFROM:-052532
+TZOFFSETTO:-050712
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120201T000000
+RDATE:19120201T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Chicago.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Chicago.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,243 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Chicago
+TZURL:http://tzurl.org/zoneinfo/America/Chicago
+X-LIC-LOCATION:America/Chicago
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055036
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T120924
+RDATE:18831118T120924
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200613T020000
+RDATE:19210327T020000
+RDATE:19220430T020000
+RDATE:19230429T020000
+RDATE:19240427T020000
+RDATE:19250426T020000
+RDATE:19260425T020000
+RDATE:19270424T020000
+RDATE:19280429T020000
+RDATE:19290428T020000
+RDATE:19300427T020000
+RDATE:19310426T020000
+RDATE:19320424T020000
+RDATE:19330430T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+RDATE:19410427T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19211030T020000
+RDATE:19220924T020000
+RDATE:19230930T020000
+RDATE:19240928T020000
+RDATE:19250927T020000
+RDATE:19260926T020000
+RDATE:19270925T020000
+RDATE:19280930T020000
+RDATE:19290929T020000
+RDATE:19300928T020000
+RDATE:19310927T020000
+RDATE:19320925T020000
+RDATE:19330924T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19361115T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19400929T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19360301T020000
+RDATE:19360301T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Chihuahua.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Chihuahua.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,91 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Chihuahua
+TZURL:http://tzurl.org/zoneinfo/America/Chihuahua
+X-LIC-LOCATION:America/Chihuahua
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-070420
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T235540
+RDATE:19211231T235540
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19960101T000000
+RDATE:19960101T000000
+RDATE:19980101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19961027T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19980405T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Costa_Rica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Costa_Rica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,43 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Costa_Rica
+TZURL:http://tzurl.org/zoneinfo/America/Costa_Rica
+X-LIC-LOCATION:America/Costa_Rica
+BEGIN:STANDARD
+TZOFFSETFROM:-053620
+TZOFFSETTO:-053620
+TZNAME:SJMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-053620
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210115T000000
+RDATE:19210115T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19790225T000000
+RDATE:19790225T000000
+RDATE:19800224T000000
+RDATE:19910119T000000
+RDATE:19920118T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19790603T000000
+RDATE:19790603T000000
+RDATE:19800601T000000
+RDATE:19910701T000000
+RDATE:19920315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Cuiaba.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Cuiaba.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,145 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Cuiaba
+TZURL:http://tzurl.org/zoneinfo/America/Cuiaba
+X-LIC-LOCATION:America/Cuiaba
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034420
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20050220T000000
+RDATE:20060219T000000
+RDATE:20070225T000000
+RDATE:20080217T000000
+RDATE:20090215T000000
+RDATE:20100221T000000
+RDATE:20110220T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20030924T000000
+RDATE:20030924T000000
+RDATE:20041001T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Curacao.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Curacao.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Curacao
+TZURL:http://tzurl.org/zoneinfo/America/Curacao
+X-LIC-LOCATION:America/Curacao
+BEGIN:STANDARD
+TZOFFSETFROM:-043544
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Danmarkshavn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Danmarkshavn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Danmarkshavn
+TZURL:http://tzurl.org/zoneinfo/America/Danmarkshavn
+X-LIC-LOCATION:America/Danmarkshavn
+BEGIN:STANDARD
+TZOFFSETFROM:-011440
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:WGST
+DTSTART:19800406T020000
+RDATE:19800406T020000
+RDATE:19810328T220000
+RDATE:19820327T220000
+RDATE:19830326T220000
+RDATE:19840324T220000
+RDATE:19850330T220000
+RDATE:19860329T220000
+RDATE:19870328T220000
+RDATE:19880326T220000
+RDATE:19890325T220000
+RDATE:19900324T220000
+RDATE:19910330T220000
+RDATE:19920328T220000
+RDATE:19930327T220000
+RDATE:19940326T220000
+RDATE:19950325T220000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19800927T230000
+RDATE:19800927T230000
+RDATE:19810926T230000
+RDATE:19820925T230000
+RDATE:19830924T230000
+RDATE:19840929T230000
+RDATE:19850928T230000
+RDATE:19860927T230000
+RDATE:19870926T230000
+RDATE:19880924T230000
+RDATE:19890923T230000
+RDATE:19900929T230000
+RDATE:19910928T230000
+RDATE:19920926T230000
+RDATE:19930925T230000
+RDATE:19940924T230000
+RDATE:19950923T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Dawson.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Dawson.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Dawson
+TZURL:http://tzurl.org/zoneinfo/America/Dawson
+X-LIC-LOCATION:America/Dawson
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-091740
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19000820T000000
+RDATE:19000820T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190525T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191101T000000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YPT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0700
+TZNAME:YDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+DTSTART:19731028T000000
+RDATE:19731028T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Dawson_Creek.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Dawson_Creek.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,110 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Dawson_Creek
+TZURL:http://tzurl.org/zoneinfo/America/Dawson_Creek
+X-LIC-LOCATION:America/Dawson_Creek
+BEGIN:STANDARD
+TZOFFSETFROM:-080056
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19470101T000000
+RDATE:19470101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19720830T020000
+RDATE:19720830T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Denver.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Denver.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Denver
+TZURL:http://tzurl.org/zoneinfo/America/Denver
+X-LIC-LOCATION:America/Denver
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T120004
+RDATE:18831118T120004
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210327T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Detroit.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Detroit.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,146 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Detroit
+TZURL:http://tzurl.org/zoneinfo/America/Detroit
+X-LIC-LOCATION:America/Detroit
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-053211
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19050101T000000
+RDATE:19050101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19150515T020000
+RDATE:19150515T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19730101T000000
+RDATE:19750101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19480926T020000
+RDATE:19671029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19480425T020000
+RDATE:19480425T020000
+RDATE:19670614T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Dominica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Dominica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Dominica
+TZURL:http://tzurl.org/zoneinfo/America/Dominica
+X-LIC-LOCATION:America/Dominica
+BEGIN:STANDARD
+TZOFFSETFROM:-040536
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000100
+RDATE:19110701T000100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Edmonton.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Edmonton.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,152 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Edmonton
+TZURL:http://tzurl.org/zoneinfo/America/Edmonton
+X-LIC-LOCATION:America/Edmonton
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-073352
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19060901T000000
+RDATE:19060901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190413T020000
+RDATE:19200425T020000
+RDATE:19210424T020000
+RDATE:19220430T020000
+RDATE:19230429T020000
+RDATE:19470427T020000
+RDATE:19670430T020000
+RDATE:19690427T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19190527T020000
+RDATE:19201031T020000
+RDATE:19210925T020000
+RDATE:19220924T020000
+RDATE:19230930T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19671029T020000
+RDATE:19691026T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19870101T000000
+RDATE:19870101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Eirunepe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Eirunepe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,74 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Eirunepe
+TZURL:http://tzurl.org/zoneinfo/America/Eirunepe
+X-LIC-LOCATION:America/Eirunepe
+BEGIN:STANDARD
+TZOFFSETFROM:-043928
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:ACST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19931017T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19940220T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+RDATE:19930928T000000
+RDATE:19940922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20080624T000000
+RDATE:20080624T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/El_Salvador.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/El_Salvador.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,32 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/El_Salvador
+TZURL:http://tzurl.org/zoneinfo/America/El_Salvador
+X-LIC-LOCATION:America/El_Salvador
+BEGIN:STANDARD
+TZOFFSETFROM:-055648
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210101T000000
+RDATE:19210101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19870503T000000
+RDATE:19870503T000000
+RDATE:19880501T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19870927T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Fortaleza.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Fortaleza.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,76 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Fortaleza
+TZURL:http://tzurl.org/zoneinfo/America/Fortaleza
+X-LIC-LOCATION:America/Fortaleza
+BEGIN:STANDARD
+TZOFFSETFROM:-0234
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:20000227T000000
+RDATE:20001022T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Glace_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Glace_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,141 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Glace_Bay
+TZURL:http://tzurl.org/zoneinfo/America/Glace_Bay
+X-LIC-LOCATION:America/Glace_Bay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035948
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19020615T000000
+RDATE:19020615T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19530426T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19530927T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19530101T000000
+RDATE:19530101T000000
+RDATE:19540101T000000
+RDATE:19720101T000000
+RDATE:19740101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Godthab.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Godthab.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,59 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Godthab
+TZURL:http://tzurl.org/zoneinfo/America/Godthab
+X-LIC-LOCATION:America/Godthab
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:WGST
+DTSTART:19810328T220000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19961026T230000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=24,25,26,27,28,29,30;BYDAY=SA
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-032656
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:WGST
+DTSTART:19800406T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:WGT
+DTSTART:19800927T230000
+RDATE:19800927T230000
+RDATE:19810926T230000
+RDATE:19820925T230000
+RDATE:19830924T230000
+RDATE:19840929T230000
+RDATE:19850928T230000
+RDATE:19860927T230000
+RDATE:19870926T230000
+RDATE:19880924T230000
+RDATE:19890923T230000
+RDATE:19900929T230000
+RDATE:19910928T230000
+RDATE:19920926T230000
+RDATE:19930925T230000
+RDATE:19940924T230000
+RDATE:19950923T230000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Goose_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Goose_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,275 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Goose_Bay
+TZURL:http://tzurl.org/zoneinfo/America/Goose_Bay
+X-LIC-LOCATION:America/Goose_Bay
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20120311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-040140
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+TZNAME:NDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19350330T000000
+RDATE:19350330T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19360101T000000
+RDATE:19360101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:19360511T000000
+RDATE:19360511T000000
+RDATE:19370510T000000
+RDATE:19380509T000000
+RDATE:19390515T000000
+RDATE:19400513T000000
+RDATE:19410512T000000
+RDATE:19460512T020000
+RDATE:19470511T020000
+RDATE:19480509T020000
+RDATE:19490508T020000
+RDATE:19500514T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19361005T000000
+RDATE:19361005T000000
+RDATE:19371004T000000
+RDATE:19381003T000000
+RDATE:19391002T000000
+RDATE:19401007T000000
+RDATE:19411006T000000
+RDATE:19450930T020000
+RDATE:19461006T020000
+RDATE:19471005T020000
+RDATE:19481003T020000
+RDATE:19491002T020000
+RDATE:19501008T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NWT
+DTSTART:19420511T000000
+RDATE:19420511T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+TZNAME:NPT
+DTSTART:19450814T203000
+RDATE:19450814T203000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19660315T020000
+RDATE:19660315T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19660424T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T000100
+RDATE:19890402T000100
+RDATE:19900401T000100
+RDATE:19910407T000100
+RDATE:19920405T000100
+RDATE:19930404T000100
+RDATE:19940403T000100
+RDATE:19950402T000100
+RDATE:19960407T000100
+RDATE:19970406T000100
+RDATE:19980405T000100
+RDATE:19990404T000100
+RDATE:20000402T000100
+RDATE:20010401T000100
+RDATE:20020407T000100
+RDATE:20030406T000100
+RDATE:20040404T000100
+RDATE:20050403T000100
+RDATE:20060402T000100
+RDATE:20070311T000100
+RDATE:20080309T000100
+RDATE:20090308T000100
+RDATE:20100314T000100
+RDATE:20110313T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19661030T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T000100
+RDATE:19891029T000100
+RDATE:19901028T000100
+RDATE:19911027T000100
+RDATE:19921025T000100
+RDATE:19931031T000100
+RDATE:19941030T000100
+RDATE:19951029T000100
+RDATE:19961027T000100
+RDATE:19971026T000100
+RDATE:19981025T000100
+RDATE:19991031T000100
+RDATE:20001029T000100
+RDATE:20011028T000100
+RDATE:20021027T000100
+RDATE:20031026T000100
+RDATE:20041031T000100
+RDATE:20051030T000100
+RDATE:20061029T000100
+RDATE:20071104T000100
+RDATE:20081102T000100
+RDATE:20091101T000100
+RDATE:20101107T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ADDT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19881030T000100
+RDATE:19881030T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20111101T000000
+RDATE:20111101T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Grand_Turk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Grand_Turk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,105 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Grand_Turk
+TZURL:http://tzurl.org/zoneinfo/America/Grand_Turk
+X-LIC-LOCATION:America/Grand_Turk
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-044432
+TZOFFSETTO:-050712
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120201T000000
+RDATE:19120201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19790429T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19791028T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Grenada.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Grenada.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Grenada
+TZURL:http://tzurl.org/zoneinfo/America/Grenada
+X-LIC-LOCATION:America/Grenada
+BEGIN:STANDARD
+TZOFFSETFROM:-0407
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Guadeloupe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Guadeloupe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guadeloupe
+TZURL:http://tzurl.org/zoneinfo/America/Guadeloupe
+X-LIC-LOCATION:America/Guadeloupe
+BEGIN:STANDARD
+TZOFFSETFROM:-040608
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110608T000000
+RDATE:19110608T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Guatemala.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Guatemala.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,36 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guatemala
+TZURL:http://tzurl.org/zoneinfo/America/Guatemala
+X-LIC-LOCATION:America/Guatemala
+BEGIN:STANDARD
+TZOFFSETFROM:-060204
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181005T000000
+RDATE:19181005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19731125T000000
+RDATE:19731125T000000
+RDATE:19830521T000000
+RDATE:19910323T000000
+RDATE:20060430T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19740224T000000
+RDATE:19740224T000000
+RDATE:19830922T000000
+RDATE:19910907T000000
+RDATE:20061001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Guayaquil.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Guayaquil.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guayaquil
+TZURL:http://tzurl.org/zoneinfo/America/Guayaquil
+X-LIC-LOCATION:America/Guayaquil
+BEGIN:STANDARD
+TZOFFSETFROM:-051920
+TZOFFSETTO:-0514
+TZNAME:QMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0514
+TZOFFSETTO:-0500
+TZNAME:ECT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Guyana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Guyana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Guyana
+TZURL:http://tzurl.org/zoneinfo/America/Guyana
+X-LIC-LOCATION:America/Guyana
+BEGIN:STANDARD
+TZOFFSETFROM:-035240
+TZOFFSETTO:-0345
+TZNAME:GBGT
+DTSTART:19150301T000000
+RDATE:19150301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0345
+TZOFFSETTO:-0345
+TZNAME:GYT
+DTSTART:19660526T000000
+RDATE:19660526T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0345
+TZOFFSETTO:-0300
+TZNAME:GYT
+DTSTART:19750731T000000
+RDATE:19750731T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:GYT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Halifax.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Halifax.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,229 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Halifax
+TZURL:http://tzurl.org/zoneinfo/America/Halifax
+X-LIC-LOCATION:America/Halifax
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041424
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19020615T000000
+RDATE:19020615T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19160401T000000
+RDATE:19160401T000000
+RDATE:19180414T020000
+RDATE:19200509T000000
+RDATE:19210506T000000
+RDATE:19220430T000000
+RDATE:19230506T000000
+RDATE:19240504T000000
+RDATE:19250503T000000
+RDATE:19260516T000000
+RDATE:19270501T000000
+RDATE:19280513T000000
+RDATE:19290512T000000
+RDATE:19300511T000000
+RDATE:19310510T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340520T000000
+RDATE:19350602T000000
+RDATE:19360601T000000
+RDATE:19370502T000000
+RDATE:19380501T000000
+RDATE:19390528T000000
+RDATE:19400505T000000
+RDATE:19410504T000000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19181031T020000
+RDATE:19200829T000000
+RDATE:19210905T000000
+RDATE:19220905T000000
+RDATE:19230904T000000
+RDATE:19240915T000000
+RDATE:19250928T000000
+RDATE:19260913T000000
+RDATE:19270926T000000
+RDATE:19280909T000000
+RDATE:19290903T000000
+RDATE:19300915T000000
+RDATE:19310928T000000
+RDATE:19320926T000000
+RDATE:19331002T000000
+RDATE:19340916T000000
+RDATE:19350930T000000
+RDATE:19360914T000000
+RDATE:19370927T000000
+RDATE:19380926T000000
+RDATE:19390925T000000
+RDATE:19400930T000000
+RDATE:19410929T000000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Havana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Havana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,151 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Havana
+TZURL:http://tzurl.org/zoneinfo/America/Havana
+X-LIC-LOCATION:America/Havana
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CDT
+DTSTART:20120311T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CST
+DTSTART:20121028T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-052928
+TZOFFSETTO:-052936
+TZNAME:HMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-052936
+TZOFFSETTO:-0500
+TZNAME:CST
+DTSTART:19250719T120000
+RDATE:19250719T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CDT
+DTSTART:19280610T000000
+RDATE:19280610T000000
+RDATE:19400602T000000
+RDATE:19410601T000000
+RDATE:19420607T000000
+RDATE:19450603T000000
+RDATE:19460602T000000
+RDATE:19650601T000000
+RDATE:19660529T000000
+RDATE:19670408T000000
+RDATE:19680414T000000
+RDATE:19690427T000000
+RDATE:19700426T000000
+RDATE:19710425T000000
+RDATE:19720430T000000
+RDATE:19730429T000000
+RDATE:19740428T000000
+RDATE:19750427T000000
+RDATE:19760425T000000
+RDATE:19770424T000000
+RDATE:19780507T000000
+RDATE:19790318T000000
+RDATE:19800316T000000
+RDATE:19810510T000000
+RDATE:19820509T000000
+RDATE:19830508T000000
+RDATE:19840506T000000
+RDATE:19850505T000000
+RDATE:19860316T000000
+RDATE:19870315T000000
+RDATE:19880320T000000
+RDATE:19890319T000000
+RDATE:19900401T000000
+RDATE:19910407T000000
+RDATE:19920405T000000
+RDATE:19930404T000000
+RDATE:19940403T000000
+RDATE:19950402T000000
+RDATE:19960407T000000
+RDATE:19970406T000000
+RDATE:19980329T000000
+RDATE:19990328T000000
+RDATE:20000402T000000
+RDATE:20010401T000000
+RDATE:20020407T000000
+RDATE:20030406T000000
+RDATE:20040404T000000
+RDATE:20070311T000000
+RDATE:20080316T000000
+RDATE:20090308T000000
+RDATE:20100314T000000
+RDATE:20110320T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CST
+DTSTART:19281010T000000
+RDATE:19281010T000000
+RDATE:19400901T000000
+RDATE:19410907T000000
+RDATE:19420906T000000
+RDATE:19450902T000000
+RDATE:19460901T000000
+RDATE:19650930T000000
+RDATE:19661002T000000
+RDATE:19670910T000000
+RDATE:19680908T000000
+RDATE:19691026T000000
+RDATE:19701025T000000
+RDATE:19711031T000000
+RDATE:19721008T000000
+RDATE:19731008T000000
+RDATE:19741008T000000
+RDATE:19751026T000000
+RDATE:19761031T000000
+RDATE:19771030T000000
+RDATE:19781008T000000
+RDATE:19791014T000000
+RDATE:19801012T000000
+RDATE:19811011T000000
+RDATE:19821010T000000
+RDATE:19831009T000000
+RDATE:19841014T000000
+RDATE:19851013T000000
+RDATE:19861012T000000
+RDATE:19871011T000000
+RDATE:19881009T000000
+RDATE:19891008T000000
+RDATE:19901014T000000
+RDATE:19911013T010000
+RDATE:19921011T010000
+RDATE:19931010T010000
+RDATE:19941009T010000
+RDATE:19951008T010000
+RDATE:19961006T010000
+RDATE:19971012T010000
+RDATE:19981025T010000
+RDATE:19991031T010000
+RDATE:20001029T010000
+RDATE:20011028T010000
+RDATE:20021027T010000
+RDATE:20031026T010000
+RDATE:20061029T010000
+RDATE:20071028T010000
+RDATE:20081026T010000
+RDATE:20091025T010000
+RDATE:20101031T010000
+RDATE:20111113T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Hermosillo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Hermosillo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Hermosillo
+TZURL:http://tzurl.org/zoneinfo/America/Hermosillo
+X-LIC-LOCATION:America/Hermosillo
+BEGIN:STANDARD
+TZOFFSETFROM:-072352
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T233608
+RDATE:19211231T233608
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19420424T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19490114T000000
+RDATE:19490114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19990101T000000
+RDATE:19990101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Indianapolis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Indianapolis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,126 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Indianapolis
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Indianapolis
+X-LIC-LOCATION:America/Indiana/Indianapolis
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054438
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121522
+RDATE:18831118T121522
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19410622T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19570929T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19550424T020000
+RDATE:19550424T020000
+RDATE:19580427T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+RDATE:20060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Knox.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Knox.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,170 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Knox
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Knox
+X-LIC-LOCATION:America/Indiana/Knox
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054630
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121330
+RDATE:18831118T121330
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19631027T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19470101T000000
+RDATE:19470101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19620429T020000
+RDATE:19620429T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19911027T020000
+RDATE:19911027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Marengo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Marengo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,134 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Marengo
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Marengo
+X-LIC-LOCATION:America/Indiana/Marengo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054523
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121437
+RDATE:18831118T121437
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19510429T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19510930T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19610430T020000
+RDATE:19610430T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19741027T020000
+RDATE:19760101T000000
+RDATE:20060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19750223T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19751026T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Petersburg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Petersburg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,134 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Petersburg
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Petersburg
+X-LIC-LOCATION:America/Indiana/Petersburg
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20081102T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054907
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121053
+RDATE:18831118T121053
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19550501T000000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19550101T000000
+RDATE:19550101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19650425T020000
+RDATE:19650425T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19771030T020000
+RDATE:19771030T020000
+RDATE:20071104T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Tell_City.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Tell_City.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Tell_City
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Tell_City
+X-LIC-LOCATION:America/Indiana/Tell_City
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054703
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121257
+RDATE:18831118T121257
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550501T000000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19640426T020000
+RDATE:19640426T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Vevay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Vevay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,99 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Vevay
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Vevay
+X-LIC-LOCATION:America/Indiana/Vevay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054016
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121944
+RDATE:18831118T121944
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19540425T020000
+RDATE:19540425T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19730101T000000
+RDATE:20060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Vincennes.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Vincennes.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Vincennes
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Vincennes
+X-LIC-LOCATION:America/Indiana/Vincennes
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20081102T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055007
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T120953
+RDATE:18831118T120953
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550501T000000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19640426T020000
+RDATE:19640426T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+RDATE:20071104T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Indiana/Winamac.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Indiana/Winamac.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Indiana/Winamac
+TZURL:http://tzurl.org/zoneinfo/America/Indiana/Winamac
+X-LIC-LOCATION:America/Indiana/Winamac
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-054625
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121335
+RDATE:18831118T121335
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19610430T020000
+RDATE:19610430T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Inuvik.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Inuvik.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,123 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Inuvik
+TZURL:http://tzurl.org/zoneinfo/America/Inuvik
+X-LIC-LOCATION:America/Inuvik
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19530101T000000
+RDATE:19530101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0600
+TZNAME:PDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+DTSTART:19790429T020000
+RDATE:19790429T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Iqaluit.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Iqaluit.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,136 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Iqaluit
+TZURL:http://tzurl.org/zoneinfo/America/Iqaluit
+X-LIC-LOCATION:America/Iqaluit
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420801T000000
+RDATE:19420801T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0300
+TZNAME:EDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19991031T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Jamaica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Jamaica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Jamaica
+TZURL:http://tzurl.org/zoneinfo/America/Jamaica
+X-LIC-LOCATION:America/Jamaica
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-050712
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050712
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120201T000000
+RDATE:19120201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19740428T020000
+RDATE:19740428T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19741027T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19840101T000000
+RDATE:19840101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Juneau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Juneau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,180 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Juneau
+TZURL:http://tzurl.org/zoneinfo/America/Juneau
+X-LIC-LOCATION:America/Juneau
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+150219
+TZOFFSETTO:-085741
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-085741
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+RDATE:19801026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Kentucky/Louisville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Kentucky/Louisville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,206 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Kentucky/Louisville
+TZURL:http://tzurl.org/zoneinfo/America/Kentucky/Louisville
+X-LIC-LOCATION:America/Kentucky/Louisville
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054302
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T121658
+RDATE:18831118T121658
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19210501T020000
+RDATE:19410427T020000
+RDATE:19460101T000000
+RDATE:19470427T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19210901T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460602T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210101T000000
+RDATE:19210101T000000
+RDATE:19420101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19460428T020000
+RDATE:19460428T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19740106T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19610723T020000
+RDATE:19610723T020000
+RDATE:19680101T000000
+RDATE:19741027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19680428T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19681027T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Kentucky/Monticello.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Kentucky/Monticello.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Kentucky/Monticello
+TZURL:http://tzurl.org/zoneinfo/America/Kentucky/Monticello
+X-LIC-LOCATION:America/Kentucky/Monticello
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-053924
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18831118T122036
+RDATE:18831118T122036
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19680101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20011028T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Kralendijk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Kralendijk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Kralendijk
+TZURL:http://tzurl.org/zoneinfo/America/Kralendijk
+X-LIC-LOCATION:America/Kralendijk
+BEGIN:STANDARD
+TZOFFSETFROM:-043544
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/La_Paz.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/La_Paz.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/La_Paz
+TZURL:http://tzurl.org/zoneinfo/America/La_Paz
+X-LIC-LOCATION:America/La_Paz
+BEGIN:STANDARD
+TZOFFSETFROM:-043236
+TZOFFSETTO:-043236
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-043236
+TZOFFSETTO:-033236
+TZNAME:BOST
+DTSTART:19311015T000000
+RDATE:19311015T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-033236
+TZOFFSETTO:-0400
+TZNAME:BOT
+DTSTART:19320321T000000
+RDATE:19320321T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Lima.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Lima.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,49 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Lima
+TZURL:http://tzurl.org/zoneinfo/America/Lima
+X-LIC-LOCATION:America/Lima
+BEGIN:STANDARD
+TZOFFSETFROM:-050812
+TZOFFSETTO:-050836
+TZNAME:LMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050836
+TZOFFSETTO:-0500
+TZNAME:PET
+DTSTART:19080728T000000
+RDATE:19080728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:PEST
+DTSTART:19380101T000000
+RDATE:19380101T000000
+RDATE:19380925T000000
+RDATE:19390924T000000
+RDATE:19860101T000000
+RDATE:19870101T000000
+RDATE:19900101T000000
+RDATE:19940101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:PET
+DTSTART:19380401T000000
+RDATE:19380401T000000
+RDATE:19390326T000000
+RDATE:19400324T000000
+RDATE:19860401T000000
+RDATE:19870401T000000
+RDATE:19900401T000000
+RDATE:19940401T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Los_Angeles.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Los_Angeles.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,185 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Los_Angeles
+TZURL:http://tzurl.org/zoneinfo/America/Los_Angeles
+X-LIC-LOCATION:America/Los_Angeles
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-075258
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18831118T120702
+RDATE:18831118T120702
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19480314T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19490101T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Lower_Princes.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Lower_Princes.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Lower_Princes
+TZURL:http://tzurl.org/zoneinfo/America/Lower_Princes
+X-LIC-LOCATION:America/Lower_Princes
+BEGIN:STANDARD
+TZOFFSETFROM:-043544
+TZOFFSETTO:-0430
+TZNAME:ANT
+DTSTART:19120212T000000
+RDATE:19120212T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Maceio.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Maceio.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,80 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Maceio
+TZURL:http://tzurl.org/zoneinfo/America/Maceio
+X-LIC-LOCATION:America/Maceio
+BEGIN:STANDARD
+TZOFFSETFROM:-022252
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19951015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19960211T000000
+RDATE:20000227T000000
+RDATE:20001022T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19951013T000000
+RDATE:19960904T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Managua.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Managua.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,55 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Managua
+TZURL:http://tzurl.org/zoneinfo/America/Managua
+X-LIC-LOCATION:America/Managua
+BEGIN:STANDARD
+TZOFFSETFROM:-054508
+TZOFFSETTO:-054512
+TZNAME:MMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-054512
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19340623T000000
+RDATE:19340623T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19730501T000000
+RDATE:19730501T000000
+RDATE:19920101T040000
+RDATE:19930101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19750216T000000
+RDATE:19750216T000000
+RDATE:19790625T000000
+RDATE:19800623T000000
+RDATE:19920924T000000
+RDATE:19970101T000000
+RDATE:20051002T000000
+RDATE:20061001T010000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19790318T000000
+RDATE:19790318T000000
+RDATE:19800316T000000
+RDATE:20050410T000000
+RDATE:20060430T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Manaus.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Manaus.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,67 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Manaus
+TZURL:http://tzurl.org/zoneinfo/America/Manaus
+X-LIC-LOCATION:America/Manaus
+BEGIN:STANDARD
+TZOFFSETFROM:-040004
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19931017T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19940220T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+RDATE:19930928T000000
+RDATE:19940922T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Marigot.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Marigot.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Marigot
+TZURL:http://tzurl.org/zoneinfo/America/Marigot
+X-LIC-LOCATION:America/Marigot
+BEGIN:STANDARD
+TZOFFSETFROM:-040608
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110608T000000
+RDATE:19110608T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Martinique.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Martinique.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Martinique
+TZURL:http://tzurl.org/zoneinfo/America/Martinique
+X-LIC-LOCATION:America/Martinique
+BEGIN:STANDARD
+TZOFFSETFROM:-040420
+TZOFFSETTO:-040420
+TZNAME:FFMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-040420
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110501T000000
+RDATE:19110501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19800406T000000
+RDATE:19800406T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19800928T000000
+RDATE:19800928T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Matamoros.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Matamoros.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,81 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Matamoros
+TZURL:http://tzurl.org/zoneinfo/America/Matamoros
+X-LIC-LOCATION:America/Matamoros
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0640
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19211231T232000
+RDATE:19211231T232000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19880101T000000
+RDATE:19880101T000000
+RDATE:19890101T000000
+RDATE:20100101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19880403T020000
+RDATE:19880403T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19881030T020000
+RDATE:19881030T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Mazatlan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Mazatlan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,80 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Mazatlan
+TZURL:http://tzurl.org/zoneinfo/America/Mazatlan
+X-LIC-LOCATION:America/Mazatlan
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-070540
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19211231T235420
+RDATE:19211231T235420
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19420424T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19490114T000000
+RDATE:19490114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19700101T000000
+RDATE:19700101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Menominee.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Menominee.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,153 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Menominee
+TZURL:http://tzurl.org/zoneinfo/America/Menominee
+X-LIC-LOCATION:America/Menominee
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055027
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18850918T120000
+RDATE:18850918T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19460428T020000
+RDATE:19660424T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19661030T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19690427T020000
+RDATE:19690427T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19730429T020000
+RDATE:19730429T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Merida.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Merida.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Merida
+TZURL:http://tzurl.org/zoneinfo/America/Merida
+X-LIC-LOCATION:America/Merida
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055828
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19220101T000132
+RDATE:19220101T000132
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19811223T000000
+RDATE:19811223T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19821202T000000
+RDATE:19821202T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Metlakatla.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Metlakatla.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,95 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Metlakatla
+TZURL:http://tzurl.org/zoneinfo/America/Metlakatla
+X-LIC-LOCATION:America/Metlakatla
+BEGIN:STANDARD
+TZOFFSETFROM:+151342
+TZOFFSETTO:-084618
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-084618
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:MeST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Mexico_City.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Mexico_City.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,92 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Mexico_City
+TZURL:http://tzurl.org/zoneinfo/America/Mexico_City
+X-LIC-LOCATION:America/Mexico_City
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-063636
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T002324
+RDATE:19220101T002324
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19390205T000000
+RDATE:19390205T000000
+RDATE:19401209T000000
+RDATE:19500212T000000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19390625T000000
+RDATE:19390625T000000
+RDATE:19410401T000000
+RDATE:19440501T000000
+RDATE:19500730T000000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19431216T000000
+RDATE:19431216T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20020220T000000
+RDATE:20020220T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Miquelon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Miquelon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,96 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Miquelon
+TZURL:http://tzurl.org/zoneinfo/America/Miquelon
+X-LIC-LOCATION:America/Miquelon
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:PMDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034440
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110515T000000
+RDATE:19110515T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:19870101T000000
+RDATE:19870101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:PMDT
+DTSTART:19870405T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:PMST
+DTSTART:19871025T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Moncton.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Moncton.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,216 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Moncton
+TZURL:http://tzurl.org/zoneinfo/America/Moncton
+X-LIC-LOCATION:America/Moncton
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041908
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18831209T000000
+RDATE:18831209T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19020615T000000
+RDATE:19020615T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19330611T010000
+RDATE:19340610T010000
+RDATE:19350609T010000
+RDATE:19360607T010000
+RDATE:19370606T010000
+RDATE:19380605T010000
+RDATE:19390527T010000
+RDATE:19400519T010000
+RDATE:19410504T010000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T000100
+RDATE:19940403T000100
+RDATE:19950402T000100
+RDATE:19960407T000100
+RDATE:19970406T000100
+RDATE:19980405T000100
+RDATE:19990404T000100
+RDATE:20000402T000100
+RDATE:20010401T000100
+RDATE:20020407T000100
+RDATE:20030406T000100
+RDATE:20040404T000100
+RDATE:20050403T000100
+RDATE:20060402T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19330910T010000
+RDATE:19340909T010000
+RDATE:19350908T010000
+RDATE:19360906T010000
+RDATE:19370905T010000
+RDATE:19380904T010000
+RDATE:19390923T010000
+RDATE:19400921T010000
+RDATE:19410927T010000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T000100
+RDATE:19941030T000100
+RDATE:19951029T000100
+RDATE:19961027T000100
+RDATE:19971026T000100
+RDATE:19981025T000100
+RDATE:19991031T000100
+RDATE:20001029T000100
+RDATE:20011028T000100
+RDATE:20021027T000100
+RDATE:20031026T000100
+RDATE:20041031T000100
+RDATE:20051030T000100
+RDATE:20061029T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19330101T000000
+RDATE:19330101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19730101T000000
+RDATE:19930101T000000
+RDATE:20070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Monterrey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Monterrey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,64 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Monterrey
+TZURL:http://tzurl.org/zoneinfo/America/Monterrey
+X-LIC-LOCATION:America/Monterrey
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064116
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19211231T231844
+RDATE:19211231T231844
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19880101T000000
+RDATE:19880101T000000
+RDATE:19890101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19880403T020000
+RDATE:19880403T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19881030T020000
+RDATE:19881030T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Montevideo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Montevideo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,152 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Montevideo
+TZURL:http://tzurl.org/zoneinfo/America/Montevideo
+X-LIC-LOCATION:America/Montevideo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:20061001T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:UYT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034444
+TZOFFSETTO:-034444
+TZNAME:MMT
+DTSTART:18980628T000000
+RDATE:18980628T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034444
+TZOFFSETTO:-0330
+TZNAME:UYT
+DTSTART:19200501T000000
+RDATE:19200501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+TZNAME:UYHST
+DTSTART:19231002T000000
+RDATE:19231002T000000
+RDATE:19241001T000000
+RDATE:19251001T000000
+RDATE:19331029T000000
+RDATE:19341028T000000
+RDATE:19351027T000000
+RDATE:19361101T000000
+RDATE:19371031T000000
+RDATE:19381030T000000
+RDATE:19391029T000000
+RDATE:19401027T000000
+RDATE:19410801T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+TZNAME:UYT
+DTSTART:19240401T000000
+RDATE:19240401T000000
+RDATE:19250401T000000
+RDATE:19260401T000000
+RDATE:19340401T000000
+RDATE:19350331T000000
+RDATE:19360329T000000
+RDATE:19370328T000000
+RDATE:19380327T000000
+RDATE:19390326T000000
+RDATE:19400331T000000
+RDATE:19410330T000000
+RDATE:19420101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:19421214T000000
+RDATE:19421214T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:UYT
+DTSTART:19430314T000000
+RDATE:19430314T000000
+RDATE:19591115T000000
+RDATE:19600306T000000
+RDATE:19650926T000000
+RDATE:19661031T000000
+RDATE:19671031T000000
+RDATE:19720815T000000
+RDATE:19761001T000000
+RDATE:19780401T000000
+RDATE:19800501T000000
+RDATE:19880314T000000
+RDATE:19890312T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+RDATE:19920301T000000
+RDATE:19930228T000000
+RDATE:20050327T020000
+RDATE:20060312T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:19590524T000000
+RDATE:19590524T000000
+RDATE:19600117T000000
+RDATE:19650404T000000
+RDATE:19660403T000000
+RDATE:19670402T000000
+RDATE:19720424T000000
+RDATE:19771204T000000
+RDATE:19791001T000000
+RDATE:19871214T000000
+RDATE:19881211T000000
+RDATE:19891029T000000
+RDATE:19901021T000000
+RDATE:19911027T000000
+RDATE:19921018T000000
+RDATE:20040919T000000
+RDATE:20051009T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0230
+TZNAME:UYHST
+DTSTART:19680527T000000
+RDATE:19680527T000000
+RDATE:19690527T000000
+RDATE:19700527T000000
+RDATE:19740310T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0300
+TZNAME:UYT
+DTSTART:19681202T000000
+RDATE:19681202T000000
+RDATE:19691202T000000
+RDATE:19701202T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0200
+TZNAME:UYST
+DTSTART:19741222T000000
+RDATE:19741222T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Montreal.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Montreal.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,234 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Montreal
+TZURL:http://tzurl.org/zoneinfo/America/Montreal
+X-LIC-LOCATION:America/Montreal
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-045416
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19180414T020000
+RDATE:19190331T023000
+RDATE:19200502T023000
+RDATE:19210501T020000
+RDATE:19220430T020000
+RDATE:19240517T020000
+RDATE:19250503T020000
+RDATE:19260502T020000
+RDATE:19270501T000000
+RDATE:19280429T000000
+RDATE:19290428T000000
+RDATE:19300427T000000
+RDATE:19310426T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340429T000000
+RDATE:19350428T000000
+RDATE:19360426T000000
+RDATE:19370425T000000
+RDATE:19380424T000000
+RDATE:19390430T000000
+RDATE:19400428T000000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19170424T000000
+RDATE:19170424T000000
+RDATE:19181031T020000
+RDATE:19191025T023000
+RDATE:19201003T023000
+RDATE:19211002T023000
+RDATE:19221001T023000
+RDATE:19240928T023000
+RDATE:19250927T023000
+RDATE:19260926T023000
+RDATE:19270925T000000
+RDATE:19280930T000000
+RDATE:19290929T000000
+RDATE:19300928T000000
+RDATE:19310927T000000
+RDATE:19320925T000000
+RDATE:19331001T000000
+RDATE:19340930T000000
+RDATE:19350929T000000
+RDATE:19360927T000000
+RDATE:19370926T000000
+RDATE:19380925T000000
+RDATE:19390924T000000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19491030T020000
+RDATE:19501029T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Montserrat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Montserrat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Montserrat
+TZURL:http://tzurl.org/zoneinfo/America/Montserrat
+X-LIC-LOCATION:America/Montserrat
+BEGIN:STANDARD
+TZOFFSETFROM:-040852
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000100
+RDATE:19110701T000100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Nassau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Nassau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Nassau
+TZURL:http://tzurl.org/zoneinfo/America/Nassau
+X-LIC-LOCATION:America/Nassau
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-050924
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19640426T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19641025T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19760101T000000
+RDATE:19760101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/New_York.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/New_York.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,237 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/New_York
+TZURL:http://tzurl.org/zoneinfo/America/New_York
+X-LIC-LOCATION:America/New_York
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18831118T120358
+RDATE:18831118T120358
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210424T020000
+RDATE:19220430T020000
+RDATE:19230429T020000
+RDATE:19240427T020000
+RDATE:19250426T020000
+RDATE:19260425T020000
+RDATE:19270424T020000
+RDATE:19280429T020000
+RDATE:19290428T020000
+RDATE:19300427T020000
+RDATE:19310426T020000
+RDATE:19320424T020000
+RDATE:19330430T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19360426T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+RDATE:19410427T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19210925T020000
+RDATE:19220924T020000
+RDATE:19230930T020000
+RDATE:19240928T020000
+RDATE:19250927T020000
+RDATE:19260926T020000
+RDATE:19270925T020000
+RDATE:19280930T020000
+RDATE:19290929T020000
+RDATE:19300928T020000
+RDATE:19310927T020000
+RDATE:19320925T020000
+RDATE:19330924T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19360927T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19400929T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19551030T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Nipigon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Nipigon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,126 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Nipigon
+TZURL:http://tzurl.org/zoneinfo/America/Nipigon
+X-LIC-LOCATION:America/Nipigon
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-055304
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19400929T000000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Nome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Nome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,187 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Nome
+TZURL:http://tzurl.org/zoneinfo/America/Nome
+X-LIC-LOCATION:America/Nome
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+125821
+TZOFFSETTO:-110138
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-110138
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:NWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:NPT
+DTSTART:19450814T130000
+RDATE:19450814T130000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:BDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19691026T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Noronha.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Noronha.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,76 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Noronha
+TZURL:http://tzurl.org/zoneinfo/America/Noronha
+X-LIC-LOCATION:America/Noronha
+BEGIN:STANDARD
+TZOFFSETFROM:-020940
+TZOFFSETTO:-0200
+TZNAME:FNT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:FNST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:FNT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:20000227T000000
+RDATE:20001015T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:FNT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/North_Dakota/Beulah.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/North_Dakota/Beulah.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,155 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/North_Dakota/Beulah
+TZURL:http://tzurl.org/zoneinfo/America/North_Dakota/Beulah
+X-LIC-LOCATION:America/North_Dakota/Beulah
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20110313T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064707
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T121253
+RDATE:18831118T121253
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070311T020000
+RDATE:20080309T020000
+RDATE:20090308T020000
+RDATE:20100314T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071104T020000
+RDATE:20081102T020000
+RDATE:20091101T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20101107T020000
+RDATE:20101107T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/North_Dakota/Center.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/North_Dakota/Center.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/North_Dakota/Center
+TZURL:http://tzurl.org/zoneinfo/America/North_Dakota/Center
+X-LIC-LOCATION:America/North_Dakota/Center
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064512
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T121448
+RDATE:18831118T121448
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19921025T020000
+RDATE:19921025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19930404T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19931031T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/North_Dakota/New_Salem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/North_Dakota/New_Salem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/North_Dakota/New_Salem
+TZURL:http://tzurl.org/zoneinfo/America/North_Dakota/New_Salem
+X-LIC-LOCATION:America/North_Dakota/New_Salem
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-064539
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T121421
+RDATE:18831118T121421
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19450930T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20031026T020000
+RDATE:20031026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20040404T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20041031T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Ojinaga.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Ojinaga.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,114 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Ojinaga
+TZURL:http://tzurl.org/zoneinfo/America/Ojinaga
+X-LIC-LOCATION:America/Ojinaga
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-065740
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T000220
+RDATE:19220101T000220
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20010930T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19960101T000000
+RDATE:19960101T000000
+RDATE:19980101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19961027T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19980405T020000
+RDATE:19980405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010506T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20100101T000000
+RDATE:20100101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Panama.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Panama.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Panama
+TZURL:http://tzurl.org/zoneinfo/America/Panama
+X-LIC-LOCATION:America/Panama
+BEGIN:STANDARD
+TZOFFSETFROM:-051808
+TZOFFSETTO:-051936
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-051936
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19080422T000000
+RDATE:19080422T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Pangnirtung.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Pangnirtung.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,161 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Pangnirtung
+TZURL:http://tzurl.org/zoneinfo/America/Pangnirtung
+X-LIC-LOCATION:America/Pangnirtung
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19210101T000000
+RDATE:19210101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0200
+TZNAME:ADDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19950402T020000
+RDATE:19950402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19951029T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19960407T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19991031T020000
+RDATE:19991031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20000402T020000
+RDATE:20000402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Paramaribo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Paramaribo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Paramaribo
+TZURL:http://tzurl.org/zoneinfo/America/Paramaribo
+X-LIC-LOCATION:America/Paramaribo
+BEGIN:STANDARD
+TZOFFSETFROM:-034040
+TZOFFSETTO:-034052
+TZNAME:PMT
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034052
+TZOFFSETTO:-034036
+TZNAME:PMT
+DTSTART:19350101T000000
+RDATE:19350101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-034036
+TZOFFSETTO:-0330
+TZNAME:NEGT
+DTSTART:19451001T000000
+RDATE:19451001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+TZNAME:SRT
+DTSTART:19751120T000000
+RDATE:19751120T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+TZNAME:SRT
+DTSTART:19841001T000000
+RDATE:19841001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Phoenix.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Phoenix.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,52 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Phoenix
+TZURL:http://tzurl.org/zoneinfo/America/Phoenix
+X-LIC-LOCATION:America/Phoenix
+BEGIN:STANDARD
+TZOFFSETFROM:-072818
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T113142
+RDATE:18831118T113142
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19670430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19440101T000100
+RDATE:19441001T000100
+RDATE:19671029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+RDATE:19440401T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19670101T000000
+RDATE:19670101T000000
+RDATE:19680321T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Port-au-Prince.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Port-au-Prince.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,69 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Port-au-Prince
+TZURL:http://tzurl.org/zoneinfo/America/Port-au-Prince
+X-LIC-LOCATION:America/Port-au-Prince
+BEGIN:STANDARD
+TZOFFSETFROM:-044920
+TZOFFSETTO:-0449
+TZNAME:PPMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0449
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19170124T120000
+RDATE:19170124T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19830508T000000
+RDATE:19830508T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+RDATE:19860427T000000
+RDATE:19870426T000000
+RDATE:19880403T010000
+RDATE:19890402T010000
+RDATE:19900401T010000
+RDATE:19910407T010000
+RDATE:19920405T010000
+RDATE:19930404T010000
+RDATE:19940403T010000
+RDATE:19950402T010000
+RDATE:19960407T010000
+RDATE:19970406T010000
+RDATE:20050403T000000
+RDATE:20060402T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19831030T000000
+RDATE:19831030T000000
+RDATE:19841028T000000
+RDATE:19851027T000000
+RDATE:19861026T000000
+RDATE:19871025T000000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:20051030T000000
+RDATE:20061029T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Port_of_Spain.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Port_of_Spain.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Port_of_Spain
+TZURL:http://tzurl.org/zoneinfo/America/Port_of_Spain
+X-LIC-LOCATION:America/Port_of_Spain
+BEGIN:STANDARD
+TZOFFSETFROM:-040604
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Porto_Velho.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Porto_Velho.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,63 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Porto_Velho
+TZURL:http://tzurl.org/zoneinfo/America/Porto_Velho
+X-LIC-LOCATION:America/Porto_Velho
+BEGIN:STANDARD
+TZOFFSETFROM:-041536
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Puerto_Rico.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Puerto_Rico.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Puerto_Rico
+TZURL:http://tzurl.org/zoneinfo/America/Puerto_Rico
+X-LIC-LOCATION:America/Puerto_Rico
+BEGIN:STANDARD
+TZOFFSETFROM:-042425
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:18990328T120000
+RDATE:18990328T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AWT
+DTSTART:19420503T000000
+RDATE:19420503T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:APT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Rainy_River.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Rainy_River.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,126 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Rainy_River
+TZURL:http://tzurl.org/zoneinfo/America/Rainy_River
+X-LIC-LOCATION:America/Rainy_River
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-061816
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19400929T000000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Rankin_Inlet.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Rankin_Inlet.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Rankin_Inlet
+TZURL:http://tzurl.org/zoneinfo/America/Rankin_Inlet
+X-LIC-LOCATION:America/Rankin_Inlet
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0400
+TZNAME:CDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Recife.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Recife.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,76 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Recife
+TZURL:http://tzurl.org/zoneinfo/America/Recife
+X-LIC-LOCATION:America/Recife
+BEGIN:STANDARD
+TZOFFSETFROM:-021936
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:20000227T000000
+RDATE:20001015T000000
+RDATE:20020217T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19900917T000000
+RDATE:19900917T000000
+RDATE:19990930T000000
+RDATE:20010913T000000
+RDATE:20021001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Regina.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Regina.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,98 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Regina
+TZURL:http://tzurl.org/zoneinfo/America/Regina
+X-LIC-LOCATION:America/Regina
+BEGIN:STANDARD
+TZOFFSETFROM:-065836
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19050901T000000
+RDATE:19050901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19300504T000000
+RDATE:19310503T000000
+RDATE:19320501T000000
+RDATE:19330507T000000
+RDATE:19340506T000000
+RDATE:19370411T000000
+RDATE:19380410T000000
+RDATE:19390409T000000
+RDATE:19400414T000000
+RDATE:19410413T000000
+RDATE:19460414T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19590426T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331001T000000
+RDATE:19341007T000000
+RDATE:19371010T000000
+RDATE:19381002T000000
+RDATE:19391008T000000
+RDATE:19401013T000000
+RDATE:19411012T000000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19591025T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19600424T020000
+RDATE:19600424T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Resolute.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Resolute.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,123 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Resolute
+TZURL:http://tzurl.org/zoneinfo/America/Resolute
+X-LIC-LOCATION:America/Resolute
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20080309T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19470831T000000
+RDATE:19470831T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0400
+TZNAME:CDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20001029T020000
+RDATE:20001029T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+RDATE:20070311T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Rio_Branco.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Rio_Branco.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Rio_Branco
+TZURL:http://tzurl.org/zoneinfo/America/Rio_Branco
+X-LIC-LOCATION:America/Rio_Branco
+BEGIN:STANDARD
+TZOFFSETFROM:-043112
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:ACST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:ACT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:20080624T000000
+RDATE:20080624T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Santa_Isabel.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Santa_Isabel.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,107 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santa_Isabel
+TZURL:http://tzurl.org/zoneinfo/America/Santa_Isabel
+X-LIC-LOCATION:America/Santa_Isabel
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-073928
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T002032
+RDATE:19220101T002032
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420424T000000
+RDATE:19420424T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Santarem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Santarem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santarem
+TZURL:http://tzurl.org/zoneinfo/America/Santarem
+X-LIC-LOCATION:America/Santarem
+BEGIN:STANDARD
+TZOFFSETFROM:-033848
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:AMST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AMT
+DTSTART:19880912T000000
+RDATE:19880912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20080624T000000
+RDATE:20080624T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Santiago.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Santiago.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,210 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santiago
+TZURL:http://tzurl.org/zoneinfo/America/Santiago
+X-LIC-LOCATION:America/Santiago
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:20120311T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:20121014T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-044246
+TZOFFSETTO:-044246
+TZNAME:SMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0500
+TZNAME:CLT
+DTSTART:19100101T000000
+RDATE:19100101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-044246
+TZNAME:SMT
+DTSTART:19160701T000000
+RDATE:19160701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19180901T000000
+RDATE:19180901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-044246
+TZNAME:SMT
+DTSTART:19190701T000000
+RDATE:19190701T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+TZNAME:CLST
+DTSTART:19270901T000000
+RDATE:19270901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:CLT
+DTSTART:19280401T000000
+RDATE:19280401T000000
+RDATE:19290401T000000
+RDATE:19300401T000000
+RDATE:19310401T000000
+RDATE:19320401T000000
+RDATE:19420601T000000
+RDATE:19460831T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CLST
+DTSTART:19280901T000000
+RDATE:19280901T000000
+RDATE:19290901T000000
+RDATE:19300901T000000
+RDATE:19310901T000000
+RDATE:19320901T000000
+RDATE:19420801T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:CLST
+DTSTART:19460715T000000
+RDATE:19460715T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CLT
+DTSTART:19470331T230000
+RDATE:19470331T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19470522T000000
+RDATE:19470522T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:19681103T000000
+RDATE:19681103T000000
+RDATE:19691123T000000
+RDATE:19701011T000000
+RDATE:19711010T000000
+RDATE:19721015T000000
+RDATE:19730930T000000
+RDATE:19741013T000000
+RDATE:19751012T000000
+RDATE:19761010T000000
+RDATE:19771009T000000
+RDATE:19781015T000000
+RDATE:19791014T000000
+RDATE:19801012T000000
+RDATE:19811011T000000
+RDATE:19821010T000000
+RDATE:19831009T000000
+RDATE:19841014T000000
+RDATE:19851013T000000
+RDATE:19861012T000000
+RDATE:19871011T000000
+RDATE:19881002T000000
+RDATE:19891015T000000
+RDATE:19900916T000000
+RDATE:19911013T000000
+RDATE:19921011T000000
+RDATE:19931010T000000
+RDATE:19941009T000000
+RDATE:19951015T000000
+RDATE:19961013T000000
+RDATE:19971012T000000
+RDATE:19980927T000000
+RDATE:19991010T000000
+RDATE:20001015T000000
+RDATE:20011014T000000
+RDATE:20021013T000000
+RDATE:20031012T000000
+RDATE:20041010T000000
+RDATE:20051009T000000
+RDATE:20061015T000000
+RDATE:20071014T000000
+RDATE:20081012T000000
+RDATE:20091011T000000
+RDATE:20101010T000000
+RDATE:20110821T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19690330T000000
+RDATE:19690330T000000
+RDATE:19700329T000000
+RDATE:19710314T000000
+RDATE:19720312T000000
+RDATE:19730311T000000
+RDATE:19740310T000000
+RDATE:19750309T000000
+RDATE:19760314T000000
+RDATE:19770313T000000
+RDATE:19780312T000000
+RDATE:19790311T000000
+RDATE:19800309T000000
+RDATE:19810315T000000
+RDATE:19820314T000000
+RDATE:19830313T000000
+RDATE:19840311T000000
+RDATE:19850310T000000
+RDATE:19860309T000000
+RDATE:19870412T000000
+RDATE:19880313T000000
+RDATE:19890312T000000
+RDATE:19900318T000000
+RDATE:19910310T000000
+RDATE:19920315T000000
+RDATE:19930314T000000
+RDATE:19940313T000000
+RDATE:19950312T000000
+RDATE:19960310T000000
+RDATE:19970330T000000
+RDATE:19980315T000000
+RDATE:19990404T000000
+RDATE:20000312T000000
+RDATE:20010311T000000
+RDATE:20020310T000000
+RDATE:20030309T000000
+RDATE:20040314T000000
+RDATE:20050313T000000
+RDATE:20060312T000000
+RDATE:20070311T000000
+RDATE:20080330T000000
+RDATE:20090315T000000
+RDATE:20100404T000000
+RDATE:20110508T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Santo_Domingo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Santo_Domingo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Santo_Domingo
+TZURL:http://tzurl.org/zoneinfo/America/Santo_Domingo
+X-LIC-LOCATION:America/Santo_Domingo
+BEGIN:STANDARD
+TZOFFSETFROM:-043936
+TZOFFSETTO:-0440
+TZNAME:SDMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0440
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19330401T120000
+RDATE:19330401T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19661030T000000
+RDATE:19661030T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19670228T000000
+RDATE:19670228T000000
+RDATE:20001029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0430
+TZNAME:EHDT
+DTSTART:19691026T000000
+RDATE:19691026T000000
+RDATE:19701025T000000
+RDATE:19711031T000000
+RDATE:19721029T000000
+RDATE:19731028T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19700221T000000
+RDATE:19700221T000000
+RDATE:19710120T000000
+RDATE:19720121T000000
+RDATE:19730121T000000
+RDATE:19740121T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19741027T000000
+RDATE:19741027T000000
+RDATE:20001203T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Sao_Paulo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Sao_Paulo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,152 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Sao_Paulo
+TZURL:http://tzurl.org/zoneinfo/America/Sao_Paulo
+X-LIC-LOCATION:America/Sao_Paulo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20380221T000000
+RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-030628
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19491201T000000
+RDATE:19501201T000000
+RDATE:19511201T000000
+RDATE:19521201T000000
+RDATE:19631023T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19661101T000000
+RDATE:19671101T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19931017T000000
+RDATE:19941016T000000
+RDATE:19951015T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20001008T000000
+RDATE:20011014T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:19320401T000000
+RDATE:19320401T000000
+RDATE:19330401T000000
+RDATE:19500416T010000
+RDATE:19510401T000000
+RDATE:19520401T000000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19660301T000000
+RDATE:19670301T000000
+RDATE:19680301T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19940220T000000
+RDATE:19950219T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20010218T000000
+RDATE:20020217T000000
+RDATE:20030216T000000
+RDATE:20040215T000000
+RDATE:20050220T000000
+RDATE:20060219T000000
+RDATE:20070225T000000
+RDATE:20080217T000000
+RDATE:20090215T000000
+RDATE:20100221T000000
+RDATE:20110220T000000
+RDATE:20120226T000000
+RDATE:20130217T000000
+RDATE:20140216T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+TZNAME:BRST
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:BRT
+DTSTART:20150222T000000
+RDATE:20150222T000000
+RDATE:20160221T000000
+RDATE:20170219T000000
+RDATE:20180218T000000
+RDATE:20190217T000000
+RDATE:20200216T000000
+RDATE:20210221T000000
+RDATE:20220220T000000
+RDATE:20230226T000000
+RDATE:20240218T000000
+RDATE:20250216T000000
+RDATE:20260222T000000
+RDATE:20270221T000000
+RDATE:20280220T000000
+RDATE:20290218T000000
+RDATE:20300217T000000
+RDATE:20310216T000000
+RDATE:20320215T000000
+RDATE:20330220T000000
+RDATE:20340226T000000
+RDATE:20350218T000000
+RDATE:20360217T000000
+RDATE:20370222T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Scoresbysund.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Scoresbysund.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,72 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Scoresbysund
+TZURL:http://tzurl.org/zoneinfo/America/Scoresbysund
+X-LIC-LOCATION:America/Scoresbysund
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:EGST
+DTSTART:19820328T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:EGT
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-012752
+TZOFFSETTO:-0200
+TZNAME:CGT
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:CGST
+DTSTART:19800406T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:CGT
+DTSTART:19800928T030000
+RDATE:19800928T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:+0000
+TZNAME:EGST
+DTSTART:19810329T000000
+RDATE:19810329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:EGT
+DTSTART:19810927T010000
+RDATE:19810927T010000
+RDATE:19820926T010000
+RDATE:19830925T010000
+RDATE:19840930T010000
+RDATE:19850929T010000
+RDATE:19860928T010000
+RDATE:19870927T010000
+RDATE:19880925T010000
+RDATE:19890924T010000
+RDATE:19900930T010000
+RDATE:19910929T010000
+RDATE:19920927T010000
+RDATE:19930926T010000
+RDATE:19940925T010000
+RDATE:19950924T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Shiprock.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Shiprock.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,159 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Shiprock
+TZURL:http://tzurl.org/zoneinfo/America/Shiprock
+X-LIC-LOCATION:America/Shiprock
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:18831118T120004
+RDATE:18831118T120004
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180331T020000
+RDATE:19180331T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210327T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191026T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Sitka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Sitka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,174 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Sitka
+TZURL:http://tzurl.org/zoneinfo/America/Sitka
+X-LIC-LOCATION:America/Sitka
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+145847
+TZOFFSETTO:-090113
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-090113
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19831030T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/St_Barthelemy.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/St_Barthelemy.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Barthelemy
+TZURL:http://tzurl.org/zoneinfo/America/St_Barthelemy
+X-LIC-LOCATION:America/St_Barthelemy
+BEGIN:STANDARD
+TZOFFSETFROM:-040608
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110608T000000
+RDATE:19110608T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/St_Johns.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/St_Johns.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,285 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Johns
+TZURL:http://tzurl.org/zoneinfo/America/St_Johns
+X-LIC-LOCATION:America/St_Johns
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:20120311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+TZNAME:NDT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180414T020000
+RDATE:19190505T230000
+RDATE:19200502T230000
+RDATE:19210501T230000
+RDATE:19220507T230000
+RDATE:19230506T230000
+RDATE:19240504T230000
+RDATE:19250503T230000
+RDATE:19260502T230000
+RDATE:19270501T230000
+RDATE:19280506T230000
+RDATE:19290505T230000
+RDATE:19300504T230000
+RDATE:19310503T230000
+RDATE:19320501T230000
+RDATE:19330507T230000
+RDATE:19340506T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+TZNAME:NST
+DTSTART:19170917T020000
+RDATE:19170917T020000
+RDATE:19181031T020000
+RDATE:19190812T230000
+RDATE:19201031T230000
+RDATE:19211030T230000
+RDATE:19221029T230000
+RDATE:19231028T230000
+RDATE:19241026T230000
+RDATE:19251025T230000
+RDATE:19261031T230000
+RDATE:19271030T230000
+RDATE:19281028T230000
+RDATE:19291027T230000
+RDATE:19301026T230000
+RDATE:19311025T230000
+RDATE:19321030T230000
+RDATE:19331029T230000
+RDATE:19341028T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19350330T000000
+RDATE:19350330T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:19350505T230000
+RDATE:19350505T230000
+RDATE:19360511T000000
+RDATE:19370510T000000
+RDATE:19380509T000000
+RDATE:19390515T000000
+RDATE:19400513T000000
+RDATE:19410512T000000
+RDATE:19460512T020000
+RDATE:19470511T020000
+RDATE:19480509T020000
+RDATE:19490508T020000
+RDATE:19500514T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T000100
+RDATE:19890402T000100
+RDATE:19900401T000100
+RDATE:19910407T000100
+RDATE:19920405T000100
+RDATE:19930404T000100
+RDATE:19940403T000100
+RDATE:19950402T000100
+RDATE:19960407T000100
+RDATE:19970406T000100
+RDATE:19980405T000100
+RDATE:19990404T000100
+RDATE:20000402T000100
+RDATE:20010401T000100
+RDATE:20020407T000100
+RDATE:20030406T000100
+RDATE:20040404T000100
+RDATE:20050403T000100
+RDATE:20060402T000100
+RDATE:20070311T000100
+RDATE:20080309T000100
+RDATE:20090308T000100
+RDATE:20100314T000100
+RDATE:20110313T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19351027T230000
+RDATE:19351027T230000
+RDATE:19361005T000000
+RDATE:19371004T000000
+RDATE:19381003T000000
+RDATE:19391002T000000
+RDATE:19401007T000000
+RDATE:19411006T000000
+RDATE:19450930T020000
+RDATE:19461006T020000
+RDATE:19471005T020000
+RDATE:19481003T020000
+RDATE:19491002T020000
+RDATE:19501008T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T000100
+RDATE:19891029T000100
+RDATE:19901028T000100
+RDATE:19911027T000100
+RDATE:19921025T000100
+RDATE:19931031T000100
+RDATE:19941030T000100
+RDATE:19951029T000100
+RDATE:19961027T000100
+RDATE:19971026T000100
+RDATE:19981025T000100
+RDATE:19991031T000100
+RDATE:20001029T000100
+RDATE:20011028T000100
+RDATE:20021027T000100
+RDATE:20031026T000100
+RDATE:20041031T000100
+RDATE:20051030T000100
+RDATE:20061029T000100
+RDATE:20071104T000100
+RDATE:20081102T000100
+RDATE:20091101T000100
+RDATE:20101107T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+TZNAME:NWT
+DTSTART:19420511T000000
+RDATE:19420511T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+TZNAME:NPT
+DTSTART:19450814T203000
+RDATE:19450814T203000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0130
+TZNAME:NDDT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0130
+TZOFFSETTO:-0330
+TZNAME:NST
+DTSTART:19881030T000100
+RDATE:19881030T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+TZNAME:NDT
+DTSTART:20111101T000000
+RDATE:20111101T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/St_Kitts.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/St_Kitts.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Kitts
+TZURL:http://tzurl.org/zoneinfo/America/St_Kitts
+X-LIC-LOCATION:America/St_Kitts
+BEGIN:STANDARD
+TZOFFSETFROM:-041052
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120302T000000
+RDATE:19120302T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/St_Lucia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/St_Lucia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Lucia
+TZURL:http://tzurl.org/zoneinfo/America/St_Lucia
+X-LIC-LOCATION:America/St_Lucia
+BEGIN:STANDARD
+TZOFFSETFROM:-0404
+TZOFFSETTO:-0404
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0404
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/St_Thomas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/St_Thomas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Thomas
+TZURL:http://tzurl.org/zoneinfo/America/St_Thomas
+X-LIC-LOCATION:America/St_Thomas
+BEGIN:STANDARD
+TZOFFSETFROM:-041944
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/St_Vincent.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/St_Vincent.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/St_Vincent
+TZURL:http://tzurl.org/zoneinfo/America/St_Vincent
+X-LIC-LOCATION:America/St_Vincent
+BEGIN:STANDARD
+TZOFFSETFROM:-040456
+TZOFFSETTO:-040456
+TZNAME:KMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-040456
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Swift_Current.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Swift_Current.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Swift_Current
+TZURL:http://tzurl.org/zoneinfo/America/Swift_Current
+X-LIC-LOCATION:America/Swift_Current
+BEGIN:STANDARD
+TZOFFSETFROM:-071120
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19050901T000000
+RDATE:19050901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19570428T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19571027T020000
+RDATE:19591025T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19720430T020000
+RDATE:19720430T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Tegucigalpa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Tegucigalpa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,34 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Tegucigalpa
+TZURL:http://tzurl.org/zoneinfo/America/Tegucigalpa
+X-LIC-LOCATION:America/Tegucigalpa
+BEGIN:STANDARD
+TZOFFSETFROM:-054852
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19210401T000000
+RDATE:19210401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19870503T000000
+RDATE:19870503T000000
+RDATE:19880501T000000
+RDATE:20060507T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19870927T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:20060807T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Thule.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Thule.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,74 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Thule
+TZURL:http://tzurl.org/zoneinfo/America/Thule
+X-LIC-LOCATION:America/Thule
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-043508
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19160728T000000
+RDATE:19160728T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:19920329T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19910929T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Thunder_Bay.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Thunder_Bay.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,146 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Thunder_Bay
+TZURL:http://tzurl.org/zoneinfo/America/Thunder_Bay
+X-LIC-LOCATION:America/Thunder_Bay
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0557
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19100101T000000
+RDATE:19100101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19700101T000000
+RDATE:19730101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19700426T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Tijuana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Tijuana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Tijuana
+TZURL:http://tzurl.org/zoneinfo/America/Tijuana
+X-LIC-LOCATION:America/Tijuana
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20100314T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20101107T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-074804
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19220101T001156
+RDATE:19220101T001156
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+RDATE:20091025T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19270610T230000
+RDATE:19270610T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+RDATE:20070401T020000
+RDATE:20080406T020000
+RDATE:20090405T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420424T000000
+RDATE:19420424T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+RDATE:20100101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Toronto.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Toronto.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,233 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Toronto
+TZURL:http://tzurl.org/zoneinfo/America/Toronto
+X-LIC-LOCATION:America/Toronto
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-051732
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190330T233000
+RDATE:19200502T020000
+RDATE:19210515T020000
+RDATE:19220514T020000
+RDATE:19230513T020000
+RDATE:19240504T020000
+RDATE:19250503T020000
+RDATE:19260502T020000
+RDATE:19270501T020000
+RDATE:19280429T020000
+RDATE:19290428T020000
+RDATE:19300427T020000
+RDATE:19310426T020000
+RDATE:19320501T020000
+RDATE:19330430T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19360426T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+RDATE:19460428T020000
+RDATE:19470427T000000
+RDATE:19480425T000000
+RDATE:19490424T000000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19191026T000000
+RDATE:19200926T000000
+RDATE:19210915T020000
+RDATE:19220917T020000
+RDATE:19230916T020000
+RDATE:19240921T020000
+RDATE:19250920T020000
+RDATE:19260919T020000
+RDATE:19270925T020000
+RDATE:19280930T020000
+RDATE:19290929T020000
+RDATE:19300928T020000
+RDATE:19310927T020000
+RDATE:19320925T020000
+RDATE:19331001T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19360927T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19450930T020000
+RDATE:19460929T020000
+RDATE:19470928T000000
+RDATE:19480926T000000
+RDATE:19491127T000000
+RDATE:19501126T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601030T020000
+RDATE:19611029T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:EST
+DTSTART:19190101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:EPT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Tortola.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Tortola.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Tortola
+TZURL:http://tzurl.org/zoneinfo/America/Tortola
+X-LIC-LOCATION:America/Tortola
+BEGIN:STANDARD
+TZOFFSETFROM:-041828
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Vancouver.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Vancouver.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,188 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Vancouver
+TZURL:http://tzurl.org/zoneinfo/America/Vancouver
+X-LIC-LOCATION:America/Vancouver
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-081228
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460428T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500430T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19610430T020000
+RDATE:19620429T020000
+RDATE:19630428T020000
+RDATE:19640426T020000
+RDATE:19650425T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19181031T020000
+RDATE:19181031T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500924T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19590927T020000
+RDATE:19600925T020000
+RDATE:19610924T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651031T020000
+RDATE:19661030T020000
+RDATE:19671029T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:PPT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19870101T000000
+RDATE:19870101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Whitehorse.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Whitehorse.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Whitehorse
+TZURL:http://tzurl.org/zoneinfo/America/Whitehorse
+X-LIC-LOCATION:America/Whitehorse
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-090012
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19000820T000000
+RDATE:19000820T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19190525T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19191101T000000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YPT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0700
+TZNAME:YDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+DTSTART:19660701T020000
+RDATE:19660701T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19801026T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Winnipeg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Winnipeg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,184 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Winnipeg
+TZURL:http://tzurl.org/zoneinfo/America/Winnipeg
+X-LIC-LOCATION:America/Winnipeg
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-062836
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:18870716T000000
+RDATE:18870716T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+DTSTART:19160423T000000
+RDATE:19160423T000000
+RDATE:19180414T020000
+RDATE:19370516T020000
+RDATE:19460512T020000
+RDATE:19470427T020000
+RDATE:19480425T020000
+RDATE:19490424T020000
+RDATE:19500501T020000
+RDATE:19510429T020000
+RDATE:19520427T020000
+RDATE:19530426T020000
+RDATE:19540425T020000
+RDATE:19550424T020000
+RDATE:19560429T020000
+RDATE:19570428T020000
+RDATE:19580427T020000
+RDATE:19590426T020000
+RDATE:19600424T020000
+RDATE:19630428T020000
+RDATE:19660424T020000
+RDATE:19670430T020000
+RDATE:19680428T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:19160917T000000
+RDATE:19160917T000000
+RDATE:19181031T020000
+RDATE:19370926T020000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19470928T020000
+RDATE:19480926T020000
+RDATE:19490925T020000
+RDATE:19500930T020000
+RDATE:19510930T020000
+RDATE:19520928T020000
+RDATE:19530927T020000
+RDATE:19540926T020000
+RDATE:19550925T020000
+RDATE:19560930T020000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19591025T020000
+RDATE:19600925T020000
+RDATE:19630922T020000
+RDATE:19661030T030000
+RDATE:19671029T030000
+RDATE:19681027T030000
+RDATE:19691026T030000
+RDATE:19701025T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761031T030000
+RDATE:19771030T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T030000
+RDATE:19821031T030000
+RDATE:19831030T030000
+RDATE:19841028T030000
+RDATE:19851027T030000
+RDATE:19861026T030000
+RDATE:19871025T030000
+RDATE:19881030T030000
+RDATE:19891029T030000
+RDATE:19901028T030000
+RDATE:19911027T030000
+RDATE:19921025T030000
+RDATE:19931031T030000
+RDATE:19941030T030000
+RDATE:19951029T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+TZNAME:CPT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:CST
+DTSTART:20060101T000000
+RDATE:20060101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Yakutat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Yakutat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,168 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Yakutat
+TZURL:http://tzurl.org/zoneinfo/America/Yakutat
+X-LIC-LOCATION:America/Yakutat
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+144105
+TZOFFSETTO:-091855
+TZNAME:LMT
+DTSTART:18671018T000000
+RDATE:18671018T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-091855
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19000820T120000
+RDATE:19000820T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19420101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+TZNAME:YPT
+DTSTART:19450814T150000
+RDATE:19450814T150000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:YST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:YDT
+DTSTART:19690427T020000
+RDATE:19690427T020000
+RDATE:19700426T020000
+RDATE:19710425T020000
+RDATE:19720430T020000
+RDATE:19730429T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+TZNAME:AKDT
+DTSTART:19840429T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+TZNAME:AKST
+DTSTART:19841028T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/America/Yellowknife.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/America/Yellowknife.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America/Yellowknife
+TZURL:http://tzurl.org/zoneinfo/America/Yellowknife
+X-LIC-LOCATION:America/Yellowknife
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19350101T000000
+RDATE:19350101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MWT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:MPT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0500
+TZNAME:MDDT
+DTSTART:19650425T000000
+RDATE:19650425T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19651031T020000
+RDATE:19651031T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:MST
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:MDT
+DTSTART:19800427T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Casey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Casey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Casey
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Casey
+X-LIC-LOCATION:Antarctica/Casey
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:19690101T000000
+RDATE:19690101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+1100
+TZNAME:CAST
+DTSTART:20091018T020000
+RDATE:20091018T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:20100305T020000
+RDATE:20100305T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Davis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Davis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,38 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Davis
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Davis
+X-LIC-LOCATION:Antarctica/Davis
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0700
+TZNAME:DAVT
+DTSTART:19570113T000000
+RDATE:19570113T000000
+RDATE:19690201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0000
+TZNAME:zzz
+DTSTART:19641101T000000
+RDATE:19641101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0500
+TZNAME:DAVT
+DTSTART:20091018T020000
+RDATE:20091018T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0700
+TZNAME:DAVT
+DTSTART:20100311T010000
+RDATE:20100311T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/DumontDUrville.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/DumontDUrville.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/DumontDUrville
+TZURL:http://tzurl.org/zoneinfo/Antarctica/DumontDUrville
+X-LIC-LOCATION:Antarctica/DumontDUrville
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1000
+TZNAME:PMT
+DTSTART:19470101T000000
+RDATE:19470101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0000
+TZNAME:zzz
+DTSTART:19520114T000000
+RDATE:19520114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1000
+TZNAME:DDUT
+DTSTART:19561101T000000
+RDATE:19561101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Macquarie.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Macquarie.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,142 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Macquarie
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Macquarie
+X-LIC-LOCATION:Antarctica/Macquarie
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19161001T020000
+RDATE:19161001T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20000827T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+RDATE:20071007T020000
+RDATE:20081005T020000
+RDATE:20091004T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170201T000000
+RDATE:19170201T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19680331T030000
+RDATE:19690309T030000
+RDATE:19700308T030000
+RDATE:19710314T030000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820328T030000
+RDATE:19830327T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910331T030000
+RDATE:19920329T030000
+RDATE:19930328T030000
+RDATE:19940327T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+RDATE:20080406T030000
+RDATE:20090405T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19670101T000000
+RDATE:19670101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:MIST
+DTSTART:20100404T030000
+RDATE:20100404T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Mawson.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Mawson.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Mawson
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Mawson
+X-LIC-LOCATION:Antarctica/Mawson
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0600
+TZNAME:MAWT
+DTSTART:19540213T000000
+RDATE:19540213T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:MAWT
+DTSTART:20091018T020000
+RDATE:20091018T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/McMurdo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/McMurdo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/McMurdo
+TZURL:http://tzurl.org/zoneinfo/Antarctica/McMurdo
+X-LIC-LOCATION:Antarctica/McMurdo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19560101T000000
+RDATE:19560101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891008T020000
+RDATE:19901007T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20001001T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19750223T030000
+RDATE:19750223T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870301T030000
+RDATE:19880306T030000
+RDATE:19890305T030000
+RDATE:19900318T030000
+RDATE:19910317T030000
+RDATE:19920315T030000
+RDATE:19930321T030000
+RDATE:19940320T030000
+RDATE:19950319T030000
+RDATE:19960317T030000
+RDATE:19970316T030000
+RDATE:19980315T030000
+RDATE:19990321T030000
+RDATE:20000319T030000
+RDATE:20010318T030000
+RDATE:20020317T030000
+RDATE:20030316T030000
+RDATE:20040321T030000
+RDATE:20050320T030000
+RDATE:20060319T030000
+RDATE:20070318T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Palmer.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Palmer.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,119 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Palmer
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Palmer
+X-LIC-LOCATION:Antarctica/Palmer
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:19991010T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:20000312T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYMONTHDAY=9,10,11,12,13,14,15;BYDAY=SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19650101T000000
+RDATE:19650101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:ART
+DTSTART:19650301T000000
+RDATE:19650301T000000
+RDATE:19660301T000000
+RDATE:19670402T000000
+RDATE:19680407T000000
+RDATE:19690406T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ARST
+DTSTART:19651015T000000
+RDATE:19651015T000000
+RDATE:19661015T000000
+RDATE:19671001T000000
+RDATE:19681006T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19691005T000000
+RDATE:19691005T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:ARST
+DTSTART:19740123T000000
+RDATE:19740123T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:ART
+DTSTART:19740501T000000
+RDATE:19740501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:CLT
+DTSTART:19820501T000000
+RDATE:19820501T000000
+RDATE:19830313T000000
+RDATE:19840311T000000
+RDATE:19850310T000000
+RDATE:19860309T000000
+RDATE:19870412T000000
+RDATE:19880313T000000
+RDATE:19890312T000000
+RDATE:19900318T000000
+RDATE:19910310T000000
+RDATE:19920315T000000
+RDATE:19930314T000000
+RDATE:19940313T000000
+RDATE:19950312T000000
+RDATE:19960310T000000
+RDATE:19970330T000000
+RDATE:19980315T000000
+RDATE:19990404T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:CLST
+DTSTART:19821010T000000
+RDATE:19821010T000000
+RDATE:19831009T000000
+RDATE:19841014T000000
+RDATE:19851013T000000
+RDATE:19861012T000000
+RDATE:19871011T000000
+RDATE:19881002T000000
+RDATE:19891015T000000
+RDATE:19900916T000000
+RDATE:19911013T000000
+RDATE:19921011T000000
+RDATE:19931010T000000
+RDATE:19941009T000000
+RDATE:19951015T000000
+RDATE:19961013T000000
+RDATE:19971012T000000
+RDATE:19980927T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Rothera.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Rothera.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Rothera
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Rothera
+X-LIC-LOCATION:Antarctica/Rothera
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0300
+TZNAME:ROTT
+DTSTART:19761201T000000
+RDATE:19761201T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/South_Pole.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/South_Pole.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/South_Pole
+TZURL:http://tzurl.org/zoneinfo/Antarctica/South_Pole
+X-LIC-LOCATION:Antarctica/South_Pole
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19560101T000000
+RDATE:19560101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891008T020000
+RDATE:19901007T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20001001T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19750223T030000
+RDATE:19750223T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870301T030000
+RDATE:19880306T030000
+RDATE:19890305T030000
+RDATE:19900318T030000
+RDATE:19910317T030000
+RDATE:19920315T030000
+RDATE:19930321T030000
+RDATE:19940320T030000
+RDATE:19950319T030000
+RDATE:19960317T030000
+RDATE:19970316T030000
+RDATE:19980315T030000
+RDATE:19990321T030000
+RDATE:20000319T030000
+RDATE:20010318T030000
+RDATE:20020317T030000
+RDATE:20030316T030000
+RDATE:20040321T030000
+RDATE:20050320T030000
+RDATE:20060319T030000
+RDATE:20070318T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Syowa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Syowa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Syowa
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Syowa
+X-LIC-LOCATION:Antarctica/Syowa
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0300
+TZNAME:SYOT
+DTSTART:19570129T000000
+RDATE:19570129T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Antarctica/Vostok.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Antarctica/Vostok.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Antarctica/Vostok
+TZURL:http://tzurl.org/zoneinfo/Antarctica/Vostok
+X-LIC-LOCATION:Antarctica/Vostok
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0600
+TZNAME:VOST
+DTSTART:19571216T000000
+RDATE:19571216T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Arctic/Longyearbyen.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Arctic/Longyearbyen.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Arctic/Longyearbyen
+TZURL:http://tzurl.org/zoneinfo/Arctic/Longyearbyen
+X-LIC-LOCATION:Arctic/Longyearbyen
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0043
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160522T010000
+RDATE:19160522T010000
+RDATE:19400810T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19590315T020000
+RDATE:19600320T020000
+RDATE:19610319T020000
+RDATE:19620318T020000
+RDATE:19630317T020000
+RDATE:19640315T020000
+RDATE:19650425T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19160930T000000
+RDATE:19160930T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451001T030000
+RDATE:19590920T030000
+RDATE:19600918T030000
+RDATE:19610917T030000
+RDATE:19620916T030000
+RDATE:19630915T030000
+RDATE:19640920T030000
+RDATE:19650919T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Aden.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Aden.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Aden
+TZURL:http://tzurl.org/zoneinfo/Asia/Aden
+X-LIC-LOCATION:Asia/Aden
+BEGIN:STANDARD
+TZOFFSETFROM:+030048
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Almaty.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Almaty.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Almaty
+TZURL:http://tzurl.org/zoneinfo/Asia/Almaty
+X-LIC-LOCATION:Asia/Almaty
+BEGIN:STANDARD
+TZOFFSETFROM:+050748
+TZOFFSETTO:+0500
+TZNAME:ALMT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:ALMT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:ALMST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:ALMT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:ALMT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19920101T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Amman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Amman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,92 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Amman
+TZURL:http://tzurl.org/zoneinfo/Asia/Amman
+X-LIC-LOCATION:Asia/Amman
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20020328T235959
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1TH
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20061027T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+022344
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19730606T000000
+RDATE:19730606T000000
+RDATE:19740501T000000
+RDATE:19750501T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780430T000000
+RDATE:19850401T000000
+RDATE:19860404T000000
+RDATE:19870403T000000
+RDATE:19880401T000000
+RDATE:19890508T000000
+RDATE:19900427T000000
+RDATE:19910417T000000
+RDATE:19920410T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950407T000000
+RDATE:19960405T000000
+RDATE:19970404T000000
+RDATE:19980403T000000
+RDATE:19990701T000000
+RDATE:20000330T000000
+RDATE:20010329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19731001T000000
+RDATE:19731001T000000
+RDATE:19741001T000000
+RDATE:19751001T000000
+RDATE:19761101T000000
+RDATE:19771001T000000
+RDATE:19780930T000000
+RDATE:19851001T000000
+RDATE:19861003T000000
+RDATE:19871002T000000
+RDATE:19881007T000000
+RDATE:19891006T000000
+RDATE:19901005T000000
+RDATE:19910927T000000
+RDATE:19921002T000000
+RDATE:19931001T000000
+RDATE:19940916T000000
+RDATE:19950915T010000
+RDATE:19960920T010000
+RDATE:19970919T010000
+RDATE:19980918T010000
+RDATE:19990924T010000
+RDATE:20000929T010000
+RDATE:20010928T010000
+RDATE:20020927T010000
+RDATE:20031024T010000
+RDATE:20041015T010000
+RDATE:20050930T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Anadyr.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Anadyr.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Anadyr
+TZURL:http://tzurl.org/zoneinfo/Asia/Anadyr
+X-LIC-LOCATION:Asia/Anadyr
+BEGIN:STANDARD
+TZOFFSETFROM:+114956
+TZOFFSETTO:+1200
+TZNAME:ANAT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:ANAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+TZNAME:ANAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+TZNAME:ANAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+TZNAME:ANAST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:ANAT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:ANAST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+TZNAME:ANAST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:ANAT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:ANAT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Aqtau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Aqtau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Aqtau
+TZURL:http://tzurl.org/zoneinfo/Asia/Aqtau
+X-LIC-LOCATION:Asia/Aqtau
+BEGIN:STANDARD
+TZOFFSETFROM:+032104
+TZOFFSETTO:+0400
+TZNAME:FORT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:FORT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:SHET
+DTSTART:19630101T000000
+RDATE:19630101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SHET
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:SHEST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:SHET
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SHEST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:AQTST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AQTST
+DTSTART:19950326T020000
+RDATE:19950326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AQTT
+DTSTART:19950924T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AQTST
+DTSTART:19960331T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:20050315T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Aqtobe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Aqtobe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,120 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Aqtobe
+TZURL:http://tzurl.org/zoneinfo/Asia/Aqtobe
+X-LIC-LOCATION:Asia/Aqtobe
+BEGIN:STANDARD
+TZOFFSETFROM:+034840
+TZOFFSETTO:+0400
+TZNAME:AKTT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AKTT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:AKTST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:AKTT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:AKTST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:AKTT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AKTT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+RDATE:20050315T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:AQTST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:AQTT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Ashgabat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Ashgabat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Ashgabat
+TZURL:http://tzurl.org/zoneinfo/Asia/Ashgabat
+X-LIC-LOCATION:Asia/Ashgabat
+BEGIN:STANDARD
+TZOFFSETFROM:+035332
+TZOFFSETTO:+0400
+TZNAME:ASHT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:ASHT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:ASHST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:ASHT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:ASHST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:ASHT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TMT
+DTSTART:19911027T000000
+RDATE:19911027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:TMT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Baghdad.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Baghdad.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,87 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Baghdad
+TZURL:http://tzurl.org/zoneinfo/Asia/Baghdad
+X-LIC-LOCATION:Asia/Baghdad
+BEGIN:STANDARD
+TZOFFSETFROM:+025740
+TZOFFSETTO:+025736
+TZNAME:BMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+025736
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:ADT
+DTSTART:19820501T000000
+RDATE:19820501T000000
+RDATE:19830331T000000
+RDATE:19840401T000000
+RDATE:19850401T000000
+RDATE:19860330T010000
+RDATE:19870329T010000
+RDATE:19880327T010000
+RDATE:19890326T010000
+RDATE:19900325T010000
+RDATE:19910401T030000
+RDATE:19920401T030000
+RDATE:19930401T030000
+RDATE:19940401T030000
+RDATE:19950401T030000
+RDATE:19960401T030000
+RDATE:19970401T030000
+RDATE:19980401T030000
+RDATE:19990401T030000
+RDATE:20000401T030000
+RDATE:20010401T030000
+RDATE:20020401T030000
+RDATE:20030401T030000
+RDATE:20040401T030000
+RDATE:20050401T030000
+RDATE:20060401T030000
+RDATE:20070401T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19841001T000000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19911001T040000
+RDATE:19921001T040000
+RDATE:19931001T040000
+RDATE:19941001T040000
+RDATE:19951001T040000
+RDATE:19961001T040000
+RDATE:19971001T040000
+RDATE:19981001T040000
+RDATE:19991001T040000
+RDATE:20001001T040000
+RDATE:20011001T040000
+RDATE:20021001T040000
+RDATE:20031001T040000
+RDATE:20041001T040000
+RDATE:20051001T040000
+RDATE:20061001T040000
+RDATE:20071001T040000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Bahrain.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Bahrain.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Bahrain
+TZURL:http://tzurl.org/zoneinfo/Asia/Bahrain
+X-LIC-LOCATION:Asia/Bahrain
+BEGIN:STANDARD
+TZOFFSETFROM:+032220
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19720601T000000
+RDATE:19720601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Baku.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Baku.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,120 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Baku
+TZURL:http://tzurl.org/zoneinfo/Asia/Baku
+X-LIC-LOCATION:Asia/Baku
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AZST
+DTSTART:19970330T040000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AZT
+DTSTART:19971026T050000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+031924
+TZOFFSETTO:+0300
+TZNAME:BAKT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:BAKT
+DTSTART:19570301T000000
+RDATE:19570301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:BAKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:BAKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:BAKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AZST
+DTSTART:19910830T000000
+RDATE:19910830T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AZT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:AZST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AZT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19960101T000000
+RDATE:19970101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AZST
+DTSTART:19960331T050000
+RDATE:19960331T050000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AZT
+DTSTART:19961027T060000
+RDATE:19961027T060000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Bangkok.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Bangkok.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Bangkok
+TZURL:http://tzurl.org/zoneinfo/Asia/Bangkok
+X-LIC-LOCATION:Asia/Bangkok
+BEGIN:STANDARD
+TZOFFSETFROM:+064204
+TZOFFSETTO:+064204
+TZNAME:BMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+064204
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19200401T000000
+RDATE:19200401T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Beirut.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Beirut.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,98 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Beirut
+TZURL:http://tzurl.org/zoneinfo/Asia/Beirut
+X-LIC-LOCATION:Asia/Beirut
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19930328T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19991031T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0222
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19200328T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19230422T000000
+RDATE:19570501T000000
+RDATE:19580501T000000
+RDATE:19590501T000000
+RDATE:19600501T000000
+RDATE:19610501T000000
+RDATE:19720622T000000
+RDATE:19730501T000000
+RDATE:19740501T000000
+RDATE:19750501T000000
+RDATE:19760501T000000
+RDATE:19770501T000000
+RDATE:19780430T000000
+RDATE:19840501T000000
+RDATE:19850501T000000
+RDATE:19860501T000000
+RDATE:19870501T000000
+RDATE:19880601T000000
+RDATE:19890510T000000
+RDATE:19900501T000000
+RDATE:19910501T000000
+RDATE:19920501T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19201025T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19230916T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19591001T000000
+RDATE:19601001T000000
+RDATE:19611001T000000
+RDATE:19721001T000000
+RDATE:19731001T000000
+RDATE:19741001T000000
+RDATE:19751001T000000
+RDATE:19761001T000000
+RDATE:19771001T000000
+RDATE:19780930T000000
+RDATE:19841016T000000
+RDATE:19851016T000000
+RDATE:19861016T000000
+RDATE:19871016T000000
+RDATE:19881016T000000
+RDATE:19891016T000000
+RDATE:19901016T000000
+RDATE:19911016T000000
+RDATE:19921004T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Bishkek.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Bishkek.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Bishkek
+TZURL:http://tzurl.org/zoneinfo/Asia/Bishkek
+X-LIC-LOCATION:Asia/Bishkek
+BEGIN:STANDARD
+TZOFFSETFROM:+045824
+TZOFFSETTO:+0500
+TZNAME:FRUT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:FRUT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:FRUST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:FRUT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:FRUST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:KGT
+DTSTART:19910831T020000
+RDATE:19910831T020000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19971026T023000
+RDATE:19981025T023000
+RDATE:19991031T023000
+RDATE:20001029T023000
+RDATE:20011028T023000
+RDATE:20021027T023000
+RDATE:20031026T023000
+RDATE:20041031T023000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:KGST
+DTSTART:19920412T000000
+RDATE:19920412T000000
+RDATE:19930411T000000
+RDATE:19940410T000000
+RDATE:19950409T000000
+RDATE:19960407T000000
+RDATE:19970330T023000
+RDATE:19980329T023000
+RDATE:19990328T023000
+RDATE:20000326T023000
+RDATE:20010325T023000
+RDATE:20020331T023000
+RDATE:20030330T023000
+RDATE:20040328T023000
+RDATE:20050327T023000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:KGT
+DTSTART:20050812T000000
+RDATE:20050812T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Brunei.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Brunei.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Brunei
+TZURL:http://tzurl.org/zoneinfo/Asia/Brunei
+X-LIC-LOCATION:Asia/Brunei
+BEGIN:STANDARD
+TZOFFSETFROM:+073940
+TZOFFSETTO:+0730
+TZNAME:BNT
+DTSTART:19260301T000000
+RDATE:19260301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:BNT
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Choibalsan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Choibalsan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,91 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Choibalsan
+TZURL:http://tzurl.org/zoneinfo/Asia/Choibalsan
+X-LIC-LOCATION:Asia/Choibalsan
+BEGIN:STANDARD
+TZOFFSETFROM:+0738
+TZOFFSETTO:+0700
+TZNAME:ULAT
+DTSTART:19050801T000000
+RDATE:19050801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ULAT
+DTSTART:19780101T000000
+RDATE:19780101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+1000
+TZNAME:CHOST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:CHOT
+DTSTART:19831001T000000
+RDATE:19831001T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+RDATE:20010929T020000
+RDATE:20020928T020000
+RDATE:20030927T020000
+RDATE:20040925T020000
+RDATE:20050924T020000
+RDATE:20060930T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:CHOST
+DTSTART:19840401T000000
+RDATE:19840401T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+RDATE:20010428T020000
+RDATE:20020330T020000
+RDATE:20030329T020000
+RDATE:20040327T020000
+RDATE:20050326T020000
+RDATE:20060325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+DTSTART:20080331T000000
+RDATE:20080331T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Chongqing.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Chongqing.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,47 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Chongqing
+TZURL:http://tzurl.org/zoneinfo/Asia/Chongqing
+X-LIC-LOCATION:Asia/Chongqing
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:LONT
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Colombo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Colombo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Colombo
+TZURL:http://tzurl.org/zoneinfo/Asia/Colombo
+X-LIC-LOCATION:Asia/Colombo
+BEGIN:STANDARD
+TZOFFSETFROM:+051924
+TZOFFSETTO:+051932
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+051932
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19060101T000000
+RDATE:19060101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0600
+TZNAME:IHST
+DTSTART:19420105T000000
+RDATE:19420105T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0630
+TZNAME:IST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19451016T020000
+RDATE:19451016T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:LKT
+DTSTART:19960525T000000
+RDATE:19960525T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+TZNAME:LKT
+DTSTART:19961026T003000
+RDATE:19961026T003000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:20060415T003000
+RDATE:20060415T003000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Damascus.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Damascus.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,135 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Damascus
+TZURL:http://tzurl.org/zoneinfo/Asia/Damascus
+X-LIC-LOCATION:Asia/Damascus
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20091030T000000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20100402T000000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1FR
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+022512
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19200418T020000
+RDATE:19200418T020000
+RDATE:19210417T020000
+RDATE:19220416T020000
+RDATE:19230415T020000
+RDATE:19620429T020000
+RDATE:19630501T020000
+RDATE:19640501T020000
+RDATE:19650501T020000
+RDATE:19660424T020000
+RDATE:19670501T020000
+RDATE:19680501T020000
+RDATE:19690501T020000
+RDATE:19700501T020000
+RDATE:19710501T020000
+RDATE:19720501T020000
+RDATE:19730501T020000
+RDATE:19740501T020000
+RDATE:19750501T020000
+RDATE:19760501T020000
+RDATE:19770501T020000
+RDATE:19780501T020000
+RDATE:19830409T020000
+RDATE:19840409T020000
+RDATE:19860216T020000
+RDATE:19870301T020000
+RDATE:19880315T020000
+RDATE:19890331T020000
+RDATE:19900401T020000
+RDATE:19910401T000000
+RDATE:19920408T000000
+RDATE:19930326T000000
+RDATE:19940401T000000
+RDATE:19950401T000000
+RDATE:19960401T000000
+RDATE:19970331T000000
+RDATE:19980330T000000
+RDATE:19990401T000000
+RDATE:20000401T000000
+RDATE:20010401T000000
+RDATE:20020401T000000
+RDATE:20030401T000000
+RDATE:20040401T000000
+RDATE:20050401T000000
+RDATE:20060401T000000
+RDATE:20070330T000000
+RDATE:20080404T000000
+RDATE:20090327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19201003T020000
+RDATE:19201003T020000
+RDATE:19211002T020000
+RDATE:19221001T020000
+RDATE:19231007T020000
+RDATE:19621001T020000
+RDATE:19630930T020000
+RDATE:19641001T020000
+RDATE:19650930T020000
+RDATE:19661001T020000
+RDATE:19671001T020000
+RDATE:19681001T020000
+RDATE:19691001T020000
+RDATE:19701001T020000
+RDATE:19711001T020000
+RDATE:19721001T020000
+RDATE:19731001T020000
+RDATE:19741001T020000
+RDATE:19751001T020000
+RDATE:19761001T020000
+RDATE:19770901T020000
+RDATE:19780901T020000
+RDATE:19831001T020000
+RDATE:19841001T020000
+RDATE:19861009T020000
+RDATE:19871031T020000
+RDATE:19881031T020000
+RDATE:19891001T020000
+RDATE:19900930T020000
+RDATE:19911001T000000
+RDATE:19921001T000000
+RDATE:19930925T000000
+RDATE:19941001T000000
+RDATE:19951001T000000
+RDATE:19961001T000000
+RDATE:19971001T000000
+RDATE:19981001T000000
+RDATE:19991001T000000
+RDATE:20001001T000000
+RDATE:20011001T000000
+RDATE:20021001T000000
+RDATE:20031001T000000
+RDATE:20041001T000000
+RDATE:20051001T000000
+RDATE:20060922T000000
+RDATE:20071102T000000
+RDATE:20081101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Dhaka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Dhaka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,66 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dhaka
+TZURL:http://tzurl.org/zoneinfo/Asia/Dhaka
+X-LIC-LOCATION:Asia/Dhaka
+BEGIN:STANDARD
+TZOFFSETFROM:+060140
+TZOFFSETTO:+055320
+TZNAME:HMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19411001T000000
+RDATE:19411001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19420515T000000
+RDATE:19420515T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+TZNAME:DACT
+DTSTART:19510930T000000
+RDATE:19510930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:BDT
+DTSTART:19710326T000000
+RDATE:19710326T000000
+RDATE:20090101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:BDST
+DTSTART:20090619T230000
+RDATE:20090619T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:BDT
+DTSTART:20091231T235900
+RDATE:20091231T235900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Dili.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Dili.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dili
+TZURL:http://tzurl.org/zoneinfo/Asia/Dili
+X-LIC-LOCATION:Asia/Dili
+BEGIN:STANDARD
+TZOFFSETFROM:+082220
+TZOFFSETTO:+0800
+TZNAME:TLT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420221T230000
+RDATE:19420221T230000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:TLT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19760503T000000
+RDATE:19760503T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:TLT
+DTSTART:20000917T000000
+RDATE:20000917T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Dubai.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Dubai.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dubai
+TZURL:http://tzurl.org/zoneinfo/Asia/Dubai
+X-LIC-LOCATION:Asia/Dubai
+BEGIN:STANDARD
+TZOFFSETFROM:+034112
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Dushanbe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Dushanbe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,69 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Dushanbe
+TZURL:http://tzurl.org/zoneinfo/Asia/Dushanbe
+X-LIC-LOCATION:Asia/Dushanbe
+BEGIN:STANDARD
+TZOFFSETFROM:+043512
+TZOFFSETTO:+0500
+TZNAME:DUST
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:DUST
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:DUSST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:DUST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:DUSST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:TJT
+DTSTART:19910909T030000
+RDATE:19910909T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Gaza.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Gaza.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,145 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Gaza
+TZURL:http://tzurl.org/zoneinfo/Asia/Gaza
+X-LIC-LOCATION:Asia/Gaza
+BEGIN:STANDARD
+TZOFFSETFROM:+021752
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19001001T000000
+RDATE:19001001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EET
+DTSTART:19400601T000000
+RDATE:19400601T000000
+RDATE:19430401T020000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19460416T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421101T000000
+RDATE:19421101T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T020000
+RDATE:19461101T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19590930T030000
+RDATE:19600930T030000
+RDATE:19610930T030000
+RDATE:19620930T030000
+RDATE:19630930T030000
+RDATE:19640930T030000
+RDATE:19650930T030000
+RDATE:19661001T030000
+RDATE:19960920T010000
+RDATE:19970919T010000
+RDATE:19980918T010000
+RDATE:19991015T000000
+RDATE:20001020T000000
+RDATE:20011019T000000
+RDATE:20021018T000000
+RDATE:20031017T000000
+RDATE:20041001T010000
+RDATE:20051004T020000
+RDATE:20060922T000000
+RDATE:20070913T020000
+RDATE:20080829T000000
+RDATE:20090904T020000
+RDATE:20100811T000000
+RDATE:20110801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19480515T000000
+RDATE:19480515T000000
+RDATE:19960101T000000
+RDATE:19990101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19570510T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19590501T010000
+RDATE:19600501T010000
+RDATE:19610501T010000
+RDATE:19620501T010000
+RDATE:19630501T010000
+RDATE:19640501T010000
+RDATE:19650501T010000
+RDATE:19660501T010000
+RDATE:19670501T010000
+RDATE:19960405T000000
+RDATE:19970404T000000
+RDATE:19980403T000000
+RDATE:19990416T000000
+RDATE:20000421T000000
+RDATE:20010420T000000
+RDATE:20020419T000000
+RDATE:20030418T000000
+RDATE:20040416T000000
+RDATE:20050415T000000
+RDATE:20060401T000000
+RDATE:20070401T000000
+RDATE:20080401T000000
+RDATE:20090327T000000
+RDATE:20100327T000100
+RDATE:20110402T120100
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19670605T000000
+RDATE:19670605T000000
+RDATE:19741013T000000
+RDATE:19750831T000000
+RDATE:19850915T000000
+RDATE:19860907T000000
+RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
+RDATE:19900826T000000
+RDATE:19910901T000000
+RDATE:19920906T000000
+RDATE:19930905T000000
+RDATE:19940828T000000
+RDATE:19950903T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19740707T000000
+RDATE:19740707T000000
+RDATE:19750420T000000
+RDATE:19850414T000000
+RDATE:19860518T000000
+RDATE:19870415T000000
+RDATE:19880409T000000
+RDATE:19890430T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920329T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950331T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Harbin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Harbin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Harbin
+TZURL:http://tzurl.org/zoneinfo/Asia/Harbin
+X-LIC-LOCATION:Asia/Harbin
+BEGIN:STANDARD
+TZOFFSETFROM:+082644
+TZOFFSETTO:+0830
+TZNAME:CHAT
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19320301T000000
+RDATE:19320301T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CHAT
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+TZNAME:CHAT
+DTSTART:19660501T000000
+RDATE:19660501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Hebron.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Hebron.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,154 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Hebron
+TZURL:http://tzurl.org/zoneinfo/Asia/Hebron
+X-LIC-LOCATION:Asia/Hebron
+BEGIN:STANDARD
+TZOFFSETFROM:+022023
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19001001T000000
+RDATE:19001001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EET
+DTSTART:19400601T000000
+RDATE:19400601T000000
+RDATE:19430401T020000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19460416T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421101T000000
+RDATE:19421101T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T020000
+RDATE:19461101T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19590930T030000
+RDATE:19600930T030000
+RDATE:19610930T030000
+RDATE:19620930T030000
+RDATE:19630930T030000
+RDATE:19640930T030000
+RDATE:19650930T030000
+RDATE:19661001T030000
+RDATE:19960920T010000
+RDATE:19970919T010000
+RDATE:19980918T010000
+RDATE:19991015T000000
+RDATE:20001020T000000
+RDATE:20011019T000000
+RDATE:20021018T000000
+RDATE:20031017T000000
+RDATE:20041001T010000
+RDATE:20051004T020000
+RDATE:20060922T000000
+RDATE:20070913T020000
+RDATE:20080901T000000
+RDATE:20090904T020000
+RDATE:20100811T000000
+RDATE:20110801T000000
+RDATE:20110930T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19480515T000000
+RDATE:19480515T000000
+RDATE:19960101T000000
+RDATE:19990101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19570510T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19590501T010000
+RDATE:19600501T010000
+RDATE:19610501T010000
+RDATE:19620501T010000
+RDATE:19630501T010000
+RDATE:19640501T010000
+RDATE:19650501T010000
+RDATE:19660501T010000
+RDATE:19670501T010000
+RDATE:19960405T000000
+RDATE:19970404T000000
+RDATE:19980403T000000
+RDATE:19990416T000000
+RDATE:20000421T000000
+RDATE:20010420T000000
+RDATE:20020419T000000
+RDATE:20030418T000000
+RDATE:20040416T000000
+RDATE:20050415T000000
+RDATE:20060401T000000
+RDATE:20070401T000000
+RDATE:20080401T000000
+RDATE:20090327T000000
+RDATE:20100327T000100
+RDATE:20110401T120100
+RDATE:20110830T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19670605T000000
+RDATE:19670605T000000
+RDATE:19741013T000000
+RDATE:19750831T000000
+RDATE:19850915T000000
+RDATE:19860907T000000
+RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
+RDATE:19900826T000000
+RDATE:19910901T000000
+RDATE:19920906T000000
+RDATE:19930905T000000
+RDATE:19940828T000000
+RDATE:19950903T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19740707T000000
+RDATE:19740707T000000
+RDATE:19750420T000000
+RDATE:19850414T000000
+RDATE:19860518T000000
+RDATE:19870415T000000
+RDATE:19880409T000000
+RDATE:19890430T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920329T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950331T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20080801T000000
+RDATE:20080801T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Ho_Chi_Minh.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Ho_Chi_Minh.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Ho_Chi_Minh
+TZURL:http://tzurl.org/zoneinfo/Asia/Ho_Chi_Minh
+X-LIC-LOCATION:Asia/Ho_Chi_Minh
+BEGIN:STANDARD
+TZOFFSETFROM:+070640
+TZOFFSETTO:+070620
+TZNAME:SMT
+DTSTART:19060609T000000
+RDATE:19060609T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ICT
+DTSTART:19120501T000000
+RDATE:19120501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19310501T000000
+RDATE:19310501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Hong_Kong.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Hong_Kong.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Hong_Kong
+TZURL:http://tzurl.org/zoneinfo/Asia/Hong_Kong
+X-LIC-LOCATION:Asia/Hong_Kong
+BEGIN:STANDARD
+TZOFFSETFROM:+073636
+TZOFFSETTO:+0800
+TZNAME:HKT
+DTSTART:19041030T000000
+RDATE:19041030T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:HKST
+DTSTART:19410401T033000
+RDATE:19410401T033000
+RDATE:19460420T033000
+RDATE:19470413T033000
+RDATE:19480502T033000
+RDATE:19490403T033000
+RDATE:19500402T033000
+RDATE:19510401T033000
+RDATE:19520406T033000
+RDATE:19530405T033000
+RDATE:19540321T033000
+RDATE:19550320T033000
+RDATE:19560318T033000
+RDATE:19570324T033000
+RDATE:19580323T033000
+RDATE:19590322T033000
+RDATE:19600320T033000
+RDATE:19610319T033000
+RDATE:19620318T033000
+RDATE:19630324T033000
+RDATE:19640322T033000
+RDATE:19650418T033000
+RDATE:19660417T033000
+RDATE:19670416T033000
+RDATE:19680421T033000
+RDATE:19690420T033000
+RDATE:19700419T033000
+RDATE:19710418T033000
+RDATE:19720416T033000
+RDATE:19730422T033000
+RDATE:19731230T033000
+RDATE:19750420T033000
+RDATE:19760418T033000
+RDATE:19790513T033000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:HKT
+DTSTART:19410930T033000
+RDATE:19410930T033000
+RDATE:19450915T000000
+RDATE:19461201T033000
+RDATE:19471230T033000
+RDATE:19481031T033000
+RDATE:19491030T033000
+RDATE:19501029T033000
+RDATE:19511028T033000
+RDATE:19521025T033000
+RDATE:19531101T033000
+RDATE:19541031T033000
+RDATE:19551106T033000
+RDATE:19561104T033000
+RDATE:19571103T033000
+RDATE:19581102T033000
+RDATE:19591101T033000
+RDATE:19601106T033000
+RDATE:19611105T033000
+RDATE:19621104T033000
+RDATE:19631103T033000
+RDATE:19641101T033000
+RDATE:19651017T033000
+RDATE:19661016T033000
+RDATE:19671022T033000
+RDATE:19681020T033000
+RDATE:19691019T033000
+RDATE:19701018T033000
+RDATE:19711017T033000
+RDATE:19721022T033000
+RDATE:19731021T033000
+RDATE:19741020T033000
+RDATE:19751019T033000
+RDATE:19761017T033000
+RDATE:19791021T033000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19411225T000000
+RDATE:19411225T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:HKST
+DTSTART:19740421T033000
+RDATE:19740421T033000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Hovd.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Hovd.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Hovd
+TZURL:http://tzurl.org/zoneinfo/Asia/Hovd
+X-LIC-LOCATION:Asia/Hovd
+BEGIN:STANDARD
+TZOFFSETFROM:+060636
+TZOFFSETTO:+0600
+TZNAME:HOVT
+DTSTART:19050801T000000
+RDATE:19050801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:HOVT
+DTSTART:19780101T000000
+RDATE:19780101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:HOVST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+RDATE:20010428T020000
+RDATE:20020330T020000
+RDATE:20030329T020000
+RDATE:20040327T020000
+RDATE:20050326T020000
+RDATE:20060325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:HOVT
+DTSTART:19831001T000000
+RDATE:19831001T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+RDATE:20010929T020000
+RDATE:20020928T020000
+RDATE:20030927T020000
+RDATE:20040925T020000
+RDATE:20050924T020000
+RDATE:20060930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Irkutsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Irkutsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Irkutsk
+TZURL:http://tzurl.org/zoneinfo/Asia/Irkutsk
+X-LIC-LOCATION:Asia/Irkutsk
+BEGIN:STANDARD
+TZOFFSETFROM:+065720
+TZOFFSETTO:+065720
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+065720
+TZOFFSETTO:+0700
+TZNAME:IRKT
+DTSTART:19200125T000000
+RDATE:19200125T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:IRKT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:IRKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:IRKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:IRKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:IRKT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:IRKT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Istanbul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Istanbul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,194 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Istanbul
+TZURL:http://tzurl.org/zoneinfo/Asia/Istanbul
+X-LIC-LOCATION:Asia/Istanbul
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20120325T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+015552
+TZOFFSETTO:+015656
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19101001T000000
+RDATE:19101001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19240513T000000
+RDATE:19250501T000000
+RDATE:19400630T000000
+RDATE:19401201T000000
+RDATE:19420401T000000
+RDATE:19450402T000000
+RDATE:19460601T000000
+RDATE:19470420T000000
+RDATE:19480418T000000
+RDATE:19490410T000000
+RDATE:19500419T000000
+RDATE:19510422T000000
+RDATE:19620715T000000
+RDATE:19640515T000000
+RDATE:19700503T000000
+RDATE:19710502T000000
+RDATE:19720507T000000
+RDATE:19730603T010000
+RDATE:19740331T020000
+RDATE:19750330T000000
+RDATE:19760601T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T010000
+RDATE:19920329T010000
+RDATE:19930328T010000
+RDATE:19940327T010000
+RDATE:19950326T010000
+RDATE:19960331T010000
+RDATE:19970330T010000
+RDATE:19980329T010000
+RDATE:19990328T010000
+RDATE:20000326T010000
+RDATE:20010325T010000
+RDATE:20020331T010000
+RDATE:20030330T010000
+RDATE:20040328T010000
+RDATE:20050327T010000
+RDATE:20060326T010000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+RDATE:20100328T030000
+RDATE:20110328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19241001T000000
+RDATE:19251001T000000
+RDATE:19401005T000000
+RDATE:19410921T000000
+RDATE:19421101T000000
+RDATE:19451008T000000
+RDATE:19461001T000000
+RDATE:19471005T000000
+RDATE:19481003T000000
+RDATE:19491002T000000
+RDATE:19501008T000000
+RDATE:19511008T000000
+RDATE:19621008T000000
+RDATE:19641001T000000
+RDATE:19701004T000000
+RDATE:19711003T000000
+RDATE:19721008T000000
+RDATE:19731104T030000
+RDATE:19741103T050000
+RDATE:19751026T000000
+RDATE:19761031T000000
+RDATE:19771016T000000
+RDATE:19850928T000000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19781015T000000
+RDATE:19781015T000000
+RDATE:19800406T030000
+RDATE:19810329T030000
+RDATE:19820328T030000
+RDATE:19830731T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19790401T030000
+RDATE:19790401T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:TRT
+DTSTART:19791015T000000
+RDATE:19791015T000000
+RDATE:19801013T000000
+RDATE:19811012T000000
+RDATE:19821011T000000
+RDATE:19831002T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19850420T000000
+RDATE:19850420T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20070101T000000
+RDATE:20070101T000000
+RDATE:20110327T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Jakarta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Jakarta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Jakarta
+TZURL:http://tzurl.org/zoneinfo/Asia/Jakarta
+X-LIC-LOCATION:Asia/Jakarta
+BEGIN:STANDARD
+TZOFFSETFROM:+070712
+TZOFFSETTO:+070712
+TZNAME:JMT
+DTSTART:18670810T000000
+RDATE:18670810T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070712
+TZOFFSETTO:+0720
+TZNAME:JAVT
+DTSTART:19231231T234712
+RDATE:19231231T234712
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420323T000000
+RDATE:19420323T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:WIT
+DTSTART:19480501T000000
+RDATE:19480501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19500501T000000
+RDATE:19500501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0700
+TZNAME:WIT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Jayapura.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Jayapura.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Jayapura
+TZURL:http://tzurl.org/zoneinfo/Asia/Jayapura
+X-LIC-LOCATION:Asia/Jayapura
+BEGIN:STANDARD
+TZOFFSETFROM:+092248
+TZOFFSETTO:+0900
+TZNAME:EIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19440901T000000
+RDATE:19440901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0900
+TZNAME:EIT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Jerusalem.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Jerusalem.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,188 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Jerusalem
+TZURL:http://tzurl.org/zoneinfo/Asia/Jerusalem
+X-LIC-LOCATION:Asia/Jerusalem
+BEGIN:STANDARD
+TZOFFSETFROM:+022056
+TZOFFSETTO:+022040
+TZNAME:JMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19180101T000000
+RDATE:19180101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19400601T000000
+RDATE:19400601T000000
+RDATE:19430401T020000
+RDATE:19440401T000000
+RDATE:19450416T000000
+RDATE:19460416T020000
+RDATE:19490501T000000
+RDATE:19500416T000000
+RDATE:19510401T000000
+RDATE:19520420T020000
+RDATE:19530412T020000
+RDATE:19540613T000000
+RDATE:19550611T020000
+RDATE:19560603T000000
+RDATE:19570429T020000
+RDATE:19740707T000000
+RDATE:19750420T000000
+RDATE:19850414T000000
+RDATE:19860518T000000
+RDATE:19870415T000000
+RDATE:19880409T000000
+RDATE:19890430T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920329T000000
+RDATE:19930402T000000
+RDATE:19940401T000000
+RDATE:19950331T000000
+RDATE:19960315T000000
+RDATE:19970321T000000
+RDATE:19980320T000000
+RDATE:19990402T020000
+RDATE:20000414T020000
+RDATE:20010409T010000
+RDATE:20020329T010000
+RDATE:20030328T010000
+RDATE:20040407T010000
+RDATE:20050401T020000
+RDATE:20060331T020000
+RDATE:20070330T020000
+RDATE:20080328T020000
+RDATE:20090327T020000
+RDATE:20100326T020000
+RDATE:20110401T020000
+RDATE:20120330T020000
+RDATE:20130329T020000
+RDATE:20140328T020000
+RDATE:20150327T020000
+RDATE:20160401T020000
+RDATE:20170331T020000
+RDATE:20180330T020000
+RDATE:20190329T020000
+RDATE:20200327T020000
+RDATE:20210326T020000
+RDATE:20220401T020000
+RDATE:20230331T020000
+RDATE:20240329T020000
+RDATE:20250328T020000
+RDATE:20260327T020000
+RDATE:20270326T020000
+RDATE:20280331T020000
+RDATE:20290330T020000
+RDATE:20300329T020000
+RDATE:20310328T020000
+RDATE:20320326T020000
+RDATE:20330401T020000
+RDATE:20340331T020000
+RDATE:20350330T020000
+RDATE:20360328T020000
+RDATE:20370327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:IST
+DTSTART:19421101T000000
+RDATE:19421101T000000
+RDATE:19431101T000000
+RDATE:19441101T000000
+RDATE:19451101T020000
+RDATE:19461101T000000
+RDATE:19481101T020000
+RDATE:19491101T020000
+RDATE:19500915T030000
+RDATE:19511111T030000
+RDATE:19521019T030000
+RDATE:19530913T030000
+RDATE:19540912T000000
+RDATE:19550911T000000
+RDATE:19560930T030000
+RDATE:19570922T000000
+RDATE:19741013T000000
+RDATE:19750831T000000
+RDATE:19850915T000000
+RDATE:19860907T000000
+RDATE:19870913T000000
+RDATE:19880903T000000
+RDATE:19890903T000000
+RDATE:19900826T000000
+RDATE:19910901T000000
+RDATE:19920906T000000
+RDATE:19930905T000000
+RDATE:19940828T000000
+RDATE:19950903T000000
+RDATE:19960916T000000
+RDATE:19970914T000000
+RDATE:19980906T000000
+RDATE:19990903T020000
+RDATE:20001006T010000
+RDATE:20010924T010000
+RDATE:20021007T010000
+RDATE:20031003T010000
+RDATE:20040922T010000
+RDATE:20051009T020000
+RDATE:20061001T020000
+RDATE:20070916T020000
+RDATE:20081005T020000
+RDATE:20090927T020000
+RDATE:20100912T020000
+RDATE:20111002T020000
+RDATE:20120923T020000
+RDATE:20130908T020000
+RDATE:20140928T020000
+RDATE:20150920T020000
+RDATE:20161009T020000
+RDATE:20170924T020000
+RDATE:20180916T020000
+RDATE:20191006T020000
+RDATE:20200927T020000
+RDATE:20210912T020000
+RDATE:20221002T020000
+RDATE:20230924T020000
+RDATE:20241006T020000
+RDATE:20250928T020000
+RDATE:20260920T020000
+RDATE:20271010T020000
+RDATE:20280924T020000
+RDATE:20290916T020000
+RDATE:20301006T020000
+RDATE:20310921T020000
+RDATE:20320912T020000
+RDATE:20331002T020000
+RDATE:20340917T020000
+RDATE:20351007T020000
+RDATE:20360928T020000
+RDATE:20370913T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0400
+TZNAME:IDDT
+DTSTART:19480523T000000
+RDATE:19480523T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:IDT
+DTSTART:19480901T000000
+RDATE:19480901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kabul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kabul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kabul
+TZURL:http://tzurl.org/zoneinfo/Asia/Kabul
+X-LIC-LOCATION:Asia/Kabul
+BEGIN:STANDARD
+TZOFFSETFROM:+043648
+TZOFFSETTO:+0400
+TZNAME:AFT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0430
+TZNAME:AFT
+DTSTART:19450101T000000
+RDATE:19450101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kamchatka.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kamchatka.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,109 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kamchatka
+TZURL:http://tzurl.org/zoneinfo/Asia/Kamchatka
+X-LIC-LOCATION:Asia/Kamchatka
+BEGIN:STANDARD
+TZOFFSETFROM:+103436
+TZOFFSETTO:+1100
+TZNAME:PETT
+DTSTART:19221110T000000
+RDATE:19221110T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:PETT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:PETST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:PETT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+TZNAME:PETST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:PETT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:20101031T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Karachi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Karachi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,62 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Karachi
+TZURL:http://tzurl.org/zoneinfo/Asia/Karachi
+X-LIC-LOCATION:Asia/Karachi
+BEGIN:STANDARD
+TZOFFSETFROM:+042812
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:IST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19451015T000000
+RDATE:19451015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0500
+TZNAME:KART
+DTSTART:19510930T000000
+RDATE:19510930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:PKT
+DTSTART:19710326T000000
+RDATE:19710326T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:PKST
+DTSTART:20020407T000100
+RDATE:20020407T000100
+RDATE:20080601T000000
+RDATE:20090415T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:PKT
+DTSTART:20021006T000100
+RDATE:20021006T000100
+RDATE:20081101T000000
+RDATE:20091101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kashgar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kashgar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,54 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kashgar
+TZURL:http://tzurl.org/zoneinfo/Asia/Kashgar
+X-LIC-LOCATION:Asia/Kashgar
+BEGIN:STANDARD
+TZOFFSETFROM:+050356
+TZOFFSETTO:+0530
+TZNAME:KAST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0500
+TZNAME:KAST
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kathmandu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kathmandu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kathmandu
+TZURL:http://tzurl.org/zoneinfo/Asia/Kathmandu
+X-LIC-LOCATION:Asia/Kathmandu
+BEGIN:STANDARD
+TZOFFSETFROM:+054116
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0545
+TZNAME:NPT
+DTSTART:19860101T000000
+RDATE:19860101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kolkata.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kolkata.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,38 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kolkata
+TZURL:http://tzurl.org/zoneinfo/Asia/Kolkata
+X-LIC-LOCATION:Asia/Kolkata
+BEGIN:STANDARD
+TZOFFSETFROM:+055328
+TZOFFSETTO:+055320
+TZNAME:HMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19411001T000000
+RDATE:19411001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19420515T000000
+RDATE:19420515T000000
+RDATE:19451015T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+TZNAME:IST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Krasnoyarsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Krasnoyarsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Krasnoyarsk
+TZURL:http://tzurl.org/zoneinfo/Asia/Krasnoyarsk
+X-LIC-LOCATION:Asia/Krasnoyarsk
+BEGIN:STANDARD
+TZOFFSETFROM:+061120
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19200106T000000
+RDATE:19200106T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:KRAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:KRAST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:KRAT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kuala_Lumpur.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kuala_Lumpur.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kuala_Lumpur
+TZURL:http://tzurl.org/zoneinfo/Asia/Kuala_Lumpur
+X-LIC-LOCATION:Asia/Kuala_Lumpur
+BEGIN:STANDARD
+TZOFFSETFROM:+064646
+TZOFFSETTO:+065525
+TZNAME:SMT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+065525
+TZOFFSETTO:+0700
+TZNAME:MALT
+DTSTART:19050601T000000
+RDATE:19050601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0720
+TZNAME:MALST
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0720
+TZNAME:MALT
+DTSTART:19360101T000000
+RDATE:19360101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19410901T000000
+RDATE:19410901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420216T000000
+RDATE:19420216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19450912T000000
+RDATE:19450912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:MYT
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kuching.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kuching.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kuching
+TZURL:http://tzurl.org/zoneinfo/Asia/Kuching
+X-LIC-LOCATION:Asia/Kuching
+BEGIN:STANDARD
+TZOFFSETFROM:+072120
+TZOFFSETTO:+0730
+TZNAME:BORT
+DTSTART:19260301T000000
+RDATE:19260301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:BORT
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0820
+TZNAME:BORTST
+DTSTART:19350914T000000
+RDATE:19350914T000000
+RDATE:19360914T000000
+RDATE:19370914T000000
+RDATE:19380914T000000
+RDATE:19390914T000000
+RDATE:19400914T000000
+RDATE:19410914T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0820
+TZOFFSETTO:+0800
+TZNAME:BORT
+DTSTART:19351214T000000
+RDATE:19351214T000000
+RDATE:19361214T000000
+RDATE:19371214T000000
+RDATE:19381214T000000
+RDATE:19391214T000000
+RDATE:19401214T000000
+RDATE:19411214T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420216T000000
+RDATE:19420216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:BORT
+DTSTART:19450912T000000
+RDATE:19450912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:MYT
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Kuwait.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Kuwait.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Kuwait
+TZURL:http://tzurl.org/zoneinfo/Asia/Kuwait
+X-LIC-LOCATION:Asia/Kuwait
+BEGIN:STANDARD
+TZOFFSETFROM:+031156
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Macau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Macau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Macau
+TZURL:http://tzurl.org/zoneinfo/Asia/Macau
+X-LIC-LOCATION:Asia/Macau
+BEGIN:STANDARD
+TZOFFSETFROM:+073420
+TZOFFSETTO:+0800
+TZNAME:MOT
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:MOST
+DTSTART:19610319T033000
+RDATE:19610319T033000
+RDATE:19620318T033000
+RDATE:19630317T000000
+RDATE:19640322T033000
+RDATE:19650321T000000
+RDATE:19660417T033000
+RDATE:19670416T033000
+RDATE:19680421T033000
+RDATE:19690420T033000
+RDATE:19700419T033000
+RDATE:19710418T033000
+RDATE:19720416T000000
+RDATE:19730415T000000
+RDATE:19740421T000000
+RDATE:19750420T033000
+RDATE:19760418T033000
+RDATE:19770417T033000
+RDATE:19780416T000000
+RDATE:19790415T000000
+RDATE:19800420T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:MOT
+DTSTART:19611105T033000
+RDATE:19611105T033000
+RDATE:19621104T033000
+RDATE:19631103T033000
+RDATE:19641101T033000
+RDATE:19651031T000000
+RDATE:19661016T033000
+RDATE:19671022T033000
+RDATE:19681020T033000
+RDATE:19691019T033000
+RDATE:19701018T033000
+RDATE:19711017T033000
+RDATE:19721015T000000
+RDATE:19731021T000000
+RDATE:19741020T033000
+RDATE:19751019T033000
+RDATE:19761017T033000
+RDATE:19771016T033000
+RDATE:19781015T000000
+RDATE:19791021T000000
+RDATE:19801019T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19991220T000000
+RDATE:19991220T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Magadan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Magadan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Magadan
+TZURL:http://tzurl.org/zoneinfo/Asia/Magadan
+X-LIC-LOCATION:Asia/Magadan
+BEGIN:STANDARD
+TZOFFSETFROM:+100312
+TZOFFSETTO:+1000
+TZNAME:MAGT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:MAGT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:MAGST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:MAGT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:MAGST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:MAGT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:MAGT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Makassar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Makassar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Makassar
+TZURL:http://tzurl.org/zoneinfo/Asia/Makassar
+X-LIC-LOCATION:Asia/Makassar
+BEGIN:STANDARD
+TZOFFSETFROM:+075736
+TZOFFSETTO:+075736
+TZNAME:MMT
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+075736
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420209T000000
+RDATE:19420209T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Manila.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Manila.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,49 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Manila
+TZURL:http://tzurl.org/zoneinfo/Asia/Manila
+X-LIC-LOCATION:Asia/Manila
+BEGIN:STANDARD
+TZOFFSETFROM:-1556
+TZOFFSETTO:+0804
+TZNAME:LMT
+DTSTART:18441231T000000
+RDATE:18441231T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0804
+TZOFFSETTO:+0800
+TZNAME:PHT
+DTSTART:18990511T000000
+RDATE:18990511T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:PHST
+DTSTART:19361101T000000
+RDATE:19361101T000000
+RDATE:19540412T000000
+RDATE:19780322T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:PHT
+DTSTART:19370201T000000
+RDATE:19370201T000000
+RDATE:19441101T000000
+RDATE:19540701T000000
+RDATE:19780921T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420501T000000
+RDATE:19420501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Muscat.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Muscat.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Muscat
+TZURL:http://tzurl.org/zoneinfo/Asia/Muscat
+X-LIC-LOCATION:Asia/Muscat
+BEGIN:STANDARD
+TZOFFSETFROM:+035420
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Nicosia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Nicosia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,96 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Nicosia
+TZURL:http://tzurl.org/zoneinfo/Asia/Nicosia
+X-LIC-LOCATION:Asia/Nicosia
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19981025T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19990328T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+021328
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19211114T000000
+RDATE:19211114T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19750413T000000
+RDATE:19750413T000000
+RDATE:19760515T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800406T000000
+RDATE:19810329T000000
+RDATE:19820328T000000
+RDATE:19830327T000000
+RDATE:19840325T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19751012T000000
+RDATE:19751012T000000
+RDATE:19761011T000000
+RDATE:19770925T000000
+RDATE:19781002T000000
+RDATE:19790930T000000
+RDATE:19800928T000000
+RDATE:19810927T000000
+RDATE:19820926T000000
+RDATE:19830925T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19980901T000000
+RDATE:19980901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Novokuznetsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Novokuznetsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,127 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Novokuznetsk
+TZURL:http://tzurl.org/zoneinfo/Asia/Novokuznetsk
+X-LIC-LOCATION:Asia/Novokuznetsk
+BEGIN:STANDARD
+TZOFFSETFROM:+054848
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19200106T000000
+RDATE:19200106T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:KRAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:KRAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:KRAST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:KRAT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:20100328T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:NOVT
+DTSTART:20101031T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:NOVT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Novosibirsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Novosibirsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,122 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Novosibirsk
+TZURL:http://tzurl.org/zoneinfo/Asia/Novosibirsk
+X-LIC-LOCATION:Asia/Novosibirsk
+BEGIN:STANDARD
+TZOFFSETFROM:+053140
+TZOFFSETTO:+0600
+TZNAME:NOVT
+DTSTART:19191214T060000
+RDATE:19191214T060000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:NOVT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:NOVST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:NOVT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:NOVT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:19930523T000000
+RDATE:19930523T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:NOVST
+DTSTART:19940327T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Omsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Omsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Omsk
+TZURL:http://tzurl.org/zoneinfo/Asia/Omsk
+X-LIC-LOCATION:Asia/Omsk
+BEGIN:STANDARD
+TZOFFSETFROM:+045336
+TZOFFSETTO:+0500
+TZNAME:OMST
+DTSTART:19191114T000000
+RDATE:19191114T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:OMST
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:OMSST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:OMST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:OMSST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:OMST
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:OMST
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Oral.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Oral.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,144 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Oral
+TZURL:http://tzurl.org/zoneinfo/Asia/Oral
+X-LIC-LOCATION:Asia/Oral
+BEGIN:STANDARD
+TZOFFSETFROM:+032524
+TZOFFSETTO:+0400
+TZNAME:URAT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:URAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:URAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:URAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:URAST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:URAT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:URAST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:URAT
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:URAST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:URAT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:ORAT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:ORAST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:ORAT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:ORAT
+DTSTART:20050315T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Phnom_Penh.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Phnom_Penh.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Phnom_Penh
+TZURL:http://tzurl.org/zoneinfo/Asia/Phnom_Penh
+X-LIC-LOCATION:Asia/Phnom_Penh
+BEGIN:STANDARD
+TZOFFSETFROM:+065940
+TZOFFSETTO:+070620
+TZNAME:SMT
+DTSTART:19060609T000000
+RDATE:19060609T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ICT
+DTSTART:19120501T000000
+RDATE:19120501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19310501T000000
+RDATE:19310501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Pontianak.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Pontianak.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,65 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Pontianak
+TZURL:http://tzurl.org/zoneinfo/Asia/Pontianak
+X-LIC-LOCATION:Asia/Pontianak
+BEGIN:STANDARD
+TZOFFSETFROM:+071720
+TZOFFSETTO:+071720
+TZNAME:PMT
+DTSTART:19080501T000000
+RDATE:19080501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+071720
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19321101T000000
+RDATE:19321101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420129T000000
+RDATE:19420129T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19450923T000000
+RDATE:19450923T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:WIT
+DTSTART:19480501T000000
+RDATE:19480501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0730
+TZNAME:WIT
+DTSTART:19500501T000000
+RDATE:19500501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:CIT
+DTSTART:19640101T000000
+RDATE:19640101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:WIT
+DTSTART:19880101T000000
+RDATE:19880101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Pyongyang.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Pyongyang.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,45 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Pyongyang
+TZURL:http://tzurl.org/zoneinfo/Asia/Pyongyang
+X-LIC-LOCATION:Asia/Pyongyang
+BEGIN:STANDARD
+TZOFFSETFROM:+0823
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19041201T000000
+RDATE:19041201T000000
+RDATE:19320101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:KST
+DTSTART:19540321T000000
+RDATE:19540321T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19610810T000000
+RDATE:19610810T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Qatar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Qatar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Qatar
+TZURL:http://tzurl.org/zoneinfo/Asia/Qatar
+X-LIC-LOCATION:Asia/Qatar
+BEGIN:STANDARD
+TZOFFSETFROM:+032608
+TZOFFSETTO:+0400
+TZNAME:GST
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19720601T000000
+RDATE:19720601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Qyzylorda.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Qyzylorda.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Qyzylorda
+TZURL:http://tzurl.org/zoneinfo/Asia/Qyzylorda
+X-LIC-LOCATION:Asia/Qyzylorda
+BEGIN:STANDARD
+TZOFFSETFROM:+042152
+TZOFFSETTO:+0400
+TZNAME:KIZT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:KIZT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:KIZST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:KIZT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:KIZST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:KIZT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:KIZT
+DTSTART:19910101T000000
+RDATE:19910101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:QYZT
+DTSTART:19911216T000000
+RDATE:19911216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:QYZT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:QYZST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:QYZT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:QYZT
+DTSTART:20050315T000000
+RDATE:20050315T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Rangoon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Rangoon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Rangoon
+TZURL:http://tzurl.org/zoneinfo/Asia/Rangoon
+X-LIC-LOCATION:Asia/Rangoon
+BEGIN:STANDARD
+TZOFFSETFROM:+062440
+TZOFFSETTO:+062436
+TZNAME:RMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+062436
+TZOFFSETTO:+0630
+TZNAME:BURT
+DTSTART:19200101T000000
+RDATE:19200101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420501T000000
+RDATE:19420501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0630
+TZNAME:MMT
+DTSTART:19450503T000000
+RDATE:19450503T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Riyadh.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Riyadh.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Riyadh
+TZURL:http://tzurl.org/zoneinfo/Asia/Riyadh
+X-LIC-LOCATION:Asia/Riyadh
+BEGIN:STANDARD
+TZOFFSETFROM:+030652
+TZOFFSETTO:+0300
+TZNAME:AST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Sakhalin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Sakhalin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,128 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Sakhalin
+TZURL:http://tzurl.org/zoneinfo/Asia/Sakhalin
+X-LIC-LOCATION:Asia/Sakhalin
+BEGIN:STANDARD
+TZOFFSETFROM:+093048
+TZOFFSETTO:+0900
+TZNAME:CJT
+DTSTART:19050823T000000
+RDATE:19050823T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19380101T000000
+RDATE:19380101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1100
+TZNAME:SAKT
+DTSTART:19450825T000000
+RDATE:19450825T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:SAKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:SAKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:SAKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:19970330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:SAKT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:SAKT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:SAKST
+DTSTART:19980329T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Samarkand.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Samarkand.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,89 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Samarkand
+TZURL:http://tzurl.org/zoneinfo/Asia/Samarkand
+X-LIC-LOCATION:Asia/Samarkand
+BEGIN:STANDARD
+TZOFFSETFROM:+042712
+TZOFFSETTO:+0400
+TZNAME:SAMT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:SAMT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SAMST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:TAST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:SAMST
+DTSTART:19820401T000000
+RDATE:19820401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:SAMT
+DTSTART:19821001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:UZST
+DTSTART:19910901T000000
+RDATE:19910901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Seoul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Seoul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,70 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Seoul
+TZURL:http://tzurl.org/zoneinfo/Asia/Seoul
+X-LIC-LOCATION:Asia/Seoul
+BEGIN:STANDARD
+TZOFFSETFROM:+082752
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19041201T000000
+RDATE:19041201T000000
+RDATE:19320101T000000
+RDATE:19681001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:KST
+DTSTART:19540321T000000
+RDATE:19540321T000000
+RDATE:19600913T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:KDT
+DTSTART:19600515T000000
+RDATE:19600515T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0830
+TZNAME:KST
+DTSTART:19610810T000000
+RDATE:19610810T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:KDT
+DTSTART:19870510T000000
+RDATE:19870510T000000
+RDATE:19880508T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:KST
+DTSTART:19871011T000000
+RDATE:19871011T000000
+RDATE:19881009T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Shanghai.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Shanghai.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,51 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Shanghai
+TZURL:http://tzurl.org/zoneinfo/Asia/Shanghai
+X-LIC-LOCATION:Asia/Shanghai
+BEGIN:STANDARD
+TZOFFSETFROM:+080552
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19400603T000000
+RDATE:19400603T000000
+RDATE:19410316T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19411001T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19490101T000000
+RDATE:19490101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Singapore.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Singapore.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,72 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Singapore
+TZURL:http://tzurl.org/zoneinfo/Asia/Singapore
+X-LIC-LOCATION:Asia/Singapore
+BEGIN:STANDARD
+TZOFFSETFROM:+065525
+TZOFFSETTO:+065525
+TZNAME:SMT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+065525
+TZOFFSETTO:+0700
+TZNAME:MALT
+DTSTART:19050601T000000
+RDATE:19050601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0720
+TZNAME:MALST
+DTSTART:19330101T000000
+RDATE:19330101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0720
+TZNAME:MALT
+DTSTART:19360101T000000
+RDATE:19360101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19410901T000000
+RDATE:19410901T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420216T000000
+RDATE:19420216T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+TZNAME:MALT
+DTSTART:19450912T000000
+RDATE:19450912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0730
+TZNAME:SGT
+DTSTART:19650809T000000
+RDATE:19650809T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+TZNAME:SGT
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Taipei.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Taipei.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,68 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Taipei
+TZURL:http://tzurl.org/zoneinfo/Asia/Taipei
+X-LIC-LOCATION:Asia/Taipei
+BEGIN:STANDARD
+TZOFFSETFROM:+0806
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:18960101T000000
+RDATE:18960101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19450501T000000
+RDATE:19450501T000000
+RDATE:19460501T000000
+RDATE:19470501T000000
+RDATE:19480501T000000
+RDATE:19490501T000000
+RDATE:19500501T000000
+RDATE:19510501T000000
+RDATE:19520301T000000
+RDATE:19530401T000000
+RDATE:19540401T000000
+RDATE:19550401T000000
+RDATE:19560401T000000
+RDATE:19570401T000000
+RDATE:19580401T000000
+RDATE:19590401T000000
+RDATE:19600601T000000
+RDATE:19610601T000000
+RDATE:19740401T000000
+RDATE:19750401T000000
+RDATE:19790630T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19451001T000000
+RDATE:19451001T000000
+RDATE:19461001T000000
+RDATE:19471001T000000
+RDATE:19481001T000000
+RDATE:19491001T000000
+RDATE:19501001T000000
+RDATE:19511001T000000
+RDATE:19521101T000000
+RDATE:19531101T000000
+RDATE:19541101T000000
+RDATE:19551001T000000
+RDATE:19561001T000000
+RDATE:19571001T000000
+RDATE:19581001T000000
+RDATE:19591001T000000
+RDATE:19601001T000000
+RDATE:19611001T000000
+RDATE:19741001T000000
+RDATE:19751001T000000
+RDATE:19790930T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Tashkent.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Tashkent.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,83 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tashkent
+TZURL:http://tzurl.org/zoneinfo/Asia/Tashkent
+X-LIC-LOCATION:Asia/Tashkent
+BEGIN:STANDARD
+TZOFFSETFROM:+043712
+TZOFFSETTO:+0500
+TZNAME:TAST
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:TAST
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+TZNAME:TASST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+TZNAME:TAST
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:TASST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+TZNAME:UZST
+DTSTART:19910901T000000
+RDATE:19910901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:UZT
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Tbilisi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Tbilisi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,160 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tbilisi
+TZURL:http://tzurl.org/zoneinfo/Asia/Tbilisi
+X-LIC-LOCATION:Asia/Tbilisi
+BEGIN:STANDARD
+TZOFFSETFROM:+025916
+TZOFFSETTO:+025916
+TZNAME:TBMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+025916
+TZOFFSETTO:+0300
+TZNAME:TBIT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:TBIT
+DTSTART:19570301T000000
+RDATE:19570301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:TBIST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:TBIT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TBIST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:GEST
+DTSTART:19910409T000000
+RDATE:19910409T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:GET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:20041031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:GET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:GEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:GET
+DTSTART:19940925T000000
+RDATE:19940925T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:GEST
+DTSTART:19950326T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19980329T000000
+RDATE:19990328T000000
+RDATE:20000326T000000
+RDATE:20010325T000000
+RDATE:20020331T000000
+RDATE:20030330T000000
+RDATE:20040328T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:GET
+DTSTART:19950924T000000
+RDATE:19950924T000000
+RDATE:19971026T000000
+RDATE:19981025T000000
+RDATE:19991031T000000
+RDATE:20001029T000000
+RDATE:20011028T000000
+RDATE:20021027T000000
+RDATE:20031026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:GEST
+DTSTART:19961027T000000
+RDATE:19961027T000000
+RDATE:19970330T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:GEST
+DTSTART:20040627T000000
+RDATE:20040627T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:GET
+DTSTART:20050327T020000
+RDATE:20050327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Tehran.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Tehran.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,157 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tehran
+TZURL:http://tzurl.org/zoneinfo/Asia/Tehran
+X-LIC-LOCATION:Asia/Tehran
+BEGIN:STANDARD
+TZOFFSETFROM:+032544
+TZOFFSETTO:+032544
+TZNAME:TMT
+DTSTART:19160101T000000
+RDATE:19160101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+032544
+TZOFFSETTO:+0330
+TZNAME:IRST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0400
+TZNAME:IRST
+DTSTART:19771101T000000
+RDATE:19771101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:IRDT
+DTSTART:19780321T000000
+RDATE:19780321T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:IRST
+DTSTART:19781021T000000
+RDATE:19781021T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0330
+TZNAME:IRST
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+TZNAME:IRDT
+DTSTART:19790321T000000
+RDATE:19790321T000000
+RDATE:19800321T000000
+RDATE:19910503T000000
+RDATE:19920322T000000
+RDATE:19930322T000000
+RDATE:19940322T000000
+RDATE:19950322T000000
+RDATE:19960321T000000
+RDATE:19970322T000000
+RDATE:19980322T000000
+RDATE:19990322T000000
+RDATE:20000321T000000
+RDATE:20010322T000000
+RDATE:20020322T000000
+RDATE:20030322T000000
+RDATE:20040321T000000
+RDATE:20050322T000000
+RDATE:20080321T000000
+RDATE:20090322T000000
+RDATE:20100322T000000
+RDATE:20110322T000000
+RDATE:20120321T000000
+RDATE:20130322T000000
+RDATE:20140322T000000
+RDATE:20150322T000000
+RDATE:20160321T000000
+RDATE:20170322T000000
+RDATE:20180322T000000
+RDATE:20190322T000000
+RDATE:20200321T000000
+RDATE:20210322T000000
+RDATE:20220322T000000
+RDATE:20230322T000000
+RDATE:20240321T000000
+RDATE:20250322T000000
+RDATE:20260322T000000
+RDATE:20270322T000000
+RDATE:20280321T000000
+RDATE:20290321T000000
+RDATE:20300322T000000
+RDATE:20310322T000000
+RDATE:20320321T000000
+RDATE:20330321T000000
+RDATE:20340322T000000
+RDATE:20350322T000000
+RDATE:20360321T000000
+RDATE:20370321T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+TZNAME:IRST
+DTSTART:19790919T000000
+RDATE:19790919T000000
+RDATE:19800923T000000
+RDATE:19910922T000000
+RDATE:19920922T000000
+RDATE:19930922T000000
+RDATE:19940922T000000
+RDATE:19950922T000000
+RDATE:19960921T000000
+RDATE:19970922T000000
+RDATE:19980922T000000
+RDATE:19990922T000000
+RDATE:20000921T000000
+RDATE:20010922T000000
+RDATE:20020922T000000
+RDATE:20030922T000000
+RDATE:20040921T000000
+RDATE:20050922T000000
+RDATE:20080921T000000
+RDATE:20090922T000000
+RDATE:20100922T000000
+RDATE:20110922T000000
+RDATE:20120921T000000
+RDATE:20130922T000000
+RDATE:20140922T000000
+RDATE:20150922T000000
+RDATE:20160921T000000
+RDATE:20170922T000000
+RDATE:20180922T000000
+RDATE:20190922T000000
+RDATE:20200921T000000
+RDATE:20210922T000000
+RDATE:20220922T000000
+RDATE:20230922T000000
+RDATE:20240921T000000
+RDATE:20250922T000000
+RDATE:20260922T000000
+RDATE:20270922T000000
+RDATE:20280921T000000
+RDATE:20290921T000000
+RDATE:20300922T000000
+RDATE:20310922T000000
+RDATE:20320921T000000
+RDATE:20330921T000000
+RDATE:20340922T000000
+RDATE:20350922T000000
+RDATE:20360921T000000
+RDATE:20370921T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Thimphu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Thimphu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Thimphu
+TZURL:http://tzurl.org/zoneinfo/Asia/Thimphu
+X-LIC-LOCATION:Asia/Thimphu
+BEGIN:STANDARD
+TZOFFSETFROM:+055836
+TZOFFSETTO:+0530
+TZNAME:IST
+DTSTART:19470815T000000
+RDATE:19470815T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0600
+TZNAME:BTT
+DTSTART:19871001T000000
+RDATE:19871001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Tokyo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Tokyo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,50 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Tokyo
+TZURL:http://tzurl.org/zoneinfo/Asia/Tokyo
+X-LIC-LOCATION:Asia/Tokyo
+BEGIN:STANDARD
+TZOFFSETFROM:+091859
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:18880101T001859
+RDATE:18880101T001859
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:CJT
+DTSTART:18960101T000000
+RDATE:18960101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19380101T000000
+RDATE:19380101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:JDT
+DTSTART:19480502T020000
+RDATE:19480502T020000
+RDATE:19490403T020000
+RDATE:19500507T020000
+RDATE:19510506T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19480911T020000
+RDATE:19480911T020000
+RDATE:19490910T020000
+RDATE:19500909T020000
+RDATE:19510908T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Ulaanbaatar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Ulaanbaatar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Ulaanbaatar
+TZURL:http://tzurl.org/zoneinfo/Asia/Ulaanbaatar
+X-LIC-LOCATION:Asia/Ulaanbaatar
+BEGIN:STANDARD
+TZOFFSETFROM:+070732
+TZOFFSETTO:+0700
+TZNAME:ULAT
+DTSTART:19050801T000000
+RDATE:19050801T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ULAT
+DTSTART:19780101T000000
+RDATE:19780101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:ULAST
+DTSTART:19830401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+RDATE:20010428T020000
+RDATE:20020330T020000
+RDATE:20030329T020000
+RDATE:20040327T020000
+RDATE:20050326T020000
+RDATE:20060325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:ULAT
+DTSTART:19831001T000000
+RDATE:19831001T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+RDATE:19980927T000000
+RDATE:20010929T020000
+RDATE:20020928T020000
+RDATE:20030927T020000
+RDATE:20040925T020000
+RDATE:20050924T020000
+RDATE:20060930T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Urumqi.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Urumqi.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,47 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Urumqi
+TZURL:http://tzurl.org/zoneinfo/Asia/Urumqi
+X-LIC-LOCATION:Asia/Urumqi
+BEGIN:STANDARD
+TZOFFSETFROM:+055020
+TZOFFSETTO:+0600
+TZNAME:URUT
+DTSTART:19280101T000000
+RDATE:19280101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19800501T000000
+RDATE:19800501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:CDT
+DTSTART:19860504T000000
+RDATE:19860504T000000
+RDATE:19870412T000000
+RDATE:19880410T000000
+RDATE:19890416T000000
+RDATE:19900415T000000
+RDATE:19910414T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:CST
+DTSTART:19860914T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890917T000000
+RDATE:19900916T000000
+RDATE:19910915T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Vientiane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Vientiane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Vientiane
+TZURL:http://tzurl.org/zoneinfo/Asia/Vientiane
+X-LIC-LOCATION:Asia/Vientiane
+BEGIN:STANDARD
+TZOFFSETFROM:+065024
+TZOFFSETTO:+070620
+TZNAME:SMT
+DTSTART:19060609T000000
+RDATE:19060609T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+070620
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+TZNAME:ICT
+DTSTART:19120501T000000
+RDATE:19120501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+TZNAME:ICT
+DTSTART:19310501T000000
+RDATE:19310501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Vladivostok.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Vladivostok.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Vladivostok
+TZURL:http://tzurl.org/zoneinfo/Asia/Vladivostok
+X-LIC-LOCATION:Asia/Vladivostok
+BEGIN:STANDARD
+TZOFFSETFROM:+084744
+TZOFFSETTO:+0900
+TZNAME:VLAT
+DTSTART:19221115T000000
+RDATE:19221115T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:VLAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:VLAST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:VLAT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:VLASST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:VLAST
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:VLAT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Yakutsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Yakutsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Yakutsk
+TZURL:http://tzurl.org/zoneinfo/Asia/Yakutsk
+X-LIC-LOCATION:Asia/Yakutsk
+BEGIN:STANDARD
+TZOFFSETFROM:+083840
+TZOFFSETTO:+0800
+TZNAME:YAKT
+DTSTART:19191215T000000
+RDATE:19191215T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:YAKT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:YAKST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:YAKT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+TZNAME:YAKST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:YAKT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:YAKT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Yekaterinburg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Yekaterinburg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Yekaterinburg
+TZURL:http://tzurl.org/zoneinfo/Asia/Yekaterinburg
+X-LIC-LOCATION:Asia/Yekaterinburg
+BEGIN:STANDARD
+TZOFFSETFROM:+040224
+TZOFFSETTO:+0400
+TZNAME:SVET
+DTSTART:19190715T040000
+RDATE:19190715T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:SVET
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:SVEST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:SVET
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+TZNAME:SVEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:SVET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:YEKT
+DTSTART:19920119T020000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:YEKST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+TZNAME:YEKT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:YEKT
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Asia/Yerevan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Asia/Yerevan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,111 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Asia/Yerevan
+TZURL:http://tzurl.org/zoneinfo/Asia/Yerevan
+X-LIC-LOCATION:Asia/Yerevan
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:AMST
+DTSTART:19970330T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:AMT
+DTSTART:19971026T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0258
+TZOFFSETTO:+0300
+TZNAME:YERT
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:YERT
+DTSTART:19570301T000000
+RDATE:19570301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:YERST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:YERT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:YERST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AMST
+DTSTART:19910923T000000
+RDATE:19910923T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:AMT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:AMST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:AMT
+DTSTART:19950924T030000
+RDATE:19950924T030000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Azores.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Azores.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,224 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Azores
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Azores
+X-LIC-LOCATION:Atlantic/Azores
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:AZOST
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:AZOT
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-014240
+TZOFFSETTO:-015432
+TZNAME:HMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-015432
+TZOFFSETTO:-0200
+TZNAME:AZOT
+DTSTART:19110524T000000
+RDATE:19110524T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:AZOST
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19420314T230000
+RDATE:19430313T230000
+RDATE:19440311T230000
+RDATE:19450310T230000
+RDATE:19460406T230000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490403T020000
+RDATE:19510401T020000
+RDATE:19520406T020000
+RDATE:19530405T020000
+RDATE:19540404T020000
+RDATE:19550403T020000
+RDATE:19560401T020000
+RDATE:19570407T020000
+RDATE:19580406T020000
+RDATE:19590405T020000
+RDATE:19600403T020000
+RDATE:19610402T020000
+RDATE:19620401T020000
+RDATE:19630407T020000
+RDATE:19640405T020000
+RDATE:19650404T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:AZOT
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19171015T000000
+RDATE:19181015T000000
+RDATE:19191015T000000
+RDATE:19201015T000000
+RDATE:19211015T000000
+RDATE:19241015T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+RDATE:19401006T000000
+RDATE:19411006T000000
+RDATE:19421025T000000
+RDATE:19431031T000000
+RDATE:19441029T000000
+RDATE:19451028T000000
+RDATE:19461006T000000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19511007T030000
+RDATE:19521005T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611001T030000
+RDATE:19621007T030000
+RDATE:19631006T030000
+RDATE:19641004T030000
+RDATE:19651003T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:AZOMT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+RDATE:19440422T230000
+RDATE:19450421T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:AZOST
+DTSTART:19420816T000000
+RDATE:19420816T000000
+RDATE:19430829T000000
+RDATE:19440827T000000
+RDATE:19450826T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:AZOT
+DTSTART:19660403T020000
+RDATE:19660403T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:AZOST
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800330T000000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T020000
+RDATE:19840325T010000
+RDATE:19850331T010000
+RDATE:19860330T010000
+RDATE:19870329T010000
+RDATE:19880327T010000
+RDATE:19890326T010000
+RDATE:19900325T010000
+RDATE:19910331T010000
+RDATE:19920329T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:AZOT
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19930926T010000
+RDATE:19940925T010000
+RDATE:19950924T010000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19920927T020000
+RDATE:19920927T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:AZOST
+DTSTART:19930328T010000
+RDATE:19930328T010000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Bermuda.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Bermuda.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,115 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Bermuda
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Bermuda
+X-LIC-LOCATION:Atlantic/Bermuda
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-041904
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19300101T020000
+RDATE:19300101T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:ADT
+DTSTART:19740428T020000
+RDATE:19740428T020000
+RDATE:19750427T020000
+RDATE:19760425T020000
+RDATE:19770424T020000
+RDATE:19780430T020000
+RDATE:19790429T020000
+RDATE:19800427T020000
+RDATE:19810426T020000
+RDATE:19820425T020000
+RDATE:19830424T020000
+RDATE:19840429T020000
+RDATE:19850428T020000
+RDATE:19860427T020000
+RDATE:19870405T020000
+RDATE:19880403T020000
+RDATE:19890402T020000
+RDATE:19900401T020000
+RDATE:19910407T020000
+RDATE:19920405T020000
+RDATE:19930404T020000
+RDATE:19940403T020000
+RDATE:19950402T020000
+RDATE:19960407T020000
+RDATE:19970406T020000
+RDATE:19980405T020000
+RDATE:19990404T020000
+RDATE:20000402T020000
+RDATE:20010401T020000
+RDATE:20020407T020000
+RDATE:20030406T020000
+RDATE:20040404T020000
+RDATE:20050403T020000
+RDATE:20060402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19741027T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+TZNAME:AST
+DTSTART:19760101T000000
+RDATE:19760101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Canary.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Canary.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,73 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Canary
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Canary
+X-LIC-LOCATION:Atlantic/Canary
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010136
+TZOFFSETTO:-0100
+TZNAME:CANT
+DTSTART:19220301T000000
+RDATE:19220301T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19460930T010000
+RDATE:19460930T010000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19800406T000000
+RDATE:19800406T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19800928T010000
+RDATE:19800928T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19800928T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Cape_Verde.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Cape_Verde.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Cape_Verde
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Cape_Verde
+X-LIC-LOCATION:Atlantic/Cape_Verde
+BEGIN:STANDARD
+TZOFFSETFROM:-013404
+TZOFFSETTO:-0200
+TZNAME:CVT
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:CVST
+DTSTART:19420901T000000
+RDATE:19420901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+TZNAME:CVT
+DTSTART:19451015T000000
+RDATE:19451015T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+TZNAME:CVT
+DTSTART:19751125T020000
+RDATE:19751125T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Faroe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Faroe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,58 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Faroe
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Faroe
+X-LIC-LOCATION:Atlantic/Faroe
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002704
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19080111T000000
+RDATE:19080111T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19810927T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Madeira.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Madeira.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,202 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Madeira
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Madeira
+X-LIC-LOCATION:Atlantic/Madeira
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010736
+TZOFFSETTO:-010736
+TZNAME:FMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-010736
+TZOFFSETTO:-0100
+TZNAME:MADT
+DTSTART:19110524T000000
+RDATE:19110524T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:MADST
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19420314T230000
+RDATE:19430313T230000
+RDATE:19440311T230000
+RDATE:19450310T230000
+RDATE:19460406T230000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490403T020000
+RDATE:19510401T020000
+RDATE:19520406T020000
+RDATE:19530405T020000
+RDATE:19540404T020000
+RDATE:19550403T020000
+RDATE:19560401T020000
+RDATE:19570407T020000
+RDATE:19580406T020000
+RDATE:19590405T020000
+RDATE:19600403T020000
+RDATE:19610402T020000
+RDATE:19620401T020000
+RDATE:19630407T020000
+RDATE:19640405T020000
+RDATE:19650404T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:MADT
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19171015T000000
+RDATE:19181015T000000
+RDATE:19191015T000000
+RDATE:19201015T000000
+RDATE:19211015T000000
+RDATE:19241015T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+RDATE:19401006T000000
+RDATE:19411006T000000
+RDATE:19421025T000000
+RDATE:19431031T000000
+RDATE:19441029T000000
+RDATE:19451028T000000
+RDATE:19461006T000000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19511007T030000
+RDATE:19521005T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611001T030000
+RDATE:19621007T030000
+RDATE:19631006T030000
+RDATE:19641004T030000
+RDATE:19651003T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:MADMT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+RDATE:19440422T230000
+RDATE:19450421T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:MADST
+DTSTART:19420816T000000
+RDATE:19420816T000000
+RDATE:19430829T000000
+RDATE:19440827T000000
+RDATE:19450826T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19660403T020000
+RDATE:19660403T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800330T000000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Reykjavik.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Reykjavik.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,104 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Reykjavik
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Reykjavik
+X-LIC-LOCATION:Atlantic/Reykjavik
+BEGIN:STANDARD
+TZOFFSETFROM:-012724
+TZOFFSETTO:-012748
+TZNAME:RMT
+DTSTART:18370101T000000
+RDATE:18370101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-012748
+TZOFFSETTO:-0100
+TZNAME:IST
+DTSTART:19080101T000000
+RDATE:19080101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:ISST
+DTSTART:19170219T230000
+RDATE:19170219T230000
+RDATE:19180219T230000
+RDATE:19390429T230000
+RDATE:19400225T020000
+RDATE:19410302T010000
+RDATE:19420308T010000
+RDATE:19430307T010000
+RDATE:19440305T010000
+RDATE:19450304T010000
+RDATE:19460303T010000
+RDATE:19470406T010000
+RDATE:19480404T010000
+RDATE:19490403T010000
+RDATE:19500402T010000
+RDATE:19510401T010000
+RDATE:19520406T010000
+RDATE:19530405T010000
+RDATE:19540404T010000
+RDATE:19550403T010000
+RDATE:19560401T010000
+RDATE:19570407T010000
+RDATE:19580406T010000
+RDATE:19590405T010000
+RDATE:19600403T010000
+RDATE:19610402T010000
+RDATE:19620401T010000
+RDATE:19630407T010000
+RDATE:19640405T010000
+RDATE:19650404T010000
+RDATE:19660403T010000
+RDATE:19670402T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+TZNAME:IST
+DTSTART:19171021T010000
+RDATE:19171021T010000
+RDATE:19181116T010000
+RDATE:19391129T020000
+RDATE:19401103T020000
+RDATE:19411102T020000
+RDATE:19421025T020000
+RDATE:19431024T020000
+RDATE:19441022T020000
+RDATE:19451028T020000
+RDATE:19461027T020000
+RDATE:19471026T020000
+RDATE:19481024T020000
+RDATE:19491030T020000
+RDATE:19501022T020000
+RDATE:19511028T020000
+RDATE:19521026T020000
+RDATE:19531025T020000
+RDATE:19541024T020000
+RDATE:19551023T020000
+RDATE:19561028T020000
+RDATE:19571027T020000
+RDATE:19581026T020000
+RDATE:19591025T020000
+RDATE:19601023T020000
+RDATE:19611022T020000
+RDATE:19621028T020000
+RDATE:19631027T020000
+RDATE:19641025T020000
+RDATE:19651024T020000
+RDATE:19661023T020000
+RDATE:19671029T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19680407T010000
+RDATE:19680407T010000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/South_Georgia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/South_Georgia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/South_Georgia
+TZURL:http://tzurl.org/zoneinfo/Atlantic/South_Georgia
+X-LIC-LOCATION:Atlantic/South_Georgia
+BEGIN:STANDARD
+TZOFFSETFROM:-022608
+TZOFFSETTO:-0200
+TZNAME:GST
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/St_Helena.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/St_Helena.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/St_Helena
+TZURL:http://tzurl.org/zoneinfo/Atlantic/St_Helena
+X-LIC-LOCATION:Atlantic/St_Helena
+BEGIN:STANDARD
+TZOFFSETFROM:-002248
+TZOFFSETTO:-002248
+TZNAME:JMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002248
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Atlantic/Stanley.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Atlantic/Stanley.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,142 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Atlantic/Stanley
+TZURL:http://tzurl.org/zoneinfo/Atlantic/Stanley
+X-LIC-LOCATION:Atlantic/Stanley
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:FKT
+DTSTART:20120415T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=3SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:FKST
+DTSTART:20120902T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-035124
+TZOFFSETTO:-035124
+TZNAME:SMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-035124
+TZOFFSETTO:-0400
+TZNAME:FKT
+DTSTART:19120312T000000
+RDATE:19120312T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:FKST
+DTSTART:19370926T000000
+RDATE:19370926T000000
+RDATE:19380925T000000
+RDATE:19391001T000000
+RDATE:19400929T000000
+RDATE:19410928T000000
+RDATE:19420927T000000
+RDATE:19860914T000000
+RDATE:19870913T000000
+RDATE:19880911T000000
+RDATE:19890910T000000
+RDATE:19900909T000000
+RDATE:19910915T000000
+RDATE:19920913T000000
+RDATE:19930912T000000
+RDATE:19940911T000000
+RDATE:19950910T000000
+RDATE:19960915T000000
+RDATE:19970914T000000
+RDATE:19980913T000000
+RDATE:19990912T000000
+RDATE:20000910T000000
+RDATE:20010902T020000
+RDATE:20020901T020000
+RDATE:20030907T020000
+RDATE:20040905T020000
+RDATE:20050904T020000
+RDATE:20060903T020000
+RDATE:20070902T020000
+RDATE:20080907T020000
+RDATE:20090906T020000
+RDATE:20100905T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+TZNAME:FKT
+DTSTART:19380320T000000
+RDATE:19380320T000000
+RDATE:19390319T000000
+RDATE:19400324T000000
+RDATE:19410323T000000
+RDATE:19420322T000000
+RDATE:19430101T000000
+RDATE:19860420T000000
+RDATE:19870419T000000
+RDATE:19880417T000000
+RDATE:19890416T000000
+RDATE:19900422T000000
+RDATE:19910421T000000
+RDATE:19920419T000000
+RDATE:19930418T000000
+RDATE:19940417T000000
+RDATE:19950416T000000
+RDATE:19960421T000000
+RDATE:19970420T000000
+RDATE:19980419T000000
+RDATE:19990418T000000
+RDATE:20000416T000000
+RDATE:20010415T020000
+RDATE:20020421T020000
+RDATE:20030420T020000
+RDATE:20040418T020000
+RDATE:20050417T020000
+RDATE:20060416T020000
+RDATE:20070415T020000
+RDATE:20080420T020000
+RDATE:20090419T020000
+RDATE:20100418T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+TZNAME:FKT
+DTSTART:19830501T000000
+RDATE:19830501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+TZNAME:FKST
+DTSTART:19830925T000000
+RDATE:19830925T000000
+RDATE:19840916T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+TZNAME:FKT
+DTSTART:19840429T000000
+RDATE:19840429T000000
+RDATE:19850428T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+TZNAME:FKST
+DTSTART:19850915T000000
+RDATE:19850915T000000
+RDATE:20110904T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Adelaide.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Adelaide.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,137 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Adelaide
+TZURL:http://tzurl.org/zoneinfo/Australia/Adelaide
+X-LIC-LOCATION:Australia/Adelaide
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+091420
+TZOFFSETTO:+0900
+TZNAME:CST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:18990501T000000
+RDATE:18990501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910303T030000
+RDATE:19920322T030000
+RDATE:19930307T030000
+RDATE:19940320T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Brisbane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Brisbane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,51 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Brisbane
+TZURL:http://tzurl.org/zoneinfo/Australia/Brisbane
+X-LIC-LOCATION:Australia/Brisbane
+BEGIN:STANDARD
+TZOFFSETFROM:+101208
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Broken_Hill.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Broken_Hill.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,151 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Broken_Hill
+TZURL:http://tzurl.org/zoneinfo/Australia/Broken_Hill
+X-LIC-LOCATION:Australia/Broken_Hill
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+092548
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+TZNAME:CST
+DTSTART:18960823T000000
+RDATE:18960823T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:18990501T000000
+RDATE:18990501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820404T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+RDATE:19950305T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:20000101T000000
+RDATE:20000101T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Currie.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Currie.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,130 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Currie
+TZURL:http://tzurl.org/zoneinfo/Australia/Currie
+X-LIC-LOCATION:Australia/Currie
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+093528
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950901T000000
+RDATE:18950901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19161001T020000
+RDATE:19161001T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20000827T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170201T000000
+RDATE:19170201T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820328T030000
+RDATE:19830327T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910331T030000
+RDATE:19920329T030000
+RDATE:19930328T030000
+RDATE:19940327T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710701T000000
+RDATE:19710701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Darwin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Darwin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,43 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Darwin
+TZURL:http://tzurl.org/zoneinfo/Australia/Darwin
+X-LIC-LOCATION:Australia/Darwin
+BEGIN:STANDARD
+TZOFFSETFROM:+084320
+TZOFFSETTO:+0900
+TZNAME:CST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:18990501T000000
+RDATE:18990501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+TZNAME:CST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+TZNAME:CST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Eucla.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Eucla.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,53 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Eucla
+TZURL:http://tzurl.org/zoneinfo/Australia/Eucla
+X-LIC-LOCATION:Australia/Eucla
+BEGIN:STANDARD
+TZOFFSETFROM:+083528
+TZOFFSETTO:+0845
+TZNAME:CWST
+DTSTART:18951201T000000
+RDATE:18951201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0845
+TZOFFSETTO:+0945
+TZNAME:CWST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19741027T020000
+RDATE:19831030T020000
+RDATE:19911117T020000
+RDATE:20061203T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0945
+TZOFFSETTO:+0845
+TZNAME:CWST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19750302T030000
+RDATE:19840304T030000
+RDATE:19920301T030000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0845
+TZOFFSETTO:+0845
+TZNAME:CWST
+DTSTART:19430701T000000
+RDATE:19430701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Hobart.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Hobart.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Hobart
+TZURL:http://tzurl.org/zoneinfo/Australia/Hobart
+X-LIC-LOCATION:Australia/Hobart
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+094916
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950901T000000
+RDATE:18950901T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19161001T020000
+RDATE:19161001T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19681027T020000
+RDATE:19691026T020000
+RDATE:19701025T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20000827T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170201T000000
+RDATE:19170201T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19680331T030000
+RDATE:19690309T030000
+RDATE:19700308T030000
+RDATE:19710314T030000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820328T030000
+RDATE:19830327T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910331T030000
+RDATE:19920329T030000
+RDATE:19930328T030000
+RDATE:19940327T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19670101T000000
+RDATE:19670101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Lindeman.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Lindeman.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,56 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Lindeman
+TZURL:http://tzurl.org/zoneinfo/Australia/Lindeman
+X-LIC-LOCATION:Australia/Lindeman
+BEGIN:STANDARD
+TZOFFSETFROM:+095556
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+RDATE:19920701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Lord_Howe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Lord_Howe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,114 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Lord_Howe
+TZURL:http://tzurl.org/zoneinfo/Australia/Lord_Howe
+X-LIC-LOCATION:Australia/Lord_Howe
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:20080406T020000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1100
+TZNAME:LHST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+103620
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:19810301T000000
+RDATE:19810301T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1130
+TZNAME:LHST
+DTSTART:19811025T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:19820307T020000
+RDATE:19820307T020000
+RDATE:19830306T020000
+RDATE:19840304T020000
+RDATE:19850303T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1030
+TZOFFSETTO:+1100
+TZNAME:LHST
+DTSTART:19851027T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20000827T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1030
+TZNAME:LHST
+DTSTART:19860316T020000
+RDATE:19860316T020000
+RDATE:19870315T020000
+RDATE:19880320T020000
+RDATE:19890319T020000
+RDATE:19900304T020000
+RDATE:19910303T020000
+RDATE:19920301T020000
+RDATE:19930307T020000
+RDATE:19940306T020000
+RDATE:19950305T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060402T020000
+RDATE:20070325T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Melbourne.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Melbourne.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,130 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Melbourne
+TZURL:http://tzurl.org/zoneinfo/Australia/Melbourne
+X-LIC-LOCATION:Australia/Melbourne
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+093952
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871018T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20000827T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900318T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+RDATE:19950326T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Perth.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Perth.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,53 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Perth
+TZURL:http://tzurl.org/zoneinfo/Australia/Perth
+X-LIC-LOCATION:Australia/Perth
+BEGIN:STANDARD
+TZOFFSETFROM:+074324
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:18951201T000000
+RDATE:18951201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+TZNAME:WST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19741027T020000
+RDATE:19831030T020000
+RDATE:19911117T020000
+RDATE:20061203T020000
+RDATE:20071028T020000
+RDATE:20081026T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19750302T030000
+RDATE:19840304T030000
+RDATE:19920301T030000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+TZNAME:WST
+DTSTART:19430701T000000
+RDATE:19430701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Australia/Sydney.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Australia/Sydney.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,130 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Australia/Sydney
+TZURL:http://tzurl.org/zoneinfo/Australia/Sydney
+X-LIC-LOCATION:Australia/Sydney
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+100452
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+TZNAME:EST
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+RDATE:19721029T020000
+RDATE:19731028T020000
+RDATE:19741027T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931031T020000
+RDATE:19941030T020000
+RDATE:19951029T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20000827T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+RDATE:20071028T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19440326T020000
+RDATE:19720227T030000
+RDATE:19730304T030000
+RDATE:19740303T030000
+RDATE:19750302T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820404T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860316T030000
+RDATE:19870315T030000
+RDATE:19880320T030000
+RDATE:19890319T030000
+RDATE:19900304T030000
+RDATE:19910303T030000
+RDATE:19920301T030000
+RDATE:19930307T030000
+RDATE:19940306T030000
+RDATE:19950305T030000
+RDATE:19960331T030000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+RDATE:20000326T030000
+RDATE:20010325T030000
+RDATE:20020331T030000
+RDATE:20030330T030000
+RDATE:20040328T030000
+RDATE:20050327T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:EST
+DTSTART:19710101T000000
+RDATE:19710101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Amsterdam.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Amsterdam.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Amsterdam
+TZURL:http://tzurl.org/zoneinfo/Europe/Amsterdam
+X-LIC-LOCATION:Europe/Amsterdam
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+001932
+TZOFFSETTO:+001932
+TZNAME:AMT
+DTSTART:18350101T000000
+RDATE:18350101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+001932
+TZOFFSETTO:+011932
+TZNAME:NST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19170416T020000
+RDATE:19180401T020000
+RDATE:19190407T020000
+RDATE:19200405T020000
+RDATE:19210404T020000
+RDATE:19220326T020000
+RDATE:19230601T020000
+RDATE:19240330T020000
+RDATE:19250605T020000
+RDATE:19260515T020000
+RDATE:19270515T020000
+RDATE:19280515T020000
+RDATE:19290515T020000
+RDATE:19300515T020000
+RDATE:19310515T020000
+RDATE:19320522T020000
+RDATE:19330515T020000
+RDATE:19340515T020000
+RDATE:19350515T020000
+RDATE:19360515T020000
+RDATE:19370522T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+011932
+TZOFFSETTO:+001932
+TZNAME:AMT
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19200927T030000
+RDATE:19210926T030000
+RDATE:19221008T030000
+RDATE:19231007T030000
+RDATE:19241005T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+011932
+TZOFFSETTO:+0120
+TZNAME:NEST
+DTSTART:19370701T000000
+RDATE:19370701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0120
+TZOFFSETTO:+0020
+TZNAME:NET
+DTSTART:19371003T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391008T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0020
+TZOFFSETTO:+0120
+TZNAME:NEST
+DTSTART:19380515T020000
+RDATE:19380515T020000
+RDATE:19390515T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0020
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400516T000000
+RDATE:19400516T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Andorra.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Andorra.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,54 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Andorra
+TZURL:http://tzurl.org/zoneinfo/Europe/Andorra
+X-LIC-LOCATION:Europe/Andorra
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000604
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19460930T000000
+RDATE:19460930T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19850929T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Athens.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Athens.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,117 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Athens
+TZURL:http://tzurl.org/zoneinfo/Europe/Athens
+X-LIC-LOCATION:Europe/Athens
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013452
+TZOFFSETTO:+013452
+TZNAME:AMT
+DTSTART:18950914T000000
+RDATE:18950914T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013452
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19160728T000100
+RDATE:19160728T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19320707T000000
+RDATE:19320707T000000
+RDATE:19410407T000000
+RDATE:19520701T000000
+RDATE:19750412T000000
+RDATE:19760411T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T090000
+RDATE:19800401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19320901T000000
+RDATE:19320901T000000
+RDATE:19521102T000000
+RDATE:19751126T010000
+RDATE:19761010T030000
+RDATE:19770926T030000
+RDATE:19780924T040000
+RDATE:19790929T020000
+RDATE:19800928T000000
+RDATE:19810927T040000
+RDATE:19820926T040000
+RDATE:19830925T040000
+RDATE:19840930T040000
+RDATE:19850929T040000
+RDATE:19860928T040000
+RDATE:19870927T040000
+RDATE:19880925T040000
+RDATE:19890924T040000
+RDATE:19900930T040000
+RDATE:19910929T040000
+RDATE:19920927T040000
+RDATE:19930926T040000
+RDATE:19940925T040000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410430T000000
+RDATE:19410430T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430330T000000
+RDATE:19430330T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19440404T000000
+RDATE:19440404T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Belgrade.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Belgrade.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Belgrade
+TZURL:http://tzurl.org/zoneinfo/Europe/Belgrade
+X-LIC-LOCATION:Europe/Belgrade
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Berlin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Berlin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,105 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Berlin
+TZURL:http://tzurl.org/zoneinfo/Europe/Berlin
+X-LIC-LOCATION:Europe/Berlin
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005328
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18930401T000000
+RDATE:18930401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460414T020000
+RDATE:19470406T030000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451118T030000
+RDATE:19461007T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CEMT
+DTSTART:19450524T020000
+RDATE:19450524T020000
+RDATE:19470511T030000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19450924T030000
+RDATE:19450924T030000
+RDATE:19470629T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Bratislava.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Bratislava.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,97 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Bratislava
+TZURL:http://tzurl.org/zoneinfo/Europe/Bratislava
+X-LIC-LOCATION:Europe/Bratislava
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+005744
+TZNAME:PMT
+DTSTART:18500101T000000
+RDATE:18500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18911001T000000
+RDATE:18911001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450408T020000
+RDATE:19460506T020000
+RDATE:19470420T020000
+RDATE:19480418T020000
+RDATE:19490409T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T030000
+RDATE:19451118T030000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Brussels.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Brussels.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Brussels
+TZURL:http://tzurl.org/zoneinfo/Europe/Brussels
+X-LIC-LOCATION:Europe/Brussels
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+001730
+TZOFFSETTO:+001730
+TZNAME:BMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+001730
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:18920501T120000
+RDATE:18920501T120000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19141108T000000
+RDATE:19141108T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400520T030000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460519T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T030000
+RDATE:19450916T030000
+RDATE:19461007T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19181111T120000
+RDATE:19181111T120000
+RDATE:19191005T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19190301T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230421T230000
+RDATE:19240329T230000
+RDATE:19250404T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320403T020000
+RDATE:19330326T020000
+RDATE:19340408T020000
+RDATE:19350331T020000
+RDATE:19360419T020000
+RDATE:19370404T020000
+RDATE:19380327T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440903T000000
+RDATE:19440903T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Bucharest.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Bucharest.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,110 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Bucharest
+TZURL:http://tzurl.org/zoneinfo/Europe/Bucharest
+X-LIC-LOCATION:Europe/Bucharest
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014424
+TZOFFSETTO:+014424
+TZNAME:BMT
+DTSTART:18911001T000000
+RDATE:18911001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014424
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19310724T000000
+RDATE:19310724T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19330402T000000
+RDATE:19340408T000000
+RDATE:19350407T000000
+RDATE:19360405T000000
+RDATE:19370404T000000
+RDATE:19380403T000000
+RDATE:19390402T000000
+RDATE:19790527T000000
+RDATE:19800405T230000
+RDATE:19810329T020000
+RDATE:19820328T020000
+RDATE:19830327T020000
+RDATE:19840325T020000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19321002T010000
+RDATE:19321002T010000
+RDATE:19331001T010000
+RDATE:19341007T010000
+RDATE:19351006T010000
+RDATE:19361004T010000
+RDATE:19371003T010000
+RDATE:19381002T010000
+RDATE:19391001T010000
+RDATE:19790930T000000
+RDATE:19800928T010000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T010000
+RDATE:19920927T010000
+RDATE:19930926T010000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19940101T000000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Budapest.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Budapest.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,103 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Budapest
+TZURL:http://tzurl.org/zoneinfo/Europe/Budapest
+X-LIC-LOCATION:Europe/Budapest
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+011620
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18901001T000000
+RDATE:18901001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180401T030000
+RDATE:19190415T030000
+RDATE:19200405T030000
+RDATE:19410406T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450501T230000
+RDATE:19460331T020000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490410T020000
+RDATE:19500417T020000
+RDATE:19540523T000000
+RDATE:19550523T000000
+RDATE:19560603T000000
+RDATE:19570602T010000
+RDATE:19800406T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180929T030000
+RDATE:19190915T030000
+RDATE:19200930T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451103T000000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19501023T030000
+RDATE:19541003T000000
+RDATE:19551003T000000
+RDATE:19560930T000000
+RDATE:19570929T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19450101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Chisinau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Chisinau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,162 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Chisinau
+TZURL:http://tzurl.org/zoneinfo/Europe/Chisinau
+X-LIC-LOCATION:Europe/Chisinau
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015520
+TZOFFSETTO:+0155
+TZNAME:CMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0155
+TZOFFSETTO:+014424
+TZNAME:BMT
+DTSTART:19180215T000000
+RDATE:19180215T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014424
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19310724T000000
+RDATE:19310724T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19330402T000000
+RDATE:19340408T000000
+RDATE:19350407T000000
+RDATE:19360405T000000
+RDATE:19370404T000000
+RDATE:19380403T000000
+RDATE:19390402T000000
+RDATE:19400815T000000
+RDATE:19910331T020000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19321002T010000
+RDATE:19321002T010000
+RDATE:19331001T010000
+RDATE:19341007T010000
+RDATE:19351006T010000
+RDATE:19361004T010000
+RDATE:19371003T010000
+RDATE:19381002T010000
+RDATE:19391001T010000
+RDATE:19900506T000000
+RDATE:19910929T030000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410717T000000
+RDATE:19410717T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19440824T000000
+RDATE:19440824T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19920101T000000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Copenhagen.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Copenhagen.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,89 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Copenhagen
+TZURL:http://tzurl.org/zoneinfo/Europe/Copenhagen
+X-LIC-LOCATION:Europe/Copenhagen
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005020
+TZOFFSETTO:+005020
+TZNAME:CMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005020
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18940101T000000
+RDATE:18940101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160514T230000
+RDATE:19160514T230000
+RDATE:19400515T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460501T020000
+RDATE:19470504T020000
+RDATE:19480509T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19160930T230000
+RDATE:19160930T230000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450815T030000
+RDATE:19460901T030000
+RDATE:19470810T030000
+RDATE:19480808T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Dublin.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Dublin.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,202 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Dublin
+TZURL:http://tzurl.org/zoneinfo/Europe/Dublin
+X-LIC-LOCATION:Europe/Dublin
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:IST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0025
+TZOFFSETTO:-002521
+TZNAME:DMT
+DTSTART:18800802T000000
+RDATE:18800802T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-002521
+TZOFFSETTO:+003439
+TZNAME:IST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+003439
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19170917T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19461006T020000
+RDATE:19471102T020000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19211206T000000
+RDATE:19211206T000000
+RDATE:19960101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:IST
+DTSTART:19220326T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19470316T020000
+RDATE:19480418T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:IST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Gibraltar.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Gibraltar.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,172 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Gibraltar
+TZURL:http://tzurl.org/zoneinfo/Europe/Gibraltar
+X-LIC-LOCATION:Europe/Gibraltar
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19820328T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-002124
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18800802T000000
+RDATE:18800802T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19570414T020000
+RDATE:19570414T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19820101T000000
+RDATE:19820101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19820926T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Guernsey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Guernsey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Guernsey
+TZURL:http://tzurl.org/zoneinfo/Europe/Guernsey
+X-LIC-LOCATION:Europe/Guernsey
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Helsinki.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Helsinki.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Helsinki
+TZURL:http://tzurl.org/zoneinfo/Europe/Helsinki
+X-LIC-LOCATION:Europe/Helsinki
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19830327T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+013952
+TZNAME:HMT
+DTSTART:18780531T000000
+RDATE:18780531T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19210501T000000
+RDATE:19210501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19420403T000000
+RDATE:19420403T000000
+RDATE:19810329T020000
+RDATE:19820328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421003T000000
+RDATE:19421003T000000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T040000
+RDATE:19840930T040000
+RDATE:19850929T040000
+RDATE:19860928T040000
+RDATE:19870927T040000
+RDATE:19880925T040000
+RDATE:19890924T040000
+RDATE:19900930T040000
+RDATE:19910929T040000
+RDATE:19920927T040000
+RDATE:19930926T040000
+RDATE:19940925T040000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19830101T000000
+RDATE:19830101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Isle_of_Man.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Isle_of_Man.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Isle_of_Man
+TZURL:http://tzurl.org/zoneinfo/Europe/Isle_of_Man
+X-LIC-LOCATION:Europe/Isle_of_Man
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Istanbul.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Istanbul.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,194 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Istanbul
+TZURL:http://tzurl.org/zoneinfo/Europe/Istanbul
+X-LIC-LOCATION:Europe/Istanbul
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20120325T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+015552
+TZOFFSETTO:+015656
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19101001T000000
+RDATE:19101001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19160501T000000
+RDATE:19160501T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19240513T000000
+RDATE:19250501T000000
+RDATE:19400630T000000
+RDATE:19401201T000000
+RDATE:19420401T000000
+RDATE:19450402T000000
+RDATE:19460601T000000
+RDATE:19470420T000000
+RDATE:19480418T000000
+RDATE:19490410T000000
+RDATE:19500419T000000
+RDATE:19510422T000000
+RDATE:19620715T000000
+RDATE:19640515T000000
+RDATE:19700503T000000
+RDATE:19710502T000000
+RDATE:19720507T000000
+RDATE:19730603T010000
+RDATE:19740331T020000
+RDATE:19750330T000000
+RDATE:19760601T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T010000
+RDATE:19920329T010000
+RDATE:19930328T010000
+RDATE:19940327T010000
+RDATE:19950326T010000
+RDATE:19960331T010000
+RDATE:19970330T010000
+RDATE:19980329T010000
+RDATE:19990328T010000
+RDATE:20000326T010000
+RDATE:20010325T010000
+RDATE:20020331T010000
+RDATE:20030330T010000
+RDATE:20040328T010000
+RDATE:20050327T010000
+RDATE:20060326T010000
+RDATE:20070325T030000
+RDATE:20080330T030000
+RDATE:20090329T030000
+RDATE:20100328T030000
+RDATE:20110328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19241001T000000
+RDATE:19251001T000000
+RDATE:19401005T000000
+RDATE:19410921T000000
+RDATE:19421101T000000
+RDATE:19451008T000000
+RDATE:19461001T000000
+RDATE:19471005T000000
+RDATE:19481003T000000
+RDATE:19491002T000000
+RDATE:19501008T000000
+RDATE:19511008T000000
+RDATE:19621008T000000
+RDATE:19641001T000000
+RDATE:19701004T000000
+RDATE:19711003T000000
+RDATE:19721008T000000
+RDATE:19731104T030000
+RDATE:19741103T050000
+RDATE:19751026T000000
+RDATE:19761031T000000
+RDATE:19771016T000000
+RDATE:19850928T000000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T020000
+RDATE:19920927T020000
+RDATE:19930926T020000
+RDATE:19940925T020000
+RDATE:19950924T020000
+RDATE:19961027T020000
+RDATE:19971026T020000
+RDATE:19981025T020000
+RDATE:19991031T020000
+RDATE:20001029T020000
+RDATE:20011028T020000
+RDATE:20021027T020000
+RDATE:20031026T020000
+RDATE:20041031T020000
+RDATE:20051030T020000
+RDATE:20061029T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19781015T000000
+RDATE:19781015T000000
+RDATE:19800406T030000
+RDATE:19810329T030000
+RDATE:19820328T030000
+RDATE:19830731T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:TRST
+DTSTART:19790401T030000
+RDATE:19790401T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:TRT
+DTSTART:19791015T000000
+RDATE:19791015T000000
+RDATE:19801013T000000
+RDATE:19811012T000000
+RDATE:19821011T000000
+RDATE:19831002T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19850420T000000
+RDATE:19850420T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20070101T000000
+RDATE:20070101T000000
+RDATE:20110327T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Jersey.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Jersey.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Jersey
+TZURL:http://tzurl.org/zoneinfo/Europe/Jersey
+X-LIC-LOCATION:Europe/Jersey
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Kaliningrad.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Kaliningrad.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,165 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Kaliningrad
+TZURL:http://tzurl.org/zoneinfo/Europe/Kaliningrad
+X-LIC-LOCATION:Europe/Kaliningrad
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18930401T000000
+RDATE:18930401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:CEST
+DTSTART:19450429T000000
+RDATE:19450429T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CET
+DTSTART:19451101T000000
+RDATE:19451101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:FET
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Kiev.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Kiev.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,138 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Kiev
+TZURL:http://tzurl.org/zoneinfo/Europe/Kiev
+X-LIC-LOCATION:Europe/Kiev
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+020204
+TZOFFSETTO:+020204
+TZNAME:KMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+020204
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410920T000000
+RDATE:19410920T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19431106T000000
+RDATE:19431106T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19900701T020000
+RDATE:19900701T020000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+RDATE:19950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Lisbon.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Lisbon.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,228 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Lisbon
+TZURL:http://tzurl.org/zoneinfo/Europe/Lisbon
+X-LIC-LOCATION:Europe/Lisbon
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19970330T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-003632
+TZOFFSETTO:-003632
+TZNAME:LMT
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-003632
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19120101T000000
+RDATE:19120101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160617T230000
+RDATE:19160617T230000
+RDATE:19170228T230000
+RDATE:19180301T230000
+RDATE:19190228T230000
+RDATE:19200229T230000
+RDATE:19210228T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400224T230000
+RDATE:19410405T230000
+RDATE:19420314T230000
+RDATE:19430313T230000
+RDATE:19440311T230000
+RDATE:19450310T230000
+RDATE:19460406T230000
+RDATE:19470406T020000
+RDATE:19480404T020000
+RDATE:19490403T020000
+RDATE:19510401T020000
+RDATE:19520406T020000
+RDATE:19530405T020000
+RDATE:19540404T020000
+RDATE:19550403T020000
+RDATE:19560401T020000
+RDATE:19570407T020000
+RDATE:19580406T020000
+RDATE:19590405T020000
+RDATE:19600403T020000
+RDATE:19610402T020000
+RDATE:19620401T020000
+RDATE:19630407T020000
+RDATE:19640405T020000
+RDATE:19650404T020000
+RDATE:19770327T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800330T000000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T020000
+RDATE:19840325T010000
+RDATE:19850331T010000
+RDATE:19860330T010000
+RDATE:19870329T010000
+RDATE:19880327T010000
+RDATE:19890326T010000
+RDATE:19900325T010000
+RDATE:19910331T010000
+RDATE:19920329T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19171015T000000
+RDATE:19181015T000000
+RDATE:19191015T000000
+RDATE:19201015T000000
+RDATE:19211015T000000
+RDATE:19241015T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+RDATE:19401006T000000
+RDATE:19411006T000000
+RDATE:19421025T000000
+RDATE:19431031T000000
+RDATE:19441029T000000
+RDATE:19451028T000000
+RDATE:19461006T000000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19511007T030000
+RDATE:19521005T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611001T030000
+RDATE:19621007T030000
+RDATE:19631006T030000
+RDATE:19641004T030000
+RDATE:19651003T030000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T020000
+RDATE:19890924T020000
+RDATE:19900930T020000
+RDATE:19910929T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+RDATE:19440422T230000
+RDATE:19450421T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19420816T000000
+RDATE:19420816T000000
+RDATE:19430829T000000
+RDATE:19440827T000000
+RDATE:19450826T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19660403T020000
+RDATE:19660403T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19920927T020000
+RDATE:19920927T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19930328T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19930926T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19960331T020000
+RDATE:19960331T020000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Ljubljana.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Ljubljana.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Ljubljana
+TZURL:http://tzurl.org/zoneinfo/Europe/Ljubljana
+X-LIC-LOCATION:Europe/Ljubljana
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/London.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/London.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,209 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/London
+TZURL:http://tzurl.org/zoneinfo/Europe/London
+X-LIC-LOCATION:Europe/London
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:18471201T000000
+RDATE:18471201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19250419T020000
+RDATE:19260418T020000
+RDATE:19270410T020000
+RDATE:19280422T020000
+RDATE:19290421T020000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320417T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19360419T020000
+RDATE:19370418T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19500416T020000
+RDATE:19510415T020000
+RDATE:19520420T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19550417T020000
+RDATE:19560422T020000
+RDATE:19570414T020000
+RDATE:19580420T020000
+RDATE:19590419T020000
+RDATE:19600410T020000
+RDATE:19610326T020000
+RDATE:19620325T020000
+RDATE:19630331T020000
+RDATE:19640322T020000
+RDATE:19650321T020000
+RDATE:19660320T020000
+RDATE:19670319T020000
+RDATE:19680218T020000
+RDATE:19720319T020000
+RDATE:19730318T020000
+RDATE:19740317T020000
+RDATE:19750316T020000
+RDATE:19760321T020000
+RDATE:19770320T020000
+RDATE:19780319T020000
+RDATE:19790318T020000
+RDATE:19800316T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19230916T030000
+RDATE:19240921T030000
+RDATE:19251004T030000
+RDATE:19261003T030000
+RDATE:19271002T030000
+RDATE:19281007T030000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+RDATE:19451007T030000
+RDATE:19461006T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+RDATE:19501022T030000
+RDATE:19511021T030000
+RDATE:19521026T030000
+RDATE:19531004T030000
+RDATE:19541003T030000
+RDATE:19551002T030000
+RDATE:19561007T030000
+RDATE:19571006T030000
+RDATE:19581005T030000
+RDATE:19591004T030000
+RDATE:19601002T030000
+RDATE:19611029T030000
+RDATE:19621028T030000
+RDATE:19631027T030000
+RDATE:19641025T030000
+RDATE:19651024T030000
+RDATE:19661023T030000
+RDATE:19671029T030000
+RDATE:19711031T030000
+RDATE:19721029T030000
+RDATE:19731028T030000
+RDATE:19741027T030000
+RDATE:19751026T030000
+RDATE:19761024T030000
+RDATE:19771023T030000
+RDATE:19781029T030000
+RDATE:19791028T030000
+RDATE:19801026T030000
+RDATE:19811025T020000
+RDATE:19821024T020000
+RDATE:19831023T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881023T020000
+RDATE:19891029T020000
+RDATE:19901028T020000
+RDATE:19911027T020000
+RDATE:19921025T020000
+RDATE:19931024T020000
+RDATE:19941023T020000
+RDATE:19951022T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:BDST
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19420405T020000
+RDATE:19430404T020000
+RDATE:19440402T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19410810T030000
+RDATE:19410810T030000
+RDATE:19420809T030000
+RDATE:19430815T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:BST
+DTSTART:19681027T000000
+RDATE:19681027T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+TZNAME:GMT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Luxembourg.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Luxembourg.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,156 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Luxembourg
+TZURL:http://tzurl.org/zoneinfo/Europe/Luxembourg
+X-LIC-LOCATION:Europe/Luxembourg
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+002436
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19040601T000000
+RDATE:19040601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160514T230000
+RDATE:19160514T230000
+RDATE:19170428T230000
+RDATE:19180415T020000
+RDATE:19450402T020000
+RDATE:19460519T020000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T010000
+RDATE:19180916T030000
+RDATE:19440918T030000
+RDATE:19450916T030000
+RDATE:19461007T030000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19181125T000000
+RDATE:19181125T000000
+RDATE:19191005T030000
+RDATE:19201024T020000
+RDATE:19211026T020000
+RDATE:19221008T010000
+RDATE:19231007T020000
+RDATE:19241005T010000
+RDATE:19251004T010000
+RDATE:19261003T010000
+RDATE:19271002T010000
+RDATE:19281007T010000
+RDATE:19291006T030000
+RDATE:19301005T030000
+RDATE:19311004T030000
+RDATE:19321002T030000
+RDATE:19331008T030000
+RDATE:19341007T030000
+RDATE:19351006T030000
+RDATE:19361004T030000
+RDATE:19371003T030000
+RDATE:19381002T030000
+RDATE:19391119T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19190301T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230421T230000
+RDATE:19240329T230000
+RDATE:19250405T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19300413T020000
+RDATE:19310419T020000
+RDATE:19320403T020000
+RDATE:19330326T020000
+RDATE:19340408T020000
+RDATE:19350331T020000
+RDATE:19360419T020000
+RDATE:19370404T020000
+RDATE:19380327T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEST
+DTSTART:19400514T030000
+RDATE:19400514T030000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Madrid.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Madrid.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,137 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Madrid
+TZURL:http://tzurl.org/zoneinfo/Europe/Madrid
+X-LIC-LOCATION:Europe/Madrid
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-001444
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19170505T230000
+RDATE:19170505T230000
+RDATE:19180415T230000
+RDATE:19190405T230000
+RDATE:19240416T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19370522T230000
+RDATE:19380322T230000
+RDATE:19390415T230000
+RDATE:19400316T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19171007T000000
+RDATE:19171007T000000
+RDATE:19181007T000000
+RDATE:19191007T000000
+RDATE:19241005T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391008T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19420502T230000
+RDATE:19420502T230000
+RDATE:19430417T230000
+RDATE:19440415T230000
+RDATE:19450414T230000
+RDATE:19460413T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19420902T000000
+RDATE:19420902T000000
+RDATE:19431004T000000
+RDATE:19441011T000000
+RDATE:19450930T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19460930T000000
+RDATE:19460930T000000
+RDATE:19490930T010000
+RDATE:19741006T010000
+RDATE:19751005T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19490430T230000
+RDATE:19490430T230000
+RDATE:19740413T230000
+RDATE:19750419T230000
+RDATE:19760327T230000
+RDATE:19770402T230000
+RDATE:19780402T230000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Malta.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Malta.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,118 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Malta
+TZURL:http://tzurl.org/zoneinfo/Europe/Malta
+X-LIC-LOCATION:Europe/Malta
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005804
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931102T000000
+RDATE:18931102T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730331T000000
+RDATE:19740421T000000
+RDATE:19750420T020000
+RDATE:19760418T020000
+RDATE:19770417T020000
+RDATE:19780416T020000
+RDATE:19790415T020000
+RDATE:19800331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730929T010000
+RDATE:19740916T010000
+RDATE:19750921T020000
+RDATE:19760919T020000
+RDATE:19770918T020000
+RDATE:19780917T020000
+RDATE:19790916T020000
+RDATE:19800921T020000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Mariehamn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Mariehamn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Mariehamn
+TZURL:http://tzurl.org/zoneinfo/Europe/Mariehamn
+X-LIC-LOCATION:Europe/Mariehamn
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19830327T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+013952
+TZNAME:HMT
+DTSTART:18780531T000000
+RDATE:18780531T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013952
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19210501T000000
+RDATE:19210501T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19420403T000000
+RDATE:19420403T000000
+RDATE:19810329T020000
+RDATE:19820328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19421003T000000
+RDATE:19421003T000000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T040000
+RDATE:19840930T040000
+RDATE:19850929T040000
+RDATE:19860928T040000
+RDATE:19870927T040000
+RDATE:19880925T040000
+RDATE:19890924T040000
+RDATE:19900930T040000
+RDATE:19910929T040000
+RDATE:19920927T040000
+RDATE:19930926T040000
+RDATE:19940925T040000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19830101T000000
+RDATE:19830101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Minsk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Minsk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,156 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Minsk
+TZURL:http://tzurl.org/zoneinfo/Europe/Minsk
+X-LIC-LOCATION:Europe/Minsk
+BEGIN:STANDARD
+TZOFFSETFROM:+015016
+TZOFFSETTO:+0150
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0150
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19440703T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410628T000000
+RDATE:19410628T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920927T010000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:FET
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Monaco.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Monaco.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,164 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Monaco
+TZURL:http://tzurl.org/zoneinfo/Europe/Monaco
+X-LIC-LOCATION:Europe/Monaco
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+002932
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18910315T000000
+RDATE:18910315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19110311T000000
+RDATE:19110311T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160614T230000
+RDATE:19160614T230000
+RDATE:19170324T230000
+RDATE:19180309T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230526T230000
+RDATE:19240329T230000
+RDATE:19250404T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19300412T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19330325T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161002T000000
+RDATE:19161002T000000
+RDATE:19171008T000000
+RDATE:19181007T000000
+RDATE:19191006T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331008T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19410505T000000
+RDATE:19410505T000000
+RDATE:19420309T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19411006T000000
+RDATE:19411006T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441008T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450916T030000
+RDATE:19450916T030000
+RDATE:19760926T010000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19760328T010000
+RDATE:19760328T010000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Moscow.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Moscow.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,182 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Moscow
+TZURL:http://tzurl.org/zoneinfo/Europe/Moscow
+X-LIC-LOCATION:Europe/Moscow
+BEGIN:STANDARD
+TZOFFSETFROM:+023020
+TZOFFSETTO:+0230
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0230
+TZOFFSETTO:+023048
+TZNAME:MMT
+DTSTART:19160703T000000
+RDATE:19160703T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+023048
+TZOFFSETTO:+033048
+TZNAME:MST
+DTSTART:19170701T230000
+RDATE:19170701T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+033048
+TZOFFSETTO:+023048
+TZNAME:MMT
+DTSTART:19171228T000000
+RDATE:19171228T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+023048
+TZOFFSETTO:+043048
+TZNAME:MDST
+DTSTART:19180531T220000
+RDATE:19180531T220000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+043048
+TZOFFSETTO:+033048
+TZNAME:MST
+DTSTART:19180916T010000
+RDATE:19180916T010000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+033048
+TZOFFSETTO:+043048
+TZNAME:MDST
+DTSTART:19190531T230000
+RDATE:19190531T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+043048
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19190701T020000
+RDATE:19190701T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19190816T000000
+RDATE:19190816T000000
+RDATE:19211001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19210214T230000
+RDATE:19210214T230000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:MSD
+DTSTART:19210320T230000
+RDATE:19210320T230000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19210901T000000
+RDATE:19210901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19221001T000000
+RDATE:19221001T000000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSK
+DTSTART:20110327T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Nicosia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Nicosia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,96 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Nicosia
+TZURL:http://tzurl.org/zoneinfo/Europe/Nicosia
+X-LIC-LOCATION:Europe/Nicosia
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19981025T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19990328T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+021328
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19211114T000000
+RDATE:19211114T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19750413T000000
+RDATE:19750413T000000
+RDATE:19760515T000000
+RDATE:19770403T000000
+RDATE:19780402T000000
+RDATE:19790401T000000
+RDATE:19800406T000000
+RDATE:19810329T000000
+RDATE:19820328T000000
+RDATE:19830327T000000
+RDATE:19840325T000000
+RDATE:19850331T000000
+RDATE:19860330T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+RDATE:19970330T000000
+RDATE:19980329T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19751012T000000
+RDATE:19751012T000000
+RDATE:19761011T000000
+RDATE:19770925T000000
+RDATE:19781002T000000
+RDATE:19790930T000000
+RDATE:19800928T000000
+RDATE:19810927T000000
+RDATE:19820926T000000
+RDATE:19830925T000000
+RDATE:19840930T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900930T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19960929T000000
+RDATE:19970928T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19980901T000000
+RDATE:19980901T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Oslo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Oslo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Oslo
+TZURL:http://tzurl.org/zoneinfo/Europe/Oslo
+X-LIC-LOCATION:Europe/Oslo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0043
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160522T010000
+RDATE:19160522T010000
+RDATE:19400810T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19590315T020000
+RDATE:19600320T020000
+RDATE:19610319T020000
+RDATE:19620318T020000
+RDATE:19630317T020000
+RDATE:19640315T020000
+RDATE:19650425T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19160930T000000
+RDATE:19160930T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451001T030000
+RDATE:19590920T030000
+RDATE:19600918T030000
+RDATE:19610917T030000
+RDATE:19620916T030000
+RDATE:19630915T030000
+RDATE:19640920T030000
+RDATE:19650919T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Paris.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Paris.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,169 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Paris
+TZURL:http://tzurl.org/zoneinfo/Europe/Paris
+X-LIC-LOCATION:Europe/Paris
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+000921
+TZNAME:PMT
+DTSTART:18910315T000100
+RDATE:18910315T000100
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19110311T000100
+RDATE:19110311T000100
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19160614T230000
+RDATE:19160614T230000
+RDATE:19170324T230000
+RDATE:19180309T230000
+RDATE:19190301T230000
+RDATE:19200214T230000
+RDATE:19210314T230000
+RDATE:19220325T230000
+RDATE:19230526T230000
+RDATE:19240329T230000
+RDATE:19250404T230000
+RDATE:19260417T230000
+RDATE:19270409T230000
+RDATE:19280414T230000
+RDATE:19290420T230000
+RDATE:19300412T230000
+RDATE:19310418T230000
+RDATE:19320402T230000
+RDATE:19330325T230000
+RDATE:19340407T230000
+RDATE:19350330T230000
+RDATE:19360418T230000
+RDATE:19370403T230000
+RDATE:19380326T230000
+RDATE:19390415T230000
+RDATE:19400225T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+TZNAME:WET
+DTSTART:19161002T000000
+RDATE:19161002T000000
+RDATE:19171008T000000
+RDATE:19181007T000000
+RDATE:19191006T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19221008T000000
+RDATE:19231007T000000
+RDATE:19241005T000000
+RDATE:19251004T000000
+RDATE:19261003T000000
+RDATE:19271002T000000
+RDATE:19281007T000000
+RDATE:19291006T000000
+RDATE:19301005T000000
+RDATE:19311004T000000
+RDATE:19321002T000000
+RDATE:19331008T000000
+RDATE:19341007T000000
+RDATE:19351006T000000
+RDATE:19361004T000000
+RDATE:19371003T000000
+RDATE:19381002T000000
+RDATE:19391119T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400614T230000
+RDATE:19400614T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19760328T010000
+RDATE:19770403T020000
+RDATE:19780402T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19450916T030000
+RDATE:19760926T010000
+RDATE:19770925T030000
+RDATE:19781001T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19440825T000000
+RDATE:19440825T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:WEST
+DTSTART:19441008T010000
+RDATE:19441008T010000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:WEMT
+DTSTART:19450402T020000
+RDATE:19450402T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Podgorica.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Podgorica.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Podgorica
+TZURL:http://tzurl.org/zoneinfo/Europe/Podgorica
+X-LIC-LOCATION:Europe/Podgorica
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Prague.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Prague.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,97 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Prague
+TZURL:http://tzurl.org/zoneinfo/Europe/Prague
+X-LIC-LOCATION:Europe/Prague
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+005744
+TZNAME:PMT
+DTSTART:18500101T000000
+RDATE:18500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+005744
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18911001T000000
+RDATE:18911001T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450408T020000
+RDATE:19460506T020000
+RDATE:19470420T020000
+RDATE:19480418T020000
+RDATE:19490409T020000
+RDATE:19790401T020000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T030000
+RDATE:19451118T030000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19790930T030000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19790101T000000
+RDATE:19790101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Riga.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Riga.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,168 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Riga
+TZURL:http://tzurl.org/zoneinfo/Europe/Riga
+X-LIC-LOCATION:Europe/Riga
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20010325T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20011028T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013624
+TZOFFSETTO:+013624
+TZNAME:RMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+013624
+TZOFFSETTO:+023624
+TZNAME:LST
+DTSTART:19180415T020000
+RDATE:19180415T020000
+RDATE:19190401T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+023624
+TZOFFSETTO:+013624
+TZNAME:RMT
+DTSTART:19180916T030000
+RDATE:19180916T030000
+RDATE:19190522T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013624
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19260511T000000
+RDATE:19260511T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19400805T000000
+RDATE:19400805T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410701T000000
+RDATE:19410701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19441013T000000
+RDATE:19441013T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19960929T030000
+RDATE:19971026T040000
+RDATE:19981025T040000
+RDATE:19991031T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+RDATE:19910331T020000
+RDATE:19920329T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T030000
+RDATE:19980329T030000
+RDATE:19990328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19970121T000000
+RDATE:19970121T000000
+RDATE:20000229T000000
+RDATE:20010102T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Rome.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Rome.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Rome
+TZURL:http://tzurl.org/zoneinfo/Europe/Rome
+X-LIC-LOCATION:Europe/Rome
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+004956
+TZNAME:RMT
+DTSTART:18660922T000000
+RDATE:18660922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730603T000000
+RDATE:19740526T000000
+RDATE:19750601T000000
+RDATE:19760530T000000
+RDATE:19770522T000000
+RDATE:19780528T000000
+RDATE:19790527T000000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T010000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730930T000000
+RDATE:19740929T000000
+RDATE:19750928T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440701T000000
+RDATE:19440701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Samara.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Samara.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,158 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Samara
+TZURL:http://tzurl.org/zoneinfo/Europe/Samara
+X-LIC-LOCATION:Europe/Samara
+BEGIN:STANDARD
+TZOFFSETFROM:+032036
+TZOFFSETTO:+0300
+TZNAME:SAMT
+DTSTART:19190701T020000
+RDATE:19190701T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:SAMT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19911020T030000
+RDATE:20110327T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:KUYT
+DTSTART:19350127T000000
+RDATE:19350127T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:KUYST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:KUYT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:KUYST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:KUYT
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:KUYST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:KUYST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:KUYT
+DTSTART:19910929T030000
+RDATE:19910929T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:SAMST
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:SAMT
+DTSTART:19920926T230000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:SAMST
+DTSTART:20100328T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:SAMT
+DTSTART:20101031T030000
+RDATE:20101031T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/San_Marino.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/San_Marino.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/San_Marino
+TZURL:http://tzurl.org/zoneinfo/Europe/San_Marino
+X-LIC-LOCATION:Europe/San_Marino
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+004956
+TZNAME:RMT
+DTSTART:18660922T000000
+RDATE:18660922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730603T000000
+RDATE:19740526T000000
+RDATE:19750601T000000
+RDATE:19760530T000000
+RDATE:19770522T000000
+RDATE:19780528T000000
+RDATE:19790527T000000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T010000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730930T000000
+RDATE:19740929T000000
+RDATE:19750928T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440701T000000
+RDATE:19440701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Sarajevo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Sarajevo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Sarajevo
+TZURL:http://tzurl.org/zoneinfo/Europe/Sarajevo
+X-LIC-LOCATION:Europe/Sarajevo
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Simferopol.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Simferopol.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,151 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Simferopol
+TZURL:http://tzurl.org/zoneinfo/Europe/Simferopol
+X-LIC-LOCATION:Europe/Simferopol
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19980329T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+021624
+TZOFFSETTO:+0216
+TZNAME:SMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0216
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19440413T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19411101T000000
+RDATE:19411101T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19940501T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T040000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+RDATE:19970101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19900701T020000
+RDATE:19900701T020000
+RDATE:19920927T000000
+RDATE:19930926T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19960331T040000
+RDATE:19960331T040000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T040000
+RDATE:19970330T040000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Skopje.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Skopje.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Skopje
+TZURL:http://tzurl.org/zoneinfo/Europe/Skopje
+X-LIC-LOCATION:Europe/Skopje
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Sofia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Sofia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,131 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Sofia
+TZURL:http://tzurl.org/zoneinfo/Europe/Sofia
+X-LIC-LOCATION:Europe/Sofia
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013316
+TZOFFSETTO:+015656
+TZNAME:IMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:18941130T000000
+RDATE:18941130T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T020000
+RDATE:19421102T020000
+RDATE:19431004T030000
+RDATE:19441002T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19450402T030000
+RDATE:19450402T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19790331T230000
+RDATE:19790331T230000
+RDATE:19800405T230000
+RDATE:19810404T230000
+RDATE:19820403T230000
+RDATE:19830327T020000
+RDATE:19840325T020000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+RDATE:19910331T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+RDATE:19950326T000000
+RDATE:19960331T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19791001T010000
+RDATE:19791001T010000
+RDATE:19800929T010000
+RDATE:19810927T020000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T000000
+RDATE:19961027T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19820926T020000
+RDATE:19820926T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19970101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Stockholm.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Stockholm.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Stockholm
+TZURL:http://tzurl.org/zoneinfo/Europe/Stockholm
+X-LIC-LOCATION:Europe/Stockholm
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+011212
+TZOFFSETTO:+010014
+TZNAME:SET
+DTSTART:18790101T000000
+RDATE:18790101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+010014
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19000101T000000
+RDATE:19000101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160514T230000
+RDATE:19160514T230000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Tallinn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Tallinn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,161 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Tallinn
+TZURL:http://tzurl.org/zoneinfo/Europe/Tallinn
+X-LIC-LOCATION:Europe/Tallinn
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20020331T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20021027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0139
+TZOFFSETTO:+0139
+TZNAME:TMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0139
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19180201T000000
+RDATE:19180201T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19180415T020000
+RDATE:19180415T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19180916T030000
+RDATE:19180916T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0139
+TZNAME:TMT
+DTSTART:19190701T000000
+RDATE:19190701T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0139
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19210501T000000
+RDATE:19210501T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19400806T000000
+RDATE:19400806T000000
+RDATE:19440922T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410915T000000
+RDATE:19410915T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+RDATE:19980922T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T040000
+RDATE:19991031T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+RDATE:19910331T020000
+RDATE:19920329T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19991101T000000
+RDATE:19991101T000000
+RDATE:20020221T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Tirane.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Tirane.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,86 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Tirane
+TZURL:http://tzurl.org/zoneinfo/Europe/Tirane
+X-LIC-LOCATION:Europe/Tirane
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+011920
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19140101T000000
+RDATE:19140101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400616T000000
+RDATE:19400616T000000
+RDATE:19430329T020000
+RDATE:19740504T000000
+RDATE:19750501T000000
+RDATE:19760502T000000
+RDATE:19770508T000000
+RDATE:19780506T000000
+RDATE:19790505T000000
+RDATE:19800503T000000
+RDATE:19810426T000000
+RDATE:19820502T000000
+RDATE:19830418T000000
+RDATE:19840401T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19430410T030000
+RDATE:19741002T000000
+RDATE:19751002T000000
+RDATE:19761003T000000
+RDATE:19771002T000000
+RDATE:19781001T000000
+RDATE:19790930T000000
+RDATE:19801004T000000
+RDATE:19810927T000000
+RDATE:19821003T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19840701T000000
+RDATE:19840701T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Uzhgorod.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Uzhgorod.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,147 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Uzhgorod
+TZURL:http://tzurl.org/zoneinfo/Europe/Uzhgorod
+X-LIC-LOCATION:Europe/Uzhgorod
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+012912
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18901001T000000
+RDATE:18901001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19400101T000000
+RDATE:19400101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19400401T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19441001T000000
+RDATE:19441001T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19450629T000000
+RDATE:19450629T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19900101T000000
+RDATE:19900101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19900701T020000
+RDATE:19900701T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910331T030000
+RDATE:19910331T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920101T000000
+RDATE:19920101T000000
+RDATE:19950101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19920927T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T040000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Vaduz.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Vaduz.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,58 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vaduz
+TZURL:http://tzurl.org/zoneinfo/Europe/Vaduz
+X-LIC-LOCATION:Europe/Vaduz
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+003804
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18940601T000000
+RDATE:18940601T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810927T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Vatican.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Vatican.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,132 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vatican
+TZURL:http://tzurl.org/zoneinfo/Europe/Vatican
+X-LIC-LOCATION:Europe/Vatican
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+004956
+TZNAME:RMT
+DTSTART:18660922T000000
+RDATE:18660922T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+004956
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18931101T000000
+RDATE:18931101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160603T000000
+RDATE:19160603T000000
+RDATE:19170401T000000
+RDATE:19180310T000000
+RDATE:19190302T000000
+RDATE:19200321T000000
+RDATE:19400615T000000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460317T020000
+RDATE:19470316T000000
+RDATE:19480229T020000
+RDATE:19660522T000000
+RDATE:19670528T000000
+RDATE:19680526T000000
+RDATE:19690601T000000
+RDATE:19700531T000000
+RDATE:19710523T000000
+RDATE:19720528T000000
+RDATE:19730603T000000
+RDATE:19740526T000000
+RDATE:19750601T000000
+RDATE:19760530T000000
+RDATE:19770522T000000
+RDATE:19780528T000000
+RDATE:19790527T000000
+RDATE:19800406T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170930T010000
+RDATE:19181006T010000
+RDATE:19191005T010000
+RDATE:19200919T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19440917T010000
+RDATE:19450915T010000
+RDATE:19461006T030000
+RDATE:19471005T010000
+RDATE:19481003T030000
+RDATE:19660925T000000
+RDATE:19670924T000000
+RDATE:19680922T000000
+RDATE:19690928T000000
+RDATE:19700927T000000
+RDATE:19710926T010000
+RDATE:19721001T000000
+RDATE:19730930T000000
+RDATE:19740929T000000
+RDATE:19750928T010000
+RDATE:19760926T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+RDATE:19790930T010000
+RDATE:19800928T030000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19440701T000000
+RDATE:19440701T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19800101T000000
+RDATE:19800101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Vienna.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Vienna.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,90 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vienna
+TZURL:http://tzurl.org/zoneinfo/Europe/Vienna
+X-LIC-LOCATION:Europe/Vienna
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+010520
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18930401T000000
+RDATE:18930401T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19200405T020000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450402T020000
+RDATE:19460414T020000
+RDATE:19470406T020000
+RDATE:19480418T020000
+RDATE:19800406T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180916T030000
+RDATE:19200913T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450412T030000
+RDATE:19461006T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19800928T000000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19460101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Vilnius.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Vilnius.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,171 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Vilnius
+TZURL:http://tzurl.org/zoneinfo/Europe/Vilnius
+X-LIC-LOCATION:Europe/Vilnius
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:20030330T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:20031026T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+014116
+TZOFFSETTO:+0124
+TZNAME:WMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0124
+TZOFFSETTO:+013536
+TZNAME:KMT
+DTSTART:19170101T000000
+RDATE:19170101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+013536
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19191010T000000
+RDATE:19191010T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19200712T000000
+RDATE:19200712T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19201009T000000
+RDATE:19201009T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19981025T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19400803T000000
+RDATE:19400803T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410624T000000
+RDATE:19410624T000000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19990328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19440801T000000
+RDATE:19440801T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T020000
+RDATE:19920329T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19980101T000000
+RDATE:19980101T000000
+RDATE:19991031T030000
+RDATE:20030101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19980329T030000
+RDATE:19980329T030000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Volgograd.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Volgograd.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,133 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Volgograd
+TZURL:http://tzurl.org/zoneinfo/Europe/Volgograd
+X-LIC-LOCATION:Europe/Volgograd
+BEGIN:STANDARD
+TZOFFSETFROM:+025740
+TZOFFSETTO:+0300
+TZNAME:TSAT
+DTSTART:19200103T000000
+RDATE:19200103T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:STAT
+DTSTART:19250406T000000
+RDATE:19250406T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:STAT
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:VOLT
+DTSTART:19611111T000000
+RDATE:19611111T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:VOLST
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:VOLT
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+TZNAME:VOLST
+DTSTART:19890326T020000
+RDATE:19890326T020000
+RDATE:19920329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:VOLT
+DTSTART:19890924T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19920926T230000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+RDATE:19961027T030000
+RDATE:19971026T030000
+RDATE:19981025T030000
+RDATE:19991031T030000
+RDATE:20001029T030000
+RDATE:20011028T030000
+RDATE:20021027T030000
+RDATE:20031026T030000
+RDATE:20041031T030000
+RDATE:20051030T030000
+RDATE:20061029T030000
+RDATE:20071028T030000
+RDATE:20081026T030000
+RDATE:20091025T030000
+RDATE:20101031T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:VOLST
+DTSTART:19900325T020000
+RDATE:19900325T020000
+RDATE:19930328T020000
+RDATE:19940327T020000
+RDATE:19950326T020000
+RDATE:19960331T020000
+RDATE:19970330T020000
+RDATE:19980329T020000
+RDATE:19990328T020000
+RDATE:20000326T020000
+RDATE:20010325T020000
+RDATE:20020331T020000
+RDATE:20030330T020000
+RDATE:20040328T020000
+RDATE:20050327T020000
+RDATE:20060326T020000
+RDATE:20070325T020000
+RDATE:20080330T020000
+RDATE:20090329T020000
+RDATE:20100328T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:VOLT
+DTSTART:19910331T020000
+RDATE:19910331T020000
+RDATE:20110327T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Warsaw.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Warsaw.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,153 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Warsaw
+TZURL:http://tzurl.org/zoneinfo/Europe/Warsaw
+X-LIC-LOCATION:Europe/Warsaw
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19880327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0124
+TZNAME:WMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19150805T000000
+RDATE:19150805T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180415T020000
+RDATE:19400623T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450429T000000
+RDATE:19460414T000000
+RDATE:19470504T020000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19570602T010000
+RDATE:19580330T010000
+RDATE:19590531T010000
+RDATE:19600403T010000
+RDATE:19610528T010000
+RDATE:19620527T010000
+RDATE:19630526T010000
+RDATE:19640531T010000
+RDATE:19770403T010000
+RDATE:19780402T010000
+RDATE:19790401T010000
+RDATE:19800406T010000
+RDATE:19810329T010000
+RDATE:19820328T010000
+RDATE:19830327T010000
+RDATE:19840325T010000
+RDATE:19850331T010000
+RDATE:19860330T010000
+RDATE:19870329T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19220601T000000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441004T020000
+RDATE:19451101T000000
+RDATE:19461007T030000
+RDATE:19471005T030000
+RDATE:19481003T030000
+RDATE:19491002T030000
+RDATE:19570929T020000
+RDATE:19580928T020000
+RDATE:19591004T020000
+RDATE:19601002T020000
+RDATE:19611001T020000
+RDATE:19620930T020000
+RDATE:19630929T020000
+RDATE:19640927T020000
+RDATE:19770925T020000
+RDATE:19781001T020000
+RDATE:19790930T020000
+RDATE:19800928T020000
+RDATE:19810927T020000
+RDATE:19820926T020000
+RDATE:19830925T020000
+RDATE:19840930T020000
+RDATE:19850929T020000
+RDATE:19860928T020000
+RDATE:19870927T020000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19180916T030000
+RDATE:19180916T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19190415T020000
+RDATE:19190415T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19190916T030000
+RDATE:19190916T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19441001T000000
+RDATE:19441001T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19770101T000000
+RDATE:19770101T000000
+RDATE:19880101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Zagreb.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Zagreb.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,71 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Zagreb
+TZURL:http://tzurl.org/zoneinfo/Europe/Zagreb
+X-LIC-LOCATION:Europe/Zagreb
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19830327T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18840101T000000
+RDATE:18840101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410418T230000
+RDATE:19410418T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450508T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19450916T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19450101T000000
+RDATE:19450101T000000
+RDATE:19821127T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Zaporozhye.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Zaporozhye.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,139 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Zaporozhye
+TZURL:http://tzurl.org/zoneinfo/Europe/Zaporozhye
+X-LIC-LOCATION:Europe/Zaporozhye
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0220
+TZNAME:CUT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0220
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19240502T000000
+RDATE:19240502T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19300621T000000
+RDATE:19300621T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410825T000000
+RDATE:19410825T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19430329T020000
+RDATE:19430329T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19431025T000000
+RDATE:19431025T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:MSD
+DTSTART:19810401T000000
+RDATE:19810401T000000
+RDATE:19820401T000000
+RDATE:19830401T000000
+RDATE:19840401T000000
+RDATE:19850331T020000
+RDATE:19860330T020000
+RDATE:19870329T020000
+RDATE:19880327T020000
+RDATE:19890326T020000
+RDATE:19900325T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:MSK
+DTSTART:19811001T000000
+RDATE:19811001T000000
+RDATE:19821001T000000
+RDATE:19831001T000000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19910331T020000
+RDATE:19910331T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19910929T000000
+RDATE:19910929T000000
+RDATE:19920927T000000
+RDATE:19930926T000000
+RDATE:19940925T000000
+RDATE:19950924T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+TZNAME:EEST
+DTSTART:19920329T000000
+RDATE:19920329T000000
+RDATE:19930328T000000
+RDATE:19940327T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+TZNAME:EET
+DTSTART:19950101T000000
+RDATE:19950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Europe/Zurich.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Europe/Zurich.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,75 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Europe/Zurich
+TZURL:http://tzurl.org/zoneinfo/Europe/Zurich
+X-LIC-LOCATION:Europe/Zurich
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+003408
+TZOFFSETTO:+002944
+TZNAME:BMT
+DTSTART:18480912T000000
+RDATE:18480912T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+002944
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:18940601T000000
+RDATE:18940601T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+TZNAME:CEST
+DTSTART:19410505T010000
+RDATE:19410505T010000
+RDATE:19420504T010000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19411006T020000
+RDATE:19411006T020000
+RDATE:19421005T020000
+RDATE:19810927T030000
+RDATE:19820926T030000
+RDATE:19830925T030000
+RDATE:19840930T030000
+RDATE:19850929T030000
+RDATE:19860928T030000
+RDATE:19870927T030000
+RDATE:19880925T030000
+RDATE:19890924T030000
+RDATE:19900930T030000
+RDATE:19910929T030000
+RDATE:19920927T030000
+RDATE:19930926T030000
+RDATE:19940925T030000
+RDATE:19950924T030000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+TZNAME:CET
+DTSTART:19810101T000000
+RDATE:19810101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Antananarivo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Antananarivo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Antananarivo
+TZURL:http://tzurl.org/zoneinfo/Indian/Antananarivo
+X-LIC-LOCATION:Indian/Antananarivo
+BEGIN:STANDARD
+TZOFFSETFROM:+031004
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+TZNAME:EAST
+DTSTART:19540227T230000
+RDATE:19540227T230000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19540530T000000
+RDATE:19540530T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Chagos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Chagos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Chagos
+TZURL:http://tzurl.org/zoneinfo/Indian/Chagos
+X-LIC-LOCATION:Indian/Chagos
+BEGIN:STANDARD
+TZOFFSETFROM:+044940
+TZOFFSETTO:+0500
+TZNAME:IOT
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+TZNAME:IOT
+DTSTART:19960101T000000
+RDATE:19960101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Christmas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Christmas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Christmas
+TZURL:http://tzurl.org/zoneinfo/Indian/Christmas
+X-LIC-LOCATION:Indian/Christmas
+BEGIN:STANDARD
+TZOFFSETFROM:+070252
+TZOFFSETTO:+0700
+TZNAME:CXT
+DTSTART:18950201T000000
+RDATE:18950201T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Cocos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Cocos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Cocos
+TZURL:http://tzurl.org/zoneinfo/Indian/Cocos
+X-LIC-LOCATION:Indian/Cocos
+BEGIN:STANDARD
+TZOFFSETFROM:+062740
+TZOFFSETTO:+0630
+TZNAME:CCT
+DTSTART:19000101T000000
+RDATE:19000101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Comoro.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Comoro.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Comoro
+TZURL:http://tzurl.org/zoneinfo/Indian/Comoro
+X-LIC-LOCATION:Indian/Comoro
+BEGIN:STANDARD
+TZOFFSETFROM:+025304
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Kerguelen.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Kerguelen.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Kerguelen
+TZURL:http://tzurl.org/zoneinfo/Indian/Kerguelen
+X-LIC-LOCATION:Indian/Kerguelen
+BEGIN:STANDARD
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0500
+TZNAME:TFT
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Mahe.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Mahe.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Mahe
+TZURL:http://tzurl.org/zoneinfo/Indian/Mahe
+X-LIC-LOCATION:Indian/Mahe
+BEGIN:STANDARD
+TZOFFSETFROM:+034148
+TZOFFSETTO:+0400
+TZNAME:SCT
+DTSTART:19060601T000000
+RDATE:19060601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Maldives.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Maldives.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Maldives
+TZURL:http://tzurl.org/zoneinfo/Indian/Maldives
+X-LIC-LOCATION:Indian/Maldives
+BEGIN:STANDARD
+TZOFFSETFROM:+0454
+TZOFFSETTO:+0454
+TZNAME:MMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0454
+TZOFFSETTO:+0500
+TZNAME:MVT
+DTSTART:19600101T000000
+RDATE:19600101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Mauritius.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Mauritius.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,32 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Mauritius
+TZURL:http://tzurl.org/zoneinfo/Indian/Mauritius
+X-LIC-LOCATION:Indian/Mauritius
+BEGIN:STANDARD
+TZOFFSETFROM:+0350
+TZOFFSETTO:+0400
+TZNAME:MUT
+DTSTART:19070101T000000
+RDATE:19070101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+TZNAME:MUST
+DTSTART:19821010T000000
+RDATE:19821010T000000
+RDATE:20081026T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+TZNAME:MUT
+DTSTART:19830321T000000
+RDATE:19830321T000000
+RDATE:20090329T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Mayotte.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Mayotte.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Mayotte
+TZURL:http://tzurl.org/zoneinfo/Indian/Mayotte
+X-LIC-LOCATION:Indian/Mayotte
+BEGIN:STANDARD
+TZOFFSETFROM:+030056
+TZOFFSETTO:+0300
+TZNAME:EAT
+DTSTART:19110701T000000
+RDATE:19110701T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Indian/Reunion.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Indian/Reunion.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Indian/Reunion
+TZURL:http://tzurl.org/zoneinfo/Indian/Reunion
+X-LIC-LOCATION:Indian/Reunion
+BEGIN:STANDARD
+TZOFFSETFROM:+034152
+TZOFFSETTO:+0400
+TZNAME:RET
+DTSTART:19110601T000000
+RDATE:19110601T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Apia.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Apia.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,59 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Apia
+TZURL:http://tzurl.org/zoneinfo/Pacific/Apia
+X-LIC-LOCATION:Pacific/Apia
+BEGIN:STANDARD
+TZOFFSETFROM:+123304
+TZOFFSETTO:-112656
+TZNAME:LMT
+DTSTART:18790705T000000
+RDATE:18790705T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-112656
+TZOFFSETTO:-1130
+TZNAME:SAMT
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+TZNAME:WST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:WSDT
+DTSTART:20100926T000000
+RDATE:20100926T000000
+RDATE:20110924T030000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:WST
+DTSTART:20110402T040000
+RDATE:20110402T040000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:+1400
+TZNAME:WSDT
+DTSTART:20111230T000000
+RDATE:20111230T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+TZNAME:WST
+DTSTART:20120401T040000
+RDATE:20120401T040000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Auckland.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Auckland.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,166 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Auckland
+TZURL:http://tzurl.org/zoneinfo/Pacific/Auckland
+X-LIC-LOCATION:Pacific/Auckland
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+113904
+TZOFFSETTO:+1130
+TZNAME:NZMT
+DTSTART:18681102T000000
+RDATE:18681102T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1230
+TZNAME:NZST
+DTSTART:19271106T020000
+RDATE:19271106T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1230
+TZOFFSETTO:+1130
+TZNAME:NZMT
+DTSTART:19280304T020000
+RDATE:19280304T020000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19281014T020000
+RDATE:19281014T020000
+RDATE:19291013T020000
+RDATE:19301012T020000
+RDATE:19311011T020000
+RDATE:19321009T020000
+RDATE:19331008T020000
+RDATE:19340930T020000
+RDATE:19350929T020000
+RDATE:19360927T020000
+RDATE:19370926T020000
+RDATE:19380925T020000
+RDATE:19390924T020000
+RDATE:19400929T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1130
+TZNAME:NZMT
+DTSTART:19290317T020000
+RDATE:19290317T020000
+RDATE:19300316T020000
+RDATE:19310315T020000
+RDATE:19320320T020000
+RDATE:19330319T020000
+RDATE:19340429T020000
+RDATE:19350428T020000
+RDATE:19360426T020000
+RDATE:19370425T020000
+RDATE:19380424T020000
+RDATE:19390430T020000
+RDATE:19400428T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19460101T000000
+RDATE:19460101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:NZDT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19751026T020000
+RDATE:19761031T020000
+RDATE:19771030T020000
+RDATE:19781029T020000
+RDATE:19791028T020000
+RDATE:19801026T020000
+RDATE:19811025T020000
+RDATE:19821031T020000
+RDATE:19831030T020000
+RDATE:19841028T020000
+RDATE:19851027T020000
+RDATE:19861026T020000
+RDATE:19871025T020000
+RDATE:19881030T020000
+RDATE:19891008T020000
+RDATE:19901007T020000
+RDATE:19911006T020000
+RDATE:19921004T020000
+RDATE:19931003T020000
+RDATE:19941002T020000
+RDATE:19951001T020000
+RDATE:19961006T020000
+RDATE:19971005T020000
+RDATE:19981004T020000
+RDATE:19991003T020000
+RDATE:20001001T020000
+RDATE:20011007T020000
+RDATE:20021006T020000
+RDATE:20031005T020000
+RDATE:20041003T020000
+RDATE:20051002T020000
+RDATE:20061001T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:NZST
+DTSTART:19750223T030000
+RDATE:19750223T030000
+RDATE:19760307T030000
+RDATE:19770306T030000
+RDATE:19780305T030000
+RDATE:19790304T030000
+RDATE:19800302T030000
+RDATE:19810301T030000
+RDATE:19820307T030000
+RDATE:19830306T030000
+RDATE:19840304T030000
+RDATE:19850303T030000
+RDATE:19860302T030000
+RDATE:19870301T030000
+RDATE:19880306T030000
+RDATE:19890305T030000
+RDATE:19900318T030000
+RDATE:19910317T030000
+RDATE:19920315T030000
+RDATE:19930321T030000
+RDATE:19940320T030000
+RDATE:19950319T030000
+RDATE:19960317T030000
+RDATE:19970316T030000
+RDATE:19980315T030000
+RDATE:19990321T030000
+RDATE:20000319T030000
+RDATE:20010318T030000
+RDATE:20020317T030000
+RDATE:20030316T030000
+RDATE:20040321T030000
+RDATE:20050320T030000
+RDATE:20060319T030000
+RDATE:20070318T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Chatham.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Chatham.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,108 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Chatham
+TZURL:http://tzurl.org/zoneinfo/Pacific/Chatham
+X-LIC-LOCATION:Pacific/Chatham
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
+TZNAME:CHADT
+DTSTART:20070930T024500
+RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1345
+TZOFFSETTO:+1245
+TZNAME:CHAST
+DTSTART:20080406T034500
+RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+121348
+TZOFFSETTO:+1245
+TZNAME:CHAST
+DTSTART:19570101T000000
+RDATE:19570101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1245
+TZOFFSETTO:+1345
+TZNAME:CHADT
+DTSTART:19741103T024500
+RDATE:19741103T024500
+RDATE:19751026T024500
+RDATE:19761031T024500
+RDATE:19771030T024500
+RDATE:19781029T024500
+RDATE:19791028T024500
+RDATE:19801026T024500
+RDATE:19811025T024500
+RDATE:19821031T024500
+RDATE:19831030T024500
+RDATE:19841028T024500
+RDATE:19851027T024500
+RDATE:19861026T024500
+RDATE:19871025T024500
+RDATE:19881030T024500
+RDATE:19891008T024500
+RDATE:19901007T024500
+RDATE:19911006T024500
+RDATE:19921004T024500
+RDATE:19931003T024500
+RDATE:19941002T024500
+RDATE:19951001T024500
+RDATE:19961006T024500
+RDATE:19971005T024500
+RDATE:19981004T024500
+RDATE:19991003T024500
+RDATE:20001001T024500
+RDATE:20011007T024500
+RDATE:20021006T024500
+RDATE:20031005T024500
+RDATE:20041003T024500
+RDATE:20051002T024500
+RDATE:20061001T024500
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1345
+TZOFFSETTO:+1245
+TZNAME:CHAST
+DTSTART:19750223T034500
+RDATE:19750223T034500
+RDATE:19760307T034500
+RDATE:19770306T034500
+RDATE:19780305T034500
+RDATE:19790304T034500
+RDATE:19800302T034500
+RDATE:19810301T034500
+RDATE:19820307T034500
+RDATE:19830306T034500
+RDATE:19840304T034500
+RDATE:19850303T034500
+RDATE:19860302T034500
+RDATE:19870301T034500
+RDATE:19880306T034500
+RDATE:19890305T034500
+RDATE:19900318T034500
+RDATE:19910317T034500
+RDATE:19920315T034500
+RDATE:19930321T034500
+RDATE:19940320T034500
+RDATE:19950319T034500
+RDATE:19960317T034500
+RDATE:19970316T034500
+RDATE:19980315T034500
+RDATE:19990321T034500
+RDATE:20000319T034500
+RDATE:20010318T034500
+RDATE:20020317T034500
+RDATE:20030316T034500
+RDATE:20040321T034500
+RDATE:20050320T034500
+RDATE:20060319T034500
+RDATE:20070318T034500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Chuuk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Chuuk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Chuuk
+TZURL:http://tzurl.org/zoneinfo/Pacific/Chuuk
+X-LIC-LOCATION:Pacific/Chuuk
+BEGIN:STANDARD
+TZOFFSETFROM:+100708
+TZOFFSETTO:+1000
+TZNAME:CHUT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Easter.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Easter.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,171 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Easter
+TZURL:http://tzurl.org/zoneinfo/Pacific/Easter
+X-LIC-LOCATION:Pacific/Easter
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:EAST
+DTSTART:20120310T220000
+RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SA
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EASST
+DTSTART:20121013T220000
+RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=2SA
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-071744
+TZOFFSETTO:-071728
+TZNAME:EMT
+DTSTART:18900101T000000
+RDATE:18900101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-071728
+TZOFFSETTO:-0600
+TZNAME:EASST
+DTSTART:19320901T000000
+RDATE:19320901T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+TZNAME:EAST
+DTSTART:19420531T220000
+RDATE:19420531T220000
+RDATE:19460831T210000
+RDATE:19690329T210000
+RDATE:19700328T210000
+RDATE:19710313T210000
+RDATE:19720311T210000
+RDATE:19730310T210000
+RDATE:19740309T210000
+RDATE:19750308T210000
+RDATE:19760313T210000
+RDATE:19770312T210000
+RDATE:19780311T210000
+RDATE:19790310T210000
+RDATE:19800308T210000
+RDATE:19810314T210000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+TZNAME:EASST
+DTSTART:19420731T220000
+RDATE:19420731T220000
+RDATE:19681102T210000
+RDATE:19691122T210000
+RDATE:19701010T210000
+RDATE:19711009T210000
+RDATE:19721014T210000
+RDATE:19730929T210000
+RDATE:19741012T210000
+RDATE:19751011T210000
+RDATE:19761009T210000
+RDATE:19771008T210000
+RDATE:19781014T210000
+RDATE:19791013T210000
+RDATE:19801011T210000
+RDATE:19811010T210000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:EASST
+DTSTART:19460714T220000
+RDATE:19460714T220000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+TZNAME:EAST
+DTSTART:19470331T210000
+RDATE:19470331T210000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+TZNAME:EAST
+DTSTART:19820313T210000
+RDATE:19820313T210000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:EASST
+DTSTART:19821009T220000
+RDATE:19821009T220000
+RDATE:19831008T220000
+RDATE:19841013T220000
+RDATE:19851012T220000
+RDATE:19861011T220000
+RDATE:19871010T220000
+RDATE:19881001T220000
+RDATE:19891014T220000
+RDATE:19900915T220000
+RDATE:19911012T220000
+RDATE:19921010T220000
+RDATE:19931009T220000
+RDATE:19941008T220000
+RDATE:19951014T220000
+RDATE:19961012T220000
+RDATE:19971011T220000
+RDATE:19980926T220000
+RDATE:19991009T220000
+RDATE:20001014T220000
+RDATE:20011013T220000
+RDATE:20021012T220000
+RDATE:20031011T220000
+RDATE:20041009T220000
+RDATE:20051008T220000
+RDATE:20061014T220000
+RDATE:20071013T220000
+RDATE:20081011T220000
+RDATE:20091010T220000
+RDATE:20101009T220000
+RDATE:20110820T220000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:EAST
+DTSTART:19830312T220000
+RDATE:19830312T220000
+RDATE:19840310T220000
+RDATE:19850309T220000
+RDATE:19860308T220000
+RDATE:19870411T220000
+RDATE:19880312T220000
+RDATE:19890311T220000
+RDATE:19900317T220000
+RDATE:19910309T220000
+RDATE:19920314T220000
+RDATE:19930313T220000
+RDATE:19940312T220000
+RDATE:19950311T220000
+RDATE:19960309T220000
+RDATE:19970329T220000
+RDATE:19980314T220000
+RDATE:19990403T220000
+RDATE:20000311T220000
+RDATE:20010310T220000
+RDATE:20020309T220000
+RDATE:20030308T220000
+RDATE:20040313T220000
+RDATE:20050312T220000
+RDATE:20060311T220000
+RDATE:20070310T220000
+RDATE:20080329T220000
+RDATE:20090314T220000
+RDATE:20100403T220000
+RDATE:20110507T220000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Efate.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Efate.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,48 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Efate
+TZURL:http://tzurl.org/zoneinfo/Pacific/Efate
+X-LIC-LOCATION:Pacific/Efate
+BEGIN:STANDARD
+TZOFFSETFROM:+111316
+TZOFFSETTO:+1100
+TZNAME:VUT
+DTSTART:19120113T000000
+RDATE:19120113T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:VUST
+DTSTART:19830925T000000
+RDATE:19830925T000000
+RDATE:19841023T000000
+RDATE:19850929T000000
+RDATE:19860928T000000
+RDATE:19870927T000000
+RDATE:19880925T000000
+RDATE:19890924T000000
+RDATE:19900923T000000
+RDATE:19910929T000000
+RDATE:19921025T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:VUT
+DTSTART:19840325T000000
+RDATE:19840325T000000
+RDATE:19850324T000000
+RDATE:19860323T000000
+RDATE:19870329T000000
+RDATE:19880327T000000
+RDATE:19890326T000000
+RDATE:19900325T000000
+RDATE:19910324T000000
+RDATE:19920126T000000
+RDATE:19930124T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Enderbury.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Enderbury.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Enderbury
+TZURL:http://tzurl.org/zoneinfo/Pacific/Enderbury
+X-LIC-LOCATION:Pacific/Enderbury
+BEGIN:STANDARD
+TZOFFSETFROM:-112420
+TZOFFSETTO:-1200
+TZNAME:PHOT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1200
+TZOFFSETTO:-1100
+TZNAME:PHOT
+DTSTART:19791001T000000
+RDATE:19791001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:+1300
+TZNAME:PHOT
+DTSTART:19950101T000000
+RDATE:19950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Fakaofo.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Fakaofo.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Fakaofo
+TZURL:http://tzurl.org/zoneinfo/Pacific/Fakaofo
+X-LIC-LOCATION:Pacific/Fakaofo
+BEGIN:STANDARD
+TZOFFSETFROM:-112456
+TZOFFSETTO:-1000
+TZNAME:TKT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Fiji.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Fiji.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,38 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Fiji
+TZURL:http://tzurl.org/zoneinfo/Pacific/Fiji
+X-LIC-LOCATION:Pacific/Fiji
+BEGIN:STANDARD
+TZOFFSETFROM:+115340
+TZOFFSETTO:+1200
+TZNAME:FJT
+DTSTART:19151026T000000
+RDATE:19151026T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+TZNAME:FJST
+DTSTART:19981101T020000
+RDATE:19981101T020000
+RDATE:19991107T020000
+RDATE:20091129T020000
+RDATE:20101024T020000
+RDATE:20111023T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+TZNAME:FJT
+DTSTART:19990228T030000
+RDATE:19990228T030000
+RDATE:20000227T030000
+RDATE:20100328T030000
+RDATE:20110306T030000
+RDATE:20120122T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Funafuti.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Funafuti.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Funafuti
+TZURL:http://tzurl.org/zoneinfo/Pacific/Funafuti
+X-LIC-LOCATION:Pacific/Funafuti
+BEGIN:STANDARD
+TZOFFSETFROM:+115652
+TZOFFSETTO:+1200
+TZNAME:TVT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Galapagos.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Galapagos.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Galapagos
+TZURL:http://tzurl.org/zoneinfo/Pacific/Galapagos
+X-LIC-LOCATION:Pacific/Galapagos
+BEGIN:STANDARD
+TZOFFSETFROM:-055824
+TZOFFSETTO:-0500
+TZNAME:ECT
+DTSTART:19310101T000000
+RDATE:19310101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:GALT
+DTSTART:19860101T000000
+RDATE:19860101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Gambier.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Gambier.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Gambier
+TZURL:http://tzurl.org/zoneinfo/Pacific/Gambier
+X-LIC-LOCATION:Pacific/Gambier
+BEGIN:STANDARD
+TZOFFSETFROM:-085948
+TZOFFSETTO:-0900
+TZNAME:GAMT
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Guadalcanal.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Guadalcanal.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Guadalcanal
+TZURL:http://tzurl.org/zoneinfo/Pacific/Guadalcanal
+X-LIC-LOCATION:Pacific/Guadalcanal
+BEGIN:STANDARD
+TZOFFSETFROM:+103948
+TZOFFSETTO:+1100
+TZNAME:SBT
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Guam.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Guam.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Guam
+TZURL:http://tzurl.org/zoneinfo/Pacific/Guam
+X-LIC-LOCATION:Pacific/Guam
+BEGIN:STANDARD
+TZOFFSETFROM:-1421
+TZOFFSETTO:+0939
+TZNAME:LMT
+DTSTART:18441231T000000
+RDATE:18441231T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0939
+TZOFFSETTO:+1000
+TZNAME:GST
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:ChST
+DTSTART:20001223T000000
+RDATE:20001223T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Honolulu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Honolulu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,39 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Honolulu
+TZURL:http://tzurl.org/zoneinfo/Pacific/Honolulu
+X-LIC-LOCATION:Pacific/Honolulu
+BEGIN:STANDARD
+TZOFFSETFROM:-103126
+TZOFFSETTO:-1030
+TZNAME:HST
+DTSTART:18960113T120000
+RDATE:18960113T120000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+TZNAME:HDT
+DTSTART:19330430T020000
+RDATE:19330430T020000
+RDATE:19420209T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0930
+TZOFFSETTO:-1030
+TZNAME:HST
+DTSTART:19330521T120000
+RDATE:19330521T120000
+RDATE:19450930T020000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1030
+TZOFFSETTO:-1000
+TZNAME:HST
+DTSTART:19470608T020000
+RDATE:19470608T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Johnston.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Johnston.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Johnston
+TZURL:http://tzurl.org/zoneinfo/Pacific/Johnston
+X-LIC-LOCATION:Pacific/Johnston
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+TZNAME:HST
+DTSTART:16010101T000000
+RDATE:16010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Kiritimati.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Kiritimati.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Kiritimati
+TZURL:http://tzurl.org/zoneinfo/Pacific/Kiritimati
+X-LIC-LOCATION:Pacific/Kiritimati
+BEGIN:STANDARD
+TZOFFSETFROM:-102920
+TZOFFSETTO:-1040
+TZNAME:LINT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1040
+TZOFFSETTO:-1000
+TZNAME:LINT
+DTSTART:19791001T000000
+RDATE:19791001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:+1400
+TZNAME:LINT
+DTSTART:19950101T000000
+RDATE:19950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Kosrae.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Kosrae.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Kosrae
+TZURL:http://tzurl.org/zoneinfo/Pacific/Kosrae
+X-LIC-LOCATION:Pacific/Kosrae
+BEGIN:STANDARD
+TZOFFSETFROM:+105156
+TZOFFSETTO:+1100
+TZNAME:KOST
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:KOST
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:KOST
+DTSTART:19990101T000000
+RDATE:19990101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Kwajalein.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Kwajalein.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Kwajalein
+TZURL:http://tzurl.org/zoneinfo/Pacific/Kwajalein
+X-LIC-LOCATION:Pacific/Kwajalein
+BEGIN:STANDARD
+TZOFFSETFROM:+110920
+TZOFFSETTO:+1100
+TZNAME:MHT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:-1200
+TZNAME:KWAT
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1200
+TZOFFSETTO:+1200
+TZNAME:MHT
+DTSTART:19930820T000000
+RDATE:19930820T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Majuro.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Majuro.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Majuro
+TZURL:http://tzurl.org/zoneinfo/Pacific/Majuro
+X-LIC-LOCATION:Pacific/Majuro
+BEGIN:STANDARD
+TZOFFSETFROM:+112448
+TZOFFSETTO:+1100
+TZNAME:MHT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:MHT
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Marquesas.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Marquesas.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Marquesas
+TZURL:http://tzurl.org/zoneinfo/Pacific/Marquesas
+X-LIC-LOCATION:Pacific/Marquesas
+BEGIN:STANDARD
+TZOFFSETFROM:-0918
+TZOFFSETTO:-0930
+TZNAME:MART
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Midway.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Midway.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Midway
+TZURL:http://tzurl.org/zoneinfo/Pacific/Midway
+X-LIC-LOCATION:Pacific/Midway
+BEGIN:STANDARD
+TZOFFSETFROM:-114928
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+TZNAME:NDT
+DTSTART:19560603T000000
+RDATE:19560603T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19560902T000000
+RDATE:19560902T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:SST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Nauru.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Nauru.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Nauru
+TZURL:http://tzurl.org/zoneinfo/Pacific/Nauru
+X-LIC-LOCATION:Pacific/Nauru
+BEGIN:STANDARD
+TZOFFSETFROM:+110740
+TZOFFSETTO:+1130
+TZNAME:NRT
+DTSTART:19210115T000000
+RDATE:19210115T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1130
+TZOFFSETTO:+0900
+TZNAME:JST
+DTSTART:19420315T000000
+RDATE:19420315T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1130
+TZNAME:NRT
+DTSTART:19440815T000000
+RDATE:19440815T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+TZNAME:NRT
+DTSTART:19790501T000000
+RDATE:19790501T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Niue.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Niue.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,30 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Niue
+TZURL:http://tzurl.org/zoneinfo/Pacific/Niue
+X-LIC-LOCATION:Pacific/Niue
+BEGIN:STANDARD
+TZOFFSETFROM:-111940
+TZOFFSETTO:-1120
+TZNAME:NUT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1120
+TZOFFSETTO:-1130
+TZNAME:NUT
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+TZNAME:NUT
+DTSTART:19781001T000000
+RDATE:19781001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Norfolk.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Norfolk.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Norfolk
+TZURL:http://tzurl.org/zoneinfo/Pacific/Norfolk
+X-LIC-LOCATION:Pacific/Norfolk
+BEGIN:STANDARD
+TZOFFSETFROM:+111152
+TZOFFSETTO:+1112
+TZNAME:NMT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1112
+TZOFFSETTO:+1130
+TZNAME:NFT
+DTSTART:19510101T000000
+RDATE:19510101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Noumea.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Noumea.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,34 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Noumea
+TZURL:http://tzurl.org/zoneinfo/Pacific/Noumea
+X-LIC-LOCATION:Pacific/Noumea
+BEGIN:STANDARD
+TZOFFSETFROM:+110548
+TZOFFSETTO:+1100
+TZNAME:NCT
+DTSTART:19120113T000000
+RDATE:19120113T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+TZNAME:NCST
+DTSTART:19771204T000000
+RDATE:19771204T000000
+RDATE:19781203T000000
+RDATE:19961201T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+TZNAME:NCT
+DTSTART:19780227T000000
+RDATE:19780227T000000
+RDATE:19790227T000000
+RDATE:19970302T030000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Pago_Pago.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Pago_Pago.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,44 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Pago_Pago
+TZURL:http://tzurl.org/zoneinfo/Pacific/Pago_Pago
+X-LIC-LOCATION:Pacific/Pago_Pago
+BEGIN:STANDARD
+TZOFFSETFROM:+123712
+TZOFFSETTO:-112248
+TZNAME:LMT
+DTSTART:18790705T000000
+RDATE:18790705T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-112248
+TZOFFSETTO:-1130
+TZNAME:SAMT
+DTSTART:19110101T000000
+RDATE:19110101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+TZNAME:NST
+DTSTART:19500101T000000
+RDATE:19500101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:BST
+DTSTART:19670401T000000
+RDATE:19670401T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+TZNAME:SST
+DTSTART:19831130T000000
+RDATE:19831130T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Palau.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Palau.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Palau
+TZURL:http://tzurl.org/zoneinfo/Pacific/Palau
+X-LIC-LOCATION:Pacific/Palau
+BEGIN:STANDARD
+TZOFFSETFROM:+085756
+TZOFFSETTO:+0900
+TZNAME:PWT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Pitcairn.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Pitcairn.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Pitcairn
+TZURL:http://tzurl.org/zoneinfo/Pacific/Pitcairn
+X-LIC-LOCATION:Pacific/Pitcairn
+BEGIN:STANDARD
+TZOFFSETFROM:-084020
+TZOFFSETTO:-0830
+TZNAME:PNT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:-0830
+TZOFFSETTO:-0800
+TZNAME:PST
+DTSTART:19980427T000000
+RDATE:19980427T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Pohnpei.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Pohnpei.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Pohnpei
+TZURL:http://tzurl.org/zoneinfo/Pacific/Pohnpei
+X-LIC-LOCATION:Pacific/Pohnpei
+BEGIN:STANDARD
+TZOFFSETFROM:+103252
+TZOFFSETTO:+1100
+TZNAME:PONT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Port_Moresby.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Port_Moresby.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Port_Moresby
+TZURL:http://tzurl.org/zoneinfo/Pacific/Port_Moresby
+X-LIC-LOCATION:Pacific/Port_Moresby
+BEGIN:STANDARD
+TZOFFSETFROM:+094840
+TZOFFSETTO:+094832
+TZNAME:PMMT
+DTSTART:18800101T000000
+RDATE:18800101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+094832
+TZOFFSETTO:+1000
+TZNAME:PGT
+DTSTART:18950101T000000
+RDATE:18950101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Rarotonga.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Rarotonga.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,60 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Rarotonga
+TZURL:http://tzurl.org/zoneinfo/Pacific/Rarotonga
+X-LIC-LOCATION:Pacific/Rarotonga
+BEGIN:STANDARD
+TZOFFSETFROM:-103904
+TZOFFSETTO:-1030
+TZNAME:CKT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+TZNAME:CKHST
+DTSTART:19781112T000000
+RDATE:19781112T000000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:-0930
+TZOFFSETTO:-1000
+TZNAME:CKT
+DTSTART:19790304T000000
+RDATE:19790304T000000
+RDATE:19800302T000000
+RDATE:19810301T000000
+RDATE:19820307T000000
+RDATE:19830306T000000
+RDATE:19840304T000000
+RDATE:19850303T000000
+RDATE:19860302T000000
+RDATE:19870301T000000
+RDATE:19880306T000000
+RDATE:19890305T000000
+RDATE:19900304T000000
+RDATE:19910303T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0930
+TZNAME:CKHST
+DTSTART:19791028T000000
+RDATE:19791028T000000
+RDATE:19801026T000000
+RDATE:19811025T000000
+RDATE:19821031T000000
+RDATE:19831030T000000
+RDATE:19841028T000000
+RDATE:19851027T000000
+RDATE:19861026T000000
+RDATE:19871025T000000
+RDATE:19881030T000000
+RDATE:19891029T000000
+RDATE:19901028T000000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Saipan.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Saipan.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,37 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Saipan
+TZURL:http://tzurl.org/zoneinfo/Pacific/Saipan
+X-LIC-LOCATION:Pacific/Saipan
+BEGIN:STANDARD
+TZOFFSETFROM:-1417
+TZOFFSETTO:+0943
+TZNAME:LMT
+DTSTART:18441231T000000
+RDATE:18441231T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0943
+TZOFFSETTO:+0900
+TZNAME:MPT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+TZNAME:MPT
+DTSTART:19691001T000000
+RDATE:19691001T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+TZNAME:ChST
+DTSTART:20001223T000000
+RDATE:20001223T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Tahiti.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Tahiti.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Tahiti
+TZURL:http://tzurl.org/zoneinfo/Pacific/Tahiti
+X-LIC-LOCATION:Pacific/Tahiti
+BEGIN:STANDARD
+TZOFFSETFROM:-095816
+TZOFFSETTO:-1000
+TZNAME:TAHT
+DTSTART:19121001T000000
+RDATE:19121001T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Tarawa.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Tarawa.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Tarawa
+TZURL:http://tzurl.org/zoneinfo/Pacific/Tarawa
+X-LIC-LOCATION:Pacific/Tarawa
+BEGIN:STANDARD
+TZOFFSETFROM:+113204
+TZOFFSETTO:+1200
+TZNAME:GILT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Tongatapu.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Tongatapu.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,48 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Tongatapu
+TZURL:http://tzurl.org/zoneinfo/Pacific/Tongatapu
+X-LIC-LOCATION:Pacific/Tongatapu
+BEGIN:STANDARD
+TZOFFSETFROM:+121920
+TZOFFSETTO:+1220
+TZNAME:TOT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1220
+TZOFFSETTO:+1300
+TZNAME:TOT
+DTSTART:19410101T000000
+RDATE:19410101T000000
+END:STANDARD
+BEGIN:STANDARD
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+TZNAME:TOT
+DTSTART:19990101T000000
+RDATE:19990101T000000
+END:STANDARD
+BEGIN:DAYLIGHT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+TZNAME:TOST
+DTSTART:19991007T020000
+RDATE:19991007T020000
+RDATE:20001105T020000
+RDATE:20011104T020000
+END:DAYLIGHT
+BEGIN:STANDARD
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+TZNAME:TOT
+DTSTART:20000319T030000
+RDATE:20000319T030000
+RDATE:20010128T020000
+RDATE:20020127T020000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Wake.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Wake.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Wake
+TZURL:http://tzurl.org/zoneinfo/Pacific/Wake
+X-LIC-LOCATION:Pacific/Wake
+BEGIN:STANDARD
+TZOFFSETFROM:+110628
+TZOFFSETTO:+1200
+TZNAME:WAKT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
diff -r 000000000000 -r fb9019fb1bf7 src/zoneinfo/Pacific/Wallis.ics
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/zoneinfo/Pacific/Wallis.ics Tue Feb 10 18:12:00 2015 +0100
@@ -0,0 +1,16 @@
+BEGIN:VCALENDAR
+PRODID:-//tzurl.org//NONSGML Olson 2011n//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:Pacific/Wallis
+TZURL:http://tzurl.org/zoneinfo/Pacific/Wallis
+X-LIC-LOCATION:Pacific/Wallis
+BEGIN:STANDARD
+TZOFFSETFROM:+121520
+TZOFFSETTO:+1200
+TZNAME:WFT
+DTSTART:19010101T000000
+RDATE:19010101T000000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR