<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[13630] CalendarServer/branches/users/gaya/groupsharee</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/13630">13630</a></dd>
<dt>Author</dt> <dd>gaya@apple.com</dd>
<dt>Date</dt> <dd>2014-06-10 20:50:42 -0700 (Tue, 10 Jun 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>merge from trunk to <a href="http://trac.calendarserver.org//changeset/13629">r13629</a></pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesusersgayagroupshareebinpyflakes">CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebinpython">CalendarServer/branches/users/gaya/groupsharee/bin/python</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebinsim">CalendarServer/branches/users/gaya/groupsharee/bin/sim</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebintest">CalendarServer/branches/users/gaya/groupsharee/bin/test</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebintrial">CalendarServer/branches/users/gaya/groupsharee/bin/trial</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareebintwistd">CalendarServer/branches/users/gaya/groupsharee/bin/twistd</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarserverdashboard_servicepy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarserverprovisionrootpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertapcaldavpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertaptesttest_caldavpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolscalverifypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolscmdlinepy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsdashboardpy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsgatewaypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsmanagetimezonespy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsmigrate_verifypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolsresourcespy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_gatewaypy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_principalspy">CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareeconfauthgenerate_test_accountspy">CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareeconfcaldavdappleplist">CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareecontribtoolsmonitoranalysispy">CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareerequirementsdevtxt">CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareerequirementsstabletxt">CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareesupport_cache_deps">CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectoryutilpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectorybackedaddressbookpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavicalpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavmemcacheclientpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavresourcepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavscheduling_storecaldavresourcepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavsharingpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavstdconfigpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavstorebridgepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_icalendarpy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_resourcepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavtimezonestdservicepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavupgradepy">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfolinkstxt">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfotimezonesxml">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystorebasepy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretestbasepy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_sqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_xattrpy">CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastorefilepy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingicaldiffpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingworkpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_implicitpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sql_sharingpy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcaldavicalendarstorepy">CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorefilepy">CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorequeryfilterpy">CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastorefilepy">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresqlpy">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresql_externalpy">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavcommondatastoretestaccountsaccountsxml">CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpsclientpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpscommandspy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpsjsonpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpsserverpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavdpstesttest_clientpy">CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhoaugmentpy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhodirectorypy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhoopendirectorypy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhotestsupportpy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxdavwhovcardpy">CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetxweb2davmethodreport_expandpy">CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li>CalendarServer/branches/users/gaya/groupsharee/contrib/od/</li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSCentralStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAfghanistanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAlaskanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabicStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArgentinaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAtlanticStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzerbaijanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzoresStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBahiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBangladeshStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCanadaCentralStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCapeVerdeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCaucasusStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCenAustraliaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAmericaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralBrazilianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeMexicoics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoChinaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoDatelineStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAfricaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAustraliaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoESouthAmericaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEgyptStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEkaterinburgStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFLEStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFijiStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGMTStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGTBStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGeorgianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenlandStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenwichStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoHawaiianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIndiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIranStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIsraelStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoJordanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKaliningradStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKoreaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoLibyaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMagadanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMauritiusStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMiddleEastStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMontevideoStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMoroccoStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeMexicoics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMyanmarStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNCentralAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNamibiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNepalStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewZealandStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewfoundlandStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaEastStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificSAStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeMexicoics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPakistanStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoParaguayStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRomanceStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRussianStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAWesternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSEAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSamoaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSingaporeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSouthAfricaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSriLankaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSyriaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTaipeiStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTasmaniaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTokyoStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTongaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTurkeyStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSEasternStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSMountainStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC12ics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC02ics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC11ics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUlaanbaatarStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVenezuelaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVladivostokStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWAustraliaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWCentralAfricaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWEuropeStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestAsiaStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestPacificStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics</a></li>
<li><a href="#CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoYakutskStandardTimeics">CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServerbranchesusersgayagroupshareebinpyflakes"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/pyflakes        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -24,7 +24,8 @@
</span><span class="cx">
</span><span class="cx"> . "${wd}/bin/_build.sh";
</span><span class="cx">
</span><del>-init_build > /dev/null;
</del><ins>+do_setup="false";
+develop > /dev/null;
</ins><span class="cx">
</span><span class="cx"> if [ $# -eq 0 ]; then
</span><span class="cx"> set - calendarserver contrib twisted twistedcaldav txdav txweb2;
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebinpython"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/python (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/bin/python        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/python        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -25,7 +25,6 @@
</span><span class="cx"> . "${wd}/bin/_build.sh";
</span><span class="cx">
</span><span class="cx"> do_setup="false";
</span><del>-
</del><span class="cx"> develop > /dev/null;
</span><span class="cx">
</span><span class="cx"> exec "${python}" "$@";
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebinsim"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/sim (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/bin/sim        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/sim        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx">
</span><span class="cx"> . "${wd}/bin/_build.sh";
</span><span class="cx">
</span><del>-init_build > /dev/null;
</del><span class="cx"> do_setup="false";
</span><span class="cx"> develop > /dev/null;
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebintest"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/test (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/bin/test        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/test        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -96,8 +96,7 @@
</span><span class="cx"> # Dependencies
</span><span class="cx"> #
</span><span class="cx">
</span><del>-c_dependencies >> "${dev_home}/setup.log";
-py_dependencies >> "${dev_home}/setup.log";
</del><ins>+develop > /dev/null "${dev_home}/setup.log";
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebintrial"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/trial (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/bin/trial        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/trial        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -24,7 +24,6 @@
</span><span class="cx">
</span><span class="cx"> . "${wd}/bin/_build.sh";
</span><span class="cx">
</span><del>-init_build > /dev/null;
</del><span class="cx"> do_setup="false";
</span><span class="cx"> develop > /dev/null;
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareebintwistd"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/bin/twistd (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/bin/twistd        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/bin/twistd        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -24,7 +24,8 @@
</span><span class="cx">
</span><span class="cx"> . "${wd}/bin/_build.sh";
</span><span class="cx">
</span><del>-init_build > /dev/null;
</del><ins>+do_setup="false";
+develop > /dev/null;
</ins><span class="cx">
</span><span class="cx"> exec "${python}" \
</span><span class="cx"> -c "\
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarserverdashboard_servicepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/dashboard_service.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> a server admin or developer would like to keep an eye on.
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+
</ins><span class="cx"> class DashboardProtocol (LineReceiver):
</span><span class="cx"> """
</span><span class="cx"> A protocol that receives a line containing a JSON object representing a request,
</span><span class="lines">@@ -153,7 +154,21 @@
</span><span class="cx"> return succeed({"workers": loads, "level": level})
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def data_directory(self):
+ """
+ Return a summary of directory service calls.
</ins><span class="cx">
</span><ins>+ @return: the JSON result.
+ @rtype: L{str}
+ """
+ directory = self.factory.store.directoryService()
+ if hasattr(directory, "stats"):
+ return succeed(directory.stats())
+ else:
+ return succeed({})
+
+
+
</ins><span class="cx"> class DashboardServer(Factory):
</span><span class="cx">
</span><span class="cx"> protocol = DashboardProtocol
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarserverprovisionrootpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/provision/root.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -364,12 +364,7 @@
</span><span class="cx"> .format(agent)
</span><span class="cx"> ))
</span><span class="cx">
</span><del>- if (
- config.EnableResponseCache and
- request.method == "PROPFIND" and
- not getattr(request, "notInCache", False) and
- len(segments) > 1
- ):
</del><ins>+ if not hasattr(request, "authzUser"):
</ins><span class="cx"> try:
</span><span class="cx"> authnUser, authzUser = yield self.authenticate(request)
</span><span class="cx"> request.authnUser = authnUser
</span><span class="lines">@@ -381,6 +376,13 @@
</span><span class="cx"> )
</span><span class="cx"> raise HTTPError(response)
</span><span class="cx">
</span><ins>+ if (
+ config.EnableResponseCache and
+ request.method == "PROPFIND" and
+ not getattr(request, "notInCache", False) and
+ len(segments) > 1
+ ):
+
</ins><span class="cx"> try:
</span><span class="cx"> if not getattr(request, "checkingCache", False):
</span><span class="cx"> request.checkingCache = True
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertapcaldavpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/caldav.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx">
</span><span class="cx"> from zope.interface import implements
</span><span class="cx">
</span><ins>+from twistedcaldav.stdconfig import config
+
</ins><span class="cx"> from twisted.python.log import FileLogObserver, ILogObserver
</span><span class="cx"> from twisted.python.logfile import LogFile
</span><span class="cx"> from twisted.python.usage import Options, UsageError
</span><span class="lines">@@ -70,6 +72,7 @@
</span><span class="cx"> from twext.enterprise.jobqueue import WorkerFactory as QueueWorkerFactory
</span><span class="cx"> from twext.application.service import ReExecService
</span><span class="cx"> from txdav.who.groups import GroupCacherPollingWork
</span><ins>+from calendarserver.tools.purge import PrincipalPurgePollingWork
</ins><span class="cx">
</span><span class="cx"> from txweb2.channel.http import (
</span><span class="cx"> LimitingHTTPFactory, SSLRedirectRequest, HTTPChannel
</span><span class="lines">@@ -96,7 +99,7 @@
</span><span class="cx"> from txdav.who.groups import GroupCacher
</span><span class="cx">
</span><span class="cx"> from twistedcaldav import memcachepool
</span><del>-from twistedcaldav.config import config, ConfigurationError
</del><ins>+from twistedcaldav.config import ConfigurationError
</ins><span class="cx"> from twistedcaldav.localization import processLocalizationFiles
</span><span class="cx"> from twistedcaldav.stdconfig import DEFAULT_CONFIG, DEFAULT_CONFIG_FILE
</span><span class="cx"> from twistedcaldav.upgrade import (
</span><span class="lines">@@ -566,7 +569,7 @@
</span><span class="cx"> """
</span><span class="cx"> log = Logger()
</span><span class="cx">
</span><del>- def __init__(self, store, doImip, doGroupCaching):
</del><ins>+ def __init__(self, store, doImip, doGroupCaching, doPrincipalPurging):
</ins><span class="cx"> """
</span><span class="cx"> @param store: the Store to use for enqueuing work
</span><span class="cx"> @param doImip: whether to schedule imip polling
</span><span class="lines">@@ -577,6 +580,7 @@
</span><span class="cx"> self.store = store
</span><span class="cx"> self.doImip = doImip
</span><span class="cx"> self.doGroupCaching = doGroupCaching
</span><ins>+ self.doPrincipalPurging = doPrincipalPurging
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -595,6 +599,11 @@
</span><span class="cx"> self.store,
</span><span class="cx"> int(config.LogID) if config.LogID else 5
</span><span class="cx"> )
</span><ins>+ if self.doPrincipalPurging:
+ yield PrincipalPurgePollingWork.initialSchedule(
+ self.store,
+ int(config.LogID) if config.LogID else 5
+ )
</ins><span class="cx"> yield FindMinValidRevisionWork.initialSchedule(
</span><span class="cx"> self.store,
</span><span class="cx"> int(config.LogID) if config.LogID else 5
</span><span class="lines">@@ -604,15 +613,8 @@
</span><span class="cx"> int(config.LogID) if config.LogID else 5
</span><span class="cx"> )
</span><span class="cx">
</span><del>- # FIXME: uncomment this when purge is working
- # from calendarserver.tools.purge import scheduleNextPrincipalPurgeUpdate
- # yield PrincipalPurgePollingWork.initialSchedule(
- # self.store,
- # int(config.LogID) if config.LogID else 5
- # )
</del><span class="cx">
</span><span class="cx">
</span><del>-
</del><span class="cx"> class PreProcessingService(Service):
</span><span class="cx"> """
</span><span class="cx"> A Service responsible for running any work that needs to be finished prior
</span><span class="lines">@@ -1098,7 +1100,8 @@
</span><span class="cx"> WorkSchedulingService(
</span><span class="cx"> store,
</span><span class="cx"> config.Scheduling.iMIP.Enabled,
</span><del>- (config.GroupCaching.Enabled and config.GroupCaching.EnableUpdater)
</del><ins>+ (config.GroupCaching.Enabled and config.GroupCaching.EnableUpdater),
+ config.AutomaticPurging.Enabled
</ins><span class="cx"> ).setServiceParent(service)
</span><span class="cx">
</span><span class="cx"> # For calendarserver.tap.test
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertaptesttest_caldavpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tap/test/test_caldav.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -1284,8 +1284,8 @@
</span><span class="cx"> deferred = Deferred()
</span><span class="cx"> proc = reactor.spawnProcess(
</span><span class="cx"> CapturingProcessProtocol(deferred, None),
</span><del>- twistd,
- [twistd, reactorArg, '-n', '-y', tacFilePath],
</del><ins>+ sys.executable,
+ [sys.executable, twistd, reactorArg, '-n', '-y', tacFilePath],
</ins><span class="cx"> env=os.environ
</span><span class="cx"> )
</span><span class="cx"> reactor.callLater(3, proc.signalProcess, "HUP")
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolscalverifypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/calverify.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> import sys
</span><span class="cx"> import time
</span><span class="cx"> import traceback
</span><del>-import uuid
</del><ins>+from uuid import uuid4
</ins><span class="cx">
</span><span class="cx"> from calendarserver.tools import tables
</span><span class="cx"> from calendarserver.tools.cmdline import utilityMain, WorkerService
</span><span class="lines">@@ -1851,7 +1851,7 @@
</span><span class="cx"> _ignore_homeID, calendarID = yield self.getAllResourceInfoForResourceID(attresid)
</span><span class="cx"> calendar = yield home.childWithID(calendarID)
</span><span class="cx"> calendarObj = yield calendar.objectResourceWithID(attresid)
</span><del>- calendarObj.scheduleTag = str(uuid.uuid4())
</del><ins>+ calendarObj.scheduleTag = str(uuid4())
</ins><span class="cx"> yield calendarObj._setComponentInternal(attendee_calendar, internal_state=ComponentUpdateState.RAW)
</span><span class="cx"> self.results.setdefault("Fix change event", set()).add((home.name(), calendar.name(), attendee_calendar.resourceUID(),))
</span><span class="cx">
</span><span class="lines">@@ -1862,7 +1862,7 @@
</span><span class="cx"> defaultCalendar = (yield self.defaultCalendarForAttendee(home))
</span><span class="cx"> if defaultCalendar is None:
</span><span class="cx"> raise ValueError("Cannot find suitable default calendar")
</span><del>- new_name = str(uuid.uuid4()) + ".ics"
</del><ins>+ new_name = str(uuid4()) + ".ics"
</ins><span class="cx"> calendarObj = (yield defaultCalendar._createCalendarObjectWithNameInternal(new_name, attendee_calendar, internal_state=ComponentUpdateState.RAW, options=self.metadata))
</span><span class="cx"> self.results.setdefault("Fix add event", set()).add((home.name(), defaultCalendar.name(), attendee_calendar.resourceUID(),))
</span><span class="cx">
</span><span class="lines">@@ -1879,7 +1879,7 @@
</span><span class="cx"> details["title"] = instance.component.propertyValue("SUMMARY")
</span><span class="cx">
</span><span class="cx"> # Write new itip message to attendee inbox
</span><del>- yield inbox.createCalendarObjectWithName(str(uuid.uuid4()) + ".ics", itipmsg, options=self.metadata_inbox)
</del><ins>+ yield inbox.createCalendarObjectWithName(str(uuid4()) + ".ics", itipmsg, options=self.metadata_inbox)
</ins><span class="cx"> self.results.setdefault("Fix add inbox", set()).add((home.name(), itipmsg.resourceUID(),))
</span><span class="cx">
</span><span class="cx"> yield self.txn.commit()
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolscmdlinepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/cmdline.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -18,7 +18,6 @@
</span><span class="cx"> Shared main-point between utilities.
</span><span class="cx"> """
</span><span class="cx">
</span><del>-from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
</del><span class="cx"> from calendarserver.tap.util import checkDirectories
</span><span class="cx"> from calendarserver.tools.util import loadConfig, autoDisableMemcached
</span><span class="cx">
</span><span class="lines">@@ -36,7 +35,10 @@
</span><span class="cx"> # TODO: direct unit tests for these functions.
</span><span class="cx">
</span><span class="cx">
</span><del>-def utilityMain(configFileName, serviceClass, reactor=None, serviceMaker=CalDAVServiceMaker, patchConfig=None, onShutdown=None, verbose=False):
</del><ins>+def utilityMain(
+ configFileName, serviceClass, reactor=None, serviceMaker=None,
+ patchConfig=None, onShutdown=None, verbose=False
+):
</ins><span class="cx"> """
</span><span class="cx"> Shared main-point for utilities.
</span><span class="cx">
</span><span class="lines">@@ -68,6 +70,10 @@
</span><span class="cx"> will be imported and used.
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+ from calendarserver.tap.caldav import CalDAVServiceMaker, CalDAVOptions
+ if serviceMaker is None:
+ serviceMaker = CalDAVServiceMaker
+
</ins><span class="cx"> # We want to validate that the actual service is always an instance of WorkerService, so wrap the
</span><span class="cx"> # service maker callback inside a function that does that check
</span><span class="cx"> def _makeValidService(store):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsdashboardpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/dashboard.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -201,7 +201,7 @@
</span><span class="cx"> self.windows
</span><span class="cx"> ):
</span><span class="cx"> window.update()
</span><del>- except Exception as e: #@UnusedVariable
</del><ins>+ except Exception:
</ins><span class="cx"> #print(str(e))
</span><span class="cx"> pass
</span><span class="cx"> if not self.usesCurses:
</span><span class="lines">@@ -738,10 +738,12 @@
</span><span class="cx">
</span><span class="cx"> s = " {:<12}{:>8}{:>16}".format(
</span><span class="cx"> "Total:",
</span><del>- sum([
- record["unacknowledged"] + record["acknowledged"]
- for record in records
- ]),
</del><ins>+ sum(
+ [
+ record["unacknowledged"] + record["acknowledged"]
+ for record in records
+ ]
+ ),
</ins><span class="cx"> sum([record["total"] for record in records]),
</span><span class="cx"> )
</span><span class="cx"> if self.usesCurses:
</span><span class="lines">@@ -919,11 +921,103 @@
</span><span class="cx"> self.lastResult = records
</span><span class="cx">
</span><span class="cx">
</span><ins>+class DirectoryStatsWindow(BaseWindow):
+ """
+ Displays the status of the server's directory service calls
+ """
+
+ help = "display directory service stats"
+ clientItem = "directory"
+ FORMAT_WIDTH = 89
+
+
+ def makeWindow(self, top=0, left=0):
+ nlines = len(defaultIfNone(self.readItem("directory"), {}))
+ self.rowCount = nlines
+ self._createWindow(
+ "Directory Service", self.rowCount + 6, ncols=self.FORMAT_WIDTH,
+ begin_y=top, begin_x=left
+ )
+ return self
+
+
+ def update(self):
+ records = defaultIfNone(self.clientData(), {})
+ if len(records) != self.rowCount:
+ self.needsReset = True
+ return
+
+ self.iter += 1
+
+ if self.usesCurses:
+ self.window.erase()
+ self.window.border()
+ self.window.addstr(0, 2, self.title + " {} ({})".format(len(records), self.iter,))
+
+ x = 1
+ y = 1
+ s1 = " {:<40}{:>15}{:>15}{:>15} ".format(
+ "Method", "Calls", "Total", "Average"
+ )
+ s2 = " {:<40}{:>15}{:>15}{:>15} ".format(
+ "", "", "(sec)", "(sec)"
+ )
+ if self.usesCurses:
+ self.window.addstr(y, x, s1, curses.A_REVERSE)
+ self.window.addstr(y + 1, x, s2, curses.A_REVERSE)
+ else:
+ print(s1)
+ print(s2)
+ y += 2
+
+ overallCount = 0
+ overallTimeSpent = 0.0
+
+ for methodName, (count, timeSpent) in sorted(records.items(), key=lambda x: x[0]):
+ overallCount += count
+ overallTimeSpent += timeSpent
+
+ s = " {:<40}{:>15d}{:>15.1f}{:>15.5f} ".format(
+ methodName,
+ count,
+ timeSpent,
+ timeSpent / count,
+ )
+ try:
+ if self.usesCurses:
+ self.window.addstr(y, x, s)
+ else:
+ print(s)
+ except curses.error:
+ pass
+ y += 1
+
+
+ s = " {:<40}{:>15d}{:>15.1f}{:>15.5f} ".format(
+ "Total:",
+ overallCount,
+ overallTimeSpent,
+ safeDivision(overallTimeSpent, overallCount, 1.0)
+ )
+ if self.usesCurses:
+ self.window.hline(y, x, "-", self.FORMAT_WIDTH - 2)
+ y += 1
+ self.window.addstr(y, x, s)
+ else:
+ print(s)
+ y += 1
+
+ if self.usesCurses:
+ self.window.refresh()
+
+
+
</ins><span class="cx"> Dashboard.registerWindow(SystemWindow, "s")
</span><span class="cx"> Dashboard.registerWindow(RequestStatsWindow, "r")
</span><span class="cx"> Dashboard.registerWindow(JobsWindow, "j")
</span><span class="cx"> Dashboard.registerWindow(AssignmentsWindow, "w")
</span><span class="cx"> Dashboard.registerWindow(HTTPSlotsWindow, "c")
</span><ins>+Dashboard.registerWindow(DirectoryStatsWindow, "d")
</ins><span class="cx"> Dashboard.registerWindow(HelpWindow, "h")
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsgatewaypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/gateway.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -25,11 +25,18 @@
</span><span class="cx"> import xml
</span><span class="cx">
</span><span class="cx"> from calendarserver.tools.cmdline import utilityMain
</span><del>-from calendarserver.tools.config import WRITABLE_CONFIG_KEYS, setKeyPath, getKeyPath, flattenDictionary, WritableConfig
</del><ins>+from calendarserver.tools.config import (
+ WRITABLE_CONFIG_KEYS, setKeyPath, getKeyPath, flattenDictionary,
+ WritableConfig
+)
</ins><span class="cx"> from calendarserver.tools.principals import (
</span><span class="cx"> getProxies, setProxies
</span><span class="cx"> )
</span><del>-from calendarserver.tools.purge import WorkerService, PurgeOldEventsService, DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS
</del><ins>+from calendarserver.tools.purge import (
+ WorkerService, PurgeOldEventsService,
+ DEFAULT_BATCH_SIZE, DEFAULT_RETAIN_DAYS,
+ PrincipalPurgeWork
+)
</ins><span class="cx"> from calendarserver.tools.util import (
</span><span class="cx"> recordForPrincipalID, autoDisableMemcached
</span><span class="cx"> )
</span><span class="lines">@@ -412,14 +419,26 @@
</span><span class="cx"> self.respondWithRecordsOfTypes(self.dir, command, [typeName])
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def command_deleteLocation(self, command):
</span><del>- return self._delete("locations", command)
</del><ins>+ txn = self.store.newTransaction()
+ uid = command['GeneratedUID']
+ yield txn.enqueue(PrincipalPurgeWork, uid=uid)
+ yield txn.commit()
</ins><span class="cx">
</span><ins>+ yield self._delete("locations", command)
</ins><span class="cx">
</span><ins>+
+ @inlineCallbacks
</ins><span class="cx"> def command_deleteResource(self, command):
</span><del>- return self._delete("resources", command)
</del><ins>+ txn = self.store.newTransaction()
+ uid = command['GeneratedUID']
+ yield txn.enqueue(PrincipalPurgeWork, uid=uid)
+ yield txn.commit()
</ins><span class="cx">
</span><ins>+ yield self._delete("resources", command)
</ins><span class="cx">
</span><ins>+
</ins><span class="cx"> def command_deleteAddress(self, command):
</span><span class="cx"> return self._delete("addresses", command)
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsmanagetimezonespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/managetimezones.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -105,7 +105,16 @@
</span><span class="cx"> for file in zonefiles:
</span><span class="cx"> parser.parse(os.path.join(zonedir, file))
</span><span class="cx">
</span><del>- parser.generateZoneinfoFiles(os.path.join(rootdir, "zoneinfo"), startYear, endYear, filterzones=())
</del><ins>+ # Check for windows aliases
+ print("Downloading latest data from unicode.org")
+ path = "http://unicode.org/repos/cldr/tags/latest/common/supplemental/windowsZones.xml"
+ data = urllib.urlretrieve(path)
+ wpath = data[0]
+
+ # Generate the iCalendar data
+ print("Generating iCalendar data")
+ parser.generateZoneinfoFiles(os.path.join(rootdir, "zoneinfo"), startYear, endYear, windowsAliases=wpath, filterzones=())
+
</ins><span class="cx"> print("Copy new zoneinfo to destination: %s" % (tzpath,))
</span><span class="cx"> z = FilePath(os.path.join(rootdir, "zoneinfo"))
</span><span class="cx"> tz = FilePath(tzpath)
</span><span class="lines">@@ -251,7 +260,8 @@
</span><span class="cx"> Description:
</span><span class="cx"> This utility will create, update, or list an XML timezone database
</span><span class="cx"> summary file, or refresh iCalendar timezone from IANA (Olson). It can
</span><del>- also be used to update the server's own zoneinfo database from IANA.
</del><ins>+ also be used to update the server's own zoneinfo database from IANA. It
+ also creates aliases for the unicode.org windowsZones.
</ins><span class="cx">
</span><span class="cx"> """)
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsmigrate_verifypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/migrate_verify.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -193,7 +193,7 @@
</span><span class="cx"> self.badPaths.append(line)
</span><span class="cx">
</span><span class="cx"> # Remove any invalid GUIDs that actuall were valid
</span><del>- invalidGUIDs = [guid for guid in invalidGUIDs if guid not in self.pathsByGUID]
</del><ins>+ invalidGUIDs = [pguid for pguid in invalidGUIDs if pguid not in self.pathsByGUID]
</ins><span class="cx">
</span><span class="cx"> self.output.write("\nTotal lines read: %d\n" % (total,))
</span><span class="cx"> self.output.write("Total guids: valid: %d invalid: %d overall: %d\n" % (
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolsresourcespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/resources.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, returnValue
</span><span class="cx"> from txdav.who.directory import CalendarDirectoryRecordMixin
</span><span class="cx"> from twext.who.directory import DirectoryRecord as BaseDirectoryRecord
</span><del>-from txdav.who.opendirectory import RecordType
</del><ins>+from txdav.who.idirectory import RecordType
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> log = Logger()
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def doWork(self):
</span><span class="cx"> try:
</span><del>- from twext.who.opendirectory import (
</del><ins>+ from txdav.who.opendirectory import (
</ins><span class="cx"> DirectoryService as OpenDirectoryService
</span><span class="cx"> )
</span><span class="cx"> except ImportError:
</span><span class="lines">@@ -115,8 +115,8 @@
</span><span class="cx"> destRecords = []
</span><span class="cx">
</span><span class="cx"> for recordType in (
</span><del>- sourceService.recordType.resource,
- sourceService.recordType.location,
</del><ins>+ RecordType.resource,
+ RecordType.location,
</ins><span class="cx"> ):
</span><span class="cx"> records = yield sourceService.recordsWithRecordType(recordType)
</span><span class="cx"> for sourceRecord in records:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_gatewaypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_gateway.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -20,12 +20,12 @@
</span><span class="cx"> import plistlib
</span><span class="cx"> import xml
</span><span class="cx">
</span><ins>+from twistedcaldav.stdconfig import config
</ins><span class="cx"> from twext.python.filepath import CachingFilePath as FilePath
</span><span class="cx"> from twisted.internet import reactor
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
</span><span class="cx"> from twisted.trial.unittest import TestCase
</span><span class="cx"> from twistedcaldav import memcacher
</span><del>-from twistedcaldav.config import config
</del><span class="cx"> from twistedcaldav.memcacheclient import ClientFactory
</span><span class="cx"> from twistedcaldav.test.util import CapturingProcessProtocol
</span><span class="cx"> from txdav.common.datastore.test.util import (
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecalendarservertoolstesttest_principalspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/calendarserver/tools/test/test_principals.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -16,6 +16,7 @@
</span><span class="cx">
</span><span class="cx"> import os
</span><span class="cx">
</span><ins>+from twistedcaldav.stdconfig import config
</ins><span class="cx"> from calendarserver.tools.principals import (
</span><span class="cx"> parseCreationArgs, matchStrings,
</span><span class="cx"> recordForPrincipalID, getProxies, setProxies
</span><span class="lines">@@ -23,7 +24,6 @@
</span><span class="cx"> from twext.python.filepath import CachingFilePath as FilePath
</span><span class="cx"> from twisted.internet import reactor
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
</span><del>-from twistedcaldav.config import config
</del><span class="cx"> from twistedcaldav.test.util import (
</span><span class="cx"> TestCase, StoreTestCase, CapturingProcessProtocol, ErrorOutput
</span><span class="cx"> )
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareeconfauthgenerate_test_accountspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/conf/auth/generate_test_accounts.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -220,7 +220,7 @@
</span><span class="cx"> <short-name>il1</short-name>
</span><span class="cx"> <full-name>IL1</full-name>
</span><span class="cx"> <street-address>1 Infinite Loop, Cupertino, CA 95014</street-address>
</span><del>- <geographic-location>37.331741,-122.030333</geographic-location>
</del><ins>+ <geographic-location>geo:37.331741,-122.030333</geographic-location>
</ins><span class="cx"> </record>
</span><span class="cx"> <record type="location">
</span><span class="cx"> <uid>fantastic</uid>
</span><span class="lines">@@ -233,7 +233,7 @@
</span><span class="cx"> <short-name>il2</short-name>
</span><span class="cx"> <full-name>IL2</full-name>
</span><span class="cx"> <street-address>2 Infinite Loop, Cupertino, CA 95014</street-address>
</span><del>- <geographic-location>37.332633,-122.030502</geographic-location>
</del><ins>+ <geographic-location>geo:37.332633,-122.030502</geographic-location>
</ins><span class="cx"> </record>
</span><span class="cx"> <record type="location">
</span><span class="cx"> <uid>delegatedroom</uid>
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareeconfcaldavdappleplist"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/conf/caldavd-apple.plist        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -528,19 +528,29 @@
</span><span class="cx"> <!-- Directory searching -->
</span><span class="cx"> <key>DirectoryAddressBook</key>
</span><span class="cx"> <dict>
</span><del>-        <key>Enabled</key>
-        <true/>
- <key>params</key>
- <dict>
- <key>queryUserRecords</key>
- <false/>
- <key>queryPeopleRecords</key>
- <false/>
- </dict>
</del><ins>+         <key>Enabled</key>
+         <true/>
+ <key>params</key>
+ <dict>
+ <key>queryUserRecords</key>
+ <false/>
+ <key>queryPeopleRecords</key>
+ <false/>
+ </dict>
</ins><span class="cx"> </dict>
</span><ins>+
</ins><span class="cx"> <key>EnableSearchAddressBook</key>
</span><span class="cx"> <false/>
</span><span class="cx">
</span><ins>+
+ <!-- Automatic purging of data for principals no longer in the directory
+ -->
+ <key>AutomaticPurging</key>
+ <dict>
+ <key>Enabled</key>
+ <true/>
+ </dict>
+
</ins><span class="cx"> <key>Includes</key>
</span><span class="cx"> <array>
</span><span class="cx"> <string>/Library/Preferences/com.apple.servermgr_calendar.plist</string>
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareecontribtoolsmonitoranalysispy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/contrib/tools/monitoranalysis.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -106,7 +106,7 @@
</span><span class="cx"> y2 = []
</span><span class="cx"> x3 = []
</span><span class="cx"> y3 = []
</span><del>- for datetime, reqs, resp, lq, _ignore_cpu in data:
</del><ins>+ for _ignore_dt, reqs, resp, lq, _ignore_cpu in data:
</ins><span class="cx"> if lq == 0:
</span><span class="cx"> x1.append(reqs)
</span><span class="cx"> y1.append(resp)
</span><span class="lines">@@ -134,7 +134,7 @@
</span><span class="cx">
</span><span class="cx"> x = [[], [], [], []]
</span><span class="cx"> y = [[], [], [], []]
</span><del>- for datetime, reqs, resp, _ignore_lq, cpu in data:
</del><ins>+ for _ignore_dt, reqs, resp, _ignore_lq, cpu in data:
</ins><span class="cx"> if cpu > 75:
</span><span class="cx"> x[0].append(reqs)
</span><span class="cx"> y[0].append(resp)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareerequirementsdevtxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/requirements-dev.txt        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -7,4 +7,4 @@
</span><span class="cx"> mockldap
</span><span class="cx"> q
</span><span class="cx"> --editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVClientLibrary/trunk@13420#egg=CalDAVClientLibrary
</span><del>---editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13547#egg=CalDAVTester
</del><ins>+--editable svn+http://svn.calendarserver.org/repository/calendarserver/CalDAVTester/trunk@13624#egg=CalDAVTester
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareerequirementsstabletxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/requirements-stable.txt        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -5,9 +5,9 @@
</span><span class="cx"> # For CalendarServer development, don't try to get these projects from PyPI; use svn.
</span><span class="cx">
</span><span class="cx"> -e .
</span><del>--e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@13580#egg=twextpy
</del><ins>+-e svn+http://svn.calendarserver.org/repository/calendarserver/twext/trunk@13610#egg=twextpy
</ins><span class="cx"> -e svn+http://svn.calendarserver.org/repository/calendarserver/PyKerberos/trunk@13420#egg=kerberos
</span><del>--e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13576#egg=pycalendar
</del><ins>+-e svn+http://svn.calendarserver.org/repository/calendarserver/PyCalendar/trunk@13621#egg=pycalendar
</ins><span class="cx">
</span><span class="cx"> # Specify specific versions of our dependencies so that we're all testing the same config.
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareesupport_cache_deps"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/support/_cache_deps        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -76,7 +76,7 @@
</span><span class="cx"> rev="$(grep egg=CalDAVTester "${wd}/requirements-dev.txt" | sed 's|^.*svn+[^@#]*@\([0-9]*\).*$|\1|')";
</span><span class="cx">
</span><span class="cx"> svn export -r "${rev}" "${url}@${rev}" "${wd}/CalDAVTester";
</span><del>-tar -C "${wd}" -cvzf "${wd}/CalDAVTester.tgz" CalDAVTester;
</del><ins>+tar -C "${wd}" -cvzf "${wd}/CalDAVTester.tgz" CalDAVTester;
</ins><span class="cx"> rm -r CalDAVTester;
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx"> # Remove .exe files from arvhives
</span><span class="cx"> #
</span><span class="cx">
</span><del>-for archive in $(find "${wd}/.develop" -type f -name '*.tgz'); do
</del><ins>+for archive in $(find "${wd}/.develop" -type f -name '*.tgz' -or -name '*.tar.gz'); do
</ins><span class="cx"> if tar -tvzf "${archive}" "*.exe" > /dev/null 2>&1; then
</span><span class="cx"> ruler "Removing binaries from ${archive}";
</span><span class="cx"> tmp="$(mktemp -t ccsXXXXX)";
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectoryutilpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directory/util.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -92,7 +92,11 @@
</span><span class="cx"> """
</span><span class="cx"> transaction = getattr(request, TRANSACTION_KEY, None)
</span><span class="cx"> if transaction is None:
</span><del>- transaction = newStore.newTransaction(repr(request))
</del><ins>+ if hasattr(request, "authzUser") and request.authzUser is not None:
+ authz_uid = request.authzUser.record.uid
+ else:
+ authz_uid = None
+ transaction = newStore.newTransaction(repr(request), authz_uid=authz_uid)
</ins><span class="cx"> def abortIfUncommitted(request, response):
</span><span class="cx"> try:
</span><span class="cx"> # TODO: missing 'yield' here. For formal correctness as per
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavdirectorybackedaddressbookpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/directorybackedaddressbook.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -182,48 +182,72 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> propNames, expression = expressionFromABFilter(
</span><del>- addressBookFilter, vcardPropToRecordFieldMap, vCardConstantProperties
</del><ins>+ addressBookFilter, vcardPropToRecordFieldMap, vCardConstantProperties,
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> if expression:
</span><del>- if defaultKind and "KIND" not in propNames:
- defaultRecordExpression = MatchExpression(
- FieldName.recordType,
- vCardKindToRecordTypeMap[defaultKind],
- MatchType.equals
- )
- if expression is True:
- expression = defaultRecordExpression
- else:
- expression = CompoundExpression(
- (expression, defaultRecordExpression,),
- Operand.AND
</del><ins>+
+ queryRecordType = None
+ if "KIND" not in propNames:
+ queryRecordType = vCardKindToRecordTypeMap.get(defaultKind)
+
+ # if CompoundExpression of MatchExpression: recordsWithFieldValue() else recordsMatchingType()
+ fields = []
+ if expression is not True:
+
+ def fieldForMatchExpression(match):
+ return (
+ match.fieldName.name,
+ match.fieldValue,
+ match.flags,
+ match.matchType,
</ins><span class="cx"> )
</span><del>- elif expression is True: # True means all records
- allowedRecordTypes = set(self.directory.recordTypes()) & set(recordTypeToVCardKindMap.keys())
- expression = CompoundExpression(
- [
- MatchExpression(FieldName.recordType, recordType, MatchType.equals)
- for recordType in allowedRecordTypes
- ], Operand.OR
- )
</del><span class="cx">
</span><ins>+ if isinstance(expression, CompoundExpression):
+ operand = expression.operand
+ for match in expression.expressions:
+ if isinstance(match, MatchExpression):
+ if match.fieldName != FieldName.recordType:
+ fields.append(fieldForMatchExpression(match))
+ # else optimize: collect record type list for query
+ else:
+ # do all record types query
+ fields = []
+ break
+ elif isinstance(expression, MatchExpression):
+ operand = Operand.OR
+ if expression.fieldName != FieldName.recordType:
+ fields.append(fieldForMatchExpression(expression))
+ else:
+ recordType = expression.fieldValue
+
</ins><span class="cx"> maxRecords = int(maxResults * 1.2)
</span><span class="cx">
</span><span class="cx"> # keep trying query till we get results based on filter. Especially when doing "all results" query
</span><span class="cx"> while True:
</span><ins>+ queryLimited = False
</ins><span class="cx">
</span><span class="cx"> log.debug("doAddressBookDirectoryQuery: expression={expression!r}, propNames={propNames}", expression=expression, propNames=propNames)
</span><span class="cx">
</span><del>- records = yield self.directory.recordsFromExpression(expression)
- log.debug("doAddressBookDirectoryQuery: #records={n}, records={records!r}", n=len(records), records=records)
- queryLimited = False
</del><ins>+ allRecords = set()
+ if fields:
+ records = yield self.directory.recordsMatchingFields(fields, operand, queryRecordType)
+ log.debug("doAddressBookDirectoryQuery: recordsMatchingFields({f}, {o}): #records={n}, records={records!r}",
+ f=fields, o=operand, n=len(records), records=records)
+ allRecords = set(records)
+ else:
+ recordTypes = set([queryRecordType]) if queryRecordType else set(self.directory.recordTypes()) & set(recordTypeToVCardKindMap.keys())
+ for recordType in recordTypes:
+ records = yield self.directory.recordsWithRecordType(recordType)
+ log.debug("doAddressBookDirectoryQuery: #records={n}, records={records!r}", n=len(records), records=records)
+ allRecords |= set(records)
</ins><span class="cx">
</span><del>- vCardsResults = [(yield ABDirectoryQueryResult(self).generate(record)) for record in records]
</del><ins>+ vCardsResults = [(yield ABDirectoryQueryResult(self).generate(record)) for record in allRecords]
</ins><span class="cx">
</span><span class="cx"> filteredResults = set()
</span><span class="cx"> for vCardResult in vCardsResults:
</span><span class="cx"> if addressBookFilter.match(vCardResult.vCard()):
</span><ins>+ log.debug("doAddressBookDirectoryQuery: vCard did match filter:\n{vcard}", vcard=vCardResult.vCard())
</ins><span class="cx"> filteredResults.add(vCardResult)
</span><span class="cx"> else:
</span><span class="cx"> log.debug("doAddressBookDirectoryQuery: vCard did not match filter:\n{vcard}", vcard=vCardResult.vCard())
</span><span class="lines">@@ -266,9 +290,9 @@
</span><span class="cx"> propertyNames = []
</span><span class="cx"> if addressBookQuery.qname() == ("DAV:", "prop"):
</span><span class="cx">
</span><del>- for property in addressBookQuery.children:
- if isinstance(property, carddavxml.AddressData):
- for addressProperty in property.children:
</del><ins>+ for prop in addressBookQuery.children:
+ if isinstance(prop, carddavxml.AddressData):
+ for addressProperty in prop.children:
</ins><span class="cx"> if isinstance(addressProperty, carddavxml.Property):
</span><span class="cx"> propertyNames.append(addressProperty.attributes["name"])
</span><span class="cx">
</span><span class="lines">@@ -360,7 +384,7 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> def definedExpression(defined, allOf):
</span><del>- if constant or propFilter.filter_name in ("N" , "FN", "UID", "SOURCE", "KIND",):
</del><ins>+ if constant or propFilter.filter_name in ("N" , "FN", "UID", "KIND",):
</ins><span class="cx"> return defined # all records have this property so no records do not have it
</span><span class="cx"> else:
</span><span class="cx"> # FIXME: The startsWith expression below, which works with LDAP and OD. is not currently supported
</span><span class="lines">@@ -386,11 +410,11 @@
</span><span class="cx"> params = vCardPropToParamMap.get(propFilter.filter_name.upper())
</span><span class="cx"> defined = params and paramFilterElement.filter_name.upper() in params
</span><span class="cx">
</span><del>- #defined test
</del><ins>+ # defined test
</ins><span class="cx"> if defined != paramFilterElement.defined:
</span><span class="cx"> return False
</span><span class="cx">
</span><del>- #parameter value text match
</del><ins>+ # parameter value text match
</ins><span class="cx"> if defined and paramFilterElement.filters:
</span><span class="cx"> paramValues = params[paramFilterElement.filter_name.upper()]
</span><span class="cx"> if paramValues and paramFilterElement.filters[0].text.upper() not in paramValues:
</span><span class="lines">@@ -401,10 +425,10 @@
</span><span class="cx">
</span><span class="cx"> def textMatchElementExpression(propFilterAllOf, textMatchElement):
</span><span class="cx">
</span><del>- # pre process text match strings for ds query
</del><ins>+ # preprocess text match strings for ds query
</ins><span class="cx"> def getMatchStrings(propFilter, matchString):
</span><span class="cx">
</span><del>- if propFilter.filter_name in ("REV" , "BDAY",):
</del><ins>+ if propFilter.filter_name in ("REV", "BDAY",):
</ins><span class="cx"> rawString = matchString
</span><span class="cx"> matchString = ""
</span><span class="cx"> for c in rawString:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavicalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/ical.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -1063,11 +1063,16 @@
</span><span class="cx"> """
</span><span class="cx"> result = set()
</span><span class="cx">
</span><del>- for property in self.properties():
- tzid = property.parameterValue("TZID")
- if tzid is not None:
- result.add(tzid)
- break
</del><ins>+ if self.name() == "VCALENDAR":
+ for component in self.subcomponents():
+ if component.name() != "VTIMEZONE":
+ result.update(component.timezoneIDs())
+ else:
+ for property in self.properties():
+ tzid = property.parameterValue("TZID")
+ if tzid is not None:
+ result.add(tzid)
+ break
</ins><span class="cx">
</span><span class="cx"> return result
</span><span class="cx">
</span><span class="lines">@@ -2032,6 +2037,12 @@
</span><span class="cx"> "Timezone {0} is not referenced by any non-timezone component".format(timezone,)
</span><span class="cx"> )
</span><span class="cx">
</span><ins>+ # TZIDs without a VTIMEZONE must be available in the server's TZ database
+ missing_timezones = timezone_refs - timezones
+ for tzid in missing_timezones:
+ # Will raise TimezoneException if tzid not present in server's database
+ hasTZ(tzid)
+
</ins><span class="cx"> # Control character check - only HTAB, CR, LF allowed for characters in the range 0x00-0x1F
</span><span class="cx"> s = str(self)
</span><span class="cx"> if len(s.translate(None, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0B\x0C\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F")) != len(s):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavmemcacheclientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/memcacheclient.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -1417,7 +1417,6 @@
</span><span class="cx"> print("FAIL", end="")
</span><span class="cx"> else:
</span><span class="cx"> print("OK", end="")
</span><del>- import pickle
</del><span class="cx"> s = pickle.loads('V\\u4f1a\np0\n.')
</span><span class="cx"> try:
</span><span class="cx"> x = mc.set((s*SERVER_MAX_KEY_LENGTH).encode('utf-8'), 1)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavresourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/resource.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -858,7 +858,7 @@
</span><span class="cx"> Return the DAV:owner property value (MUST be a DAV:href or None).
</span><span class="cx"> """
</span><span class="cx">
</span><del>- if hasattr(self, "_newStoreObject"):
</del><ins>+ if getattr(self, "_newStoreObject", None) is not None:
</ins><span class="cx"> if not hasattr(self._newStoreObject, "ownerHome"):
</span><span class="cx"> home = self._newStoreObject.parentCollection().ownerHome()
</span><span class="cx"> else:
</span><span class="lines">@@ -2635,11 +2635,16 @@
</span><span class="cx"> if config.EnableProxyPrincipals:
</span><span class="cx"> # Server may be read only
</span><span class="cx"> if config.EnableReadOnlyServer:
</span><del>- rw_proxy_privs = (
</del><ins>+ ro_proxy_privs = rw_proxy_privs = (
</ins><span class="cx"> element.Privilege(element.Read()),
</span><span class="cx"> element.Privilege(element.ReadCurrentUserPrivilegeSet()),
</span><span class="cx"> )
</span><span class="cx"> else:
</span><ins>+ ro_proxy_privs = (
+ element.Privilege(element.Read()),
+ element.Privilege(element.ReadCurrentUserPrivilegeSet()),
+ element.Privilege(element.WriteProperties()),
+ )
</ins><span class="cx"> rw_proxy_privs = (
</span><span class="cx"> element.Privilege(element.Read()),
</span><span class="cx"> element.Privilege(element.ReadCurrentUserPrivilegeSet()),
</span><span class="lines">@@ -2650,10 +2655,7 @@
</span><span class="cx"> # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
</span><span class="cx"> element.ACE(
</span><span class="cx"> element.Principal(element.HRef(joinURL(myPrincipal.principalURL(), "calendar-proxy-read/"))),
</span><del>- element.Grant(
- element.Privilege(element.Read()),
- element.Privilege(element.ReadCurrentUserPrivilegeSet()),
- ),
</del><ins>+ element.Grant(*ro_proxy_privs),
</ins><span class="cx"> element.Protected(),
</span><span class="cx"> TwistedACLInheritable(),
</span><span class="cx"> ),
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavscheduling_storecaldavresourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/scheduling_store/caldav/resource.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -419,17 +419,6 @@
</span><span class="cx"> originator = (yield self.loadOriginatorFromRequestDetails(request))
</span><span class="cx"> recipients = self.loadRecipientsFromCalendarData(calendar)
</span><span class="cx">
</span><del>- # storeComponent needs to know who the auth'd user is for access control
- # TODO: this needs to be done in a better way - ideally when the txn is created for the request,
- # we should set a txn.authzid attribute.
- authz = None
- authz_principal = self.parent.currentPrincipal(request).children[0]
- if isinstance(authz_principal, davxml.HRef):
- principalURL = str(authz_principal)
- if principalURL:
- authz = (yield request.locateResource(principalURL))
- self._associatedTransaction._authz_uid = authz.record.uid
-
</del><span class="cx"> # Log extended item
</span><span class="cx"> if not hasattr(request, "extendedLogItems"):
</span><span class="cx"> request.extendedLogItems = {}
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavsharingpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/sharing.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -383,6 +383,7 @@
</span><span class="cx"> element.Grant(
</span><span class="cx"> element.Privilege(element.Read()),
</span><span class="cx"> element.Privilege(element.ReadCurrentUserPrivilegeSet()),
</span><ins>+ element.Privilege(element.WriteProperties()),
</ins><span class="cx"> ),
</span><span class="cx"> element.Protected(),
</span><span class="cx"> TwistedACLInheritable(),
</span><span class="lines">@@ -557,6 +558,13 @@
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def _xmlHandleInvite(self, request, docroot):
</span><ins>+ # Sharing must be enabled for this collection
+ if not self.canBeShared():
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Sharing not supported on this resource",
+ ))
</ins><span class="cx"> yield self.authorize(request, (element.Read(), element.Write()))
</span><span class="cx"> result = (yield self._handleInvite(request, docroot))
</span><span class="cx"> returnValue(result)
</span><span class="lines">@@ -702,6 +710,13 @@
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def _xmlHandleInviteReply(self, request, docroot):
</span><ins>+ # Sharing must be enabled for this collection
+ if not self.canShare():
+ raise HTTPError(ErrorResponse(
+ responsecode.FORBIDDEN,
+ (customxml.calendarserver_namespace, "valid-request"),
+ "Sharing not supported on this resource",
+ ))
</ins><span class="cx"> yield self.authorize(request, (element.Read(), element.Write()))
</span><span class="cx"> result = (yield self._handleInviteReply(request, docroot))
</span><span class="cx"> returnValue(result)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavstdconfigpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/stdconfig.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -280,9 +280,9 @@
</span><span class="cx">
</span><span class="cx"> "UseDatabase": True, # True: database; False: files
</span><span class="cx">
</span><del>- "TransactionTimeoutSeconds": 0, # Timeout transactions that take longer than
</del><ins>+ "TransactionTimeoutSeconds": 300, # Timeout transactions that take longer than
</ins><span class="cx"> # the specified number of seconds. Zero means
</span><del>- # no timeouts
</del><ins>+ # no timeouts. 5 minute default.
</ins><span class="cx">
</span><span class="cx"> "DBType": "", # 2 possible values: empty, meaning 'spawn postgres
</span><span class="cx"> # yourself', or 'postgres', meaning 'connect to a
</span><span class="lines">@@ -606,9 +606,31 @@
</span><span class="cx"> "IgnorePerUserProperties" : [
</span><span class="cx"> "X-APPLE-STRUCTURED-LOCATION",
</span><span class="cx"> ],
</span><ins>+ "CollectionProperties": {
+ "Shadowable": [
+ "{urn:ietf:params:xml:ns:caldav}calendar-description",
+ ],
+ "ProxyOverride": [
+ "{urn:ietf:params:xml:ns:caldav}calendar-description",
+ "{com.apple.ical:}calendarcolor",
+ "{http://apple.com/ns/ical/}calendar-color",
+ "{http://apple.com/ns/ical/}calendar-order",
+ ],
+ "Global": [
+ ],
+ },
</ins><span class="cx"> },
</span><span class="cx"> "AddressBooks" : {
</span><span class="cx"> "Enabled" : False, # Address Books on/off switch
</span><ins>+ "CollectionProperties": {
+ "Shadowable": [
+ "{urn:ietf:params:xml:ns:carddav}addressbook-description",
+ ],
+ "ProxyOverride": [
+ ],
+ "Global": [
+ ],
+ },
</ins><span class="cx"> },
</span><span class="cx"> },
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavstorebridgepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/storebridge.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> InvalidPerUserDataMerge,
</span><span class="cx"> AttendeeAllowedError, ResourceDeletedError, InvalidAttachmentOperation,
</span><span class="cx"> ShareeAllowedError, DuplicatePrivateCommentsError, InvalidSplit
</span><del>-, AttachmentSizeTooLarge)
</del><ins>+, AttachmentSizeTooLarge, UnknownTimezone)
</ins><span class="cx"> from txdav.carddav.iaddressbookstore import (
</span><span class="cx"> KindChangeNotAllowedError, GroupWithUnsharedAddressNotAllowedError
</span><span class="cx"> )
</span><span class="lines">@@ -1318,6 +1318,10 @@
</span><span class="cx"> returnValue(result)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def canBeShared(self):
+ return config.Sharing.Enabled and config.Sharing.Calendars.Enabled
+
+
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def storeResourceData(self, newchild, component, returnChangedData=False):
</span><span class="cx">
</span><span class="lines">@@ -1684,37 +1688,38 @@
</span><span class="cx"> proxyprivs.remove(davxml.Privilege(davxml.ReadACL()))
</span><span class="cx">
</span><span class="cx"> principal = yield self.principalForUID(invite.shareeUID)
</span><del>- aces += (
- # Inheritable specific access for the resource's associated principal.
- davxml.ACE(
- davxml.Principal(davxml.HRef(principal.principalURL())),
- davxml.Grant(*userprivs),
- davxml.Protected(),
- TwistedACLInheritable(),
- ),
- )
-
- if config.EnableProxyPrincipals:
</del><ins>+ if principal is not None:
</ins><span class="cx"> aces += (
</span><del>- # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
</del><ins>+ # Inheritable specific access for the resource's associated principal.
</ins><span class="cx"> davxml.ACE(
</span><del>- davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-read/"))),
- davxml.Grant(
- davxml.Privilege(davxml.Read()),
- davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
- ),
</del><ins>+ davxml.Principal(davxml.HRef(principal.principalURL())),
+ davxml.Grant(*userprivs),
</ins><span class="cx"> davxml.Protected(),
</span><span class="cx"> TwistedACLInheritable(),
</span><span class="cx"> ),
</span><del>- # DAV:read/DAV:read-current-user-privilege-set/DAV:write access for this principal's calendar-proxy-write users.
- davxml.ACE(
- davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-write/"))),
- davxml.Grant(*proxyprivs),
- davxml.Protected(),
- TwistedACLInheritable(),
- ),
</del><span class="cx"> )
</span><span class="cx">
</span><ins>+ if config.EnableProxyPrincipals:
+ aces += (
+ # DAV:read/DAV:read-current-user-privilege-set access for this principal's calendar-proxy-read users.
+ davxml.ACE(
+ davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-read/"))),
+ davxml.Grant(
+ davxml.Privilege(davxml.Read()),
+ davxml.Privilege(davxml.ReadCurrentUserPrivilegeSet()),
+ ),
+ davxml.Protected(),
+ TwistedACLInheritable(),
+ ),
+ # DAV:read/DAV:read-current-user-privilege-set/DAV:write access for this principal's calendar-proxy-write users.
+ davxml.ACE(
+ davxml.Principal(davxml.HRef(joinURL(principal.principalURL(), "calendar-proxy-write/"))),
+ davxml.Grant(*proxyprivs),
+ davxml.Protected(),
+ TwistedACLInheritable(),
+ ),
+ )
+
</ins><span class="cx"> returnValue(aces)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -2729,6 +2734,7 @@
</span><span class="cx"> ShareeAllowedError: (_CommonObjectResource._storeExceptionError, (calendarserver_namespace, "sharee-privilege-needed",),),
</span><span class="cx"> DuplicatePrivateCommentsError: (_CommonObjectResource._storeExceptionError, (calendarserver_namespace, "no-duplicate-private-comments",),),
</span><span class="cx"> LockTimeout: (_CommonObjectResource._storeExceptionUnavailable, "Lock timed out.",),
</span><ins>+ UnknownTimezone: (_CommonObjectResource._storeExceptionError, (caldav_namespace, "valid-timezone"),),
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> StoreMoveExceptionsErrors = {
</span><span class="lines">@@ -2823,6 +2829,10 @@
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def canBeShared(self):
+ return False
+
+
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def http_PUT(self, request):
</span><span class="cx">
</span><span class="lines">@@ -2873,17 +2883,6 @@
</span><span class="cx"> "Can't parse calendar data: %s" % (str(e),)
</span><span class="cx"> ))
</span><span class="cx">
</span><del>- # storeComponent needs to know who the auth'd user is for access control
- # TODO: this needs to be done in a better way - ideally when the txn is created for the request,
- # we should set a txn.authzid attribute.
- authz = None
- authz_principal = self._parentResource.currentPrincipal(request).children[0]
- if isinstance(authz_principal, davxml.HRef):
- principalURL = str(authz_principal)
- if principalURL:
- authz = (yield request.locateResource(principalURL))
- self._parentResource._newStoreObject._txn._authz_uid = authz.record.uid
-
</del><span class="cx"> try:
</span><span class="cx"> response = (yield self.storeComponent(component, smart_merge=schedule_tag_match))
</span><span class="cx"> except ResourceDeletedError:
</span><span class="lines">@@ -3296,6 +3295,10 @@
</span><span class="cx"> return carddavxml.AddressData
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def canBeShared(self):
+ return config.Sharing.Enabled and config.Sharing.AddressBooks.Enabled
+
+
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def storeResourceData(self, newchild, component, returnChangedData=False):
</span><span class="cx">
</span><span class="lines">@@ -3566,6 +3569,10 @@
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def canBeShared(self):
+ return config.Sharing.Enabled and config.Sharing.AddressBooks.Enabled
+
+
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def http_PUT(self, request):
</span><span class="cx">
</span><span class="lines">@@ -3606,17 +3613,6 @@
</span><span class="cx"> "Could not parse vCard",
</span><span class="cx"> ))
</span><span class="cx">
</span><del>- # storeComponent needs to know who the auth'd user is for access control
- # TODO: this needs to be done in a better way - ideally when the txn is created for the request,
- # we should set a txn.authzid attribute.
- authz = None
- authz_principal = self._parentResource.currentPrincipal(request).children[0]
- if isinstance(authz_principal, davxml.HRef):
- principalURL = str(authz_principal)
- if principalURL:
- authz = (yield request.locateResource(principalURL))
- self._parentResource._newStoreObject._txn._authz_uid = authz.record.uid
-
</del><span class="cx"> try:
</span><span class="cx"> response = (yield self.storeComponent(component))
</span><span class="cx"> except ResourceDeletedError:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_icalendarpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_icalendar.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -21,16 +21,17 @@
</span><span class="cx"> from twisted.trial.unittest import SkipTest
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, succeed
</span><span class="cx">
</span><ins>+from twistedcaldav.dateops import normalizeForExpand
</ins><span class="cx"> from twistedcaldav.ical import Component, Property, InvalidICalendarDataError, \
</span><span class="cx"> normalizeCUAddress, normalize_iCalStr
</span><ins>+from twistedcaldav.ical import iCalendarProductID
</ins><span class="cx"> from twistedcaldav.instance import InvalidOverriddenInstanceError
</span><span class="cx"> import twistedcaldav.test.util
</span><ins>+from twistedcaldav.timezones import TimezoneException
</ins><span class="cx">
</span><span class="cx"> from pycalendar.datetime import DateTime
</span><span class="cx"> from pycalendar.timezone import Timezone
</span><del>-from twistedcaldav.ical import iCalendarProductID
</del><span class="cx"> from pycalendar.duration import Duration
</span><del>-from twistedcaldav.dateops import normalizeForExpand
</del><span class="cx"> from pycalendar.value import Value
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -654,9 +655,27 @@
</span><span class="cx"> self.assertEqual(end, DateTime(2004, 11, 27))
</span><span class="cx"> break
</span><span class="cx">
</span><del>- # test_component_timerange.todo = "recurrence expansion should give us no end date here"
</del><span class="cx">
</span><ins>+ def test_component_timezone_validate(self):
+ """
+ CalDAV resource validation.
+ """
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART;TZID=BOGUS:20130806T000000
+DURATION:PT1H
+DTSTAMP:20051222T210507Z
+SUMMARY:1
+END:VEVENT
+END:VCALENDAR
+"""
+ calendar = Component.fromString(data)
+ self.failUnlessRaises(TimezoneException, calendar.validCalendarForCalDAV, False)
</ins><span class="cx">
</span><ins>+
</ins><span class="cx"> def test_parse_date(self):
</span><span class="cx"> """
</span><span class="cx"> parse_date()
</span><span class="lines">@@ -5235,8 +5254,8 @@
</span><span class="cx">
</span><span class="cx"> for title, calendar, tests in data:
</span><span class="cx"> ical = Component.fromString(calendar)
</span><del>- rids = set([rid for rid, result in tests])
- expected_results = set([rid for rid, result in tests if result == True])
</del><ins>+ rids = set([trid for trid, _ignore_tresult in tests])
+ expected_results = set([trid for trid, tresult in tests if tresult == True])
</ins><span class="cx"> actual_results = ical.validInstances(rids)
</span><span class="cx"> self.assertEqual(actual_results, expected_results, "Failed comparison: %s %s" % (title, actual_results,))
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavtesttest_resourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/test/test_resource.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -160,6 +160,26 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><ins>+ def test_isOwnerYes_noStoreObject(self):
+ """
+ L{CalDAVResource.isOwner} returns C{True} for authenticated requests
+ with a principal that matches the resource's owner.
+ """
+ site = None
+ request = SimpleRequest(site, "GET", "/not/a/real/url/")
+ request.authzUser = request.authnUser = StubPrincipal("/yes-i-am-the-owner/")
+ parent = CalDAVResource()
+ parent.owner = lambda igreq: HRef("/yes-i-am-the-owner/")
+ rsrc = CalDAVResource()
+ rsrc._newStoreObject = None
+
+ request._rememberResource(parent, "/not/a/real/")
+ request._rememberResource(rsrc, "/not/a/real/url/")
+
+ self.assertEquals((yield rsrc.isOwner(request)), True)
+
+
+ @inlineCallbacks
</ins><span class="cx"> def test_isOwnerAdmin(self):
</span><span class="cx"> """
</span><span class="cx"> L{CalDAVResource.isOwner} returns C{True} for authenticated requests
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavtimezonestdservicepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/timezonestdservice.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -663,7 +663,7 @@
</span><span class="cx">
</span><span class="cx"> try:
</span><span class="cx"> for alias in aliases.splitlines():
</span><del>- alias_from, alias_to = alias.split()
</del><ins>+ alias_from, alias_to = alias.split("\t")
</ins><span class="cx"> tzinfo = self.timezones.get(alias_to)
</span><span class="cx"> if tzinfo:
</span><span class="cx"> if alias_from != alias_to:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavupgradepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/upgrade.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -775,7 +775,7 @@
</span><span class="cx">
</span><span class="cx"> if didUpdate:
</span><span class="cx"> property = caldavxml.CalendarFreeBusySet(
</span><del>- *[element.HRef(href) for href in fbset]
</del><ins>+ *[element.HRef(fbhref) for fbhref in fbset]
</ins><span class="cx"> )
</span><span class="cx"> value = compress(property.toxml())
</span><span class="cx"> returnValue(value)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSCentralStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAUSCentralStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/AUS Central Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Central Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:AUS Central Standard Time
+X-LIC-LOCATION:AUS Central Standard Time
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:CST
+TZOFFSETFROM:+084320
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAUSEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAUSEasternStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/AUS Eastern Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,124 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:AUS Eastern Standard Time
+X-LIC-LOCATION:AUS Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:EST
+TZOFFSETFROM:+100452
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+RDATE:20000827T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19820404T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19830306T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19890318T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=19991030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19950304T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20011028T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAfghanistanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAfghanistanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Afghanistan Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Afghanistan Standard Time
+X-LIC-LOCATION:Afghanistan Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:AFT
+TZOFFSETFROM:+043648
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:AFT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0430
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAlaskanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAlaskanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Alaskan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Alaskan Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,137 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Alaskan Standard Time
+X-LIC-LOCATION:Alaskan Standard Time
+BEGIN:STANDARD
+DTSTART:19000820T120000
+RDATE:19000820T120000
+TZNAME:CAT
+TZOFFSETFROM:-095936
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+TZNAME:CAT/CAWT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CAT/CAWT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T140000
+RDATE:19450814T140000
+TZNAME:CAT/CAPT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+TZNAME:CAT/CAPT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:CAT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670401T000000
+RDATE:19670401T000000
+RDATE:19690101T000000
+TZNAME:AHST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19821031T110000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AHST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19830424T120000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AHDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:-0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831030T020000
+RDATE:19831030T020000
+TZNAME:YST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19831130T000000
+RDATE:19831130T000000
+TZNAME:AKST
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T110000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841028T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T100000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T110000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:AKDT
+TZOFFSETFROM:-0900
+TZOFFSETTO:-0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AKST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArabStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arab Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arab Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Arab Standard Time
+X-LIC-LOCATION:Arab Standard Time
+BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:AST
+TZOFFSETFROM:+030652
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArabianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arabian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabian Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Arabian Standard Time
+X-LIC-LOCATION:Arabian Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:GST
+TZOFFSETFROM:+034112
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArabicStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArabicStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Arabic Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Arabic Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Arabic Standard Time
+X-LIC-LOCATION:Arabic Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:BMT
+TZOFFSETFROM:+025740
+TZOFFSETTO:+025736
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+TZNAME:AST
+TZOFFSETFROM:+025736
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820501T000000
+RDATE:19820501T000000
+RDATE:19830331T000000
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19840930T200000Z;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840401T000000
+RRULE:FREQ=YEARLY;UNTIL=19850331T210000Z;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19850929T020000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T010000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19910401T030000
+RRULE:FREQ=YEARLY;UNTIL=20070401T000000Z;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19911001T040000
+RRULE:FREQ=YEARLY;UNTIL=20071001T000000Z;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoArgentinaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoArgentinaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Argentina Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Argentina Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,143 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Argentina Standard Time
+X-LIC-LOCATION:Argentina Standard Time
+BEGIN:STANDARD
+DTSTART:18941031T000000
+RDATE:18941031T000000
+TZNAME:CMT
+TZOFFSETFROM:-035348
+TZOFFSETTO:-041648
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:ART
+TZOFFSETFROM:-041648
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19301201T000000
+RDATE:19301201T000000
+RDATE:19311015T000000
+RDATE:19400701T000000
+RDATE:19411015T000000
+RDATE:19431015T000000
+RDATE:19461001T000000
+RDATE:19631215T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19410615T000000
+RDATE:19430801T000000
+RDATE:19460301T000000
+RDATE:19631001T000000
+RDATE:19670402T000000
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320301T000000
+RRULE:FREQ=YEARLY;UNTIL=19400301T030000Z;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19321101T000000
+RRULE:FREQ=YEARLY;UNTIL=19391101T040000Z;BYMONTH=11
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19640301T000000
+RRULE:FREQ=YEARLY;UNTIL=19660301T030000Z;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19641015T000000
+RRULE:FREQ=YEARLY;UNTIL=19661015T040000Z;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19671001T000000
+RRULE:FREQ=YEARLY;UNTIL=19681006T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19680407T000000
+RRULE:FREQ=YEARLY;UNTIL=19690406T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ART
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19691005T000000
+RDATE:19691005T000000
+TZNAME:ARST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740123T000000
+RDATE:19740123T000000
+RDATE:19881201T000000
+RDATE:20071230T000000
+RDATE:20081019T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19740501T000000
+RDATE:19740501T000000
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19890305T000000
+RRULE:FREQ=YEARLY;UNTIL=19930307T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891015T000000
+RRULE:FREQ=YEARLY;UNTIL=19921018T030000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19991003T000000
+RDATE:19991003T000000
+RDATE:20000303T000000
+TZNAME:ARST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080316T000000
+RRULE:FREQ=YEARLY;UNTIL=20090315T020000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:ART
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAtlanticStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAtlanticStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Atlantic Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Atlantic Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,221 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Atlantic Standard Time
+X-LIC-LOCATION:Atlantic Standard Time
+BEGIN:STANDARD
+DTSTART:19020615T000000
+RDATE:19020615T000000
+TZNAME:AST
+TZOFFSETFROM:-041424
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160401T000000
+RDATE:19160401T000000
+RDATE:19180414T020000
+RDATE:19200509T000000
+RDATE:19210506T000000
+RDATE:19220430T000000
+RDATE:19260516T000000
+RDATE:19270501T000000
+RDATE:19320501T000000
+RDATE:19330430T000000
+RDATE:19340520T000000
+RDATE:19350602T000000
+RDATE:19360601T000000
+RDATE:19390528T000000
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19181027T020000
+RDATE:19200829T000000
+RDATE:19230904T000000
+RDATE:19240915T000000
+RDATE:19250928T000000
+RDATE:19260913T000000
+RDATE:19270926T000000
+RDATE:19280909T000000
+RDATE:19290903T000000
+RDATE:19300915T000000
+RDATE:19331002T000000
+RDATE:19340916T000000
+RDATE:19350930T000000
+RDATE:19360914T000000
+RDATE:19450930T020000
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+RDATE:19460101T000000
+RDATE:19740101T000000
+TZNAME:AST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19210905T000000
+RRULE:FREQ=YEARLY;UNTIL=19220905T030000Z;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19230506T000000
+RRULE:FREQ=YEARLY;UNTIL=19250503T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19280513T000000
+RRULE:FREQ=YEARLY;UNTIL=19310510T040000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19310928T000000
+RRULE:FREQ=YEARLY;UNTIL=19320926T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19370502T000000
+RRULE:FREQ=YEARLY;UNTIL=19380501T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19370927T000000
+RRULE:FREQ=YEARLY;UNTIL=19410929T030000Z;BYDAY=-1MO;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19400505T000000
+RRULE:FREQ=YEARLY;UNTIL=19410504T040000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:AWT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T200000
+RDATE:19450814T200000
+TZNAME:APT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19490424T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19490925T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19560429T020000
+RRULE:FREQ=YEARLY;UNTIL=19590426T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19560930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T050000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19620429T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19731028T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740428T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T060000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19741027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T050000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T060000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:ADT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:AST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzerbaijanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAzerbaijanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azerbaijan Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Azerbaijan Standard Time
+X-LIC-LOCATION:Azerbaijan Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:BAKT
+TZOFFSETFROM:+031924
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570301T000000
+RDATE:19570301T000000
+TZNAME:BAKST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:BAKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:BAKT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:BAKT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BAKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:BAKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910830T000000
+RDATE:19910830T000000
+RDATE:19960101T000000
+RDATE:19970101T000000
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:AZT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:AZST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:AZT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T050000
+RDATE:19960331T050000
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T060000
+RDATE:19961027T060000
+TZNAME:AZT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T050000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoAzoresStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoAzoresStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Azores Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Azores Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,266 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Azores Standard Time
+X-LIC-LOCATION:Azores Standard Time
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+TZNAME:HMT
+TZOFFSETFROM:-014240
+TZOFFSETTO:-015432
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19110524T000000
+RDATE:19110524T000000
+TZNAME:AZOST
+TZOFFSETFROM:-015432
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+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:19460406T230000
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161101T010000
+RDATE:19161101T010000
+RDATE:19241015T000000
+RDATE:19391119T000000
+RDATE:19461006T000000
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19171015T000000
+RRULE:FREQ=YEARLY;UNTIL=19211015T010000Z;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19261003T000000
+RRULE:FREQ=YEARLY;UNTIL=19291006T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19311004T000000
+RRULE:FREQ=YEARLY;UNTIL=19321002T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19341007T000000
+RRULE:FREQ=YEARLY;UNTIL=19381002T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19401006T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T010000Z;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420314T230000
+RRULE:FREQ=YEARLY;UNTIL=19450311T010000Z;BYDAY=2SA;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420425T230000
+RDATE:19420425T230000
+RDATE:19430417T230000
+TZNAME:AZOMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420816T000000
+RDATE:19420816T000000
+TZNAME:AZOST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19421025T000000
+RRULE:FREQ=YEARLY;UNTIL=19451028T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430829T000000
+RRULE:FREQ=YEARLY;UNTIL=19450826T000000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31;BYMONTH=8
+TZNAME:AZOST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440422T230000
+RRULE:FREQ=YEARLY;UNTIL=19450422T000000Z;BYDAY=SA;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=4
+TZNAME:AZOMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490403T040000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19510401T020000
+RRULE:FREQ=YEARLY;UNTIL=19650404T040000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19511007T030000
+RRULE:FREQ=YEARLY;UNTIL=19651003T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660403T020000
+RDATE:19660403T020000
+TZNAME:AZOST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770327T000000
+RDATE:19770327T000000
+RDATE:19800330T000000
+RDATE:19830327T020000
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19770925T010000
+RDATE:19770925T010000
+RDATE:19781001T010000
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19780402T000000
+RRULE:FREQ=YEARLY;UNTIL=19790401T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19820926T020000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19820328T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19830925T020000
+RRULE:FREQ=YEARLY;UNTIL=19910929T020000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840325T010000
+RRULE:FREQ=YEARLY;UNTIL=19920329T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T020000
+RDATE:19920927T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T010000
+RDATE:19930328T010000
+TZNAME:AZOST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T010000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:AZOST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:AZOT
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBahiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoBahiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Bahia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bahia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,136 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Bahia Standard Time
+X-LIC-LOCATION:Bahia Standard Time
+BEGIN:STANDARD
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:BRST
+TZOFFSETFROM:-023404
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20111016T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20120226T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T030000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20030216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20030924T000000
+RDATE:20030924T000000
+RDATE:20121021T000000
+TZNAME:BRT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoBangladeshStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoBangladeshStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Bangladesh Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Bangladesh Standard Time
+X-LIC-LOCATION:Bangladesh Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:HMT
+TZOFFSETFROM:+060140
+TZOFFSETTO:+055320
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420515T000000
+RDATE:19420515T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:BURT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510930T000000
+RDATE:19510930T000000
+TZNAME:DACT
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710326T000000
+RDATE:19710326T000000
+TZNAME:BDT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20090101T000000
+RDATE:20090101T000000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20090619T230000
+RDATE:20090619T230000
+TZNAME:BDST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20091231T235900
+RDATE:20091231T235900
+TZNAME:BDT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCanadaCentralStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCanadaCentralStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Canada Central Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Canada Central Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,100 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Canada Central Standard Time
+X-LIC-LOCATION:Canada Central Standard Time
+BEGIN:STANDARD
+DTSTART:19050901T000000
+RDATE:19050901T000000
+TZNAME:MST
+TZOFFSETFROM:-065836
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180414T020000
+RDATE:19180414T020000
+RDATE:19460414T020000
+RDATE:19590426T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RDATE:19181027T020000
+RDATE:19371010T000000
+RDATE:19381002T000000
+RDATE:19450930T020000
+RDATE:19461013T020000
+RDATE:19591025T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19300504T000000
+RRULE:FREQ=YEARLY;UNTIL=19340506T070000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19301005T000000
+RRULE:FREQ=YEARLY;UNTIL=19341007T060000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19370411T000000
+RRULE:FREQ=YEARLY;UNTIL=19410413T070000Z;BYDAY=2SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19391008T000000
+RRULE:FREQ=YEARLY;UNTIL=19411012T060000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19470427T020000
+RRULE:FREQ=YEARLY;UNTIL=19570428T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470928T020000
+RRULE:FREQ=YEARLY;UNTIL=19570929T080000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19600424T020000
+RDATE:19600424T020000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCapeVerdeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCapeVerdeStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cape Verde Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Cape Verde Standard Time
+X-LIC-LOCATION:Cape Verde Standard Time
+BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:CVT
+TZOFFSETFROM:-013404
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:CVST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451015T000000
+RDATE:19451015T000000
+TZNAME:CVT
+TZOFFSETFROM:-0100
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751125T020000
+RDATE:19751125T020000
+TZNAME:CVT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCaucasusStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCaucasusStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Caucasus Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Caucasus Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,117 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Caucasus Standard Time
+X-LIC-LOCATION:Caucasus Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:YERT
+TZOFFSETFROM:+0258
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570301T000000
+RDATE:19570301T000000
+TZNAME:YERST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:YERST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:YERT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YERT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YERST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:YERST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910923T000000
+RDATE:19910923T000000
+RDATE:19970101T000000
+TZNAME:AMST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:AMST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=19950325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AMST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19940924T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950924T030000
+RDATE:19950924T030000
+RDATE:20120325T020000
+TZNAME:AMT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T020000
+RRULE:FREQ=YEARLY;UNTIL=20110326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:AMST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T030000
+RRULE:FREQ=YEARLY;UNTIL=20111029T220000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:AMT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCenAustraliaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCenAustraliaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Cen. Australia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,112 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Cen. Australia Standard Time
+X-LIC-LOCATION:Cen. Australia Standard Time
+BEGIN:STANDARD
+DTSTART:18950201T000000
+RDATE:18950201T000000
+TZNAME:CST
+TZOFFSETFROM:+091420
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18990501T000000
+RDATE:18990501T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19861019T020000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+RDATE:19910303T030000
+RDATE:19920322T030000
+RDATE:19930307T030000
+RDATE:19940320T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T153000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19711031T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19850302T163000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860316T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T163000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19871025T020000
+RRULE:FREQ=YEARLY;UNTIL=20071027T163000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T163000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CST
+TZOFFSETFROM:+1030
+TZOFFSETTO:+0930
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081005T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0930
+TZOFFSETTO:+1030
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAmericaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralAmericaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central America Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central America Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central America Standard Time
+X-LIC-LOCATION:Central America Standard Time
+BEGIN:STANDARD
+DTSTART:19181005T000000
+RDATE:19181005T000000
+TZNAME:CST
+TZOFFSETFROM:-060204
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19731125T000000
+RDATE:19731125T000000
+RDATE:19830521T000000
+RDATE:19910323T000000
+RDATE:20060430T000000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19740224T000000
+RDATE:19740224T000000
+RDATE:19830922T000000
+RDATE:19910907T000000
+RDATE:20061001T000000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralAsiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Asia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Asia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,101 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Asia Standard Time
+X-LIC-LOCATION:Central Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:ALMT
+TZOFFSETFROM:+050748
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:ALMST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:20050315T000000
+TZNAME:ALMT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20040327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ALMST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20041030T200000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:ALMT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralBrazilianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralBrazilianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Brazilian Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,183 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Brazilian Standard Time
+X-LIC-LOCATION:Central Brazilian Standard Time
+BEGIN:STANDARD
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:AMST
+TZOFFSETFROM:-034420
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19631209T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T040000Z;BYMONTH=12
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+RDATE:20230226T000000
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T030000Z;BYMONTH=4
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T030000Z;BYMONTH=3
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T040000Z;BYMONTH=11
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T040000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T040000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20030216T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20030924T000000
+RDATE:20030924T000000
+TZNAME:AMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20041001T000000
+RDATE:20041001T000000
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20050220T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:AMST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20220220T030000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:AMT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralEuropeStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Europe Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Europe Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,118 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Europe Standard Time
+X-LIC-LOCATION:Central Europe Standard Time
+BEGIN:STANDARD
+DTSTART:18901001T000000
+RDATE:18901001T000000
+TZNAME:CEST
+TZOFFSETFROM:+011620
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19170416T020000
+RDATE:19180401T030000
+RDATE:19190415T030000
+RDATE:19200405T030000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450501T230000
+RDATE:19460331T020000
+RDATE:19500417T020000
+RDATE:19560603T000000
+RDATE:19570602T010000
+RDATE:19800406T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19180929T030000
+RDATE:19190915T030000
+RDATE:19200930T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451103T000000
+RDATE:19501023T030000
+RDATE:19560930T000000
+RDATE:19570929T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+RDATE:19450101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410406T020000
+RDATE:19410406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19461006T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470406T020000
+RRULE:FREQ=YEARLY;UNTIL=19490410T010000Z;BYDAY=SU;BYMONTHDAY=4,5,6,7,8,9,1
+ 0;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19540523T000000
+RRULE:FREQ=YEARLY;UNTIL=19550522T230000Z;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19541003T000000
+RRULE:FREQ=YEARLY;UNTIL=19551002T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralEuropeanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralEuropeanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central European Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central European Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,190 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central European Standard Time
+X-LIC-LOCATION:Central European Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:WMT
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0124
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19150805T000000
+RDATE:19150805T000000
+TZNAME:CEST
+TZOFFSETFROM:+0124
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19450429T000000
+RDATE:19460414T000000
+RDATE:19470504T020000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19570602T010000
+RDATE:19580330T010000
+RDATE:19590531T010000
+RDATE:19600403T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19170917T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441004T020000
+RDATE:19451101T000000
+RDATE:19461007T030000
+RDATE:19770925T020000
+RDATE:19781001T020000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19180916T030000
+RDATE:19180916T030000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19190415T020000
+RDATE:19190415T020000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190916T030000
+RRULE:FREQ=YEARLY;UNTIL=19190916T000000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19220601T000000
+RDATE:19220601T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400623T020000
+RDATE:19400623T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19441001T000000
+RDATE:19441001T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570929T020000
+RRULE:FREQ=YEARLY;UNTIL=19580928T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19591004T020000
+RRULE:FREQ=YEARLY;UNTIL=19611001T000000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19610528T010000
+RRULE:FREQ=YEARLY;UNTIL=19640531T000000Z;BYDAY=-1SU;BYMONTH=5
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19620930T020000
+RRULE:FREQ=YEARLY;UNTIL=19640927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19770101T000000
+RDATE:19770101T000000
+RDATE:19880101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T010000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T020000
+RRULE:FREQ=YEARLY;UNTIL=19870927T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19870329T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19880327T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19880925T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralPacificStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Pacific Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Pacific Standard Time
+X-LIC-LOCATION:Central Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:19121001T000000
+RDATE:19121001T000000
+TZNAME:SBT
+TZOFFSETFROM:+103948
+TZOFFSETTO:+1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeMexicoicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralStandardTimeMexicoics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time (Mexico).ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,96 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Standard Time (Mexico)
+X-LIC-LOCATION:Central Standard Time (Mexico)
+BEGIN:STANDARD
+DTSTART:19220101T002324
+RDATE:19220101T002324
+TZNAME:MST
+TZOFFSETFROM:-063636
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19390205T000000
+RDATE:19390205T000000
+RDATE:19401209T000000
+RDATE:19500212T000000
+RDATE:20010506T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19390625T000000
+RDATE:19390625T000000
+RDATE:19410401T000000
+RDATE:19440501T000000
+RDATE:19500730T000000
+RDATE:20010930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19431216T000000
+RDATE:19431216T000000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20020220T000000
+RDATE:20020220T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoCentralStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoCentralStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Central Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Central Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,177 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Central Standard Time
+X-LIC-LOCATION:Central Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120924
+RDATE:18831118T120924
+TZNAME:CST
+TZOFFSETFROM:-055036
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200613T020000
+RDATE:19200613T020000
+RDATE:19210327T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T020000
+RRULE:FREQ=YEARLY;UNTIL=19211030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19220430T020000
+RRULE:FREQ=YEARLY;UNTIL=19350428T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19220924T020000
+RRULE:FREQ=YEARLY;UNTIL=19350929T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19360301T020000
+RDATE:19360301T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19361115T020000
+RDATE:19361115T020000
+RDATE:19450930T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19370425T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19370926T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoChinaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoChinaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/China Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/China Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,54 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:China Standard Time
+X-LIC-LOCATION:China Standard Time
+BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:CST
+TZOFFSETFROM:+080557
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19400603T000000
+RDATE:19400603T000000
+RDATE:19410316T000000
+RDATE:19860504T000000
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19401001T000000
+RRULE:FREQ=YEARLY;UNTIL=19410930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19490101T000000
+RDATE:19490101T000000
+TZNAME:CST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860914T000000
+RRULE:FREQ=YEARLY;UNTIL=19910914T150000Z;BYDAY=SU;BYMONTHDAY=11,12,13,14,1
+ 5,16,17;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870412T000000
+RRULE:FREQ=YEARLY;UNTIL=19910413T160000Z;BYDAY=-3SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoDatelineStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoDatelineStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Dateline Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Dateline Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Dateline Standard Time
+X-LIC-LOCATION:Dateline Standard Time
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+12
+TZOFFSETFROM:-1200
+TZOFFSETTO:-1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAfricaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEAfricaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/E. Africa Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Africa Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:E. Africa Standard Time
+X-LIC-LOCATION:E. Africa Standard Time
+BEGIN:STANDARD
+DTSTART:19280701T000000
+RDATE:19280701T000000
+TZNAME:EAT
+TZOFFSETFROM:+022716
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300101T000000
+RDATE:19300101T000000
+TZNAME:BEAT
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0230
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400101T000000
+RDATE:19400101T000000
+TZNAME:BEAUT
+TZOFFSETFROM:+0230
+TZOFFSETTO:+0245
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19600101T000000
+RDATE:19600101T000000
+TZNAME:EAT
+TZOFFSETFROM:+0245
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEAustraliaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEAustraliaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/E. Australia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. Australia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,64 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:E. Australia Standard Time
+X-LIC-LOCATION:E. Australia Standard Time
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:EST
+TZOFFSETFROM:+101208
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19711031T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19720227T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710101T000000
+RDATE:19710101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891029T020000
+RRULE:FREQ=YEARLY;UNTIL=19911026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T030000
+RRULE:FREQ=YEARLY;UNTIL=19920229T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoESouthAmericaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoESouthAmericaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/E. South America Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/E. South America Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,176 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:E. South America Standard Time
+X-LIC-LOCATION:E. South America Standard Time
+BEGIN:STANDARD
+DTSTART:19140101T000000
+RDATE:19140101T000000
+TZNAME:BRST
+TZOFFSETFROM:-030628
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19311003T110000
+RDATE:19311003T110000
+RDATE:19321003T000000
+RDATE:19650131T000000
+RDATE:19651201T000000
+RDATE:19851102T000000
+RDATE:19861025T000000
+RDATE:19871025T000000
+RDATE:19881016T000000
+RDATE:19891015T000000
+RDATE:19901021T000000
+RDATE:19911020T000000
+RDATE:19921025T000000
+RDATE:19961006T000000
+RDATE:19971006T000000
+RDATE:19981011T000000
+RDATE:19991003T000000
+RDATE:20021103T000000
+RDATE:20031019T000000
+RDATE:20041102T000000
+RDATE:20051016T000000
+RDATE:20061105T000000
+RDATE:20071014T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19320401T000000
+RRULE:FREQ=YEARLY;UNTIL=19330401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19491201T000000
+RRULE:FREQ=YEARLY;UNTIL=19521201T030000Z;BYMONTH=12
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500416T010000
+RDATE:19500416T010000
+RDATE:19530301T000000
+RDATE:19640301T000000
+RDATE:19650331T000000
+RDATE:19860315T000000
+RDATE:19870214T000000
+RDATE:19880207T000000
+RDATE:19890129T000000
+RDATE:19900211T000000
+RDATE:19910217T000000
+RDATE:19920209T000000
+RDATE:19930131T000000
+RDATE:19960211T000000
+RDATE:19970216T000000
+RDATE:19980301T000000
+RDATE:19990221T000000
+RDATE:20000227T000000
+RDATE:20070225T000000
+RDATE:20120226T000000
+RDATE:20150222T000000
+RDATE:20230226T000000
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510401T000000
+RRULE:FREQ=YEARLY;UNTIL=19520401T020000Z;BYMONTH=4
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19631023T000000
+RDATE:19631023T000000
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19640101T000000
+RDATE:19640101T000000
+TZNAME:BRST
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19660301T000000
+RRULE:FREQ=YEARLY;UNTIL=19680301T020000Z;BYMONTH=3
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19661101T000000
+RRULE:FREQ=YEARLY;UNTIL=19671101T030000Z;BYMONTH=11
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19931017T000000
+RRULE:FREQ=YEARLY;UNTIL=19951015T030000Z;BYDAY=-3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940220T000000
+RRULE:FREQ=YEARLY;UNTIL=19950219T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001008T000000
+RRULE:FREQ=YEARLY;UNTIL=20011014T030000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010218T000000
+RRULE:FREQ=YEARLY;UNTIL=20060219T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20080217T000000
+RRULE:FREQ=YEARLY;UNTIL=20110220T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20081019T000000
+RRULE:FREQ=YEARLY;BYDAY=3SU;BYMONTH=10
+TZNAME:BRST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130217T000000
+RRULE:FREQ=YEARLY;UNTIL=20140216T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20160221T000000
+RRULE:FREQ=YEARLY;UNTIL=20220220T020000Z;BYDAY=3SU;BYMONTH=2
+TZNAME:BRT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEasternStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Eastern Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Eastern Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,148 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Eastern Standard Time
+X-LIC-LOCATION:Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120358
+RDATE:18831118T120358
+TZNAME:EST
+TZOFFSETFROM:-045602
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T070000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RDATE:19200328T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19450930T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19210424T020000
+RRULE:FREQ=YEARLY;UNTIL=19410427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19210925T020000
+RRULE:FREQ=YEARLY;UNTIL=19410928T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:EWT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T190000
+RDATE:19450814T190000
+TZNAME:EPT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T060000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19551030T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T070000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEgyptStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEgyptStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Egypt Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Egypt Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,148 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Egypt Standard Time
+X-LIC-LOCATION:Egypt Standard Time
+BEGIN:STANDARD
+DTSTART:19001001T000000
+RDATE:19001001T000000
+TZNAME:EEST
+TZOFFSETFROM:+020509
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19400715T000000
+RDATE:19400715T000000
+RDATE:19410415T000000
+RDATE:19450416T000000
+RDATE:19570510T000000
+RDATE:19580501T000000
+RDATE:19820725T010000
+RDATE:19830712T010000
+RDATE:19890506T010000
+RDATE:20100910T000000
+RDATE:20140515T235959
+RDATE:20140729T000000
+RDATE:20150718T000000
+RDATE:20160707T000000
+RDATE:20170626T000000
+RDATE:20180615T000000
+RDATE:20190605T000000
+RDATE:20200524T000000
+RDATE:20210513T000000
+RDATE:20220503T000000
+RDATE:20230428T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19401001T000000
+RDATE:19401001T000000
+RDATE:19410916T000000
+RDATE:19421027T000000
+RDATE:20060922T000000
+RDATE:20070907T000000
+RDATE:20080829T000000
+RDATE:20090821T000000
+RDATE:20100811T000000
+RDATE:20101001T000000
+RDATE:20140629T010000
+RDATE:20150618T010000
+RDATE:20160607T010000
+RDATE:20170527T010000
+RDATE:20180516T010000
+RDATE:20190506T010000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420401T000000
+RRULE:FREQ=YEARLY;UNTIL=19440331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19431101T000000
+RRULE:FREQ=YEARLY;UNTIL=19451031T210000Z;BYMONTH=11
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19571001T000000
+RRULE:FREQ=YEARLY;UNTIL=19580930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19590501T010000
+RRULE:FREQ=YEARLY;UNTIL=19810430T230000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19590930T030000
+RRULE:FREQ=YEARLY;UNTIL=19650930T000000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19661001T030000
+RRULE:FREQ=YEARLY;UNTIL=19941001T000000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19840501T010000
+RRULE:FREQ=YEARLY;UNTIL=19880430T230000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19900501T010000
+RRULE:FREQ=YEARLY;UNTIL=19940430T230000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19950428T000000
+RRULE:FREQ=YEARLY;UNTIL=20100429T220000Z;BYDAY=-1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950929T000000
+RRULE:FREQ=YEARLY;UNTIL=20050929T210000Z;BYDAY=FR;BYYEARDAY=-92,-93,-94,-9
+ 5,-96,-97,-98
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20140926T000000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYYEARDAY=-92,-93,-94,-95,-96,-97,-98
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20150424T000000
+RRULE:FREQ=YEARLY;UNTIL=20190425T220000Z;BYDAY=-1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoEkaterinburgStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoEkaterinburgStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ekaterinburg Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,114 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Ekaterinburg Standard Time
+X-LIC-LOCATION:Ekaterinburg Standard Time
+BEGIN:STANDARD
+DTSTART:19190715T040000
+RDATE:19190715T040000
+TZNAME:SVET
+TZOFFSETFROM:+040224
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:SVEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T190000Z;BYMONTH=4
+TZNAME:SVEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T180000Z;BYMONTH=10
+TZNAME:SVET
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:SVET
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:SVEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:SVEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:SVET
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920119T020000
+RDATE:19920119T020000
+TZNAME:YEKST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:YEKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:YEKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YEKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YEKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T210000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:YEKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:YEKT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFLEStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoFLEStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/FLE Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/FLE Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,143 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:FLE Standard Time
+X-LIC-LOCATION:FLE Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:KMT
+TZOFFSETFROM:+020204
+TZOFFSETTO:+020204
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:EET
+TZOFFSETFROM:+020204
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:MSK
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410920T000000
+RDATE:19410920T000000
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19431106T000000
+RDATE:19431106T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19890923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900701T020000
+RDATE:19900701T020000
+TZNAME:EEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19940924T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19950101T000000
+RDATE:19950101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950924T040000
+RDATE:19950924T040000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoFijiStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoFijiStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Fiji Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Fiji Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Fiji Standard Time
+X-LIC-LOCATION:Fiji Standard Time
+BEGIN:STANDARD
+DTSTART:19151026T000000
+RDATE:19151026T000000
+TZNAME:FJST
+TZOFFSETFROM:+115544
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19981101T020000
+RRULE:FREQ=YEARLY;UNTIL=19991106T140000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:FJST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19990228T030000
+RRULE:FREQ=YEARLY;UNTIL=20000226T140000Z;BYDAY=-1SU;BYMONTH=2
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20091129T020000
+RDATE:20091129T020000
+TZNAME:FJST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20100328T030000
+RDATE:20100328T030000
+RDATE:20110306T030000
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20101024T020000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=21,22,23,24,25,26,27;BYMONTH=10
+TZNAME:FJST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20120122T030000
+RRULE:FREQ=YEARLY;UNTIL=20130119T140000Z;BYDAY=-2SU;BYMONTH=1
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20140119T020000
+RRULE:FREQ=YEARLY;BYDAY=-2SU;BYMONTH=1
+TZNAME:FJT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGMTStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGMTStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/GMT Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GMT Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,291 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:GMT Standard Time
+X-LIC-LOCATION:GMT Standard Time
+BEGIN:STANDARD
+DTSTART:18471201T000000
+RDATE:18471201T000000
+TZNAME:S
+TZOFFSETFROM:-000115
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160521T020000
+RDATE:19160521T020000
+RDATE:19170408T020000
+RDATE:19180324T020000
+RDATE:19190330T020000
+RDATE:19200328T020000
+RDATE:19210403T020000
+RDATE:19220326T020000
+RDATE:19230422T020000
+RDATE:19240413T020000
+RDATE:19270410T020000
+RDATE:19300413T020000
+RDATE:19330409T020000
+RDATE:19340422T020000
+RDATE:19350414T020000
+RDATE:19380410T020000
+RDATE:19390416T020000
+RDATE:19400225T020000
+RDATE:19460414T020000
+RDATE:19470316T020000
+RDATE:19480314T020000
+RDATE:19490403T020000
+RDATE:19530419T020000
+RDATE:19540411T020000
+RDATE:19570414T020000
+RDATE:19600410T020000
+RDATE:19680218T020000
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T030000
+RDATE:19161001T030000
+RDATE:19170917T030000
+RDATE:19180930T030000
+RDATE:19190929T030000
+RDATE:19201025T030000
+RDATE:19211003T030000
+RDATE:19221008T030000
+RDATE:19391119T030000
+RDATE:19471102T030000
+RDATE:19481031T030000
+RDATE:19491030T030000
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19230916T030000
+RRULE:FREQ=YEARLY;UNTIL=19240921T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=9
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19250419T020000
+RRULE:FREQ=YEARLY;UNTIL=19260418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19251004T030000
+RRULE:FREQ=YEARLY;UNTIL=19381002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280422T020000
+RRULE:FREQ=YEARLY;UNTIL=19290421T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19310419T020000
+RRULE:FREQ=YEARLY;UNTIL=19320417T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19360419T020000
+RRULE:FREQ=YEARLY;UNTIL=19370418T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410504T020000
+RDATE:19410504T020000
+RDATE:19450402T020000
+RDATE:19470413T020000
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19410810T030000
+RRULE:FREQ=YEARLY;UNTIL=19430815T010000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=8
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19420405T020000
+RRULE:FREQ=YEARLY;UNTIL=19440402T010000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:BDST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19440917T030000
+RDATE:19440917T030000
+RDATE:19450715T030000
+RDATE:19470810T030000
+TZNAME:BST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451007T030000
+RRULE:FREQ=YEARLY;UNTIL=19461006T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500416T020000
+RRULE:FREQ=YEARLY;UNTIL=19520420T020000Z;BYDAY=SU;BYMONTHDAY=14,15,16,17,1
+ 8,19,20;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T030000
+RRULE:FREQ=YEARLY;UNTIL=19521026T020000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19531004T030000
+RRULE:FREQ=YEARLY;UNTIL=19601002T020000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19550417T020000
+RRULE:FREQ=YEARLY;UNTIL=19560422T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19580420T020000
+RRULE:FREQ=YEARLY;UNTIL=19590419T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19610326T020000
+RRULE:FREQ=YEARLY;UNTIL=19630331T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19611029T030000
+RRULE:FREQ=YEARLY;UNTIL=19671029T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19640322T020000
+RRULE:FREQ=YEARLY;UNTIL=19670319T020000Z;BYDAY=SU;BYMONTHDAY=19,20,21,22,2
+ 3,24,25;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681027T000000
+RDATE:19681027T000000
+TZNAME:BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19711031T030000
+RDATE:19711031T030000
+TZNAME:S
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19720319T020000
+RRULE:FREQ=YEARLY;UNTIL=19800316T020000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19721029T030000
+RRULE:FREQ=YEARLY;UNTIL=19801026T020000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T010000
+RRULE:FREQ=YEARLY;UNTIL=19950326T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811025T020000
+RRULE:FREQ=YEARLY;UNTIL=19891029T010000Z;BYDAY=SU;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19901028T020000
+RRULE:FREQ=YEARLY;UNTIL=19951022T010000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:GMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960331T010000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:GMT/BST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:GMT/BST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGTBStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGTBStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/GTB Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/GTB Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,121 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:GTB Standard Time
+X-LIC-LOCATION:GTB Standard Time
+BEGIN:STANDARD
+DTSTART:18911001T000000
+RDATE:18911001T000000
+TZNAME:BMT
+TZOFFSETFROM:+014424
+TZOFFSETTO:+014424
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310724T000000
+RDATE:19310724T000000
+TZNAME:EEST
+TZOFFSETFROM:+014424
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19320521T000000
+RDATE:19320521T000000
+RDATE:19790527T000000
+RDATE:19800405T230000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19321002T010000
+RRULE:FREQ=YEARLY;UNTIL=19390930T220000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19330402T000000
+RRULE:FREQ=YEARLY;UNTIL=19390401T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T000000
+RDATE:19790930T000000
+RDATE:19800928T010000
+RDATE:19961027T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19810927T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910101T000000
+RDATE:19910101T000000
+RDATE:19940101T000000
+RDATE:19970101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T000000
+RRULE:FREQ=YEARLY;UNTIL=19930327T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T010000
+RRULE:FREQ=YEARLY;UNTIL=19930925T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940327T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940925T000000
+RRULE:FREQ=YEARLY;UNTIL=19950923T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970330T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19971026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGeorgianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGeorgianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Georgian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Georgian Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,152 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Georgian Standard Time
+X-LIC-LOCATION:Georgian Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:TBMT
+TZOFFSETFROM:+025916
+TZOFFSETTO:+025916
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:TBIT
+TZOFFSETFROM:+025916
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19570301T000000
+RDATE:19570301T000000
+TZNAME:TBIST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T200000Z;BYMONTH=4
+TZNAME:TBIST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T190000Z;BYMONTH=10
+TZNAME:TBIT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T220000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:TBIT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T220000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TBIST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:TBIST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910409T000000
+RDATE:19910409T000000
+RDATE:19940925T000000
+TZNAME:GEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:20041031T030000
+TZNAME:GET
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:GEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920329T000000
+RRULE:FREQ=YEARLY;UNTIL=19940326T210000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920927T000000
+RRULE:FREQ=YEARLY;UNTIL=19930925T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:GET
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19950326T000000
+RRULE:FREQ=YEARLY;UNTIL=19960330T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950924T000000
+RDATE:19950924T000000
+TZNAME:GET
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T000000
+RDATE:19961027T000000
+RDATE:19970330T000000
+TZNAME:GEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19971026T000000
+RRULE:FREQ=YEARLY;UNTIL=20031025T190000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:GET
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980329T000000
+RRULE:FREQ=YEARLY;UNTIL=20040327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:GEST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20040627T000000
+RDATE:20040627T000000
+TZNAME:GEST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20050327T020000
+RDATE:20050327T020000
+TZNAME:GET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenlandStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGreenlandStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Greenland Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenland Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Greenland Standard Time
+X-LIC-LOCATION:Greenland Standard Time
+BEGIN:STANDARD
+DTSTART:19160728T000000
+RDATE:19160728T000000
+TZNAME:WGT
+TZOFFSETFROM:-032656
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800406T020000
+RDATE:19800406T020000
+TZNAME:WGST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800927T230000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=SA;BYMONTHDAY=23,24,25,26,2
+ 7,28,29;BYMONTH=9
+TZNAME:WGT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810328T220000
+RRULE:FREQ=YEARLY;BYDAY=SA;BYMONTHDAY=24,25,26,27,28,29,30;BYMONTH=3
+TZNAME:WGST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961026T230000
+RRULE:FREQ=YEARLY;BYDAY=SA;BYMONTHDAY=24,25,26,27,28,29,30;BYMONTH=10
+TZNAME:WGT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoGreenwichStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoGreenwichStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Greenwich Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Greenwich Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,89 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Greenwich Standard Time
+X-LIC-LOCATION:Greenwich Standard Time
+BEGIN:STANDARD
+DTSTART:18370101T000000
+RDATE:18370101T000000
+TZNAME:RMT
+TZOFFSETFROM:-012724
+TZOFFSETTO:-012748
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19080101T000000
+RDATE:19080101T000000
+TZNAME:ISST
+TZOFFSETFROM:-012748
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170219T230000
+RRULE:FREQ=YEARLY;UNTIL=19180220T000000Z;BYMONTH=2
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19171021T010000
+RDATE:19171021T010000
+RDATE:19181116T010000
+RDATE:19391129T020000
+RDATE:19401103T020000
+RDATE:19411102T020000
+RDATE:19421025T020000
+RDATE:19491030T020000
+RDATE:19671029T020000
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19390429T230000
+RDATE:19390429T230000
+RDATE:19400225T020000
+RDATE:19410302T010000
+RDATE:19420308T010000
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19430307T010000
+RRULE:FREQ=YEARLY;UNTIL=19460303T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19431024T020000
+RRULE:FREQ=YEARLY;UNTIL=19481024T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470406T010000
+RRULE:FREQ=YEARLY;UNTIL=19670402T020000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:ISST
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19501022T020000
+RRULE:FREQ=YEARLY;UNTIL=19661023T020000Z;BYDAY=4SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0000
+TZOFFSETTO:-0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19680407T010000
+RDATE:19680407T010000
+TZNAME:GMT
+TZOFFSETFROM:-0100
+TZOFFSETTO:+0000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoHawaiianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoHawaiianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Hawaiian Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Hawaiian Standard Time
+X-LIC-LOCATION:Hawaiian Standard Time
+BEGIN:STANDARD
+DTSTART:18960113T120000
+RDATE:18960113T120000
+TZNAME:HST
+TZOFFSETFROM:-103126
+TZOFFSETTO:-1030
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19330430T020000
+RDATE:19330430T020000
+RDATE:19420209T020000
+TZNAME:HDT
+TZOFFSETFROM:-1030
+TZOFFSETTO:-0930
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19330521T120000
+RDATE:19330521T120000
+RDATE:19450930T020000
+TZNAME:HST
+TZOFFSETFROM:-0930
+TZOFFSETTO:-1030
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19470608T020000
+RDATE:19470608T020000
+TZNAME:HST
+TZOFFSETFROM:-1030
+TZOFFSETTO:-1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIndiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoIndiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/India Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/India Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:India Standard Time
+X-LIC-LOCATION:India Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:HMT
+TZOFFSETFROM:+055328
+TZOFFSETTO:+055320
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19411001T000000
+RDATE:19411001T000000
+TZNAME:BURT
+TZOFFSETFROM:+055320
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420515T000000
+RDATE:19420515T000000
+RDATE:19451015T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIranStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoIranStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Iran Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Iran Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,187 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Iran Standard Time
+X-LIC-LOCATION:Iran Standard Time
+BEGIN:STANDARD
+DTSTART:19160101T000000
+RDATE:19160101T000000
+TZNAME:TMT
+TZOFFSETFROM:+032544
+TZOFFSETTO:+032544
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:IRST
+TZOFFSETFROM:+032544
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19771101T000000
+RDATE:19771101T000000
+TZNAME:IRST
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19780321T000000
+RDATE:19780321T000000
+TZNAME:IRDT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19781021T000000
+RDATE:19781021T000000
+TZNAME:IRST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790101T000000
+RDATE:19790101T000000
+TZNAME:IRST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19790321T000000
+RRULE:FREQ=YEARLY;UNTIL=19800320T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790919T000000
+RDATE:19790919T000000
+RDATE:19800923T000000
+RDATE:19960921T000000
+RDATE:20000921T000000
+RDATE:20040921T000000
+RDATE:20050922T000000
+RDATE:20080921T000000
+RDATE:20120921T000000
+RDATE:20160921T000000
+RDATE:20200921T000000
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910503T000000
+RDATE:19910503T000000
+RDATE:19960321T000000
+RDATE:20000321T000000
+RDATE:20040321T000000
+RDATE:20050322T000000
+RDATE:20080321T000000
+RDATE:20120321T000000
+RDATE:20160321T000000
+RDATE:20200321T000000
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910922T000000
+RRULE:FREQ=YEARLY;UNTIL=19950921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920322T000000
+RRULE:FREQ=YEARLY;UNTIL=19950321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19970322T000000
+RRULE:FREQ=YEARLY;UNTIL=19990321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19970922T000000
+RRULE:FREQ=YEARLY;UNTIL=19990921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010322T000000
+RRULE:FREQ=YEARLY;UNTIL=20030321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010922T000000
+RRULE:FREQ=YEARLY;UNTIL=20030921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20090322T000000
+RRULE:FREQ=YEARLY;UNTIL=20110321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20090922T000000
+RRULE:FREQ=YEARLY;UNTIL=20110921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20130322T000000
+RRULE:FREQ=YEARLY;UNTIL=20150321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130922T000000
+RRULE:FREQ=YEARLY;UNTIL=20150921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20170322T000000
+RRULE:FREQ=YEARLY;UNTIL=20190321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20170922T000000
+RRULE:FREQ=YEARLY;UNTIL=20190921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20210322T000000
+RRULE:FREQ=YEARLY;UNTIL=20230321T203000Z;BYMONTH=3
+TZNAME:IRDT
+TZOFFSETFROM:+0330
+TZOFFSETTO:+0430
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20210922T000000
+RRULE:FREQ=YEARLY;UNTIL=20230921T193000Z;BYMONTH=9
+TZNAME:IRST
+TZOFFSETFROM:+0430
+TZOFFSETTO:+0330
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoIsraelStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoIsraelStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Israel Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Israel Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,164 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Israel Standard Time
+X-LIC-LOCATION:Israel Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:JMT
+TZOFFSETFROM:+022054
+TZOFFSETTO:+022040
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180101T000000
+RDATE:19180101T000000
+TZNAME:IST
+TZOFFSETFROM:+022040
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+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:19880410T000000
+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:20110401T020000
+RDATE:20120330T020000
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19421101T000000
+RRULE:FREQ=YEARLY;UNTIL=19441031T210000Z;BYMONTH=11
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451101T020000
+RDATE:19451101T020000
+RDATE:19461101T000000
+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:19880904T000000
+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
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19480523T000000
+RDATE:19480523T000000
+TZNAME:IDDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19480901T000000
+RDATE:19480901T000000
+TZNAME:IDT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19481101T020000
+RRULE:FREQ=YEARLY;UNTIL=19491031T230000Z;BYMONTH=11
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060331T020000
+RRULE:FREQ=YEARLY;UNTIL=20100326T000000Z;BYDAY=FR;BYMONTHDAY=26,27,28,29,3
+ 0,31;BYMONTH=3
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20130329T020000
+RRULE:FREQ=YEARLY;BYDAY=FR;BYMONTHDAY=23,24,25,26,27,28,29;BYMONTH=3
+TZNAME:IDT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:IST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoJordanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoJordanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Jordan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Jordan Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,137 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Jordan Standard Time
+X-LIC-LOCATION:Jordan Standard Time
+BEGIN:STANDARD
+DTSTART:19310101T000000
+RDATE:19310101T000000
+TZNAME:EEST
+TZOFFSETFROM:+022344
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19730606T000000
+RDATE:19730606T000000
+RDATE:19780430T000000
+RDATE:19850401T000000
+RDATE:19890508T000000
+RDATE:19900427T000000
+RDATE:19910417T000000
+RDATE:19920410T000000
+RDATE:19990701T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19731001T000000
+RRULE:FREQ=YEARLY;UNTIL=19750930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19761101T000000
+RDATE:19761101T000000
+RDATE:19771001T000000
+RDATE:19780930T000000
+RDATE:19851001T000000
+RDATE:19910927T000000
+RDATE:19940916T000000
+RDATE:20031024T010000
+RDATE:20041015T010000
+RDATE:20050930T010000
+RDATE:20131220T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860404T000000
+RRULE:FREQ=YEARLY;UNTIL=19880331T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19861003T000000
+RRULE:FREQ=YEARLY;UNTIL=19901004T210000Z;BYDAY=1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19921002T000000
+RRULE:FREQ=YEARLY;UNTIL=19930930T210000Z;BYDAY=1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930402T000000
+RRULE:FREQ=YEARLY;UNTIL=19980402T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950915T010000
+RRULE:FREQ=YEARLY;UNTIL=19980917T220000Z;BYDAY=3FR;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990924T010000
+RRULE:FREQ=YEARLY;UNTIL=20020926T220000Z;BYDAY=-1FR;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20000330T000000
+RRULE:FREQ=YEARLY;UNTIL=20010328T220000Z;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020328T235959
+RRULE:FREQ=YEARLY;UNTIL=20120329T215959Z;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20061027T010000
+RRULE:FREQ=YEARLY;UNTIL=20111027T220000Z;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20140327T235959
+RRULE:FREQ=YEARLY;BYDAY=-1TH;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20141031T010000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKaliningradStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoKaliningradStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Kaliningrad Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,156 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Kaliningrad Standard Time
+X-LIC-LOCATION:Kaliningrad Standard Time
+BEGIN:STANDARD
+DTSTART:18930401T000000
+RDATE:18930401T000000
+TZNAME:CEST
+TZOFFSETFROM:+0122
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450101T000000
+RDATE:19450101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450429T000000
+RDATE:19450429T000000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451101T000000
+RDATE:19451101T000000
+TZNAME:CET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+RDATE:19920926T230000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101031T000000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:FET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoKoreaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoKoreaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Korea Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Korea Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Korea Standard Time
+X-LIC-LOCATION:Korea Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:KST
+TZOFFSETFROM:+082752
+TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19041201T000000
+RDATE:19041201T000000
+RDATE:19320101T000000
+RDATE:19681001T000000
+TZNAME:KST
+TZOFFSETFROM:+0830
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19280101T000000
+RDATE:19280101T000000
+TZNAME:KST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540321T000000
+RDATE:19540321T000000
+RDATE:19600913T000000
+TZNAME:KST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19600515T000000
+RDATE:19600515T000000
+TZNAME:KDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19610810T000000
+RDATE:19610810T000000
+TZNAME:KST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0830
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870510T000000
+RRULE:FREQ=YEARLY;UNTIL=19880507T150000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:KDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871011T000000
+RRULE:FREQ=YEARLY;UNTIL=19881008T140000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:KST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoLibyaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoLibyaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Libya Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Libya Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,92 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Libya Standard Time
+X-LIC-LOCATION:Libya Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:CEST
+TZOFFSETFROM:+005244
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19511014T020000
+RDATE:19511014T020000
+RDATE:19531009T020000
+RDATE:19550930T000000
+RDATE:19850406T000000
+RDATE:19860404T000000
+RDATE:19970404T000000
+RDATE:20130329T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19520101T000000
+RDATE:19520101T000000
+RDATE:19540101T000000
+RDATE:19560101T000000
+RDATE:19861003T000000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19590101T000000
+RDATE:19590101T000000
+RDATE:19900504T000000
+TZNAME:EET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+RDATE:19960930T000000
+RDATE:20121110T020000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19820401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T230000Z;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19821001T000000
+RRULE:FREQ=YEARLY;UNTIL=19850930T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870401T000000
+RRULE:FREQ=YEARLY;UNTIL=19890331T230000Z;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19871001T000000
+RRULE:FREQ=YEARLY;UNTIL=19890930T220000Z;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19971004T000000
+RDATE:19971004T000000
+RDATE:20131025T020000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMagadanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMagadanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Magadan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Magadan Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Magadan Standard Time
+X-LIC-LOCATION:Magadan Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:MAGT
+TZOFFSETFROM:+100312
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:MAGST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T130000Z;BYMONTH=4
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T120000Z;BYMONTH=10
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:MAGT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MAGST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T150000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MAGT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:MAGT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMauritiusStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMauritiusStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mauritius Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mauritius Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Mauritius Standard Time
+X-LIC-LOCATION:Mauritius Standard Time
+BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:MUST
+TZOFFSETFROM:+0350
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19821010T000000
+RDATE:19821010T000000
+RDATE:20081026T020000
+TZNAME:MUST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19830321T000000
+RDATE:19830321T000000
+RDATE:20090329T020000
+TZNAME:MUT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMiddleEastStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMiddleEastStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Middle East Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Middle East Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,112 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Middle East Standard Time
+X-LIC-LOCATION:Middle East Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0222
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200328T000000
+RDATE:19200328T000000
+RDATE:19210403T000000
+RDATE:19220326T000000
+RDATE:19230422T000000
+RDATE:19720622T000000
+RDATE:19780430T000000
+RDATE:19880601T000000
+RDATE:19890510T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201025T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19230916T000000
+RDATE:19780930T000000
+RDATE:19921004T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19570501T000000
+RRULE:FREQ=YEARLY;UNTIL=19610430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19571001T000000
+RRULE:FREQ=YEARLY;UNTIL=19610930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19721001T000000
+RRULE:FREQ=YEARLY;UNTIL=19770930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19730501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19840501T000000
+RRULE:FREQ=YEARLY;UNTIL=19870430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19841016T000000
+RRULE:FREQ=YEARLY;UNTIL=19911015T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19900501T000000
+RRULE:FREQ=YEARLY;UNTIL=19920430T220000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19930328T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T210000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19991031T000000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMontevideoStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMontevideoStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Montevideo Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Montevideo Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,196 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Montevideo Standard Time
+X-LIC-LOCATION:Montevideo Standard Time
+BEGIN:STANDARD
+DTSTART:18980628T000000
+RDATE:18980628T000000
+TZNAME:MMT
+TZOFFSETFROM:-034444
+TZOFFSETTO:-034444
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200501T000000
+RDATE:19200501T000000
+TZNAME:UYST
+TZOFFSETFROM:-034444
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19231002T000000
+RDATE:19231002T000000
+RDATE:19361101T000000
+RDATE:19410801T000000
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19240401T000000
+RRULE:FREQ=YEARLY;UNTIL=19260401T030000Z;BYMONTH=4
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19251001T033000Z;BYMONTH=10
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19331029T000000
+RRULE:FREQ=YEARLY;UNTIL=19351027T033000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19340401T000000
+RRULE:FREQ=YEARLY;UNTIL=19360329T030000Z;BYDAY=SU;BYMONTHDAY=26,27,28,29,3
+ 0,31;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19370328T000000
+RRULE:FREQ=YEARLY;UNTIL=19410330T030000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19371031T000000
+RRULE:FREQ=YEARLY;UNTIL=19401027T033000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:UYHST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420101T000000
+RDATE:19420101T000000
+TZNAME:UYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421214T000000
+RDATE:19421214T000000
+TZNAME:UYST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430314T000000
+RDATE:19430314T000000
+RDATE:19591115T000000
+RDATE:19600306T000000
+RDATE:19650926T000000
+RDATE:19720815T000000
+RDATE:19761001T000000
+RDATE:19780401T000000
+RDATE:19800501T000000
+RDATE:19880314T000000
+RDATE:19890312T000000
+RDATE:19930228T000000
+RDATE:20050327T020000
+RDATE:20060312T020000
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19590524T000000
+RDATE:19590524T000000
+RDATE:19600117T000000
+RDATE:19720424T000000
+RDATE:19771204T000000
+RDATE:19791001T000000
+RDATE:19871214T000000
+RDATE:19881211T000000
+RDATE:19891029T000000
+RDATE:19921018T000000
+RDATE:20040919T000000
+RDATE:20051009T020000
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19650404T000000
+RRULE:FREQ=YEARLY;UNTIL=19670402T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19661031T000000
+RRULE:FREQ=YEARLY;UNTIL=19671031T020000Z;BYMONTH=10
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19680527T000000
+RRULE:FREQ=YEARLY;UNTIL=19700527T030000Z;BYMONTH=5
+TZNAME:UYHST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19681202T000000
+RRULE:FREQ=YEARLY;UNTIL=19701202T023000Z;BYMONTH=12
+TZNAME:UYT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740310T000000
+RDATE:19740310T000000
+TZNAME:UYHST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19741222T000000
+RDATE:19741222T000000
+TZNAME:UYST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19900304T000000
+RRULE:FREQ=YEARLY;UNTIL=19920301T020000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19901021T000000
+RRULE:FREQ=YEARLY;UNTIL=19911027T030000Z;BYDAY=SU;BYMONTHDAY=21,22,23,24,2
+ 5,26,27;BYMONTH=10
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20061001T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:UYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:UYT
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMoroccoStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMoroccoStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Morocco Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Morocco Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Morocco Standard Time
+X-LIC-LOCATION:Morocco Standard Time
+BEGIN:STANDARD
+DTSTART:19131026T000000
+RDATE:19131026T000000
+TZNAME:WEST
+TZOFFSETFROM:-003020
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19390912T000000
+RDATE:19390912T000000
+RDATE:19400225T000000
+RDATE:19500611T000000
+RDATE:19670603T120000
+RDATE:19740624T000000
+RDATE:19780601T000000
+RDATE:20080601T000000
+RDATE:20090601T000000
+RDATE:20100502T000000
+RDATE:20110403T000000
+RDATE:20120820T020000
+RDATE:20130810T020000
+RDATE:20140729T020000
+RDATE:20150718T020000
+RDATE:20160707T020000
+RDATE:20170626T020000
+RDATE:20180615T020000
+RDATE:20190605T020000
+RDATE:20200524T020000
+RDATE:20210513T020000
+RDATE:20220503T020000
+RDATE:20230422T020000
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19391119T000000
+RDATE:19391119T000000
+RDATE:19451118T000000
+RDATE:19501029T000000
+RDATE:19671001T000000
+RDATE:19740901T000000
+RDATE:19760801T000000
+RDATE:19770928T000000
+RDATE:19780804T000000
+RDATE:20080901T000000
+RDATE:20090821T000000
+RDATE:20100808T000000
+RDATE:20110731T000000
+RDATE:20120720T030000
+RDATE:20120930T030000
+RDATE:20130707T030000
+RDATE:20140629T030000
+RDATE:20150618T030000
+RDATE:20160607T030000
+RDATE:20170527T030000
+RDATE:20180516T030000
+RDATE:20190506T030000
+RDATE:20200424T030000
+RDATE:20210413T030000
+RDATE:20220403T030000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760501T000000
+RRULE:FREQ=YEARLY;UNTIL=19770501T000000Z;BYMONTH=5
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19840316T000000
+RDATE:19840316T000000
+TZNAME:CET
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:WEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120429T020000
+RRULE:FREQ=YEARLY;UNTIL=20130428T020000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20131027T030000
+RRULE:FREQ=YEARLY;UNTIL=20231029T020000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20140330T020000
+RRULE:FREQ=YEARLY;UNTIL=20220327T020000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeMexicoicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMountainStandardTimeMexicoics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time (Mexico).ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,98 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Mountain Standard Time (Mexico)
+X-LIC-LOCATION:Mountain Standard Time (Mexico)
+BEGIN:STANDARD
+DTSTART:19211231T235540
+RDATE:19211231T235540
+TZNAME:MST
+TZOFFSETFROM:-070420
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+RDATE:19310501T230000
+RDATE:19320401T000000
+TZNAME:CST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19301115T000000
+RDATE:19301115T000000
+RDATE:19311001T000000
+RDATE:20010930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960101T000000
+RDATE:19960101T000000
+RDATE:19980101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=19970406T080000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=19971026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19980405T030000
+RDATE:19980405T030000
+TZNAME:MDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19981025T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19990404T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20010506T020000
+RDATE:20010506T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMountainStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMountainStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Mountain Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Mountain Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,134 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Mountain Standard Time
+X-LIC-LOCATION:Mountain Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120004
+RDATE:18831118T120004
+TZNAME:MST
+TZOFFSETFROM:-065956
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200328T020000
+RRULE:FREQ=YEARLY;UNTIL=19210327T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T020000
+RDATE:19201031T020000
+RDATE:19210522T020000
+RDATE:19450930T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T170000
+RDATE:19450814T170000
+TZNAME:MPT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19650425T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19651031T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19740106T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T090000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T090000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoMyanmarStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoMyanmarStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Myanmar Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Myanmar Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Myanmar Standard Time
+X-LIC-LOCATION:Myanmar Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:RMT
+TZOFFSETFROM:+062440
+TZOFFSETTO:+062440
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:BURT
+TZOFFSETFROM:+062440
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420501T000000
+RDATE:19420501T000000
+TZNAME:JST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450503T000000
+RDATE:19450503T000000
+TZNAME:MMT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0630
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNCentralAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNCentralAsiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/N. Central Asia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:N. Central Asia Standard Time
+X-LIC-LOCATION:N. Central Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19191214T060000
+RDATE:19191214T060000
+TZNAME:NOVT
+TZOFFSETFROM:+053140
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z;BYMONTH=10
+TZNAME:NOVT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NOVT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:NOVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+RDATE:19930328T020000
+TZNAME:NOVST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:NOVT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19930523T000000
+RDATE:19930523T000000
+TZNAME:NOVST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NOVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940327T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:NOVST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T200000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NOVT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:NOVT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNamibiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNamibiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Namibia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Namibia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Namibia Standard Time
+X-LIC-LOCATION:Namibia Standard Time
+BEGIN:STANDARD
+DTSTART:18920208T000000
+RDATE:18920208T000000
+TZNAME:SWAT
+TZOFFSETFROM:+010824
+TZOFFSETTO:+0130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420920T020000
+RDATE:19420920T020000
+TZNAME:SAST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430321T020000
+RDATE:19430321T020000
+TZNAME:SAST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19900321T000000
+RDATE:19900321T000000
+TZNAME:CAT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19940403T000000
+RDATE:19940403T000000
+TZNAME:WAST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940904T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=9
+TZNAME:WAST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19950402T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:WAT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNepalStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNepalStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Nepal Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Nepal Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Nepal Standard Time
+X-LIC-LOCATION:Nepal Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:IST
+TZOFFSETFROM:+054116
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19860101T000000
+RDATE:19860101T000000
+TZNAME:NPT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0545
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewZealandStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNewZealandStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/New Zealand Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/New Zealand Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,122 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:New Zealand Standard Time
+X-LIC-LOCATION:New Zealand Standard Time
+BEGIN:STANDARD
+DTSTART:18681102T000000
+RDATE:18681102T000000
+TZNAME:NZST
+TZOFFSETFROM:+113904
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19271106T020000
+RDATE:19271106T020000
+TZNAME:NZST
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19280304T020000
+RDATE:19280304T020000
+TZNAME:NZMT
+TZOFFSETFROM:+1230
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19281014T020000
+RRULE:FREQ=YEARLY;UNTIL=19331007T143000Z;BYDAY=2SU;BYMONTH=10
+TZNAME:NZST
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19290317T020000
+RRULE:FREQ=YEARLY;UNTIL=19330318T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZMT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19340429T020000
+RRULE:FREQ=YEARLY;UNTIL=19400427T140000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:NZMT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1130
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19340930T020000
+RRULE:FREQ=YEARLY;UNTIL=19400928T143000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NZST
+TZOFFSETFROM:+1130
+TZOFFSETTO:+1200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:NZST
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741103T020000
+RDATE:19741103T020000
+RDATE:19891008T020000
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19750223T030000
+RDATE:19750223T030000
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19751026T020000
+RRULE:FREQ=YEARLY;UNTIL=19881029T140000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19760307T030000
+RRULE:FREQ=YEARLY;UNTIL=19890304T140000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19900318T030000
+RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19901007T020000
+RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070930T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
+TZNAME:NZDT
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:NZST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNewfoundlandStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNewfoundlandStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Newfoundland Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,210 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Newfoundland Standard Time
+X-LIC-LOCATION:Newfoundland Standard Time
+BEGIN:STANDARD
+DTSTART:18840101T000000
+RDATE:18840101T000000
+RDATE:19180101T000000
+RDATE:19190101T000000
+TZNAME:NST
+TZOFFSETFROM:-033052
+TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170408T020000
+RDATE:19170408T020000
+RDATE:19180414T020000
+RDATE:19190505T230000
+TZNAME:NDT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T020000
+RDATE:19170917T020000
+RDATE:19181027T020000
+RDATE:19190812T230000
+TZNAME:NST
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200502T230000
+RRULE:FREQ=YEARLY;UNTIL=19340507T023052Z;BYDAY=1SU;BYMONTH=5
+TZNAME:NDT
+TZOFFSETFROM:-033052
+TZOFFSETTO:-023052
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201031T230000
+RRULE:FREQ=YEARLY;UNTIL=19341029T013052Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-023052
+TZOFFSETTO:-033052
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19350330T000000
+RDATE:19350330T000000
+TZNAME:NST
+TZOFFSETFROM:-033052
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19350505T230000
+RDATE:19350505T230000
+RDATE:19870405T000100
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19351027T230000
+RDATE:19351027T230000
+RDATE:19450930T020000
+RDATE:19871025T000100
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19360511T000000
+RRULE:FREQ=YEARLY;UNTIL=19410512T033000Z;BYDAY=MO;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=5
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19361005T000000
+RRULE:FREQ=YEARLY;UNTIL=19411006T023000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420511T000000
+RDATE:19420511T000000
+TZNAME:NST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450814T203000
+RDATE:19450814T203000
+TZNAME:NPT
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+TZNAME:NST
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19460512T020000
+RRULE:FREQ=YEARLY;UNTIL=19500514T053000Z;BYDAY=2SU;BYMONTH=5
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19461006T020000
+RRULE:FREQ=YEARLY;UNTIL=19501008T043000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19510429T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T053000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19510930T020000
+RRULE:FREQ=YEARLY;UNTIL=19590927T043000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19601030T020000
+RRULE:FREQ=YEARLY;UNTIL=19861026T043000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19880403T000100
+RDATE:19880403T000100
+TZNAME:NDDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0130
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19881030T000100
+RDATE:19881030T000100
+TZNAME:NST
+TZOFFSETFROM:-0130
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19890402T000100
+RRULE:FREQ=YEARLY;UNTIL=20060402T033100Z;BYDAY=1SU;BYMONTH=4
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19891029T000100
+RRULE:FREQ=YEARLY;UNTIL=20061029T023100Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T000100
+RRULE:FREQ=YEARLY;UNTIL=20110313T033100Z;BYDAY=2SU;BYMONTH=3
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T000100
+RRULE:FREQ=YEARLY;UNTIL=20101107T023100Z;BYDAY=1SU;BYMONTH=11
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111101T000000
+RDATE:20111101T000000
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0230
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111106T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:NST
+TZOFFSETFROM:-0230
+TZOFFSETTO:-0330
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:NDT
+TZOFFSETFROM:-0330
+TZOFFSETTO:-0230
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaEastStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNorthAsiaEastStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/North Asia East Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia East Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,115 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:North Asia East Standard Time
+X-LIC-LOCATION:North Asia East Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
+TZOFFSETFROM:+065720
+TZOFFSETTO:+065720
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200125T000000
+RDATE:19200125T000000
+TZNAME:IRKT
+TZOFFSETFROM:+065720
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:IRKST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z;BYMONTH=4
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T150000Z;BYMONTH=10
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T180000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T180000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:IRKT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T180000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:IRKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T180000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T180000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:IRKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:IRKT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoNorthAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoNorthAsiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/North Asia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/North Asia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:North Asia Standard Time
+X-LIC-LOCATION:North Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19200106T000000
+RDATE:19200106T000000
+TZNAME:KRAT
+TZOFFSETFROM:+061120
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T170000Z;BYMONTH=4
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T160000Z;BYMONTH=10
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:KRAT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T190000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:KRAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T190000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T190000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:KRAT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:KRAT
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificSAStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPacificSAStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific SA Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,211 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pacific SA Standard Time
+X-LIC-LOCATION:Pacific SA Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:SMT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-044246
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19100101T000000
+RDATE:19100101T000000
+TZNAME:CLT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19160701T000000
+RDATE:19160701T000000
+TZNAME:SMT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-044246
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19180901T000000
+RDATE:19180901T000000
+TZNAME:CLT
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19190701T000000
+RDATE:19190701T000000
+TZNAME:SMT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-044246
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19270901T000000
+RDATE:19270901T000000
+TZNAME:CLST
+TZOFFSETFROM:-044246
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19280401T000000
+RRULE:FREQ=YEARLY;UNTIL=19320401T040000Z;BYMONTH=4
+TZNAME:CLT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19280901T000000
+RRULE:FREQ=YEARLY;UNTIL=19320901T050000Z;BYMONTH=9
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19420601T000000
+RDATE:19420601T000000
+RDATE:19460831T230000
+TZNAME:CLT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420801T000000
+RDATE:19420801T000000
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460715T000000
+RDATE:19460715T000000
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19470331T230000
+RDATE:19470331T230000
+TZNAME:CLT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19470522T000000
+RDATE:19470522T000000
+TZNAME:CLST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19681103T000000
+RDATE:19681103T000000
+RDATE:19691123T000000
+RDATE:19730930T000000
+RDATE:19881002T000000
+RDATE:19891015T000000
+RDATE:19900916T000000
+RDATE:19980927T000000
+RDATE:20110821T000000
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19690330T000000
+RDATE:19690330T000000
+RDATE:19700329T000000
+RDATE:19710314T000000
+RDATE:19870412T000000
+RDATE:19900318T000000
+RDATE:19970330T000000
+RDATE:19980315T000000
+RDATE:19990404T000000
+RDATE:20080330T000000
+RDATE:20090315T000000
+RDATE:20100404T000000
+RDATE:20110508T000000
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19701011T000000
+RRULE:FREQ=YEARLY;UNTIL=19721015T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19720312T000000
+RRULE:FREQ=YEARLY;UNTIL=19860309T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19741013T000000
+RRULE:FREQ=YEARLY;UNTIL=19871011T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19880313T000000
+RRULE:FREQ=YEARLY;UNTIL=19890312T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910310T000000
+RRULE:FREQ=YEARLY;UNTIL=19960310T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19911013T000000
+RRULE:FREQ=YEARLY;UNTIL=19971012T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19991010T000000
+RRULE:FREQ=YEARLY;UNTIL=20101010T040000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=10
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000312T000000
+RRULE:FREQ=YEARLY;UNTIL=20070311T030000Z;BYDAY=SU;BYMONTHDAY=9,10,11,12,13
+ ,14,15;BYMONTH=3
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20120429T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=23,24,25,26,27,28,29;BYMONTH=4
+TZNAME:CLT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120902T000000
+RRULE:FREQ=YEARLY;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8;BYMONTH=9
+TZNAME:CLST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeMexicoicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPacificStandardTimeMexicoics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time (Mexico).ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,139 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pacific Standard Time (Mexico)
+X-LIC-LOCATION:Pacific Standard Time (Mexico)
+BEGIN:STANDARD
+DTSTART:19220101T002032
+RDATE:19220101T002032
+TZNAME:MST
+TZOFFSETFROM:-073928
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19240101T000000
+RDATE:19240101T000000
+RDATE:19301115T000000
+RDATE:19310930T000000
+RDATE:19451112T000000
+RDATE:19490114T000000
+RDATE:20011028T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19270610T230000
+RDATE:19270610T230000
+TZNAME:MST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19310401T000000
+RDATE:19310401T000000
+RDATE:19480405T000000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420424T000000
+RDATE:19420424T000000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19540101T000000
+RDATE:19540101T000000
+RDATE:19610101T000000
+RDATE:19760101T000000
+RDATE:19960101T000000
+RDATE:20010101T000000
+RDATE:20020220T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19540425T020000
+RRULE:FREQ=YEARLY;UNTIL=19600424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19540926T020000
+RRULE:FREQ=YEARLY;UNTIL=19600925T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19761031T020000
+RRULE:FREQ=YEARLY;UNTIL=19951029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=19950402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19960407T020000
+RRULE:FREQ=YEARLY;UNTIL=20000402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20001029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20010401T020000
+RDATE:20010401T020000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20020407T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021027T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPacificStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pacific Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pacific Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,132 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pacific Standard Time
+X-LIC-LOCATION:Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T120702
+RDATE:18831118T120702
+TZNAME:PST
+TZOFFSETFROM:-075258
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T100000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:PWT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T160000
+RDATE:19450814T160000
+TZNAME:PPT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450930T020000
+RDATE:19450930T020000
+RDATE:19490101T020000
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19670101T000000
+TZNAME:PST
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19480314T020000
+RDATE:19480314T020000
+RDATE:19740106T020000
+RDATE:19750223T020000
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19500430T020000
+RRULE:FREQ=YEARLY;UNTIL=19660424T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19500924T020000
+RRULE:FREQ=YEARLY;UNTIL=19610924T090000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19621028T020000
+RRULE:FREQ=YEARLY;UNTIL=19661030T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RRULE:FREQ=YEARLY;UNTIL=19730429T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;UNTIL=20061029T090000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19760425T020000
+RRULE:FREQ=YEARLY;UNTIL=19860427T100000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;UNTIL=20060402T100000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:PDT
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:PST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoPakistanStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoPakistanStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Pakistan Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Pakistan Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Pakistan Standard Time
+X-LIC-LOCATION:Pakistan Standard Time
+BEGIN:STANDARD
+DTSTART:19070101T000000
+RDATE:19070101T000000
+TZNAME:IST
+TZOFFSETFROM:+042812
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451015T000000
+RDATE:19451015T000000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19510930T000000
+RDATE:19510930T000000
+TZNAME:KART
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19710326T000000
+RDATE:19710326T000000
+TZNAME:PKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020407T000100
+RDATE:20020407T000100
+RDATE:20080601T000000
+RDATE:20090415T000000
+TZNAME:PKST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20021006T000100
+RDATE:20021006T000100
+RDATE:20081101T000000
+RDATE:20091101T000000
+TZNAME:PKT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoParaguayStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoParaguayStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Paraguay Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Paraguay Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,162 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Paraguay Standard Time
+X-LIC-LOCATION:Paraguay Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:AMT
+TZOFFSETFROM:-035040
+TZOFFSETTO:-035040
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19311010T000000
+RDATE:19311010T000000
+TZNAME:PYT
+TZOFFSETFROM:-035040
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19721001T000000
+RDATE:19721001T000000
+TZNAME:PYT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19740401T000000
+RDATE:19740401T000000
+TZNAME:PYST
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19750301T000000
+RDATE:19750301T000000
+TZNAME:PYT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19751001T000000
+RRULE:FREQ=YEARLY;UNTIL=19881001T040000Z;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19760301T000000
+RRULE:FREQ=YEARLY;UNTIL=19780301T030000Z;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790401T000000
+RRULE:FREQ=YEARLY;UNTIL=19910401T030000Z;BYMONTH=4
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19891022T000000
+RDATE:19891022T000000
+RDATE:19901001T000000
+RDATE:19911006T000000
+RDATE:19921005T000000
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920301T000000
+RDATE:19920301T000000
+RDATE:19930331T000000
+RDATE:19960301T000000
+RDATE:19970223T000000
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19931001T000000
+RRULE:FREQ=YEARLY;UNTIL=19951001T040000Z;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19940227T000000
+RRULE:FREQ=YEARLY;UNTIL=19950226T030000Z;BYDAY=-1SU;BYMONTH=2
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19961006T000000
+RRULE:FREQ=YEARLY;UNTIL=20011007T040000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19980301T000000
+RRULE:FREQ=YEARLY;UNTIL=20010304T030000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20020407T000000
+RRULE:FREQ=YEARLY;UNTIL=20040404T030000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020901T000000
+RRULE:FREQ=YEARLY;UNTIL=20030907T040000Z;BYDAY=1SU;BYMONTH=9
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20041017T000000
+RRULE:FREQ=YEARLY;UNTIL=20091018T040000Z;BYDAY=3SU;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20050313T000000
+RRULE:FREQ=YEARLY;UNTIL=20090308T030000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100411T000000
+RRULE:FREQ=YEARLY;UNTIL=20120408T030000Z;BYDAY=2SU;BYMONTH=4
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20101003T000000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:PYST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20130324T000000
+RRULE:FREQ=YEARLY;BYDAY=4SU;BYMONTH=3
+TZNAME:PYT
+TZOFFSETFROM:-0300
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRomanceStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoRomanceStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Romance Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Romance Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,169 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Romance Standard Time
+X-LIC-LOCATION:Romance Standard Time
+BEGIN:STANDARD
+DTSTART:18910315T000100
+RDATE:18910315T000100
+TZNAME:PMT
+TZOFFSETFROM:+000921
+TZOFFSETTO:+000921
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19110311T000100
+RDATE:19110311T000100
+TZNAME:WEST
+TZOFFSETFROM:+000921
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:DAYLIGHT
+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
+TZNAME:WEST
+TZOFFSETFROM:+0000
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161002T000000
+RRULE:FREQ=YEARLY;UNTIL=19191005T230000Z;BYDAY=MO;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19201024T000000
+RDATE:19201024T000000
+RDATE:19211026T000000
+RDATE:19391119T000000
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19221008T000000
+RRULE:FREQ=YEARLY;UNTIL=19381001T230000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:WET
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19400614T230000
+RDATE:19400614T230000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19421102T030000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19760926T010000
+RDATE:19770925T030000
+RDATE:19781001T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19430329T020000
+RDATE:19430329T020000
+RDATE:19440403T020000
+RDATE:19760328T010000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19440825T000000
+RDATE:19440825T000000
+TZNAME:WEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19441008T010000
+RDATE:19441008T010000
+TZNAME:WEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450402T020000
+RDATE:19450402T020000
+TZNAME:WEMT
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19450916T030000
+RDATE:19450916T030000
+TZNAME:CEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19770101T000000
+RDATE:19770101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T020000
+RRULE:FREQ=YEARLY;UNTIL=19800406T010000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19790930T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoRussianStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoRussianStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Russian Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Russian Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,175 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Russian Standard Time
+X-LIC-LOCATION:Russian Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
+TZOFFSETFROM:+023020
+TZOFFSETTO:+0230
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19160703T000000
+RDATE:19160703T000000
+TZNAME:S
+TZOFFSETFROM:+0230
+TZOFFSETTO:+023048
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170701T230000
+RDATE:19170701T230000
+TZNAME:MST
+TZOFFSETFROM:+023048
+TZOFFSETTO:+033048
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19171228T000000
+RDATE:19171228T000000
+TZNAME:MMT
+TZOFFSETFROM:+033048
+TZOFFSETTO:+023048
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180531T220000
+RDATE:19180531T220000
+TZNAME:MDST
+TZOFFSETFROM:+023048
+TZOFFSETTO:+043048
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19180916T010000
+RDATE:19180916T010000
+TZNAME:MST
+TZOFFSETFROM:+043048
+TZOFFSETTO:+033048
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19190531T230000
+RDATE:19190531T230000
+TZNAME:MDST
+TZOFFSETFROM:+033048
+TZOFFSETTO:+043048
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19190701T020000
+RDATE:19190701T020000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+043048
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19190816T000000
+RDATE:19190816T000000
+RDATE:19211001T000000
+RDATE:19920926T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19210214T230000
+RDATE:19210214T230000
+RDATE:19920328T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19210320T230000
+RDATE:19210320T230000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19210901T000000
+RDATE:19210901T000000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19221001T000000
+RDATE:19221001T000000
+RDATE:19910929T030000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T210000Z;BYMONTH=4
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T200000Z;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T230000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MSK/MSD
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:MSK
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSAEasternStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Eastern Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SA Eastern Standard Time
+X-LIC-LOCATION:SA Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:19110701T000000
+RDATE:19110701T000000
+TZNAME:GFT
+TZOFFSETFROM:-032920
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19671001T000000
+RDATE:19671001T000000
+TZNAME:GFT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSAPacificStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Pacific Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SA Pacific Standard Time
+X-LIC-LOCATION:SA Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:18840313T000000
+RDATE:18840313T000000
+TZNAME:BMT
+TZOFFSETFROM:-045616
+TZOFFSETTO:-045616
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19141123T000000
+RDATE:19141123T000000
+TZNAME:COST
+TZOFFSETFROM:-045616
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920503T000000
+RDATE:19920503T000000
+TZNAME:COST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930404T000000
+RDATE:19930404T000000
+TZNAME:COT
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSAWesternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSAWesternStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SA Western Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SA Western Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SA Western Standard Time
+X-LIC-LOCATION:SA Western Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
+TZOFFSETFROM:-043236
+TZOFFSETTO:-043236
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19311015T000000
+RDATE:19311015T000000
+TZNAME:BOST
+TZOFFSETFROM:-043236
+TZOFFSETTO:-033236
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19320321T000000
+RDATE:19320321T000000
+TZNAME:BOT
+TZOFFSETFROM:-033236
+TZOFFSETTO:-0400
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSEAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSEAsiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/SE Asia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/SE Asia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:SE Asia Standard Time
+X-LIC-LOCATION:SE Asia Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:BMT
+TZOFFSETFROM:+064204
+TZOFFSETTO:+064204
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200401T000000
+RDATE:19200401T000000
+TZNAME:ICT
+TZOFFSETFROM:+064204
+TZOFFSETTO:+0700
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSamoaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSamoaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Samoa Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Samoa Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Samoa Standard Time
+X-LIC-LOCATION:Samoa Standard Time
+BEGIN:STANDARD
+DTSTART:19110101T000000
+RDATE:19110101T000000
+TZNAME:SAMT
+TZOFFSETFROM:-112656
+TZOFFSETTO:-1130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19500101T000000
+RDATE:19500101T000000
+TZNAME:WST
+TZOFFSETFROM:-1130
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20100926T000000
+RDATE:20100926T000000
+RDATE:20110924T030000
+TZNAME:WSDT
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110402T040000
+RDATE:20110402T040000
+TZNAME:WST
+TZOFFSETFROM:-1000
+TZOFFSETTO:-1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111230T000000
+RDATE:20111230T000000
+TZNAME:WSDT
+TZOFFSETFROM:-1000
+TZOFFSETTO:+1400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20120401T040000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:WST
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120930T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=9
+TZNAME:WSDT
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSingaporeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSingaporeStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Singapore Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Singapore Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Singapore Standard Time
+X-LIC-LOCATION:Singapore Standard Time
+BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:SMT
+TZOFFSETFROM:+065525
+TZOFFSETTO:+065525
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19050601T000000
+RDATE:19050601T000000
+TZNAME:MALT
+TZOFFSETFROM:+065525
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19330101T000000
+RDATE:19330101T000000
+TZNAME:MALST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0720
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19360101T000000
+RDATE:19360101T000000
+TZNAME:MALT
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0720
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410901T000000
+RDATE:19410901T000000
+TZNAME:MALT
+TZOFFSETFROM:+0720
+TZOFFSETTO:+0730
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420216T000000
+RDATE:19420216T000000
+TZNAME:JST
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19450912T000000
+RDATE:19450912T000000
+TZNAME:MALT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0730
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19650809T000000
+RDATE:19650809T000000
+TZNAME:SGT
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0730
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820101T000000
+RDATE:19820101T000000
+TZNAME:SGT
+TZOFFSETFROM:+0730
+TZOFFSETTO:+0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSouthAfricaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSouthAfricaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/South Africa Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/South Africa Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:South Africa Standard Time
+X-LIC-LOCATION:South Africa Standard Time
+BEGIN:STANDARD
+DTSTART:18920208T000000
+RDATE:18920208T000000
+TZNAME:SAST
+TZOFFSETFROM:+0152
+TZOFFSETTO:+0130
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19030301T000000
+RDATE:19030301T000000
+TZNAME:SAST
+TZOFFSETFROM:+0130
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420920T020000
+RRULE:FREQ=YEARLY;UNTIL=19430919T000000Z;BYDAY=3SU;BYMONTH=9
+TZNAME:SAST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19430321T020000
+RRULE:FREQ=YEARLY;UNTIL=19440318T230000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:SAST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSriLankaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSriLankaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Sri Lanka Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Sri Lanka Standard Time
+X-LIC-LOCATION:Sri Lanka Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:MMT
+TZOFFSETFROM:+051924
+TZOFFSETTO:+051932
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19060101T000000
+RDATE:19060101T000000
+TZNAME:IST
+TZOFFSETFROM:+051932
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420105T000000
+RDATE:19420105T000000
+TZNAME:IHST
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19420901T000000
+RDATE:19420901T000000
+TZNAME:IST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19451016T020000
+RDATE:19451016T020000
+TZNAME:IST
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0530
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19960525T000000
+RDATE:19960525T000000
+TZNAME:LKT
+TZOFFSETFROM:+0530
+TZOFFSETTO:+0630
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961026T003000
+RDATE:19961026T003000
+TZNAME:LKT
+TZOFFSETFROM:+0630
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20060415T003000
+RDATE:20060415T003000
+TZNAME:IST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0530
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoSyriaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoSyriaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Syria Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Syria Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,171 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Syria Standard Time
+X-LIC-LOCATION:Syria Standard Time
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+TZNAME:EEST
+TZOFFSETFROM:+022512
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19200418T020000
+RRULE:FREQ=YEARLY;UNTIL=19230415T000000Z;BYDAY=3SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19201003T020000
+RRULE:FREQ=YEARLY;UNTIL=19231006T230000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19620429T020000
+RDATE:19620429T020000
+RDATE:19660424T020000
+RDATE:19860216T020000
+RDATE:19870301T020000
+RDATE:19880315T020000
+RDATE:19890331T020000
+RDATE:19900401T020000
+RDATE:19910401T000000
+RDATE:19920408T000000
+RDATE:19930326T000000
+RDATE:20070330T000000
+RDATE:20080404T000000
+RDATE:20090327T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19621001T020000
+RDATE:19621001T020000
+RDATE:19630930T020000
+RDATE:19641001T020000
+RDATE:19650930T020000
+RDATE:19861009T020000
+RDATE:19891001T020000
+RDATE:19900930T020000
+RDATE:19930925T000000
+RDATE:20060922T000000
+RDATE:20071102T000000
+RDATE:20081101T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19630501T020000
+RRULE:FREQ=YEARLY;UNTIL=19650501T000000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19661001T020000
+RRULE:FREQ=YEARLY;UNTIL=19760930T230000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670501T020000
+RRULE:FREQ=YEARLY;UNTIL=19780501T000000Z;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19770901T020000
+RRULE:FREQ=YEARLY;UNTIL=19780831T230000Z;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19830409T020000
+RRULE:FREQ=YEARLY;UNTIL=19840409T000000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831001T020000
+RRULE:FREQ=YEARLY;UNTIL=19840930T230000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19871031T020000
+RRULE:FREQ=YEARLY;UNTIL=19881030T230000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19911001T000000
+RRULE:FREQ=YEARLY;UNTIL=19920930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19940401T000000
+RRULE:FREQ=YEARLY;UNTIL=19960331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19941001T000000
+RRULE:FREQ=YEARLY;UNTIL=20050930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19970331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980329T220000Z;BYDAY=-1MO;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19990401T000000
+RRULE:FREQ=YEARLY;UNTIL=20060331T220000Z;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20091030T000000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20100402T000000
+RRULE:FREQ=YEARLY;UNTIL=20110331T220000Z;BYDAY=1FR;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20120330T000000
+RRULE:FREQ=YEARLY;BYDAY=-1FR;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTaipeiStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTaipeiStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Taipei Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Taipei Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Taipei Standard Time
+X-LIC-LOCATION:Taipei Standard Time
+BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CST
+TZOFFSETFROM:+0806
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19450501T000000
+RRULE:FREQ=YEARLY;UNTIL=19510430T160000Z;BYMONTH=5
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19451001T000000
+RRULE:FREQ=YEARLY;UNTIL=19510930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19520301T000000
+RDATE:19520301T000000
+RDATE:19790630T000000
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19521101T000000
+RRULE:FREQ=YEARLY;UNTIL=19541031T150000Z;BYMONTH=11
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19530401T000000
+RRULE:FREQ=YEARLY;UNTIL=19590331T160000Z;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19551001T000000
+RRULE:FREQ=YEARLY;UNTIL=19610930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19600601T000000
+RRULE:FREQ=YEARLY;UNTIL=19610531T160000Z;BYMONTH=6
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19740401T000000
+RRULE:FREQ=YEARLY;UNTIL=19750331T160000Z;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19741001T000000
+RRULE:FREQ=YEARLY;UNTIL=19750930T150000Z;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19790930T000000
+RDATE:19790930T000000
+TZNAME:CST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTasmaniaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTasmaniaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tasmania Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tasmania Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,146 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Tasmania Standard Time
+X-LIC-LOCATION:Tasmania Standard Time
+BEGIN:STANDARD
+DTSTART:18950901T000000
+RDATE:18950901T000000
+TZNAME:EST
+TZOFFSETFROM:+094916
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19161001T020000
+RDATE:19161001T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170201T000000
+RDATE:19170201T000000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19680331T030000
+RDATE:19720227T030000
+RDATE:20060402T030000
+RDATE:20070325T030000
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420101T020000
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19431003T020000
+RDATE:19671001T020000
+RDATE:19861019T020000
+RDATE:19871025T020000
+RDATE:20000827T020000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19430328T020000
+RRULE:FREQ=YEARLY;UNTIL=19440325T150000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670101T000000
+RDATE:19670101T000000
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19681027T020000
+RRULE:FREQ=YEARLY;UNTIL=19851026T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19690309T030000
+RRULE:FREQ=YEARLY;UNTIL=19710313T160000Z;BYDAY=2SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19730304T030000
+RRULE:FREQ=YEARLY;UNTIL=19810228T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19820328T030000
+RRULE:FREQ=YEARLY;UNTIL=19830326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840304T030000
+RRULE:FREQ=YEARLY;UNTIL=19860301T160000Z;BYDAY=1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19870315T030000
+RRULE:FREQ=YEARLY;UNTIL=19900317T160000Z;BYDAY=3SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19881030T020000
+RRULE:FREQ=YEARLY;UNTIL=19901027T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T030000
+RRULE:FREQ=YEARLY;UNTIL=20050326T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19911006T020000
+RRULE:FREQ=YEARLY;UNTIL=19991002T160000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20011007T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20080406T030000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZNAME:EST
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTokyoStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTokyoStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tokyo Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tokyo Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Tokyo Standard Time
+X-LIC-LOCATION:Tokyo Standard Time
+BEGIN:STANDARD
+DTSTART:18880101T001859
+RDATE:18880101T001859
+TZNAME:JST
+TZOFFSETFROM:+091859
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18960101T000000
+RDATE:18960101T000000
+TZNAME:CJT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19380101T000000
+RDATE:19380101T000000
+TZNAME:JST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19480502T020000
+RDATE:19480502T020000
+RDATE:19490403T020000
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19480911T020000
+RRULE:FREQ=YEARLY;UNTIL=19510907T160000Z;BYDAY=2SA;BYMONTH=9
+TZNAME:JST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19500507T020000
+RRULE:FREQ=YEARLY;UNTIL=19510505T170000Z;BYDAY=1SU;BYMONTH=5
+TZNAME:JDT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTongaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTongaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Tonga Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Tonga Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,58 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Tonga Standard Time
+X-LIC-LOCATION:Tonga Standard Time
+BEGIN:STANDARD
+DTSTART:19010101T000000
+RDATE:19010101T000000
+TZNAME:TOT
+TZOFFSETFROM:+121920
+TZOFFSETTO:+1220
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19410101T000000
+RDATE:19410101T000000
+TZNAME:TOT
+TZOFFSETFROM:+1220
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19990101T000000
+RDATE:19990101T000000
+TZNAME:TOST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19991007T020000
+RDATE:19991007T020000
+TZNAME:TOST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20000319T030000
+RDATE:20000319T030000
+TZNAME:TOT
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20001105T020000
+RRULE:FREQ=YEARLY;UNTIL=20011103T130000Z;BYDAY=1SU;BYMONTH=11
+TZNAME:TOST
+TZOFFSETFROM:+1300
+TZOFFSETTO:+1400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010128T020000
+RRULE:FREQ=YEARLY;UNTIL=20020126T120000Z;BYDAY=-1SU;BYMONTH=1
+TZNAME:TOT
+TZOFFSETFROM:+1400
+TZOFFSETTO:+1300
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoTurkeyStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoTurkeyStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Turkey Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Turkey Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,280 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Turkey Standard Time
+X-LIC-LOCATION:Turkey Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:IMT
+TZOFFSETFROM:+015552
+TZOFFSETTO:+015656
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19101001T000000
+RDATE:19101001T000000
+TZNAME:EEST
+TZOFFSETFROM:+015656
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+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:19490410T000000
+RDATE:19500419T000000
+RDATE:19510422T000000
+RDATE:19620715T000000
+RDATE:19640515T000000
+RDATE:19730603T010000
+RDATE:19740331T020000
+RDATE:19750330T000000
+RDATE:19760601T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T000000
+RDATE:19161001T000000
+RDATE:19201025T000000
+RDATE:19211003T000000
+RDATE:19221008T000000
+RDATE:19401005T000000
+RDATE:19410921T000000
+RDATE:19421101T000000
+RDATE:19451008T000000
+RDATE:19461001T000000
+RDATE:19511008T000000
+RDATE:19621008T000000
+RDATE:19641001T000000
+RDATE:19731104T030000
+RDATE:19741103T050000
+RDATE:19771016T000000
+RDATE:19850928T000000
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19241001T000000
+RRULE:FREQ=YEARLY;UNTIL=19250930T210000Z;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19470420T000000
+RRULE:FREQ=YEARLY;UNTIL=19480417T220000Z;BYDAY=SU;BYMONTHDAY=16,17,18,19,2
+ 0,21,22;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19471005T000000
+RRULE:FREQ=YEARLY;UNTIL=19501007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19700503T000000
+RRULE:FREQ=YEARLY;UNTIL=19720506T220000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=5
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19701004T000000
+RRULE:FREQ=YEARLY;UNTIL=19721007T210000Z;BYDAY=SU;BYMONTHDAY=2,3,4,5,6,7,8
+ ;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19751026T000000
+RRULE:FREQ=YEARLY;UNTIL=19761030T210000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19770403T000000
+RRULE:FREQ=YEARLY;UNTIL=19780401T220000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19781015T000000
+RDATE:19781015T000000
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19790401T030000
+RDATE:19790401T030000
+TZNAME:TRST
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19791015T000000
+RRULE:FREQ=YEARLY;UNTIL=19821010T200000Z;BYDAY=-3MO;BYMONTH=10
+TZNAME:TRT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19800406T030000
+RRULE:FREQ=YEARLY;UNTIL=19800406T000000Z;BYDAY=1SU;BYMONTH=4
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19810329T030000
+RRULE:FREQ=YEARLY;UNTIL=19820328T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19830731T000000
+RDATE:19830731T000000
+TZNAME:TRST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831002T000000
+RDATE:19831002T000000
+TZNAME:TRT
+TZOFFSETFROM:+0400
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19850420T000000
+RDATE:19850420T000000
+TZNAME:EEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19860330T020000
+RRULE:FREQ=YEARLY;UNTIL=19900325T000000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19860928T030000
+RRULE:FREQ=YEARLY;UNTIL=19900930T000000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19910331T010000
+RRULE:FREQ=YEARLY;UNTIL=20060325T230000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910929T020000
+RRULE:FREQ=YEARLY;UNTIL=19950923T230000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T020000
+RRULE:FREQ=YEARLY;UNTIL=20061028T230000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20070101T000000
+RDATE:20070101T000000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;UNTIL=20100328T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071028T040000
+RRULE:FREQ=YEARLY;UNTIL=20101031T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T030000
+RDATE:20110327T030000
+RDATE:20140330T030000
+TZNAME:EET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110328T030000
+RDATE:20110328T030000
+RDATE:20140331T030000
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20111030T040000
+RRULE:FREQ=YEARLY;UNTIL=20131027T010000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20120325T030000
+RRULE:FREQ=YEARLY;UNTIL=20130331T010000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20141026T040000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:EET
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20150329T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:EEST
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSEasternStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUSEasternStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/US Eastern Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Eastern Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,142 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:US Eastern Standard Time
+X-LIC-LOCATION:US Eastern Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T121522
+RDATE:18831118T121522
+TZNAME:CST
+TZOFFSETFROM:-054438
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T080000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T070000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19200101T000000
+RDATE:19200101T000000
+RDATE:19420101T000000
+RDATE:19460101T000000
+TZNAME:CST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19410622T020000
+RDATE:19410622T020000
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19410928T020000
+RDATE:19410928T020000
+RDATE:19450930T020000
+RDATE:19570929T020000
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:CWT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450814T180000
+RDATE:19450814T180000
+TZNAME:CPT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19460428T020000
+RRULE:FREQ=YEARLY;UNTIL=19540425T080000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:CDT
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460929T020000
+RRULE:FREQ=YEARLY;UNTIL=19540926T070000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19550424T020000
+RDATE:19550424T020000
+RDATE:19580427T020000
+TZNAME:EST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19690101T000000
+RDATE:19690101T000000
+RDATE:19710101T000000
+RDATE:20060101T000000
+TZNAME:EST
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19690427T020000
+RRULE:FREQ=YEARLY;UNTIL=19700426T070000Z;BYDAY=-1SU;BYMONTH=4
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19691026T020000
+RRULE:FREQ=YEARLY;UNTIL=19701025T060000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20060402T020000
+RDATE:20060402T020000
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20061029T020000
+RDATE:20061029T020000
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20070311T020000
+RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
+TZNAME:EDT
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20071104T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
+TZNAME:EST
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUSMountainStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUSMountainStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/US Mountain Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/US Mountain Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:US Mountain Standard Time
+X-LIC-LOCATION:US Mountain Standard Time
+BEGIN:STANDARD
+DTSTART:18831118T113142
+RDATE:18831118T113142
+TZNAME:MST
+TZOFFSETFROM:-072818
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19180331T020000
+RRULE:FREQ=YEARLY;UNTIL=19190330T090000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19181027T020000
+RRULE:FREQ=YEARLY;UNTIL=19191026T080000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19420209T020000
+RDATE:19420209T020000
+TZNAME:MWT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19440101T000100
+RDATE:19440101T000100
+RDATE:19441001T000100
+RDATE:19671029T020000
+TZNAME:MST
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19440401T000100
+RDATE:19440401T000100
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19670101T000000
+RDATE:19670101T000000
+RDATE:19680321T000000
+TZNAME:MST
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0700
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19670430T020000
+RDATE:19670430T020000
+TZNAME:MDT
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0600
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC12icsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUTC12ics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC+12.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC+12.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:UTC+12
+X-LIC-LOCATION:UTC+12
+BEGIN:STANDARD
+DTSTART:18000101T120000
+RDATE:18000101T120000
+TZNAME:GMT-12
+TZOFFSETFROM:+1200
+TZOFFSETTO:+1200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC02icsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUTC02ics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC-02.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-02.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:UTC-02
+X-LIC-LOCATION:UTC-02
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+2
+TZOFFSETFROM:-0200
+TZOFFSETTO:-0200
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUTC11icsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUTC11ics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/UTC-11.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/UTC-11.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:UTC-11
+X-LIC-LOCATION:UTC-11
+BEGIN:STANDARD
+DTSTART:18000101T000000
+RDATE:18000101T000000
+TZNAME:GMT+11
+TZOFFSETFROM:-1100
+TZOFFSETTO:-1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoUlaanbaatarStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoUlaanbaatarStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Ulaanbaatar Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Ulaanbaatar Standard Time
+X-LIC-LOCATION:Ulaanbaatar Standard Time
+BEGIN:STANDARD
+DTSTART:19050801T000000
+RDATE:19050801T000000
+TZNAME:ULAT
+TZOFFSETFROM:+070732
+TZOFFSETTO:+0700
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19780101T000000
+RDATE:19780101T000000
+TZNAME:ULAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19830401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T160000Z;BYMONTH=4
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19831001T000000
+RDATE:19831001T000000
+TZNAME:ULAT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T000000
+RRULE:FREQ=YEARLY;UNTIL=19980926T150000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:ULAT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T000000
+RRULE:FREQ=YEARLY;UNTIL=19980328T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:20010428T020000
+RDATE:20010428T020000
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:20010929T020000
+RRULE:FREQ=YEARLY;UNTIL=20060929T170000Z;BYDAY=-1SA;BYMONTH=9
+TZNAME:ULAT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20020330T020000
+RRULE:FREQ=YEARLY;UNTIL=20060324T180000Z;BYDAY=-1SA;BYMONTH=3
+TZNAME:ULAST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVenezuelaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoVenezuelaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Venezuela Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Venezuela Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Venezuela Standard Time
+X-LIC-LOCATION:Venezuela Standard Time
+BEGIN:STANDARD
+DTSTART:18900101T000000
+RDATE:18900101T000000
+TZNAME:CMT
+TZOFFSETFROM:-042744
+TZOFFSETTO:-042740
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19120212T000000
+RDATE:19120212T000000
+TZNAME:VET
+TZOFFSETFROM:-042740
+TZOFFSETTO:-0430
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19650101T000000
+RDATE:19650101T000000
+TZNAME:VET
+TZOFFSETFROM:-0430
+TZOFFSETTO:-0400
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20071209T030000
+RDATE:20071209T030000
+TZNAME:VET
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0430
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoVladivostokStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoVladivostokStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Vladivostok Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Vladivostok Standard Time
+X-LIC-LOCATION:Vladivostok Standard Time
+BEGIN:STANDARD
+DTSTART:19221115T000000
+RDATE:19221115T000000
+TZNAME:VLAT
+TZOFFSETFROM:+084744
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:VLAST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T140000Z;BYMONTH=4
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T130000Z;BYMONTH=10
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T160000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:VLASST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T160000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:VLAST
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T160000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T160000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:VLAT
+TZOFFSETFROM:+1100
+TZOFFSETTO:+1000
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:VLAT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+1100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWAustraliaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWAustraliaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/W. Australia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Australia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:W. Australia Standard Time
+X-LIC-LOCATION:W. Australia Standard Time
+BEGIN:STANDARD
+DTSTART:18951201T000000
+RDATE:18951201T000000
+TZNAME:WST
+TZOFFSETFROM:+074324
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170101T000100
+RDATE:19170101T000100
+RDATE:19420101T020000
+RDATE:19420927T020000
+RDATE:19741027T020000
+RDATE:19831030T020000
+RDATE:19911117T020000
+RDATE:20061203T020000
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170325T020000
+RDATE:19170325T020000
+RDATE:19420329T020000
+RDATE:19430328T020000
+RDATE:19750302T030000
+RDATE:19840304T030000
+RDATE:19920301T030000
+TZNAME:WST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19430701T000000
+RDATE:19430701T000000
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20070325T030000
+RRULE:FREQ=YEARLY;UNTIL=20090328T180000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:WST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:20071028T020000
+RRULE:FREQ=YEARLY;UNTIL=20081025T180000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:WST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:DAYLIGHT
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWCentralAfricaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWCentralAfricaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Central Africa Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:W. Central Africa Standard Time
+X-LIC-LOCATION:W. Central Africa Standard Time
+BEGIN:STANDARD
+DTSTART:19190901T000000
+RDATE:19190901T000000
+TZNAME:WAT
+TZOFFSETFROM:+001336
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWEuropeStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWEuropeStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/W. Europe Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/W. Europe Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,115 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:W. Europe Standard Time
+X-LIC-LOCATION:W. Europe Standard Time
+BEGIN:STANDARD
+DTSTART:18930401T000000
+RDATE:18930401T000000
+TZNAME:CEST
+TZOFFSETFROM:+005328
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19160430T230000
+RDATE:19160430T230000
+RDATE:19400401T020000
+RDATE:19430329T020000
+RDATE:19460414T020000
+RDATE:19470406T030000
+RDATE:19480418T020000
+RDATE:19490410T020000
+RDATE:19800406T020000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19161001T010000
+RDATE:19161001T010000
+RDATE:19421102T030000
+RDATE:19431004T030000
+RDATE:19441002T030000
+RDATE:19451118T030000
+RDATE:19461007T030000
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19170416T020000
+RRULE:FREQ=YEARLY;UNTIL=19180415T010000Z;BYDAY=3MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19170917T030000
+RRULE:FREQ=YEARLY;UNTIL=19180916T010000Z;BYDAY=3MO;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19440403T020000
+RRULE:FREQ=YEARLY;UNTIL=19450402T010000Z;BYDAY=1MO;BYMONTH=4
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450524T020000
+RDATE:19450524T020000
+RDATE:19470511T030000
+TZNAME:CEMT
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0300
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19450924T030000
+RDATE:19450924T030000
+RDATE:19470629T030000
+TZNAME:CEST
+TZOFFSETFROM:+0300
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19460101T000000
+RDATE:19460101T000000
+RDATE:19800101T000000
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19471005T030000
+RRULE:FREQ=YEARLY;UNTIL=19491002T010000Z;BYDAY=1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19800928T030000
+RRULE:FREQ=YEARLY;UNTIL=19950924T010000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810329T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
+TZNAME:CEST
+TZOFFSETFROM:+0100
+TZOFFSETTO:+0200
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZNAME:CET
+TZOFFSETFROM:+0200
+TZOFFSETTO:+0100
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestAsiaStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWestAsiaStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/West Asia Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Asia Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,79 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:West Asia Standard Time
+X-LIC-LOCATION:West Asia Standard Time
+BEGIN:STANDARD
+DTSTART:19240502T000000
+RDATE:19240502T000000
+TZNAME:TAST
+TZOFFSETFROM:+043712
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+TZNAME:TASST
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T180000Z;BYMONTH=4
+TZNAME:TASST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T170000Z;BYMONTH=10
+TZNAME:TAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T200000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:TAST
+TZOFFSETFROM:+0700
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T200000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:TASST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0700
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:TASST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910901T000000
+RDATE:19910901T000000
+TZNAME:UZST
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0600
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:UZT
+TZOFFSETFROM:+0600
+TZOFFSETTO:+0500
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19920101T000000
+RDATE:19920101T000000
+TZNAME:UZT
+TZOFFSETFROM:+0500
+TZOFFSETTO:+0500
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoWestPacificStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoWestPacificStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/West Pacific Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/West Pacific Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:West Pacific Standard Time
+X-LIC-LOCATION:West Pacific Standard Time
+BEGIN:STANDARD
+DTSTART:18800101T000000
+RDATE:18800101T000000
+TZNAME:PMMT
+TZOFFSETFROM:+094840
+TZOFFSETTO:+094832
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:18950101T000000
+RDATE:18950101T000000
+TZNAME:PGT
+TZOFFSETFROM:+094832
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfoYakutskStandardTimeicsfromrev13629CalendarServertrunktwistedcaldavzoneinfoYakutskStandardTimeics"></a>
<div class="copfile"><h4>Copied: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics (from rev 13629, CalendarServer/trunk/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics) (0 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics         (rev 0)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/Yakutsk Standard Time.ics        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -0,0 +1,108 @@
</span><ins>+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+PRODID:-//calendarserver.org//Zonal//EN
+BEGIN:VTIMEZONE
+TZID:Yakutsk Standard Time
+X-LIC-LOCATION:Yakutsk Standard Time
+BEGIN:STANDARD
+DTSTART:19191215T000000
+RDATE:19191215T000000
+TZNAME:YAKT
+TZOFFSETFROM:+083840
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19300621T000000
+RDATE:19300621T000000
+RDATE:19920119T020000
+TZNAME:YAKST
+TZOFFSETFROM:+0800
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19810401T000000
+RRULE:FREQ=YEARLY;UNTIL=19840331T150000Z;BYMONTH=4
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19811001T000000
+RRULE:FREQ=YEARLY;UNTIL=19830930T140000Z;BYMONTH=10
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19840930T030000
+RRULE:FREQ=YEARLY;UNTIL=19900929T170000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19850331T020000
+RRULE:FREQ=YEARLY;UNTIL=19900324T170000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19910331T020000
+RDATE:19910331T020000
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19910929T030000
+RDATE:19910929T030000
+TZNAME:YAKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+0800
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19920328T230000
+RDATE:19920328T230000
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19920926T230000
+RDATE:19920926T230000
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19930328T020000
+RRULE:FREQ=YEARLY;UNTIL=20100327T170000Z;BYDAY=-1SU;BYMONTH=3
+TZNAME:YAKST
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:DAYLIGHT
+BEGIN:STANDARD
+DTSTART:19930926T030000
+RRULE:FREQ=YEARLY;UNTIL=19950923T170000Z;BYDAY=-1SU;BYMONTH=9
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:19961027T030000
+RRULE:FREQ=YEARLY;UNTIL=20101030T170000Z;BYDAY=-1SU;BYMONTH=10
+TZNAME:YAKT
+TZOFFSETFROM:+1000
+TZOFFSETTO:+0900
+END:STANDARD
+BEGIN:STANDARD
+DTSTART:20110327T020000
+RDATE:20110327T020000
+TZNAME:YAKT
+TZOFFSETFROM:+0900
+TZOFFSETTO:+1000
+END:STANDARD
+END:VTIMEZONE
+END:VCALENDAR
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfolinkstxt"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/links.txt        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -1,154 +1,252 @@
</span><del>-America/Virgin        America/Port_of_Spain
</del><ins>+AUS Central Standard Time        Australia/Darwin
+AUS Eastern Standard Time        Australia/Sydney
+Afghanistan Standard Time        Asia/Kabul
+Africa/Asmera        Africa/Asmara
+Africa/Juba        Africa/Khartoum
+Africa/Timbuktu        Africa/Bamako
+Alaskan Standard Time        America/Anchorage
+America/Anguilla        America/Port_of_Spain
+America/Argentina/ComodRivadavia        America/Argentina/Catamarca
+America/Aruba        America/Curacao
+America/Atka        America/Adak
</ins><span class="cx"> America/Buenos_Aires        America/Argentina/Buenos_Aires
</span><del>-Hongkong        Asia/Hong_Kong
-Etc/GMT+0        Etc/GMT
-Asia/Calcutta        Asia/Kolkata
-Australia/South        Australia/Adelaide
-America/Atka        America/Adak
</del><ins>+America/Catamarca        America/Argentina/Catamarca
</ins><span class="cx"> America/Coral_Harbour        America/Atikokan
</span><del>-America/St_Lucia        America/Port_of_Spain
-Canada/Newfoundland        America/St_Johns
-America/Montserrat        America/Port_of_Spain
-PRC        Asia/Shanghai
-US/Mountain        America/Denver
-Asia/Thimbu        Asia/Thimphu
-America/Shiprock        America/Denver
</del><ins>+America/Cordoba        America/Argentina/Cordoba
+America/Dominica        America/Port_of_Spain
+America/Ensenada        America/Tijuana
+America/Fort_Wayne        America/Indiana/Indianapolis
</ins><span class="cx"> America/Grenada        America/Port_of_Spain
</span><del>-Europe/Podgorica        Europe/Belgrade
-Africa/Juba        Africa/Khartoum
-Brazil/DeNoronha        America/Noronha
-Jamaica        America/Jamaica
-Arctic/Longyearbyen        Europe/Oslo
-Europe/Guernsey        Europe/London
-GB        Europe/London
-America/Aruba        America/Curacao
-Chile/EasterIsland        Pacific/Easter
-Etc/Universal        Etc/UTC
-Navajo        America/Denver
</del><ins>+America/Guadeloupe        America/Port_of_Spain
</ins><span class="cx"> America/Indianapolis        America/Indiana/Indianapolis
</span><del>-Pacific/Truk        Pacific/Chuuk
-Canada/Mountain        America/Edmonton
-Pacific/Yap        Pacific/Chuuk
-America/Ensenada        America/Tijuana
-Europe/Sarajevo        Europe/Belgrade
-Universal        Etc/UTC
-Turkey        Europe/Istanbul
</del><span class="cx"> America/Jujuy        America/Argentina/Jujuy
</span><del>-America/Cordoba        America/Argentina/Cordoba
-Europe/Skopje        Europe/Belgrade
</del><ins>+America/Knox_IN        America/Indiana/Knox
</ins><span class="cx"> America/Kralendijk        America/Curacao
</span><del>-Australia/Tasmania        Australia/Hobart
-Europe/Jersey        Europe/London
-Europe/Nicosia        Asia/Nicosia
-Asia/Macao        Asia/Macau
-Australia/Canberra        Australia/Sydney
-ROK        Asia/Seoul
-US/Hawaii        Pacific/Honolulu
-Asia/Ujung_Pandang        Asia/Makassar
-Cuba        America/Havana
-Asia/Saigon        Asia/Ho_Chi_Minh
-ROC        Asia/Taipei
</del><span class="cx"> America/Louisville        America/Kentucky/Louisville
</span><ins>+America/Lower_Princes        America/Curacao
+America/Marigot        America/Port_of_Spain
+America/Mendoza        America/Argentina/Mendoza
+America/Montserrat        America/Port_of_Spain
+America/Porto_Acre        America/Rio_Branco
+America/Rosario        America/Argentina/Cordoba
+America/Shiprock        America/Denver
</ins><span class="cx"> America/St_Barthelemy        America/Port_of_Spain
</span><ins>+America/St_Kitts        America/Port_of_Spain
+America/St_Lucia        America/Port_of_Spain
</ins><span class="cx"> America/St_Thomas        America/Port_of_Spain
</span><del>-America/Porto_Acre        America/Rio_Branco
-America/Rosario        America/Argentina/Cordoba
-America/Guadeloupe        America/Port_of_Spain
-Australia/West        Australia/Perth
-US/Eastern        America/New_York
-Libya        Africa/Tripoli
-America/Fort_Wayne        America/Indiana/Indianapolis
</del><ins>+America/St_Vincent        America/Port_of_Spain
+America/Tortola        America/Port_of_Spain
+America/Virgin        America/Port_of_Spain
</ins><span class="cx"> Antarctica/McMurdo        Pacific/Auckland
</span><del>-Canada/Saskatchewan        America/Regina
-Canada/Pacific        America/Vancouver
-Canada/Eastern        America/Toronto
-Iran        Asia/Tehran
-GB-Eire        Europe/London
-Etc/Greenwich        Etc/GMT
-Atlantic/Jan_Mayen        Europe/Oslo
-US/Central        America/Chicago
-America/St_Vincent        America/Port_of_Spain
-US/Pacific        America/Los_Angeles
-Portugal        Europe/Lisbon
-Europe/Tiraspol        Europe/Chisinau
-Europe/Busingen        Europe/Zurich
</del><ins>+Antarctica/South_Pole        Pacific/Auckland
+Arab Standard Time        Asia/Riyadh
+Arabian Standard Time        Asia/Dubai
+Arabic Standard Time        Asia/Baghdad
+Arctic/Longyearbyen        Europe/Oslo
+Argentina Standard Time        America/Buenos_Aires
+Asia/Ashkhabad        Asia/Ashgabat
+Asia/Calcutta        Asia/Kolkata
+Asia/Chungking        Asia/Chongqing
+Asia/Dacca        Asia/Dhaka
+Asia/Istanbul        Europe/Istanbul
</ins><span class="cx"> Asia/Katmandu        Asia/Kathmandu
</span><del>-Etc/GMT0        Etc/GMT
-Pacific/Ponape        Pacific/Pohnpei
-Japan        Asia/Tokyo
</del><ins>+Asia/Macao        Asia/Macau
+Asia/Saigon        Asia/Ho_Chi_Minh
+Asia/Tel_Aviv        Asia/Jerusalem
+Asia/Thimbu        Asia/Thimphu
+Asia/Ujung_Pandang        Asia/Makassar
</ins><span class="cx"> Asia/Ulan_Bator        Asia/Ulaanbaatar
</span><del>-Kwajalein        Pacific/Kwajalein
</del><ins>+Atlantic Standard Time        America/Halifax
+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
</ins><span class="cx"> Australia/Yancowinna        Australia/Broken_Hill
</span><del>-America/Marigot        America/Port_of_Spain
-America/Lower_Princes        America/Curacao
-Greenwich        Etc/GMT
-America/Mendoza        America/Argentina/Mendoza
-Asia/Dacca        Asia/Dhaka
-US/East-Indiana        America/Indiana/Indianapolis
-America/Argentina/ComodRivadavia        America/Argentina/Catamarca
</del><ins>+Azerbaijan Standard Time        Asia/Baku
+Azores Standard Time        Atlantic/Azores
+Bahia Standard Time        America/Bahia
+Bangladesh Standard Time        Asia/Dhaka
+Brazil/Acre        America/Rio_Branco
+Brazil/DeNoronha        America/Noronha
+Brazil/East        America/Sao_Paulo
+Brazil/West        America/Manaus
+Canada Central Standard Time        America/Regina
+Canada/Atlantic        America/Halifax
+Canada/Central        America/Winnipeg
</ins><span class="cx"> Canada/East-Saskatchewan        America/Regina
</span><ins>+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
+Cape Verde Standard Time        Atlantic/Cape_Verde
+Caucasus Standard Time        Asia/Yerevan
+Cen. Australia Standard Time        Australia/Adelaide
+Central America Standard Time        America/Guatemala
+Central Asia Standard Time        Asia/Almaty
+Central Brazilian Standard Time        America/Cuiaba
+Central Europe Standard Time        Europe/Budapest
+Central European Standard Time        Europe/Warsaw
+Central Pacific Standard Time        Pacific/Guadalcanal
+Central Standard Time        America/Chicago
+Central Standard Time (Mexico)        America/Mexico_City
</ins><span class="cx"> Chile/Continental        America/Santiago
</span><del>-Asia/Tel_Aviv        Asia/Jerusalem
-Mexico/General        America/Mexico_City
-Asia/Istanbul        Europe/Istanbul
</del><ins>+Chile/EasterIsland        Pacific/Easter
+China Standard Time        Asia/Shanghai
+Cuba        America/Havana
+Dateline Standard Time        Etc/GMT+12
+E. Africa Standard Time        Africa/Nairobi
+E. Australia Standard Time        Australia/Brisbane
+E. South America Standard Time        America/Sao_Paulo
+Eastern Standard Time        America/New_York
+Egypt        Africa/Cairo
+Egypt Standard Time        Africa/Cairo
+Eire        Europe/Dublin
+Ekaterinburg Standard Time        Asia/Yekaterinburg
+Etc/GMT+0        Etc/GMT
+Etc/GMT-0        Etc/GMT
+Etc/GMT0        Etc/GMT
+Etc/Greenwich        Etc/GMT
+Etc/Universal        Etc/UTC
+Etc/Zulu        Etc/UTC
+Europe/Belfast        Europe/London
+Europe/Bratislava        Europe/Prague
+Europe/Busingen        Europe/Zurich
+Europe/Guernsey        Europe/London
</ins><span class="cx"> Europe/Isle_of_Man        Europe/London
</span><ins>+Europe/Jersey        Europe/London
+Europe/Ljubljana        Europe/Belgrade
+Europe/Mariehamn        Europe/Helsinki
+Europe/Nicosia        Asia/Nicosia
+Europe/Podgorica        Europe/Belgrade
+Europe/San_Marino        Europe/Rome
+Europe/Sarajevo        Europe/Belgrade
+Europe/Skopje        Europe/Belgrade
+Europe/Tiraspol        Europe/Chisinau
+Europe/Vaduz        Europe/Zurich
+Europe/Vatican        Europe/Rome
+Europe/Zagreb        Europe/Belgrade
+FLE Standard Time        Europe/Kiev
+Fiji Standard Time        Pacific/Fiji
+GB        Europe/London
+GB-Eire        Europe/London
+GMT        Etc/GMT
+GMT Standard Time        Europe/London
+GMT+0        Etc/GMT
+GMT-0        Etc/GMT
</ins><span class="cx"> GMT0        Etc/GMT
</span><del>-Europe/Mariehamn        Europe/Helsinki
-Australia/Victoria        Australia/Melbourne
-US/Aleutian        America/Adak
-Australia/ACT        Australia/Sydney
-Australia/North        Australia/Darwin
-US/Samoa        Pacific/Pago_Pago
-US/Michigan        America/Detroit
-Asia/Chungking        Asia/Chongqing
</del><ins>+GTB Standard Time        Europe/Bucharest
+Georgian Standard Time        Asia/Tbilisi
+Greenland Standard Time        America/Godthab
+Greenwich        Etc/GMT
+Greenwich Standard Time        Atlantic/Reykjavik
+Hawaiian Standard Time        Pacific/Honolulu
+Hongkong        Asia/Hong_Kong
+Iceland        Atlantic/Reykjavik
+India Standard Time        Asia/Calcutta
+Iran        Asia/Tehran
+Iran Standard Time        Asia/Tehran
+Israel        Asia/Jerusalem
+Israel Standard Time        Asia/Jerusalem
+Jamaica        America/Jamaica
+Japan        Asia/Tokyo
+Jordan Standard Time        Asia/Amman
+Kaliningrad Standard Time        Europe/Kaliningrad
+Korea Standard Time        Asia/Seoul
+Kwajalein        Pacific/Kwajalein
+Libya        Africa/Tripoli
+Libya Standard Time        Africa/Tripoli
+Magadan Standard Time        Asia/Magadan
+Mauritius Standard Time        Indian/Mauritius
+Mexico/BajaNorte        America/Tijuana
+Mexico/BajaSur        America/Mazatlan
+Mexico/General        America/Mexico_City
+Middle East Standard Time        Asia/Beirut
+Montevideo Standard Time        America/Montevideo
+Morocco Standard Time        Africa/Casablanca
+Mountain Standard Time        America/Denver
+Mountain Standard Time (Mexico)        America/Chihuahua
+Myanmar Standard Time        Asia/Rangoon
+N. Central Asia Standard Time        Asia/Novosibirsk
</ins><span class="cx"> NZ        Pacific/Auckland
</span><del>-Asia/Ashkhabad        Asia/Ashgabat
-America/Knox_IN        America/Indiana/Knox
-America/Catamarca        America/Argentina/Catamarca
-Zulu        Etc/UTC
-GMT+0        Etc/GMT
</del><ins>+NZ-CHAT        Pacific/Chatham
+Namibia Standard Time        Africa/Windhoek
+Navajo        America/Denver
+Nepal Standard Time        Asia/Katmandu
+New Zealand Standard Time        Pacific/Auckland
+Newfoundland Standard Time        America/St_Johns
+North Asia East Standard Time        Asia/Irkutsk
+North Asia Standard Time        Asia/Krasnoyarsk
+PRC        Asia/Shanghai
+Pacific SA Standard Time        America/Santiago
+Pacific Standard Time        America/Los_Angeles
+Pacific Standard Time (Mexico)        America/Santa_Isabel
+Pacific/Johnston        Pacific/Honolulu
+Pacific/Ponape        Pacific/Pohnpei
+Pacific/Samoa        Pacific/Pago_Pago
+Pacific/Truk        Pacific/Chuuk
+Pacific/Yap        Pacific/Chuuk
+Pakistan Standard Time        Asia/Karachi
+Paraguay Standard Time        America/Asuncion
</ins><span class="cx"> Poland        Europe/Warsaw
</span><del>-Pacific/Samoa        Pacific/Pago_Pago
-US/Indiana-Starke        America/Indiana/Knox
-Australia/LHI        Australia/Lord_Howe
-Pacific/Johnston        Pacific/Honolulu
-GMT        Etc/GMT
-Canada/Yukon        America/Whitehorse
-Canada/Atlantic        America/Halifax
-US/Arizona        America/Phoenix
-Europe/San_Marino        Europe/Rome
-Australia/NSW        Australia/Sydney
-America/St_Kitts        America/Port_of_Spain
-Brazil/East        America/Sao_Paulo
-Etc/Zulu        Etc/UTC
</del><ins>+Portugal        Europe/Lisbon
+ROC        Asia/Taipei
+ROK        Asia/Seoul
+Romance Standard Time        Europe/Paris
+Russian Standard Time        Europe/Moscow
+SA Eastern Standard Time        America/Cayenne
+SA Pacific Standard Time        America/Bogota
+SA Western Standard Time        America/La_Paz
+SE Asia Standard Time        Asia/Bangkok
+Samoa Standard Time        Pacific/Apia
</ins><span class="cx"> Singapore        Asia/Singapore
</span><del>-Europe/Ljubljana        Europe/Belgrade
</del><ins>+Singapore Standard Time        Asia/Singapore
+South Africa Standard Time        Africa/Johannesburg
+Sri Lanka Standard Time        Asia/Colombo
+Syria Standard Time        Asia/Damascus
+Taipei Standard Time        Asia/Taipei
+Tasmania Standard Time        Australia/Hobart
+Tokyo Standard Time        Asia/Tokyo
+Tonga Standard Time        Pacific/Tongatapu
+Turkey        Europe/Istanbul
+Turkey Standard Time        Europe/Istanbul
+UCT        Etc/UCT
+US Eastern Standard Time        America/Indianapolis
+US Mountain Standard Time        America/Phoenix
</ins><span class="cx"> US/Alaska        America/Anchorage
</span><del>-Atlantic/Faeroe        Atlantic/Faroe
-Etc/GMT-0        Etc/GMT
-America/Anguilla        America/Port_of_Spain
-Israel        Asia/Jerusalem
-UCT        Etc/UCT
-NZ-CHAT        Pacific/Chatham
-Iceland        Atlantic/Reykjavik
-Brazil/Acre        America/Rio_Branco
-Europe/Vatican        Europe/Rome
-Australia/Queensland        Australia/Brisbane
-Africa/Timbuktu        Africa/Bamako
</del><ins>+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
</ins><span class="cx"> UTC        Etc/UTC
</span><del>-Mexico/BajaNorte        America/Tijuana
-Eire        Europe/Dublin
-Europe/Zagreb        Europe/Belgrade
-Europe/Belfast        Europe/London
-Brazil/West        America/Manaus
-Mexico/BajaSur        America/Mazatlan
-Europe/Bratislava        Europe/Prague
-Canada/Central        America/Winnipeg
-GMT-0        Etc/GMT
</del><ins>+UTC+12        Etc/GMT-12
+UTC-02        Etc/GMT+2
+UTC-11        Etc/GMT+11
+Ulaanbaatar Standard Time        Asia/Ulaanbaatar
+Universal        Etc/UTC
+Venezuela Standard Time        America/Caracas
+Vladivostok Standard Time        Asia/Vladivostok
</ins><span class="cx"> W-SU        Europe/Moscow
</span><del>-America/Dominica        America/Port_of_Spain
-Egypt        Africa/Cairo
-America/Tortola        America/Port_of_Spain
-Europe/Vaduz        Europe/Zurich
-Africa/Asmera        Africa/Asmara
-Antarctica/South_Pole        Pacific/Auckland
</del><span class="cx">\ No newline at end of file
</span><ins>+W. Australia Standard Time        Australia/Perth
+W. Central Africa Standard Time        Africa/Lagos
+W. Europe Standard Time        Europe/Berlin
+West Asia Standard Time        Asia/Tashkent
+West Pacific Standard Time        Pacific/Port_Moresby
+Yakutsk Standard Time        Asia/Yakutsk
+Zulu        Etc/UTC
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetwistedcaldavzoneinfotimezonesxml"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/twistedcaldav/zoneinfo/timezones.xml        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -2,8 +2,23 @@
</span><span class="cx"> <!DOCTYPE timezones SYSTEM "timezones.dtd">
</span><span class="cx">
</span><span class="cx"> <timezones>
</span><del>- <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</del><ins>+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
</ins><span class="cx"> <timezone>
</span><ins>+ <tzid>AUS Central Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>942e93fd3bdd2d06bf96febe3bca4c11</md5>
+ </timezone>
+ <timezone>
+ <tzid>AUS Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>72b814a9cd04f2198b25d71f6099d0a1</md5>
+ </timezone>
+ <timezone>
+ <tzid>Afghanistan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>411ffffe0c178625aa3f7f53c40f1319</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Africa/Abidjan</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>dc9468decb9742f08bafcd6d65a50f32</md5>
</span><span class="lines">@@ -74,11 +89,13 @@
</span><span class="cx"> <tzid>Africa/Cairo</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <alias>Egypt</alias>
</span><ins>+ <alias>Egypt Standard Time</alias>
</ins><span class="cx"> <md5>42e3629db1f2e76ad81f9e078823ac99</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Africa/Casablanca</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><ins>+ <alias>Morocco Standard Time</alias>
</ins><span class="cx"> <md5>751312234a74ed078fc6ec8611615b11</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -134,6 +151,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Africa/Johannesburg</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>South Africa Standard Time</alias>
</ins><span class="cx"> <md5>a39046b0f33a7af0af58c951b8766453</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -165,6 +183,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Africa/Lagos</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>W. Central Africa Standard Time</alias>
</ins><span class="cx"> <md5>c22edde6ebc4dc407706841c17665286</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -225,6 +244,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Africa/Nairobi</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>E. Africa Standard Time</alias>
</ins><span class="cx"> <md5>0f834f9942a32756fcf3ecb8bcfd6459</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -266,6 +286,7 @@
</span><span class="cx"> <tzid>Africa/Tripoli</tzid>
</span><span class="cx"> <dtstamp>2013-11-15T16:10:31Z</dtstamp>
</span><span class="cx"> <alias>Libya</alias>
</span><ins>+ <alias>Libya Standard Time</alias>
</ins><span class="cx"> <md5>6e8040bfd898654905bfd0a49c64e365</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -276,9 +297,15 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Africa/Windhoek</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Namibia Standard Time</alias>
</ins><span class="cx"> <md5>f289f3354d98138b5946f174a4f6048c</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Alaskan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>14f9eaaf054aa32faa7b75c0e08c067b</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>America/Adak</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>America/Atka</alias>
</span><span class="lines">@@ -289,6 +316,7 @@
</span><span class="cx"> <tzid>America/Anchorage</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>US/Alaska</alias>
</span><ins>+ <alias>Alaskan Standard Time</alias>
</ins><span class="cx"> <md5>de9f2f0cfb6cf0265a48f3edf1dbfc8d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -386,6 +414,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Asuncion</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><ins>+ <alias>Paraguay Standard Time</alias>
</ins><span class="cx"> <md5>b6d9cc532c073706f4b628e9558ff341</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -402,6 +431,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Bahia</tzid>
</span><span class="cx"> <dtstamp>2013-01-14T15:32:16Z</dtstamp>
</span><ins>+ <alias>Bahia Standard Time</alias>
</ins><span class="cx"> <md5>2d34d74119af2d61ac357e112a064897</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -437,6 +467,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Bogota</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><ins>+ <alias>SA Pacific Standard Time</alias>
</ins><span class="cx"> <md5>cca1c4cc5d1c3bf8c4253a8cd5456c09</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -447,6 +478,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Buenos_Aires</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Argentina Standard Time</alias>
</ins><span class="cx"> <md5>8814f42968145e742683596ed2951683</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -467,6 +499,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Caracas</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Venezuela Standard Time</alias>
</ins><span class="cx"> <md5>6a4df646dbe97d59022ea0aad3da0e48</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -477,6 +510,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Cayenne</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>SA Eastern Standard Time</alias>
</ins><span class="cx"> <md5>298d74a0126387086229e0e55f0d4ef3</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -488,11 +522,13 @@
</span><span class="cx"> <tzid>America/Chicago</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>US/Central</alias>
</span><ins>+ <alias>Central Standard Time</alias>
</ins><span class="cx"> <md5>afaa6e4df36635addbf6aafbf639a99d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Chihuahua</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Mountain Standard Time (Mexico)</alias>
</ins><span class="cx"> <md5>43622e982e100ca20b06991c4f938b50</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -518,6 +554,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Cuiaba</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><ins>+ <alias>Central Brazilian Standard Time</alias>
</ins><span class="cx"> <md5>239010d1e747a2638bdd58b161aaba7b</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -549,6 +586,7 @@
</span><span class="cx"> <alias>US/Mountain</alias>
</span><span class="cx"> <alias>America/Shiprock</alias>
</span><span class="cx"> <alias>Navajo</alias>
</span><ins>+ <alias>Mountain Standard Time</alias>
</ins><span class="cx"> <md5>436e14808b14901d516be96a6cb63709</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -601,6 +639,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Godthab</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Greenland Standard Time</alias>
</ins><span class="cx"> <md5>b164983aee94fca41a9c8cc6c84425ee</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -626,6 +665,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Guatemala</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Central America Standard Time</alias>
</ins><span class="cx"> <md5>3f5dcae7aa6bebf3c51fad853b57f91e</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -642,6 +682,7 @@
</span><span class="cx"> <tzid>America/Halifax</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T14:15:25Z</dtstamp>
</span><span class="cx"> <alias>Canada/Atlantic</alias>
</span><ins>+ <alias>Atlantic Standard Time</alias>
</ins><span class="cx"> <md5>2bb95748970884a8c3a7503062c06f79</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -703,6 +744,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Indianapolis</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>US Eastern Standard Time</alias>
</ins><span class="cx"> <md5>6e96ffc0ee1b866a61e213a74d73b92b</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -755,6 +797,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/La_Paz</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>SA Western Standard Time</alias>
</ins><span class="cx"> <md5>098e905a3dc2d7342fd4a966448557c8</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -766,6 +809,7 @@
</span><span class="cx"> <tzid>America/Los_Angeles</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>US/Pacific</alias>
</span><ins>+ <alias>Pacific Standard Time</alias>
</ins><span class="cx"> <md5>fca9e0d643cee547beae8212c0b53443</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -839,6 +883,7 @@
</span><span class="cx"> <tzid>America/Mexico_City</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Mexico/General</alias>
</span><ins>+ <alias>Central Standard Time (Mexico)</alias>
</ins><span class="cx"> <md5>2bf2d4a670f01d28901866cc57a13b62</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -859,6 +904,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Montevideo</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T16:58:42Z</dtstamp>
</span><ins>+ <alias>Montevideo Standard Time</alias>
</ins><span class="cx"> <md5>c1279037560f5ffebea4f8ae500b751f</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -880,6 +926,7 @@
</span><span class="cx"> <tzid>America/New_York</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>US/Eastern</alias>
</span><ins>+ <alias>Eastern Standard Time</alias>
</ins><span class="cx"> <md5>7f02ecc0b9c5f6a0145794886fb1e411</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -937,6 +984,7 @@
</span><span class="cx"> <tzid>America/Phoenix</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>US/Arizona</alias>
</span><ins>+ <alias>US Mountain Standard Time</alias>
</ins><span class="cx"> <md5>36f6704008b6a5150fe6b7895c131c91</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -997,6 +1045,7 @@
</span><span class="cx"> <dtstamp>2012-05-18T14:15:25Z</dtstamp>
</span><span class="cx"> <alias>Canada/Saskatchewan</alias>
</span><span class="cx"> <alias>Canada/East-Saskatchewan</alias>
</span><ins>+ <alias>Canada Central Standard Time</alias>
</ins><span class="cx"> <md5>2a81ea7d4cf13d375b6d23864f4e395e</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1019,6 +1068,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>America/Santa_Isabel</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Pacific Standard Time (Mexico)</alias>
</ins><span class="cx"> <md5>258b10f97d147ad0fb9c3815fadf9b40</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1030,6 +1080,7 @@
</span><span class="cx"> <tzid>America/Santiago</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><span class="cx"> <alias>Chile/Continental</alias>
</span><ins>+ <alias>Pacific SA Standard Time</alias>
</ins><span class="cx"> <md5>fadb4e11ac55c3afaf6a735bb521ccfd</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1041,6 +1092,7 @@
</span><span class="cx"> <tzid>America/Sao_Paulo</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <alias>Brazil/East</alias>
</span><ins>+ <alias>E. South America Standard Time</alias>
</ins><span class="cx"> <md5>b1c3e7faf0b0f6ceef559e3eb0aac261</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1067,6 +1119,7 @@
</span><span class="cx"> <tzid>America/St_Johns</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T14:15:25Z</dtstamp>
</span><span class="cx"> <alias>Canada/Newfoundland</alias>
</span><ins>+ <alias>Newfoundland Standard Time</alias>
</ins><span class="cx"> <md5>08674807ec2a8e109a5a989f222ad373</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1221,11 +1274,31 @@
</span><span class="cx"> <md5>986ca28dcc682891b0833e0b1b2352d7</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Arab Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>af8262cea313e34b65ea6e9838b24677</md5>
+ </timezone>
+ <timezone>
+ <tzid>Arabian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>813e9895a1797faa0d534b08246a440f</md5>
+ </timezone>
+ <timezone>
+ <tzid>Arabic Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>59bcbee64e678d36f5fcea326b28a24f</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Arctic/Longyearbyen</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>40145ed84de3f926275f1c2b5d68df7b</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Argentina Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0c874bfea84dbfa02afe5d6ff96e3ac6</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Asia/Aden</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><span class="cx"> <md5>0e3e302489cb9c9d747466337c84aa32</md5>
</span><span class="lines">@@ -1233,11 +1306,13 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Almaty</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Central Asia Standard Time</alias>
</ins><span class="cx"> <md5>2d28e8027a12d6bb578500fba1212a3d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Amman</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><ins>+ <alias>Jordan Standard Time</alias>
</ins><span class="cx"> <md5>ba1a51f6f6b372cfcde53600efe2834f</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1269,6 +1344,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Baghdad</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Arabic Standard Time</alias>
</ins><span class="cx"> <md5>6b989fb5fc7f59e9b039e33d632361eb</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1279,16 +1355,19 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Baku</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Azerbaijan Standard Time</alias>
</ins><span class="cx"> <md5>89b1b87654cad2c27815ac8d7d5a82bb</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Bangkok</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>SE Asia Standard Time</alias>
</ins><span class="cx"> <md5>0ee6b61e4db09003f6f98d6d285a7f5d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Beirut</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Middle East Standard Time</alias>
</ins><span class="cx"> <md5>ec07a7c21ed6e237900981ba9c627313</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1304,6 +1383,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Calcutta</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>India Standard Time</alias>
</ins><span class="cx"> <md5>43bbd7aad1dd165dc2343be99e5edffe</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1325,6 +1405,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Colombo</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Sri Lanka Standard Time</alias>
</ins><span class="cx"> <md5>db90d93971d1fcf94b3958ccab478003</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1335,12 +1416,14 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Damascus</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T14:15:25Z</dtstamp>
</span><ins>+ <alias>Syria Standard Time</alias>
</ins><span class="cx"> <md5>725cbf5cace73dba24d4b6a0a91859bd</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Dhaka</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Asia/Dacca</alias>
</span><ins>+ <alias>Bangladesh Standard Time</alias>
</ins><span class="cx"> <md5>88035bd99ca7de5590cd00d7fdf3a8c4</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1351,6 +1434,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Dubai</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Arabian Standard Time</alias>
</ins><span class="cx"> <md5>e762e58c96d3726bbaf84bb914949d8e</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1393,6 +1477,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Irkutsk</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>North Asia East Standard Time</alias>
</ins><span class="cx"> <md5>29acf8ac702a7d7841a3356c3962ff88</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1415,11 +1500,13 @@
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <alias>Asia/Tel_Aviv</alias>
</span><span class="cx"> <alias>Israel</alias>
</span><ins>+ <alias>Israel Standard Time</alias>
</ins><span class="cx"> <md5>85a1cb333e19eb4b92038d6b056b6ef3</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Kabul</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Afghanistan Standard Time</alias>
</ins><span class="cx"> <md5>aed7a26e32e4c36ee37c5c82d54a362d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1430,6 +1517,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Karachi</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Pakistan Standard Time</alias>
</ins><span class="cx"> <md5>a643fc5fed6a7cc9160a7d54da4c6e60</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1446,6 +1534,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Katmandu</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Nepal Standard Time</alias>
</ins><span class="cx"> <md5>dfcdb151e17499a38c4fa456c6d603f6</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1462,6 +1551,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Krasnoyarsk</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>North Asia Standard Time</alias>
</ins><span class="cx"> <md5>3e4dbf51d4e4d8988d4d52bc8e3932ed</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1493,6 +1583,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Magadan</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Magadan Standard Time</alias>
</ins><span class="cx"> <md5>feb4df3f54948a62c9260a8ff0d8560c</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1525,6 +1616,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Novosibirsk</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>N. Central Asia Standard Time</alias>
</ins><span class="cx"> <md5>b8e017738a63324214d6586cbf078d62</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1565,11 +1657,13 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Rangoon</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><ins>+ <alias>Myanmar Standard Time</alias>
</ins><span class="cx"> <md5>c0defadd7d4bfd7e533488677fba8b1e</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Riyadh</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Arab Standard Time</alias>
</ins><span class="cx"> <md5>6d11d7edcfa78b32acf9a17169ce728c</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1591,40 +1685,47 @@
</span><span class="cx"> <tzid>Asia/Seoul</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>ROK</alias>
</span><ins>+ <alias>Korea Standard Time</alias>
</ins><span class="cx"> <md5>ddab80bd6902fd85f4a75a99fe066c50</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Shanghai</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><span class="cx"> <alias>PRC</alias>
</span><ins>+ <alias>China Standard Time</alias>
</ins><span class="cx"> <md5>b96ef8cf7c74c16e15f25c292c9a9ae8</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Singapore</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Singapore</alias>
</span><ins>+ <alias>Singapore Standard Time</alias>
</ins><span class="cx"> <md5>f2f8be51082b2ede9114b3c78a24c608</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Taipei</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>ROC</alias>
</span><ins>+ <alias>Taipei Standard Time</alias>
</ins><span class="cx"> <md5>392c0daab0b369c725eaef960e59cb77</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Tashkent</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>West Asia Standard Time</alias>
</ins><span class="cx"> <md5>ed56064ae96e061f96e38e1414ff1e40</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Tbilisi</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Georgian Standard Time</alias>
</ins><span class="cx"> <md5>a473849976251aac174309b4c54cc7b8</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Tehran</tzid>
</span><span class="cx"> <dtstamp>2013-01-14T15:32:16Z</dtstamp>
</span><span class="cx"> <alias>Iran</alias>
</span><ins>+ <alias>Iran Standard Time</alias>
</ins><span class="cx"> <md5>d21c79149c3ad3b5721cd6e05bdf65cd</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1647,6 +1748,7 @@
</span><span class="cx"> <tzid>Asia/Tokyo</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Japan</alias>
</span><ins>+ <alias>Tokyo Standard Time</alias>
</ins><span class="cx"> <md5>596917b840456dcac60971ed275e06f9</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1658,6 +1760,7 @@
</span><span class="cx"> <tzid>Asia/Ulaanbaatar</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Asia/Ulan_Bator</alias>
</span><ins>+ <alias>Ulaanbaatar Standard Time</alias>
</ins><span class="cx"> <md5>5aadca75f29da32a0ff78e3775363d06</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1683,26 +1786,36 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Vladivostok</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Vladivostok Standard Time</alias>
</ins><span class="cx"> <md5>2f8cf1b4ef5274cf8e117d0a8a591c44</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Yakutsk</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Yakutsk Standard Time</alias>
</ins><span class="cx"> <md5>c8446d91924f4f5f899e821604f6e2dd</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Yekaterinburg</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Ekaterinburg Standard Time</alias>
</ins><span class="cx"> <md5>ceb73b7be048c14a0ee0ecc9a91d3652</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Asia/Yerevan</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T14:15:25Z</dtstamp>
</span><ins>+ <alias>Caucasus Standard Time</alias>
</ins><span class="cx"> <md5>fbf2743ed30170109021b5d447184721</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Atlantic Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>21e4f77ac658a58c99a25f2d6ea2991b</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Atlantic/Azores</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T16:58:42Z</dtstamp>
</span><ins>+ <alias>Azores Standard Time</alias>
</ins><span class="cx"> <md5>353f9c84fde46bd2cf7069a30c4276ce</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1718,6 +1831,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Atlantic/Cape_Verde</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Cape Verde Standard Time</alias>
</ins><span class="cx"> <md5>486c6cca3174d50e3d3454c5f1f73480</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1745,6 +1859,7 @@
</span><span class="cx"> <tzid>Atlantic/Reykjavik</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Iceland</alias>
</span><ins>+ <alias>Greenwich Standard Time</alias>
</ins><span class="cx"> <md5>992200e91e57b5dc3b4c1387c8b97466</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1771,12 +1886,14 @@
</span><span class="cx"> <tzid>Australia/Adelaide</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Australia/South</alias>
</span><ins>+ <alias>Cen. Australia Standard Time</alias>
</ins><span class="cx"> <md5>ca7281d2d6822a955147c350b7b1cb71</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Australia/Brisbane</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Australia/Queensland</alias>
</span><ins>+ <alias>E. Australia Standard Time</alias>
</ins><span class="cx"> <md5>a35c97646a88eec10ad3a6e6b567e508</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1799,6 +1916,7 @@
</span><span class="cx"> <tzid>Australia/Darwin</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Australia/North</alias>
</span><ins>+ <alias>AUS Central Standard Time</alias>
</ins><span class="cx"> <md5>73bbf21cb68354d5fab3393f9e0cc467</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1810,6 +1928,7 @@
</span><span class="cx"> <tzid>Australia/Hobart</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Australia/Tasmania</alias>
</span><ins>+ <alias>Tasmania Standard Time</alias>
</ins><span class="cx"> <md5>3f93782299131bc5e257f74b156c7bff</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1848,6 +1967,7 @@
</span><span class="cx"> <tzid>Australia/Perth</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Australia/West</alias>
</span><ins>+ <alias>W. Australia Standard Time</alias>
</ins><span class="cx"> <md5>a9da90a8b6373ae57da42a972cfa5e67</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1866,6 +1986,7 @@
</span><span class="cx"> <alias>Australia/Canberra</alias>
</span><span class="cx"> <alias>Australia/ACT</alias>
</span><span class="cx"> <alias>Australia/NSW</alias>
</span><ins>+ <alias>AUS Eastern Standard Time</alias>
</ins><span class="cx"> <md5>bcdd3fd1c6c326bdef770905bedab9d1</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -1889,6 +2010,26 @@
</span><span class="cx"> <md5>da6459a041f1b5580ffb691930c7c6ce</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Azerbaijan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>bed1a98e3a47a721aee9a617f2d58a98</md5>
+ </timezone>
+ <timezone>
+ <tzid>Azores Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>8748bb405c66b4799bd3a5e8f0bdd0b4</md5>
+ </timezone>
+ <timezone>
+ <tzid>Bahia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>d513507bb66cd7ecd78d48cc9021a075</md5>
+ </timezone>
+ <timezone>
+ <tzid>Bangladesh Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>12c3bc6450cd1158e2860dcd740d4791</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Brazil/Acre</tzid>
</span><span class="cx"> <dtstamp>2013-11-15T16:10:31Z</dtstamp>
</span><span class="cx"> <md5>ad33124888f5c5dd9bed9317ef0bb953</md5>
</span><span class="lines">@@ -1919,6 +2060,11 @@
</span><span class="cx"> <md5>2ac180eb45fdda3460f26cee12a017e9</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Canada Central Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6898e7f21111cf8bb23ea38120b46ae7</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Canada/Atlantic</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T14:15:25Z</dtstamp>
</span><span class="cx"> <md5>2cbf7a81ab5bae956eedd4b27df8d8b4</md5>
</span><span class="lines">@@ -1964,6 +2110,61 @@
</span><span class="cx"> <md5>ee6648283e8bedb3fdb8c57b9f434a26</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Cape Verde Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>b93b13bdd5fcf4b16cac38dc0d11feae</md5>
+ </timezone>
+ <timezone>
+ <tzid>Caucasus Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>36da51fb3b37186dabad22e92102019b</md5>
+ </timezone>
+ <timezone>
+ <tzid>Cen. Australia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>54a9e6a2ce0acf942122fa53bf92079d</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central America Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>869c3ada45ef0ed879d524817f0483fc</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4cb4c8ea99752e73ff168d6d1577d7f4</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Brazilian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>1ce1fe25c75d08d220d462659a7ccb76</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Europe Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>a6253b4f08c997ace48d666a75dd609d</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central European Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0189d1130feba42091b5682423bb7231</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>994bfa6127b6275d9bd385a62f9e83e9</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6ce7b2318b0e77e848bcfc995d1e75fa</md5>
+ </timezone>
+ <timezone>
+ <tzid>Central Standard Time (Mexico)</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4007bb3b1f3ca2d493d3d5a98808f16c</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Chile/Continental</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><span class="cx"> <md5>f317f76740e5c68894538a81fda87ad1</md5>
</span><span class="lines">@@ -1974,11 +2175,36 @@
</span><span class="cx"> <md5>4b487f9ea07858d8d2e944204ed611cb</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>China Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>2bb98ef96d017132ecf3facafbb35165</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Cuba</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <md5>b4c7f04f9f4e20441be3042580cab3a8</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Dateline Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>879e35596cccdfa2788c0b36ead18877</md5>
+ </timezone>
+ <timezone>
+ <tzid>E. Africa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>7f7652996d0f8bc04f30419bb017f2f9</md5>
+ </timezone>
+ <timezone>
+ <tzid>E. Australia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>9e6975e3e2d7aa07fde3d48ee8ab76bb</md5>
+ </timezone>
+ <timezone>
+ <tzid>E. South America Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>56ebc3ee8c6ea0cae6e9f6d2890adb3b</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>EET</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>4313a5a54018d63bbe5556966813bd9e</md5>
</span><span class="lines">@@ -1994,16 +2220,31 @@
</span><span class="cx"> <md5>a9e719d7f0be1abb2846120179599a2c</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>13ff590689dc4c786ee53edfe9ee1b17</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Egypt</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <md5>e5bdfeba2637858848136c41d6dd6592</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Egypt Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>a03e4c51b498c0942fe9c94e6c99942c</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Eire</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>f8c85e542a416cd7fd792f21241475bb</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Ekaterinburg Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>3a2fd3183b2fb59554aa605e8d246c34</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Etc/GMT</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Etc/GMT+0</alias>
</span><span class="lines">@@ -2035,16 +2276,19 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Etc/GMT+11</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>UTC-11</alias>
</ins><span class="cx"> <md5>e9f05290e38fd9ed728763e4b9e5439d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Etc/GMT+12</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Dateline Standard Time</alias>
</ins><span class="cx"> <md5>aba6f221c1ac0cb8d72aea5956a7ef5d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Etc/GMT+2</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>UTC-02</alias>
</ins><span class="cx"> <md5>a9135520a98c2e3d61629c16e58e6017</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2105,6 +2349,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Etc/GMT-12</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>UTC+12</alias>
</ins><span class="cx"> <md5>24e457e75e5a2ca8b4d5699a3b16a0c1</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2226,6 +2471,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Europe/Berlin</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>W. Europe Standard Time</alias>
</ins><span class="cx"> <md5>7eff1fef65c43f08d542edcfa1d67180</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2241,11 +2487,13 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Europe/Bucharest</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>GTB Standard Time</alias>
</ins><span class="cx"> <md5>06f5949f16196a72a928d48015af4da9</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Europe/Budapest</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Central Europe Standard Time</alias>
</ins><span class="cx"> <md5>5d9410ec171c22f3cb6af853666832b8</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2296,6 +2544,7 @@
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <alias>Turkey</alias>
</span><span class="cx"> <alias>Asia/Istanbul</alias>
</span><ins>+ <alias>Turkey Standard Time</alias>
</ins><span class="cx"> <md5>a8c5d66450ef94c0c1829b8ef0f3b08b</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2306,11 +2555,13 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Europe/Kaliningrad</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Kaliningrad Standard Time</alias>
</ins><span class="cx"> <md5>4c60c5a58f54e04b1e78ca79090900b5</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Europe/Kiev</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><ins>+ <alias>FLE Standard Time</alias>
</ins><span class="cx"> <md5>e8d3adb6ed0d6d1c5350086a9d0803c4</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2333,6 +2584,7 @@
</span><span class="cx"> <alias>Europe/Isle_of_Man</alias>
</span><span class="cx"> <alias>GB-Eire</alias>
</span><span class="cx"> <alias>Europe/Belfast</alias>
</span><ins>+ <alias>GMT Standard Time</alias>
</ins><span class="cx"> <md5>d9c25d5b2eb02260bc94730e235938b9</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2369,6 +2621,7 @@
</span><span class="cx"> <tzid>Europe/Moscow</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>W-SU</alias>
</span><ins>+ <alias>Russian Standard Time</alias>
</ins><span class="cx"> <md5>163c9f35321ad3b6d79c5e13d3de4a66</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2386,6 +2639,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Europe/Paris</tzid>
</span><span class="cx"> <dtstamp>2012-05-18T16:58:42Z</dtstamp>
</span><ins>+ <alias>Romance Standard Time</alias>
</ins><span class="cx"> <md5>8dcfe790e26460e4850d07f032bee5a6</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2495,6 +2749,7 @@
</span><span class="cx"> <tzid>Europe/Warsaw</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>Poland</alias>
</span><ins>+ <alias>Central European Standard Time</alias>
</ins><span class="cx"> <md5>9011dff96ae67331fefb285befee32c7</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2515,6 +2770,16 @@
</span><span class="cx"> <md5>f4cfe31d995ca98d545a03ef60ebbbee</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>FLE Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0ae1b4885ddb55aaa7bbb81318506844</md5>
+ </timezone>
+ <timezone>
+ <tzid>Fiji Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f53a5ec8b50fc4a04b2fbf1ea0e7e577</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>GB</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>cf499d3386c1547d82ada718d426302a</md5>
</span><span class="lines">@@ -2530,6 +2795,11 @@
</span><span class="cx"> <md5>7e1ee359c14980b307a35b4ea42e2ddf</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>GMT Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>a16951b9d79ec5d513253c4be09e8ad8</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>GMT+0</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>ce675f57f78b3a1e213c8ad399205020</md5>
</span><span class="lines">@@ -2545,16 +2815,41 @@
</span><span class="cx"> <md5>b02b3430b23d30714a470ed456a9f19a</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>GTB Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>dfc95bb97b0cc61f39029dec1d7b3725</md5>
+ </timezone>
+ <timezone>
+ <tzid>Georgian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>ce12e3a54f497a428ac320f8e44ebe1b</md5>
+ </timezone>
+ <timezone>
+ <tzid>Greenland Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>78c939588bf5314a272590a40857bd9c</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Greenwich</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>47885ad66487af94b749e903f8fcc942</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Greenwich Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>b04584eca67568cea6f7ad15fd69433a</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>HST</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>406972d8f460561b5ed0cc9635075cec</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Hawaiian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>78e49db8edd7865e4fbd4437d91b954d</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Hongkong</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><span class="cx"> <md5>1166b6a5bb7094a4036ed80d6228cfc2</md5>
</span><span class="lines">@@ -2565,6 +2860,11 @@
</span><span class="cx"> <md5>1f3e3f1d74ac62c6309335ba7def679e</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>India Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>5bc101a49c9390078abf4fde42bf543d</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Indian/Antananarivo</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>54b8cf688972faef6254eda042d0b759</md5>
</span><span class="lines">@@ -2607,6 +2907,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Indian/Mauritius</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Mauritius Standard Time</alias>
</ins><span class="cx"> <md5>1ef668c409d1c581977fd40fc7505481</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2625,11 +2926,21 @@
</span><span class="cx"> <md5>844f28e11094bef30381a7ebe5d0c7c6</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Iran Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>06d7f0cd5e0d1a8c440d1b89cd9a45ed</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Israel</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <md5>332718eee8f091b1b00870c8e44bfa46</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Israel Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e1773817be9273336abcf0858a7c6f7d</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Jamaica</tzid>
</span><span class="cx"> <dtstamp>2013-10-01T01:19:11Z</dtstamp>
</span><span class="cx"> <md5>b5f083a6081a40b4525e7c8e2da9e963</md5>
</span><span class="lines">@@ -2640,6 +2951,21 @@
</span><span class="cx"> <md5>ff59375f1fd8af619f193e904888c448</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Jordan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>239404fd4117c3070ea02c6cdcab0ed7</md5>
+ </timezone>
+ <timezone>
+ <tzid>Kaliningrad Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e06d0cefda50969894397c8c2bdb132f</md5>
+ </timezone>
+ <timezone>
+ <tzid>Korea Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>756dd3b6d51cc197eb8c2a08fb88aa30</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Kwajalein</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>18865d3f0f1a93f2b96d77d8b63b86be</md5>
</span><span class="lines">@@ -2650,6 +2976,11 @@
</span><span class="cx"> <md5>e6ac54ea0ab33dd6fd125a71fc34cf46</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Libya Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>354c1f845ab7ad751b6124e9a1619d6b</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>MET</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>3176603f9d378e550950e8139ee1bfef</md5>
</span><span class="lines">@@ -2665,6 +2996,16 @@
</span><span class="cx"> <md5>d43bd95c6a43197ff72e084d1bebb875</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Magadan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0399e537a95ae84af318fe49135304ec</md5>
+ </timezone>
+ <timezone>
+ <tzid>Mauritius Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f87744abf69766482ade5da23e0ef240</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Mexico/BajaNorte</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>7ccf81b88f1e609f28623b2d917dbbde</md5>
</span><span class="lines">@@ -2680,6 +3021,41 @@
</span><span class="cx"> <md5>3b33093afd8c0a554948130f54cc23f4</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Middle East Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4e652b5c7f318678a5be15ae9fb14752</md5>
+ </timezone>
+ <timezone>
+ <tzid>Montevideo Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4dc81b0fa971a57c57b710ca18b20bc9</md5>
+ </timezone>
+ <timezone>
+ <tzid>Morocco Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e268fdccf45f90b9a0bb372521040c80</md5>
+ </timezone>
+ <timezone>
+ <tzid>Mountain Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e0a262ac5ef311d51fca018b4e0ad456</md5>
+ </timezone>
+ <timezone>
+ <tzid>Mountain Standard Time (Mexico)</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>228bd4c26ec332e0ac8f521b22cbe0cd</md5>
+ </timezone>
+ <timezone>
+ <tzid>Myanmar Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6b52c184b0ad0bf74a6792259d52aa62</md5>
+ </timezone>
+ <timezone>
+ <tzid>N. Central Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>d77a6f9abab36065495b31edd8e77c80</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>NZ</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>6f3e44f4f50b3e2e6e8fa002734e37a2</md5>
</span><span class="lines">@@ -2690,11 +3066,41 @@
</span><span class="cx"> <md5>b7ab01dcc64ed6b0877b41a48a5f5bf1</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Namibia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>29cc2769ce1179e449dc6cf6a957c7f5</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Navajo</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>46c72b3a055bd29862b55ac4bf1a62ed</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Nepal Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>947e08ee93b35119c551186fd4a19f9f</md5>
+ </timezone>
+ <timezone>
+ <tzid>New Zealand Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>9fced4d15fca067f5454d72929088c5d</md5>
+ </timezone>
+ <timezone>
+ <tzid>Newfoundland Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>48508a15a031b973a444b91a551cd28a</md5>
+ </timezone>
+ <timezone>
+ <tzid>North Asia East Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>095f1c445394d82adec64602d537a986</md5>
+ </timezone>
+ <timezone>
+ <tzid>North Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6fedb564e771afc51b219f2bae5da796</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>PRC</tzid>
</span><span class="cx"> <dtstamp>2013-05-08T18:04:04Z</dtstamp>
</span><span class="cx"> <md5>4b00f46a2c83f3e58d09f75fbb92e2ba</md5>
</span><span class="lines">@@ -2705,8 +3111,24 @@
</span><span class="cx"> <md5>b519fb841c7d3f389a584fdfa7372b93</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Pacific SA Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>b26c2e5cd71738f09e98ede5982fab5e</md5>
+ </timezone>
+ <timezone>
+ <tzid>Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6ffa7272875d070d46bc8ec057225665</md5>
+ </timezone>
+ <timezone>
+ <tzid>Pacific Standard Time (Mexico)</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>48e275bef2a5475110835bdf3a7dbb49</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Pacific/Apia</tzid>
</span><span class="cx"> <dtstamp>2013-01-14T15:32:16Z</dtstamp>
</span><ins>+ <alias>Samoa Standard Time</alias>
</ins><span class="cx"> <md5>c7fe6c219fb68825f1e065008bc06040</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2715,6 +3137,7 @@
</span><span class="cx"> <alias>NZ</alias>
</span><span class="cx"> <alias>Antarctica/McMurdo</alias>
</span><span class="cx"> <alias>Antarctica/South_Pole</alias>
</span><ins>+ <alias>New Zealand Standard Time</alias>
</ins><span class="cx"> <md5>31b52d15573225aff7940c24fbe45343</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2754,6 +3177,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Pacific/Fiji</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><ins>+ <alias>Fiji Standard Time</alias>
</ins><span class="cx"> <md5>78ca7c42aa407761c6804f0502976b83</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2774,6 +3198,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Pacific/Guadalcanal</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Central Pacific Standard Time</alias>
</ins><span class="cx"> <md5>ac17a77c46959df23f3d6d8f21ebf380</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2786,6 +3211,7 @@
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <alias>US/Hawaii</alias>
</span><span class="cx"> <alias>Pacific/Johnston</alias>
</span><ins>+ <alias>Hawaiian Standard Time</alias>
</ins><span class="cx"> <md5>be013195b929c48b73f0234a5226a763</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2875,6 +3301,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Pacific/Port_Moresby</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>West Pacific Standard Time</alias>
</ins><span class="cx"> <md5>042a04dfc570e2936ad064894529f41c</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2905,6 +3332,7 @@
</span><span class="cx"> <timezone>
</span><span class="cx"> <tzid>Pacific/Tongatapu</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><ins>+ <alias>Tonga Standard Time</alias>
</ins><span class="cx"> <md5>2124717920b350ba81643915b321d139</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><span class="lines">@@ -2928,6 +3356,16 @@
</span><span class="cx"> <md5>721ea1e811f10f00a44b2079ceece1f3</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Pakistan Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>c8aceae74e764aceec483640afa45b86</md5>
+ </timezone>
+ <timezone>
+ <tzid>Paraguay Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>5de6fc55052ef5ac431356c060afc502</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Poland</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>95a5dc1d445e1abc4a5f3626f4552800</md5>
</span><span class="lines">@@ -2948,21 +3386,111 @@
</span><span class="cx"> <md5>b4ce7399fc454c07647554d069239558</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Romance Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f33b41c3b27c39b58a01d7e2bd15e891</md5>
+ </timezone>
+ <timezone>
+ <tzid>Russian Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>1651f23851e6f44162396c133a095d26</md5>
+ </timezone>
+ <timezone>
+ <tzid>SA Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>06f22d20ab3fe7b1c0c6ae309fe0b3cb</md5>
+ </timezone>
+ <timezone>
+ <tzid>SA Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f8ed98409c9324eb2a5efb24b41f57ae</md5>
+ </timezone>
+ <timezone>
+ <tzid>SA Western Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>80dca707facf8efaaa36be9f9c89089d</md5>
+ </timezone>
+ <timezone>
+ <tzid>SE Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>ad83f90b23aefd9d9dd450deac72ee2f</md5>
+ </timezone>
+ <timezone>
+ <tzid>Samoa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>d14f124106dc5c45bc686eb62128e7e5</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Singapore</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>94dcb7e58cfd771fa8ec1bd1ea6a5248</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Singapore Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>94f8f3515c361ea9775ffcb6e9854e2f</md5>
+ </timezone>
+ <timezone>
+ <tzid>South Africa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>6e229a8322a1b763928c28cfde3c6183</md5>
+ </timezone>
+ <timezone>
+ <tzid>Sri Lanka Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>105896be19d4cfc5866b9e7077491497</md5>
+ </timezone>
+ <timezone>
+ <tzid>Syria Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>42aceb769ea063799fde4f5c5c548a6e</md5>
+ </timezone>
+ <timezone>
+ <tzid>Taipei Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>ae23a32cf494ea76c848a68a7ae972f7</md5>
+ </timezone>
+ <timezone>
+ <tzid>Tasmania Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>656d5bff4d0c2340ae30a5e764538d68</md5>
+ </timezone>
+ <timezone>
+ <tzid>Tokyo Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>af0a29619e7caacdb24f136d4d9a9f57</md5>
+ </timezone>
+ <timezone>
+ <tzid>Tonga Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>396a4beadbdc3d50bcf6b07fd778c101</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Turkey</tzid>
</span><span class="cx"> <dtstamp>2014-05-30T18:27:48Z</dtstamp>
</span><span class="cx"> <md5>ea45d8a59e773676fec8d3bd1b31441d</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Turkey Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>0d84294523585a0799fe0c12d4a36872</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>UCT</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>77ab109760c523113f36441e0a218999</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>US Eastern Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>4708533536c230ec7eb92548b0e64bdd</md5>
+ </timezone>
+ <timezone>
+ <tzid>US Mountain Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>e3a68a8c3599e79bd333ad4fdd3c96fe</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>US/Alaska</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>0079a04f2e0aafab32b4d4230d97cfde</md5>
</span><span class="lines">@@ -3028,21 +3556,81 @@
</span><span class="cx"> <md5>3b4bdbd492aa1796c10f37c1969dbd4b</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>UTC+12</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>5317101733f870b217196d4bdb5b67ff</md5>
+ </timezone>
+ <timezone>
+ <tzid>UTC-02</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>25ba389e4ccb8cf0dd6f129c7ff7f8c4</md5>
+ </timezone>
+ <timezone>
+ <tzid>UTC-11</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>fdc341a444c22d3308bd2a649ae0112c</md5>
+ </timezone>
+ <timezone>
+ <tzid>Ulaanbaatar Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>73b0a30b79c8034dafdba553910fe0e0</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Universal</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>50bcbcc5d95d03946dd65a7d53877ac7</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>Venezuela Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>afd03b559b8bad714fe294bcb2cc1c9e</md5>
+ </timezone>
+ <timezone>
+ <tzid>Vladivostok Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>53e23ab867c6a9b4e87eefef6668ed7a</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>W-SU</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>3fdc23a1e84d1e77026ef5134217ffa3</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>W. Australia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>adfbe5b5fd570ef3eefd7340a5e729cf</md5>
+ </timezone>
+ <timezone>
+ <tzid>W. Central Africa Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>2aad10d3015d5019dcada3b6cf6493f4</md5>
+ </timezone>
+ <timezone>
+ <tzid>W. Europe Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>8a85b21b39e21ab7d59f836b27b31d39</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>WET</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>f7d652d5d227809a7c9a9d75fea34c08</md5>
</span><span class="cx"> </timezone>
</span><span class="cx"> <timezone>
</span><ins>+ <tzid>West Asia Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>3484ac60b5568e639e5683a32bc6cdcf</md5>
+ </timezone>
+ <timezone>
+ <tzid>West Pacific Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>f403c7129fb48cee288e856571f2ffd8</md5>
+ </timezone>
+ <timezone>
+ <tzid>Yakutsk Standard Time</tzid>
+ <dtstamp>2014-06-09T19:47:04Z</dtstamp>
+ <md5>81e4af08c31bf752ca8b0f4ea3937518</md5>
+ </timezone>
+ <timezone>
</ins><span class="cx"> <tzid>Zulu</tzid>
</span><span class="cx"> <dtstamp>2011-10-05T11:50:21Z</dtstamp>
</span><span class="cx"> <md5>fa5e48a172aaa63cbd2193b233b2d9a4</md5>
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystorebasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/base.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> from twext.python.log import Logger
</span><span class="cx"> from txdav.xml import element as davxml
</span><span class="cx"> from txdav.xml.base import encodeXMLName
</span><ins>+from txdav.xml.element import lookupElement
</ins><span class="cx"> from txweb2.dav.resource import TwistedGETContentMD5, \
</span><span class="cx"> TwistedQuotaRootProperty
</span><span class="cx">
</span><span class="lines">@@ -98,7 +99,11 @@
</span><span class="cx"> return encodeXMLName(self.namespace, self.name)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def toElement(self):
+ return lookupElement((self.namespace, self.name,))
</ins><span class="cx">
</span><ins>+
+
</ins><span class="cx"> class AbstractPropertyStore(DictMixin, object):
</span><span class="cx"> """
</span><span class="cx"> Base property store.
</span><span class="lines">@@ -108,6 +113,7 @@
</span><span class="cx"> implements(IPropertyStore)
</span><span class="cx">
</span><span class="cx"> _defaultShadowableKeys = frozenset()
</span><ins>+ _defaultProxyOverrideKeys = frozenset()
</ins><span class="cx"> _defaultGlobalKeys = frozenset((
</span><span class="cx"> PropertyName.fromElement(davxml.ACL),
</span><span class="cx"> PropertyName.fromElement(davxml.ResourceID),
</span><span class="lines">@@ -117,7 +123,7 @@
</span><span class="cx"> PropertyName.fromElement(TwistedQuotaRootProperty),
</span><span class="cx"> ))
</span><span class="cx">
</span><del>- def __init__(self, defaultUser, shareeUser=None):
</del><ins>+ def __init__(self, defaultUser, shareeUser=None, proxyUser=None):
</ins><span class="cx"> """
</span><span class="cx"> Instantiate the property store for a user. The default is the default user
</span><span class="cx"> (owner) property to read in the case of global or shadowable properties.
</span><span class="lines">@@ -128,12 +134,17 @@
</span><span class="cx">
</span><span class="cx"> @param shareeUser: the per user uid or None if the same as defaultUser
</span><span class="cx"> @type shareeUser: C{str}
</span><ins>+
+ @param proxyUser: the proxy uid or None if no proxy
+ @type proxyUser: C{str}
</ins><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> assert(defaultUser is not None or shareeUser is not None)
</span><span class="cx"> self._defaultUser = shareeUser if defaultUser is None else defaultUser
</span><span class="cx"> self._perUser = defaultUser if shareeUser is None else shareeUser
</span><ins>+ self._proxyUser = self._perUser if proxyUser is None else proxyUser
</ins><span class="cx"> self._shadowableKeys = set(AbstractPropertyStore._defaultShadowableKeys)
</span><ins>+ self._proxyOverrideKeys = set(AbstractPropertyStore._defaultProxyOverrideKeys)
</ins><span class="cx"> self._globalKeys = set(AbstractPropertyStore._defaultGlobalKeys)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -149,8 +160,13 @@
</span><span class="cx"> self._perUser = uid
</span><span class="cx">
</span><span class="cx">
</span><del>- def setSpecialProperties(self, shadowableKeys, globalKeys):
</del><ins>+ def _setProxyUID(self, uid):
+ self._proxyUser = uid
+
+
+ def setSpecialProperties(self, shadowableKeys, globalKeys, proxyOverrideKeys):
</ins><span class="cx"> self._shadowableKeys.update(shadowableKeys)
</span><ins>+ self._proxyOverrideKeys.update(proxyOverrideKeys)
</ins><span class="cx"> self._globalKeys.update(globalKeys)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -191,6 +207,13 @@
</span><span class="cx"> #
</span><span class="cx">
</span><span class="cx"> def __getitem__(self, key):
</span><ins>+ # Return proxy value if it exists, else fall through to normal logic
+ if self._proxyUser != self._perUser and self.isProxyOverrideProperty(key):
+ try:
+ return self._getitem_uid(key, self._proxyUser)
+ except KeyError:
+ pass
+
</ins><span class="cx"> # Handle per-user behavior
</span><span class="cx"> if self.isShadowableProperty(key):
</span><span class="cx"> try:
</span><span class="lines">@@ -208,11 +231,23 @@
</span><span class="cx"> # Handle per-user behavior
</span><span class="cx"> if self.isGlobalProperty(key):
</span><span class="cx"> return self._setitem_uid(key, value, self._defaultUser)
</span><ins>+ # Handle proxy behavior
+ elif self._proxyUser != self._perUser and self.isProxyOverrideProperty(key):
+ return self._setitem_uid(key, value, self._proxyUser)
+ # Remainder is per user
</ins><span class="cx"> else:
</span><span class="cx"> return self._setitem_uid(key, value, self._perUser)
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> def __delitem__(self, key):
</span><ins>+ # Delete proxy value if it exists, else fall through to normal logic
+ if self._proxyUser != self._perUser and self.isProxyOverrideProperty(key):
+ try:
+ self._delitem_uid(key, self._proxyUser)
+ return
+ except KeyError:
+ pass
+
</ins><span class="cx"> # Handle per-user behavior
</span><span class="cx"> if self.isShadowableProperty(key):
</span><span class="cx"> try:
</span><span class="lines">@@ -245,11 +280,14 @@
</span><span class="cx"> self[key] = other[key]
</span><span class="cx">
</span><span class="cx">
</span><del>- # Per-user property handling
</del><span class="cx"> def isShadowableProperty(self, key):
</span><span class="cx"> return key in self._shadowableKeys
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def isProxyOverrideProperty(self, key):
+ return key in self._proxyOverrideKeys
+
+
</ins><span class="cx"> def isGlobalProperty(self, key):
</span><span class="cx"> return key in self._globalKeys
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/sql.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -117,17 +117,19 @@
</span><span class="cx"> yield _cache_user_props(self._defaultUser)
</span><span class="cx"> if self._perUser != self._defaultUser:
</span><span class="cx"> yield _cache_user_props(self._perUser)
</span><ins>+ if self._proxyUser != self._perUser:
+ yield _cache_user_props(self._proxyUser)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @classmethod
</span><span class="cx"> @inlineCallbacks
</span><del>- def load(cls, defaultuser, shareUser, txn, resourceID, created=False, notifyCallback=None):
</del><ins>+ def load(cls, defaultuser, shareUser, proxyUser, txn, resourceID, created=False, notifyCallback=None):
</ins><span class="cx"> """
</span><span class="cx"> @param notifyCallback: a callable used to trigger notifications when the
</span><span class="cx"> property store changes.
</span><span class="cx"> """
</span><span class="cx"> self = cls.__new__(cls)
</span><del>- super(PropertyStore, self).__init__(defaultuser, shareUser)
</del><ins>+ super(PropertyStore, self).__init__(defaultuser, shareUser, proxyUser)
</ins><span class="cx"> self._txn = txn
</span><span class="cx"> self._resourceID = resourceID
</span><span class="cx"> if not self._txn.store().queryCachingEnabled():
</span><span class="lines">@@ -141,7 +143,7 @@
</span><span class="cx">
</span><span class="cx"> @classmethod
</span><span class="cx"> @inlineCallbacks
</span><del>- def forMultipleResources(cls, defaultUser, txn,
</del><ins>+ def forMultipleResources(cls, defaultUser, shareeUser, proxyUser, txn,
</ins><span class="cx"> childColumn, parentColumn, parentID):
</span><span class="cx"> """
</span><span class="cx"> Load all property stores for all objects in a collection. This is used
</span><span class="lines">@@ -179,13 +181,13 @@
</span><span class="cx"> Where=parentColumn == parentID
</span><span class="cx"> )
</span><span class="cx"> rows = yield query.on(txn)
</span><del>- stores = cls._createMultipleStores(defaultUser, txn, rows)
</del><ins>+ stores = cls._createMultipleStores(defaultUser, shareeUser, proxyUser, txn, rows)
</ins><span class="cx"> returnValue(stores)
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @classmethod
</span><span class="cx"> @inlineCallbacks
</span><del>- def forMultipleResourcesWithResourceIDs(cls, defaultUser, txn, resourceIDs):
</del><ins>+ def forMultipleResourcesWithResourceIDs(cls, defaultUser, shareeUser, proxyUser, txn, resourceIDs):
</ins><span class="cx"> """
</span><span class="cx"> Load all property stores for all specified resources. This is used
</span><span class="cx"> to optimize Depth:1 operations on that collection, by loading all
</span><span class="lines">@@ -214,13 +216,13 @@
</span><span class="cx"> Where=prop.RESOURCE_ID.In(Parameter("resourceIDs", len(resourceIDs)))
</span><span class="cx"> )
</span><span class="cx"> rows = yield query.on(txn, resourceIDs=resourceIDs)
</span><del>- stores = cls._createMultipleStores(defaultUser, txn, rows)
</del><ins>+ stores = cls._createMultipleStores(defaultUser, shareeUser, proxyUser, txn, rows)
</ins><span class="cx">
</span><span class="cx"> # Make sure we have a store for each resourceID even if no properties exist
</span><span class="cx"> for resourceID in resourceIDs:
</span><span class="cx"> if resourceID not in stores:
</span><span class="cx"> store = cls.__new__(cls)
</span><del>- super(PropertyStore, store).__init__(defaultUser)
</del><ins>+ super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
</ins><span class="cx"> store._txn = txn
</span><span class="cx"> store._resourceID = resourceID
</span><span class="cx"> store._cached = {}
</span><span class="lines">@@ -230,7 +232,7 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @classmethod
</span><del>- def _createMultipleStores(cls, defaultUser, txn, rows):
</del><ins>+ def _createMultipleStores(cls, defaultUser, shareeUser, proxyUser, txn, rows):
</ins><span class="cx"> """
</span><span class="cx"> Create a set of stores for the set of rows passed in.
</span><span class="cx"> """
</span><span class="lines">@@ -245,7 +247,7 @@
</span><span class="cx"> if resource_id:
</span><span class="cx"> if resource_id not in createdStores:
</span><span class="cx"> store = cls.__new__(cls)
</span><del>- super(PropertyStore, store).__init__(defaultUser)
</del><ins>+ super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
</ins><span class="cx"> store._txn = txn
</span><span class="cx"> store._resourceID = resource_id
</span><span class="cx"> store._cached = {}
</span><span class="lines">@@ -253,7 +255,7 @@
</span><span class="cx"> createdStores[resource_id]._cached[(name, view_uid)] = value
</span><span class="cx"> elif object_resource_id:
</span><span class="cx"> store = cls.__new__(cls)
</span><del>- super(PropertyStore, store).__init__(defaultUser)
</del><ins>+ super(PropertyStore, store).__init__(defaultUser, shareeUser, proxyUser)
</ins><span class="cx"> store._txn = txn
</span><span class="cx"> store._resourceID = object_resource_id
</span><span class="cx"> store._cached = {}
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretestbasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/base.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -140,29 +140,45 @@
</span><span class="cx"> yield self._changed(self.propertyStore1)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failIf(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> self.propertyStore2[name] = value2
</span><span class="cx"> yield self._changed(self.propertyStore2)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value2)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> del self.propertyStore2[name]
</span><span class="cx"> yield self._changed(self.propertyStore2)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failIf(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> del self.propertyStore1[name]
</span><span class="cx"> yield self._changed(self.propertyStore1)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx"> self.failIf(name in self.propertyStore1)
</span><span class="cx"> self.failIf(name in self.propertyStore2)
</span><ins>+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -170,8 +186,10 @@
</span><span class="cx">
</span><span class="cx"> name = propertyName("shadow")
</span><span class="cx">
</span><del>- self.propertyStore1.setSpecialProperties((name,), ())
- self.propertyStore2.setSpecialProperties((name,), ())
</del><ins>+ self.propertyStore1.setSpecialProperties((name,), (), ())
+ self.propertyStore2.setSpecialProperties((name,), (), ())
+ self.propertyStore3.setSpecialProperties((name,), (), ())
+ self.propertyStore4.setSpecialProperties((name,), (), ())
</ins><span class="cx">
</span><span class="cx"> value1 = propertyValue("Hello, World1!")
</span><span class="cx"> value2 = propertyValue("Hello, World2!")
</span><span class="lines">@@ -180,29 +198,45 @@
</span><span class="cx"> yield self._changed(self.propertyStore1)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> self.propertyStore2[name] = value2
</span><span class="cx"> yield self._changed(self.propertyStore2)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value2)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> del self.propertyStore2[name]
</span><span class="cx"> yield self._changed(self.propertyStore2)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> del self.propertyStore1[name]
</span><span class="cx"> yield self._changed(self.propertyStore1)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx"> self.failIf(name in self.propertyStore1)
</span><span class="cx"> self.failIf(name in self.propertyStore2)
</span><ins>+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -213,8 +247,10 @@
</span><span class="cx">
</span><span class="cx"> name = propertyName("shadow")
</span><span class="cx">
</span><del>- self.propertyStore1.setSpecialProperties((name,), ())
- self.propertyStore2.setSpecialProperties((name,), ())
</del><ins>+ self.propertyStore1.setSpecialProperties((name,), (), ())
+ self.propertyStore2.setSpecialProperties((name,), (), ())
+ self.propertyStore3.setSpecialProperties((name,), (), ())
+ self.propertyStore4.setSpecialProperties((name,), (), ())
</ins><span class="cx">
</span><span class="cx"> value1 = propertyValue("Hello, World1!")
</span><span class="cx">
</span><span class="lines">@@ -222,22 +258,34 @@
</span><span class="cx"> yield self._changed(self.propertyStore1)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> del self.propertyStore2[name]
</span><span class="cx"> yield self._changed(self.propertyStore2)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> del self.propertyStore1[name]
</span><span class="cx"> yield self._changed(self.propertyStore1)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx"> self.failIf(name in self.propertyStore1)
</span><span class="cx"> self.failIf(name in self.propertyStore2)
</span><ins>+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -245,8 +293,10 @@
</span><span class="cx">
</span><span class="cx"> name = propertyName("global")
</span><span class="cx">
</span><del>- self.propertyStore1.setSpecialProperties((), (name,))
- self.propertyStore2.setSpecialProperties((), (name,))
</del><ins>+ self.propertyStore1.setSpecialProperties((), (name,), ())
+ self.propertyStore2.setSpecialProperties((), (name,), ())
+ self.propertyStore3.setSpecialProperties((), (name,), ())
+ self.propertyStore4.setSpecialProperties((), (name,), ())
</ins><span class="cx">
</span><span class="cx"> value1 = propertyValue("Hello, World1!")
</span><span class="cx"> value2 = propertyValue("Hello, World2!")
</span><span class="lines">@@ -255,24 +305,250 @@
</span><span class="cx"> yield self._changed(self.propertyStore1)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value1)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value1)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> self.propertyStore2[name] = value2
</span><span class="cx"> yield self._changed(self.propertyStore2)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), value2)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), value2)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), value2)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
</ins><span class="cx"> self.failUnless(name in self.propertyStore1)
</span><span class="cx"> self.failUnless(name in self.propertyStore2)
</span><ins>+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx"> del self.propertyStore2[name]
</span><span class="cx"> yield self._changed(self.propertyStore2)
</span><span class="cx"> self.assertEquals(self.propertyStore1.get(name, None), None)
</span><span class="cx"> self.assertEquals(self.propertyStore2.get(name, None), None)
</span><ins>+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
</ins><span class="cx"> self.failIf(name in self.propertyStore1)
</span><span class="cx"> self.failIf(name in self.propertyStore2)
</span><ins>+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
</ins><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
+ def test_proxy(self):
+
+ name = propertyName("test")
+ value1 = propertyValue("Hello, World1!")
+ value2 = propertyValue("Hello, World2!")
+
+ self.propertyStore3[name] = value1
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ self.propertyStore4[name] = value2
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore4[name]
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ del self.propertyStore3[name]
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), None)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failIf(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+
+ @inlineCallbacks
+ def test_proxyOverride(self):
+
+ name = propertyName("override")
+
+ self.propertyStore1.setSpecialProperties((), (), (name,))
+ self.propertyStore2.setSpecialProperties((), (), (name,))
+ self.propertyStore3.setSpecialProperties((), (), (name,))
+ self.propertyStore4.setSpecialProperties((), (), (name,))
+
+ value1 = propertyValue("Hello, World1!")
+ value2 = propertyValue("Hello, World2!")
+
+ self.propertyStore1[name] = value1
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ self.propertyStore3[name] = value2
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value2)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ del self.propertyStore3[name]
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failUnless(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+ del self.propertyStore1[name]
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), None)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failIf(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+
+ @inlineCallbacks
+ def test_proxyOverrideShadow(self):
+
+ name = propertyName("override")
+
+ self.propertyStore1.setSpecialProperties((name,), (), (name,))
+ self.propertyStore2.setSpecialProperties((name,), (), (name,))
+ self.propertyStore3.setSpecialProperties((name,), (), (name,))
+ self.propertyStore4.setSpecialProperties((name,), (), (name,))
+
+ value1 = propertyValue("Hello, World1!")
+ value2 = propertyValue("Hello, World2!")
+ value3 = propertyValue("Hello, World3!")
+ value4 = propertyValue("Hello, World4!")
+
+ self.propertyStore1[name] = value1
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ self.propertyStore3[name] = value3
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value3)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ self.propertyStore4[name] = value4
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value3)
+ self.assertEquals(self.propertyStore4.get(name, None), value4)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ self.propertyStore2[name] = value2
+ yield self._changed(self.propertyStore2)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value3)
+ self.assertEquals(self.propertyStore4.get(name, None), value4)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore3[name]
+ yield self._changed(self.propertyStore3)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value4)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore4[name]
+ yield self._changed(self.propertyStore4)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value2)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value2)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore2[name]
+ yield self._changed(self.propertyStore2)
+ self.assertEquals(self.propertyStore1.get(name, None), value1)
+ self.assertEquals(self.propertyStore2.get(name, None), value1)
+ self.assertEquals(self.propertyStore3.get(name, None), value1)
+ self.assertEquals(self.propertyStore4.get(name, None), value1)
+ self.failUnless(name in self.propertyStore1)
+ self.failUnless(name in self.propertyStore2)
+ self.failUnless(name in self.propertyStore3)
+ self.failUnless(name in self.propertyStore4)
+
+ del self.propertyStore1[name]
+ yield self._changed(self.propertyStore1)
+ self.assertEquals(self.propertyStore1.get(name, None), None)
+ self.assertEquals(self.propertyStore2.get(name, None), None)
+ self.assertEquals(self.propertyStore3.get(name, None), None)
+ self.assertEquals(self.propertyStore4.get(name, None), None)
+ self.failIf(name in self.propertyStore1)
+ self.failIf(name in self.propertyStore2)
+ self.failIf(name in self.propertyStore3)
+ self.failIf(name in self.propertyStore4)
+
+
</ins><span class="cx"> def test_iteration(self):
</span><span class="cx">
</span><span class="cx"> value = propertyValue("Hello, World!")
</span><span class="lines">@@ -333,8 +609,8 @@
</span><span class="cx">
</span><span class="cx"> name = propertyName("shadow")
</span><span class="cx">
</span><del>- self.propertyStore1.setSpecialProperties((name,), ())
- self.propertyStore2.setSpecialProperties((name,), ())
</del><ins>+ self.propertyStore1.setSpecialProperties((name,), (), ())
+ self.propertyStore2.setSpecialProperties((name,), (), ())
</ins><span class="cx">
</span><span class="cx"> value1 = propertyValue("Hello, World1!")
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_sql.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -49,10 +49,11 @@
</span><span class="cx"> self.store = yield buildStore(self, self.notifierFactory)
</span><span class="cx"> self.addCleanup(self.maybeCommitLast)
</span><span class="cx"> self._txn = self.store.newTransaction()
</span><del>- self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
- "user01", None, self._txn, 1
- )
- self.propertyStore2 = yield PropertyStore.load("user01", "user02", self._txn, 1)
</del><ins>+ self.propertyStore = \
+ self.propertyStore1 = yield PropertyStore.load("user01", None, None, self._txn, 1)
+ self.propertyStore2 = yield PropertyStore.load("user01", "user02", None, self._txn, 1)
+ self.propertyStore3 = yield PropertyStore.load("user01", None, "user03", self._txn, 1)
+ self.propertyStore4 = yield PropertyStore.load("user01", "user02", "user04", self._txn, 1)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -62,7 +63,11 @@
</span><span class="cx"> delattr(self, "_txn")
</span><span class="cx"> else:
</span><span class="cx"> result = None
</span><del>- self.propertyStore = self.propertyStore1 = self.propertyStore2 = None
</del><ins>+ self.propertyStore = \
+ self.propertyStore1 = \
+ self.propertyStore2 = \
+ self.propertyStore3 = \
+ self.propertyStore4 = None
</ins><span class="cx"> returnValue(result)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -74,18 +79,31 @@
</span><span class="cx"> self._txn = self.store.newTransaction()
</span><span class="cx">
</span><span class="cx"> store = self.propertyStore1
</span><del>- self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
- "user01", None, self._txn, 1
- )
</del><ins>+ self.propertyStore = \
+ self.propertyStore1 = yield PropertyStore.load("user01", None, None, self._txn, 1)
</ins><span class="cx"> self.propertyStore1._shadowableKeys = store._shadowableKeys
</span><ins>+ self.propertyStore1._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx"> self.propertyStore1._globalKeys = store._globalKeys
</span><span class="cx">
</span><span class="cx"> store = self.propertyStore2
</span><del>- self.propertyStore2 = yield PropertyStore.load("user01", "user02", self._txn, 1)
</del><ins>+ self.propertyStore2 = yield PropertyStore.load("user01", "user02", None, self._txn, 1)
</ins><span class="cx"> self.propertyStore2._shadowableKeys = store._shadowableKeys
</span><ins>+ self.propertyStore2._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx"> self.propertyStore2._globalKeys = store._globalKeys
</span><span class="cx">
</span><ins>+ store = self.propertyStore3
+ self.propertyStore3 = yield PropertyStore.load("user01", None, "user03", self._txn, 1)
+ self.propertyStore3._shadowableKeys = store._shadowableKeys
+ self.propertyStore3._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore3._globalKeys = store._globalKeys
</ins><span class="cx">
</span><ins>+ store = self.propertyStore4
+ self.propertyStore4 = yield PropertyStore.load("user01", "user02", "user04", self._txn, 1)
+ self.propertyStore4._shadowableKeys = store._shadowableKeys
+ self.propertyStore4._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore4._globalKeys = store._globalKeys
+
+
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def _abort(self, store):
</span><span class="cx"> if hasattr(self, "_txn"):
</span><span class="lines">@@ -95,18 +113,31 @@
</span><span class="cx"> self._txn = self.store.newTransaction()
</span><span class="cx">
</span><span class="cx"> store = self.propertyStore1
</span><del>- self.propertyStore = self.propertyStore1 = yield PropertyStore.load(
- "user01", None, self._txn, 1
- )
</del><ins>+ self.propertyStore = \
+ self.propertyStore1 = yield PropertyStore.load("user01", None, None, self._txn, 1)
</ins><span class="cx"> self.propertyStore1._shadowableKeys = store._shadowableKeys
</span><ins>+ self.propertyStore1._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx"> self.propertyStore1._globalKeys = store._globalKeys
</span><span class="cx">
</span><span class="cx"> store = self.propertyStore2
</span><del>- self.propertyStore2 = yield PropertyStore.load("user01", "user02", self._txn, 1)
</del><ins>+ self.propertyStore2 = yield PropertyStore.load("user01", "user02", None, self._txn, 1)
</ins><span class="cx"> self.propertyStore2._shadowableKeys = store._shadowableKeys
</span><ins>+ self.propertyStore2._proxyOverrideKeys = store._proxyOverrideKeys
</ins><span class="cx"> self.propertyStore2._globalKeys = store._globalKeys
</span><span class="cx">
</span><ins>+ store = self.propertyStore3
+ self.propertyStore3 = yield PropertyStore.load("user01", None, "user03", self._txn, 1)
+ self.propertyStore3._shadowableKeys = store._shadowableKeys
+ self.propertyStore3._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore3._globalKeys = store._globalKeys
</ins><span class="cx">
</span><ins>+ store = self.propertyStore4
+ self.propertyStore4 = yield PropertyStore.load("user01", "user02", "user04", self._txn, 1)
+ self.propertyStore4._shadowableKeys = store._shadowableKeys
+ self.propertyStore4._proxyOverrideKeys = store._proxyOverrideKeys
+ self.propertyStore4._globalKeys = store._globalKeys
+
+
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def test_concurrentInsertion(self):
</span><span class="cx"> """
</span><span class="lines">@@ -126,7 +157,7 @@
</span><span class="cx"> pass
</span><span class="cx"> self.addCleanup(maybeAbortIt)
</span><span class="cx"> concurrentPropertyStore = yield PropertyStore.load(
</span><del>- "user01", None, concurrentTxn, 1
</del><ins>+ "user01", None, None, concurrentTxn, 1
</ins><span class="cx"> )
</span><span class="cx"> concurrentPropertyStore[pname] = pval1
</span><span class="cx"> race = []
</span><span class="lines">@@ -155,8 +186,8 @@
</span><span class="cx"> def test_copy(self):
</span><span class="cx">
</span><span class="cx"> # Existing store
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 2)
- store1_user2 = yield PropertyStore.load("user01", "user02", self._txn, 2)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 2)
+ store1_user2 = yield PropertyStore.load("user01", "user02", None, self._txn, 2)
</ins><span class="cx">
</span><span class="cx"> # Populate current store with data
</span><span class="cx"> props_user1 = (
</span><span class="lines">@@ -178,18 +209,18 @@
</span><span class="cx"> self._txn = self.store.newTransaction()
</span><span class="cx">
</span><span class="cx"> # Existing store
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 2)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 2)
</ins><span class="cx">
</span><span class="cx"> # New store
</span><del>- store2_user1 = yield PropertyStore.load("user01", None, self._txn, 3)
</del><ins>+ store2_user1 = yield PropertyStore.load("user01", None, None, self._txn, 3)
</ins><span class="cx">
</span><span class="cx"> # Do copy and check results
</span><span class="cx"> yield store2_user1.copyAllProperties(store1_user1)
</span><span class="cx">
</span><span class="cx"> self.assertEqual(store1_user1.keys(), store2_user1.keys())
</span><span class="cx">
</span><del>- store1_user2 = yield PropertyStore.load("user01", "user02", self._txn, 2)
- store2_user2 = yield PropertyStore.load("user01", "user02", self._txn, 3)
</del><ins>+ store1_user2 = yield PropertyStore.load("user01", "user02", None, self._txn, 2)
+ store2_user2 = yield PropertyStore.load("user01", "user02", None, self._txn, 3)
</ins><span class="cx"> self.assertEqual(store1_user2.keys(), store2_user2.keys())
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -197,7 +228,7 @@
</span><span class="cx"> def test_insert_delete(self):
</span><span class="cx">
</span><span class="cx"> # Existing store
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 2)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 2)
</ins><span class="cx">
</span><span class="cx"> pname = propertyName("dummy1")
</span><span class="cx"> pvalue = propertyValue("value1-user1")
</span><span class="lines">@@ -221,7 +252,7 @@
</span><span class="cx">
</span><span class="cx"> # Existing store - add a normal property
</span><span class="cx"> self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
</ins><span class="cx"> self.assertTrue("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx">
</span><span class="cx"> pname1 = propertyName("dummy1")
</span><span class="lines">@@ -237,7 +268,7 @@
</span><span class="cx"> # Existing store - add a large property
</span><span class="cx"> self._txn = self.store.newTransaction()
</span><span class="cx"> self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
</ins><span class="cx"> self.assertTrue("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx">
</span><span class="cx"> pname2 = propertyName("dummy2")
</span><span class="lines">@@ -253,7 +284,7 @@
</span><span class="cx"> # Try again - the cacher will fail large values
</span><span class="cx"> self._txn = self.store.newTransaction()
</span><span class="cx"> self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
</ins><span class="cx"> self.assertFalse("SQL.props:10/user01" in store1_user1._cacher._memcacheProtocol._cache)
</span><span class="cx">
</span><span class="cx"> self.assertEqual(store1_user1[pname1], pvalue1)
</span><span class="lines">@@ -280,7 +311,7 @@
</span><span class="cx">
</span><span class="cx"> # Existing store - add a normal property
</span><span class="cx"> self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
</ins><span class="cx"> self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx">
</span><span class="cx"> pname1 = propertyName("dummy1")
</span><span class="lines">@@ -297,7 +328,7 @@
</span><span class="cx">
</span><span class="cx"> # Existing store - check a normal property
</span><span class="cx"> self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><del>- store1_user1 = yield PropertyStore.load("user01", None, self._txn, 10)
</del><ins>+ store1_user1 = yield PropertyStore.load("user01", None, None, self._txn, 10)
</ins><span class="cx"> self.assertFalse("SQL.props:10/user01" in PropertyStore._cacher._memcacheProtocol._cache)
</span><span class="cx"> self.assertEqual(store1_user1[pname1], pvalue1)
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavbasepropertystoretesttest_xattrpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/base/propertystore/test/test_xattr.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -43,6 +43,12 @@
</span><span class="cx"> self.propertyStore1 = self.propertyStore
</span><span class="cx"> self.propertyStore2 = PropertyStore("user01", lambda : tempFile)
</span><span class="cx"> self.propertyStore2._setPerUserUID("user02")
</span><ins>+ self.propertyStore2._setProxyUID("user02")
+ self.propertyStore3 = PropertyStore("user01", lambda : tempFile)
+ self.propertyStore3._setProxyUID("user03")
+ self.propertyStore4 = PropertyStore("user01", lambda : tempFile)
+ self.propertyStore4._setPerUserUID("user02")
+ self.propertyStore4._setProxyUID("user04")
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_init(self):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastorefilepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/file.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -319,6 +319,7 @@
</span><span class="cx"> PropertyName.fromElement(customxml.GETCTag),
</span><span class="cx"> PropertyName.fromElement(caldavxml.SupportedCalendarComponentSet),
</span><span class="cx"> ),
</span><ins>+ (),
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -748,6 +749,7 @@
</span><span class="cx"> PropertyName.fromElement(customxml.TwistedCalendarHasPrivateCommentsProperty),
</span><span class="cx"> PropertyName.fromElement(customxml.ScheduleChanges),
</span><span class="cx"> ),
</span><ins>+ (),
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingicaldiffpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/icaldiff.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -693,7 +693,7 @@
</span><span class="cx"> newexdates = set()
</span><span class="cx"> exdates = component.properties("EXDATE")
</span><span class="cx"> for exdate in exdates:
</span><del>- newexdates.update([value.getValue().duplicate().adjustToUTC() for value in exdate.value()])
</del><ins>+ newexdates.update([exvalue.getValue().duplicate().adjustToUTC() for exvalue in exdate.value()])
</ins><span class="cx">
</span><span class="cx"> return timeRange.getStart(), timeRange.getEnd(), newdue, newrrules, newrdates, newexdates
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoreschedulingworkpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/scheduling/work.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -174,7 +174,6 @@
</span><span class="cx"> smartMerge=smart_merge
</span><span class="cx"> ))
</span><span class="cx"> cls._enqueued()
</span><del>- yield proposal.whenProposed()
</del><span class="cx"> log.debug("ScheduleOrganizerWork - enqueued for ID: {id}, UID: {uid}, organizer: {org}", id=proposal.workItem.workID, uid=uid, org=organizer)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -296,7 +295,6 @@
</span><span class="cx"> changedRids=",".join(map(lambda x: "" if x is None else str(x), changedRids)) if changedRids else None,
</span><span class="cx"> ))
</span><span class="cx"> cls._enqueued()
</span><del>- yield proposal.whenProposed()
</del><span class="cx"> log.debug("ScheduleReplyWork - enqueued for ID: {id}, UID: {uid}, attendee: {att}", id=proposal.workItem.workID, uid=resource.uid(), att=attendee)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -379,7 +377,6 @@
</span><span class="cx"> icalendarText=calendar.getTextWithTimezones(includeTimezones=not config.EnableTimezonesByReference),
</span><span class="cx"> ))
</span><span class="cx"> cls._enqueued()
</span><del>- yield proposal.whenProposed()
</del><span class="cx"> log.debug("ScheduleReplyCancelWork - enqueued for ID: {id}, UID: {uid}, attendee: {att}", id=proposal.workItem.workID, uid=calendar.resourceUID(), att=attendee)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -486,7 +483,6 @@
</span><span class="cx"> notBefore=notBefore,
</span><span class="cx"> ))
</span><span class="cx"> cls._enqueued()
</span><del>- yield proposal.whenProposed()
</del><span class="cx"> log.debug("ScheduleRefreshWork - enqueued for ID: {id}, UID: {uid}, attendees: {att}", id=proposal.workItem.workID, uid=organizer_resource.uid(), att=",".join(attendeesToRefresh))
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -626,7 +622,6 @@
</span><span class="cx"> notBefore=notBefore,
</span><span class="cx"> ))
</span><span class="cx"> cls._enqueued()
</span><del>- yield proposal.whenProposed()
</del><span class="cx"> log.debug("ScheduleAutoReplyWork - enqueued for ID: {id}, UID: {uid}", id=proposal.workItem.workID, uid=resource.uid())
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/sql.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> from twisted.python import hashlib
</span><span class="cx"> from twisted.python.failure import Failure
</span><span class="cx">
</span><del>-from twistedcaldav import caldavxml, customxml, ical
</del><ins>+from twistedcaldav import customxml, ical
</ins><span class="cx"> from twistedcaldav.config import config
</span><span class="cx"> from twistedcaldav.datafilters.peruserdata import PerUserDataFilter
</span><span class="cx"> from twistedcaldav.dateops import normalizeForIndex, datetimeMktime, \
</span><span class="lines">@@ -56,6 +56,7 @@
</span><span class="cx"> from twistedcaldav.ical import Component, InvalidICalendarDataError, Property
</span><span class="cx"> from twistedcaldav.instance import InvalidOverriddenInstanceError
</span><span class="cx"> from twistedcaldav.memcacher import Memcacher
</span><ins>+from twistedcaldav.timezones import TimezoneException
</ins><span class="cx">
</span><span class="cx"> from txdav.base.propertystore.base import PropertyName
</span><span class="cx"> from txdav.caldav.datastore.query.builder import buildExpression
</span><span class="lines">@@ -80,7 +81,7 @@
</span><span class="cx"> InvalidDefaultCalendar, \
</span><span class="cx"> InvalidAttachmentOperation, DuplicatePrivateCommentsError, \
</span><span class="cx"> TimeRangeUpperLimit, TimeRangeLowerLimit, InvalidSplit, \
</span><del>- AttachmentSizeTooLarge
</del><ins>+ AttachmentSizeTooLarge, UnknownTimezone
</ins><span class="cx"> from txdav.caldav.icalendarstore import QuotaExceeded
</span><span class="cx"> from txdav.common.datastore.sql import CommonHome, CommonHomeChild, \
</span><span class="cx"> CommonObjectResource, ECALENDARTYPE
</span><span class="lines">@@ -94,8 +95,9 @@
</span><span class="cx"> ObjectResourceNameNotAllowedError, TooManyObjectResourcesError, \
</span><span class="cx"> InvalidUIDError, UIDExistsError, UIDExistsElsewhereError, \
</span><span class="cx"> InvalidResourceMove, InvalidComponentForStoreError, \
</span><del>- NoSuchObjectResourceError
</del><ins>+ NoSuchObjectResourceError, ConcurrentModification
</ins><span class="cx"> from txdav.xml import element
</span><ins>+from txdav.xml.parser import WebDAVDocument
</ins><span class="cx">
</span><span class="cx"> from txdav.idav import ChangeCategory
</span><span class="cx">
</span><span class="lines">@@ -966,6 +968,10 @@
</span><span class="cx">
</span><span class="cx"> _supportedComponents = None
</span><span class="cx">
</span><ins>+ _shadowProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.Calendars.CollectionProperties.Shadowable])
+ _proxyProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.Calendars.CollectionProperties.ProxyOverride])
+ _globalProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.Calendars.CollectionProperties.Global])
+
</ins><span class="cx"> def __init__(self, *args, **kw):
</span><span class="cx"> """
</span><span class="cx"> Initialize a calendar pointing at a record in a database.
</span><span class="lines">@@ -1294,17 +1300,9 @@
</span><span class="cx"> def initPropertyStore(self, props):
</span><span class="cx"> # Setup peruser special properties
</span><span class="cx"> props.setSpecialProperties(
</span><del>- # Shadowable
- (
- PropertyName.fromElement(caldavxml.CalendarDescription),
- PropertyName.fromElement(caldavxml.CalendarTimeZone),
- ),
-
- # Global
- (
- PropertyName.fromElement(customxml.GETCTag),
- PropertyName.fromElement(caldavxml.SupportedCalendarComponentSet),
- ),
</del><ins>+ self._shadowProperties,
+ self._globalProperties,
+ self._proxyProperties,
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -1353,9 +1351,9 @@
</span><span class="cx"> Sub-classes should override to expose the properties they care about.
</span><span class="cx"> """
</span><span class="cx"> props = {}
</span><del>- for elem in (element.DisplayName, caldavxml.CalendarDescription, caldavxml.CalendarTimeZone, customxml.CalendarColor,):
- if PropertyName.fromElement(elem) in self.properties():
- props[elem.sname()] = str(self.properties()[PropertyName.fromElement(elem)])
</del><ins>+ for ename in (PropertyName.fromElement(element.DisplayName),) + self._shadowProperties:
+ if ename in self.properties():
+ props[ename.toString()] = self.properties()[ename].toxml()
</ins><span class="cx"> return props
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -1366,15 +1364,15 @@
</span><span class="cx"> care about.
</span><span class="cx"> """
</span><span class="cx"> # Initialize these for all shares
</span><del>- for elem in (caldavxml.CalendarDescription, caldavxml.CalendarTimeZone,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
</del><ins>+ for ename in self._shadowProperties:
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
</ins><span class="cx">
</span><span class="cx"> # Only initialize these for direct shares
</span><span class="cx"> if self.direct():
</span><del>- for elem in (element.DisplayName, customxml.CalendarColor,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
</del><ins>+ for ename in (PropertyName.fromElement(element.DisplayName),):
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> # FIXME: this is DAV-ish. Data store calendar objects don't have
</span><span class="lines">@@ -1894,6 +1892,10 @@
</span><span class="cx">
</span><span class="cx"> # Basic validation
</span><span class="cx">
</span><ins>+ # Possible timezone stripping
+ if config.EnableTimezonesByReference:
+ component.stripKnownTimezones()
+
</ins><span class="cx"> # Do validation on external requests
</span><span class="cx"> if internal_state == ComponentUpdateState.NORMAL:
</span><span class="cx">
</span><span class="lines">@@ -1920,10 +1922,6 @@
</span><span class="cx"> # Valid attendee list size check
</span><span class="cx"> yield self.validAttendeeListSizeCheck(component, inserting)
</span><span class="cx">
</span><del>- # Possible timezone stripping
- if config.EnableTimezonesByReference:
- component.stripKnownTimezones()
-
</del><span class="cx"> # Check location/resource organizer requirement
</span><span class="cx"> self.validLocationResourceOrganizer(component, inserting, internal_state)
</span><span class="cx">
</span><span class="lines">@@ -2098,12 +2096,16 @@
</span><span class="cx">
</span><span class="cx"> try:
</span><span class="cx"> component.validCalendarData(validateRecurrences=self._txn._migrating)
</span><del>- except InvalidICalendarDataError, e:
</del><ins>+ except InvalidICalendarDataError as e:
</ins><span class="cx"> raise InvalidObjectResourceError(str(e))
</span><span class="cx"> try:
</span><span class="cx"> component.validCalendarForCalDAV(methodAllowed=self.calendar().isInbox())
</span><del>- except InvalidICalendarDataError, e:
</del><ins>+ except InvalidICalendarDataError as e:
</ins><span class="cx"> raise InvalidComponentForStoreError(str(e))
</span><ins>+ except TimezoneException as e:
+ # tzid not available
+ raise UnknownTimezone(str(e))
+
</ins><span class="cx"> try:
</span><span class="cx"> if self._txn._migrating:
</span><span class="cx"> component.validOrganizerForScheduling(doFix=True)
</span><span class="lines">@@ -2169,17 +2171,14 @@
</span><span class="cx"> cutype == "RESOURCE" and config.Scheduling.Options.TrackUnscheduledResourceData):
</span><span class="cx">
</span><span class="cx"> # Find current principal and update modified by details
</span><del>- if self._txn._authz_uid is not None:
- authz = yield self.directoryService().recordWithUID(self._txn._authz_uid.decode("utf-8"))
- prop = Property("X-CALENDARSERVER-MODIFIED-BY", authz.canonicalCalendarUserAddress())
- prop.setParameter("CN", authz.displayName)
- for candidate in authz.calendarUserAddresses:
- if candidate.startswith("mailto:"):
- prop.setParameter("EMAIL", candidate[7:])
- break
- component.replacePropertyInAllComponents(prop)
- else:
- component.removeAllPropertiesWithName("X-CALENDARSERVER-MODIFIED-BY")
</del><ins>+ authz = yield self.directoryService().recordWithUID(self.calendar().viewerHome().authzuid().decode("utf-8"))
+ prop = Property("X-CALENDARSERVER-MODIFIED-BY", authz.canonicalCalendarUserAddress())
+ prop.setParameter("CN", authz.displayName)
+ for candidate in authz.calendarUserAddresses:
+ if candidate.startswith("mailto:"):
+ prop.setParameter("EMAIL", candidate[7:])
+ break
+ component.replacePropertyInAllComponents(prop)
</ins><span class="cx"> self._componentChanged = True
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -2197,7 +2196,7 @@
</span><span class="cx">
</span><span class="cx"> # Only DAV:owner is able to set the property to other than PUBLIC
</span><span class="cx"> if internal_state == ComponentUpdateState.NORMAL:
</span><del>- if (self._txn._authz_uid is None or self.calendar().viewerHome().uid() != self._txn._authz_uid) and access != Component.ACCESS_PUBLIC:
</del><ins>+ if (self.calendar().viewerHome().uid() != self.calendar().viewerHome().authzuid()) and access != Component.ACCESS_PUBLIC:
</ins><span class="cx"> raise InvalidCalendarAccessError("Private event access level change not allowed")
</span><span class="cx">
</span><span class="cx"> self.accessMode = access
</span><span class="lines">@@ -3916,13 +3915,16 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> def initPropertyStore(self, props):
</span><del>- # Setup peruser special properties
</del><ins>+ # Setup peruser special properties - these are hard-coded for now as clients are not expected
+ # to be using properties on resources - but we do use one special "live" property which we
+ # keep in the propstore.
</ins><span class="cx"> props.setSpecialProperties(
</span><span class="cx"> (
</span><span class="cx"> ),
</span><span class="cx"> (
</span><span class="cx"> PropertyName.fromElement(customxml.ScheduleChanges),
</span><span class="cx"> ),
</span><ins>+ (),
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -4046,7 +4048,7 @@
</span><span class="cx"> in L{CalendarObject.splitAt}).
</span><span class="cx"> @type rid: L{DateTime}
</span><span class="cx"> @param olderUID: sets the iCalendar UID to be used in the new resource created during the split.
</span><del>- If L{None} a UUID is generated and used.
</del><ins>+ If set to L{None}, a UUID is generated and used.
</ins><span class="cx"> @type olderUID: L{str}
</span><span class="cx"> """
</span><span class="cx">
</span><span class="lines">@@ -4068,7 +4070,7 @@
</span><span class="cx"> newerUID = calendar.resourceUID()
</span><span class="cx"> if olderUID is None:
</span><span class="cx"> olderUID = str(uuid.uuid4())
</span><del>- olderResourceName = olderUID
</del><ins>+ olderResourceName = "{0}.ics".format(olderUID)
</ins><span class="cx"> else:
</span><span class="cx"> olderResourceName = "{0}.ics".format(olderUID.encode("base64")[:-1].rstrip("="))
</span><span class="cx">
</span><span class="lines">@@ -4105,10 +4107,19 @@
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def splitForAttendee(self, rid=None, olderUID=None):
</span><span class="cx"> """
</span><del>- Split this attendee resource as per L{split}.
</del><ins>+ Split this attendee resource as per L{split}. Note this is also used on any Organizer inbox items.
+ Also, for inbox items, we are not protected by the ImplicitUID lock - it is possible that the inbox
+ resource gets deleted whilst we are iterating the entire set of UIDs, so we need to handle a
+ L{ConcurrentModification} error here by ignoring it.
</ins><span class="cx"> """
</span><span class="cx"> splitter = iCalSplitter(config.Scheduling.Options.Splitting.Size, config.Scheduling.Options.Splitting.PastDays)
</span><del>- ical = (yield self.component())
</del><ins>+ try:
+ ical = (yield self.component())
+ except ConcurrentModification:
+ # Resource was deleted between the time we looked it up and now - this is OK,
+ # We can simply ignore it as there is nothing left to split
+ returnValue(None)
+
</ins><span class="cx"> ical_old, ical_new = splitter.split(ical, rid=rid, olderUID=olderUID)
</span><span class="cx"> ical_new.bumpiTIPInfo(oldcalendar=ical, doSequence=True)
</span><span class="cx"> ical_old.bumpiTIPInfo(oldcalendar=None, doSequence=True)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_implicitpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_implicit.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -306,18 +306,18 @@
</span><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> self.patch(config, "EnablePrivateEvents", True)
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user02"
</ins><span class="cx"> calendar_collection = (yield self.calendarUnderTest(home="user01"))
</span><span class="cx"> calendar = Component.fromString(data1)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user02"
</del><span class="cx"> yield self.failUnlessFailure(calendar_collection.createCalendarObjectWithName("test.ics", calendar), InvalidCalendarAccessError)
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="cx"> # This one should be OK
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
</ins><span class="cx"> calendar_collection = (yield self.calendarUnderTest(home="user01"))
</span><span class="cx"> calendar = Component.fromString(data1)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
</del><span class="cx"> yield calendar_collection.createCalendarObjectWithName("test.ics", calendar)
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="lines">@@ -335,10 +335,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
</ins><span class="cx"> calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
</span><span class="cx"> calendar = Component.fromString(data2)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
</del><span class="cx"> yield calendar_resource.setComponent(calendar)
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="lines">@@ -516,10 +516,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
</ins><span class="cx"> calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
</span><span class="cx"> calendar = Component.fromString(data2)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
</del><span class="cx"> yield calendar_resource.setComponent(calendar)
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="lines">@@ -569,10 +569,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
</ins><span class="cx"> calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
</span><span class="cx"> calendar = Component.fromString(data2)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
</del><span class="cx"> yield calendar_resource.setComponent(calendar)
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="lines">@@ -623,10 +623,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
</ins><span class="cx"> calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
</span><span class="cx"> calendar = Component.fromString(data2)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
</del><span class="cx"> yield calendar_resource.setComponent(calendar)
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="lines">@@ -682,10 +682,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
</ins><span class="cx"> calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
</span><span class="cx"> calendar = Component.fromString(data2)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
</del><span class="cx"> yield calendar_resource.setComponent(calendar)
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="lines">@@ -789,10 +789,10 @@
</span><span class="cx"> END:VCALENDAR
</span><span class="cx"> """
</span><span class="cx">
</span><ins>+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user01"
</ins><span class="cx"> calendar_resource = (yield self.calendarObjectUnderTest(name="test.ics", home="user01",))
</span><span class="cx"> calendar = Component.fromString(data2)
</span><del>- txn = self.transactionUnderTest()
- txn._authz_uid = "user01"
</del><span class="cx"> result = (yield calendar_resource.setComponent(calendar))
</span><span class="cx"> yield self.commit()
</span><span class="cx"> self.assertTrue(result)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx">
</span><span class="cx"> from twistedcaldav import caldavxml, ical
</span><span class="cx"> from twistedcaldav.caldavxml import CalendarDescription
</span><del>-from twistedcaldav.config import config
</del><ins>+from twistedcaldav.stdconfig import config
</ins><span class="cx"> from twistedcaldav.dateops import datetimeMktime
</span><span class="cx"> from twistedcaldav.ical import Component, normalize_iCalStr, diff_iCalStrs
</span><span class="cx"> from twistedcaldav.instance import InvalidOverriddenInstanceError
</span><span class="lines">@@ -49,19 +49,21 @@
</span><span class="cx"> from txdav.caldav.datastore.scheduling.itip import iTIPRequestStatus
</span><span class="cx"> from txdav.caldav.datastore.scheduling.processing import ImplicitProcessor
</span><span class="cx"> from txdav.caldav.datastore.scheduling.scheduler import ScheduleResponseQueue
</span><del>-from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests, \
- test_event_text
-from txdav.caldav.datastore.test.test_file import setUpCalendarStore
-from txdav.caldav.datastore.util import _migrateCalendar, migrateHome
-from txdav.caldav.icalendarstore import ComponentUpdateState, InvalidDefaultCalendar, \
- InvalidSplit
</del><ins>+from txdav.caldav.datastore.sql import CalendarStoreFeatures
</ins><span class="cx"> from txdav.common.datastore.sql import ECALENDARTYPE, CommonObjectResource, \
</span><span class="cx"> CommonStoreTransactionMonitor
</span><span class="cx"> from txdav.common.datastore.sql_tables import schema, _BIND_MODE_DIRECT, \
</span><span class="cx"> _BIND_STATUS_ACCEPTED, _TRANSP_OPAQUE
</span><ins>+from txdav.caldav.datastore.test.common import CommonTests as CalendarCommonTests, \
+ test_event_text
+from txdav.caldav.datastore.test.test_file import setUpCalendarStore
</ins><span class="cx"> from txdav.common.datastore.test.util import populateCalendarsFrom, \
</span><span class="cx"> CommonCommonTests
</span><del>-from txdav.common.icommondatastore import NoSuchObjectResourceError
</del><ins>+from txdav.caldav.datastore.util import _migrateCalendar, migrateHome
+from txdav.caldav.icalendarstore import ComponentUpdateState, InvalidDefaultCalendar, \
+ InvalidSplit, UnknownTimezone
+from txdav.common.icommondatastore import NoSuchObjectResourceError, \
+ InvalidComponentForStoreError
</ins><span class="cx"> from txdav.idav import ChangeCategory
</span><span class="cx"> from txdav.xml.rfc2518 import GETContentLanguage, ResourceType
</span><span class="cx">
</span><span class="lines">@@ -1976,7 +1978,46 @@
</span><span class="cx"> self.assertFalse(inbox.isUsedForFreeBusy())
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
+ def test_missingTimezone(self):
+ """
+ Make sure missing timezone causes an exception, whether or timezones by reference is on.
+ """
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART;TZID=BOGUS:20130806T000000
+DURATION:PT1H
+DTSTAMP:20051222T210507Z
+SUMMARY:1
+END:VEVENT
+END:VCALENDAR
+"""
</ins><span class="cx">
</span><ins>+ self.patch(config, "EnableTimezonesByReference", False)
+
+ yield self.homeUnderTest(name="user01", create=True)
+ calendar = yield self.calendarUnderTest(name="calendar", home="user01")
+ yield self.failUnlessFailure(
+ calendar.createCalendarObjectWithName("data1.ics", Component.fromString(data)),
+ InvalidComponentForStoreError,
+ )
+ yield self.abort()
+
+ self.patch(config, "EnableTimezonesByReference", True)
+
+ yield self.homeUnderTest(name="user01", create=True)
+ calendar = yield self.calendarUnderTest(name="calendar", home="user01")
+ yield self.failUnlessFailure(
+ calendar.createCalendarObjectWithName("data1.ics", Component.fromString(data)),
+ UnknownTimezone,
+ )
+ yield self.abort()
+
+
+
</ins><span class="cx"> class SchedulingTests(CommonCommonTests, unittest.TestCase):
</span><span class="cx"> """
</span><span class="cx"> CalendarObject splitting tests
</span><span class="lines">@@ -2166,8 +2207,8 @@
</span><span class="cx"> PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-DTSTART;TZID=America/Los_Angeles:20131211T164500
-DTEND;TZID=America/Los_Angeles:20131211T174500
</del><ins>+DTSTART:20131211T164500Z
+DURATION:PT1H
</ins><span class="cx"> ATTENDEE;CN=Conference Room One;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
</span><span class="cx"> T;SCHEDULE-STATUS=2.0:urn:x-uid:room-addr-1
</span><span class="cx"> ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01@example.com;PARTSTAT=AC
</span><span class="lines">@@ -2182,9 +2223,9 @@
</span><span class="cx"> END:VEVENT
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-RECURRENCE-ID;TZID=America/Los_Angeles:20131214T164500
-DTSTART;TZID=America/Los_Angeles:20131214T160000
-DTEND;TZID=America/Los_Angeles:20131214T170000
</del><ins>+RECURRENCE-ID:20131214T164500Z
+DTSTART:20131214T160000Z
+DURATION:PT1H
</ins><span class="cx"> ATTENDEE;CN=Conference Room Two;CUTYPE=ROOM;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPAN
</span><span class="cx"> T;SCHEDULE-STATUS=2.0:urn:x-uid:room-addr-2
</span><span class="cx"> ATTENDEE;CN=User 01;CUTYPE=INDIVIDUAL;EMAIL=user01@example.com;PARTSTAT=AC
</span><span class="lines">@@ -2239,8 +2280,8 @@
</span><span class="cx"> PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-DTSTART;TZID=America/Los_Angeles:20131211T164500
-DTEND;TZID=America/Los_Angeles:20131211T174500
</del><ins>+DTSTART:20131211T164500Z
+DURATION:PT1H
</ins><span class="cx"> ATTENDEE;X-APPLE-HOSTED-STATUS=EXTERNAL:urn:x-uid:user01
</span><span class="cx"> ATTENDEE:mailto:someone_external@example.com
</span><span class="cx"> CREATED:20131211T221854Z
</span><span class="lines">@@ -2292,14 +2333,14 @@
</span><span class="cx"> PRODID:-//Apple Inc.//Mac OS X 10.9.1//EN
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:561F5DBB-3F38-4B3A-986F-DD05CBAF554F
</span><del>-DTSTART;TZID=America/Los_Angeles:20131211T164500
</del><ins>+DTSTART:20131211T164500Z
</ins><span class="cx"> DURATION:PT1H
</span><span class="cx"> ATTENDEE:urn:x-uid:user01
</span><span class="cx"> CREATED:20131211T221854Z
</span><span class="cx"> DTSTAMP:20131211T230632Z
</span><span class="cx"> ORGANIZER:urn:x-uid:user01
</span><span class="cx"> RRULE:FREQ=DAILY;COUNT=1
</span><del>-EXDATE;TZID=America/Los_Angeles:20131211T164500
</del><ins>+EXDATE:20131211T164500Z
</ins><span class="cx"> SUMMARY:external
</span><span class="cx"> END:VEVENT
</span><span class="cx"> END:VCALENDAR
</span><span class="lines">@@ -5334,7 +5375,7 @@
</span><span class="cx"> BEGIN:VEVENT
</span><span class="cx"> UID:12345-67890
</span><span class="cx"> DTSTART:%(now_back30)s
</span><del>-DURATION:PT1H
</del><ins>+DURATION:PT2H
</ins><span class="cx"> ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01@example.com
</span><span class="cx"> ATTENDEE:mailto:user02@example.com
</span><span class="cx"> DTSTAMP:20051222T210507Z
</span><span class="lines">@@ -5699,6 +5740,309 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><ins>+ def test_calendarObjectSplit_inbox_delete(self):
+ """
+ Test that splitting of calendar objects works when an inbox item is deleted
+ whilst split processing is happening.
+ """
+ data = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_back30)s
+DURATION:PT2H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@example.com
+RRULE:FREQ=DAILY
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_back25)s
+DTSTART:%(now_back25)s
+DURATION:PT1H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@example.com
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_back24)s
+DTSTART:%(now_back24)s
+DURATION:PT1H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@example.com
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_fwd10)s
+DTSTART:%(now_fwd10)s
+DURATION:PT1H
+ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01@example.com
+ATTENDEE:mailto:user02@example.com
+DTSTAMP:20051222T210507Z
+ORGANIZER:mailto:user01@example.com
+END:VEVENT
+END:VCALENDAR
+"""
+
+ data_future = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_back14)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_fwd10)s
+DTSTART:%(now_fwd10)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+END:VCALENDAR
+"""
+
+ data_past = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:%(uid)s
+DTSTART:%(now_back30)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back25)s
+DTSTART:%(now_back25)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back24)s
+DTSTART:%(now_back24)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+END:VCALENDAR
+"""
+
+ data_future2 = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:12345-67890
+DTSTART:%(now_back14)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:12345-67890
+RECURRENCE-ID:%(now_fwd10)s
+DTSTART:%(now_fwd10)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:X-CALENDARSERVER-PERUSER
+UID:12345-67890
+X-CALENDARSERVER-PERUSER-UID:user02
+BEGIN:X-CALENDARSERVER-PERINSTANCE
+TRANSP:TRANSPARENT
+END:X-CALENDARSERVER-PERINSTANCE
+END:X-CALENDARSERVER-PERUSER
+END:VCALENDAR
+"""
+
+ data_past2 = """BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:%(uid)s
+DTSTART:%(now_back30)s
+DURATION:PT2H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+RRULE:FREQ=DAILY;UNTIL=%(now_back14_1)s
+SEQUENCE:1
+SUMMARY:1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+ 1234567890123456789012345678901234567890
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back25)s
+DTSTART:%(now_back25)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:VEVENT
+UID:%(uid)s
+RECURRENCE-ID:%(now_back24)s
+DTSTART:%(now_back24)s
+DURATION:PT1H
+ATTENDEE;CN=User 01;EMAIL=user01@example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
+ATTENDEE;CN=User 02;EMAIL=user02@example.com;RSVP=TRUE:urn:x-uid:user02
+DTSTAMP:20051222T210507Z
+ORGANIZER;CN=User 01;EMAIL=user01@example.com:urn:x-uid:user01
+RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
+SEQUENCE:1
+END:VEVENT
+BEGIN:X-CALENDARSERVER-PERUSER
+UID:%(uid)s
+X-CALENDARSERVER-PERUSER-UID:user02
+BEGIN:X-CALENDARSERVER-PERINSTANCE
+TRANSP:TRANSPARENT
+END:X-CALENDARSERVER-PERINSTANCE
+END:X-CALENDARSERVER-PERUSER
+END:VCALENDAR
+"""
+
+ # Create one event without active split
+ self.patch(config.Scheduling.Options.Splitting, "Enabled", False)
+ calendar = yield self.calendarUnderTest(name="calendar", home="user01")
+ component = Component.fromString(data % self.subs)
+ cobj = yield calendar.createCalendarObjectWithName("data1.ics", component)
+ self.assertFalse(hasattr(cobj, "_workItems"))
+ yield self.commit()
+
+ # Patch resource lookup code so that it deletes the inbox resource after lookup is done
+ oldLookup = CalendarStoreFeatures.calendarObjectsWithUID
+ @inlineCallbacks
+ def _lookup(csself, txn, uid):
+ results = yield oldLookup(csself, txn, uid)
+
+ # Delete inbox item in another txn
+ newtxn = self.concurrentTransaction()
+ cal = yield self.calendarUnderTest(name="inbox", home="user02")
+ cobjs = yield cal.calendarObjects()
+ yield cobjs[0].remove()
+ yield newtxn.commit()
+
+ returnValue(results)
+
+ self.patch(CalendarStoreFeatures, "calendarObjectsWithUID", _lookup)
+
+ cobj = yield self.calendarObjectUnderTest(name="data1.ics", calendar_name="calendar", home="user01")
+ yield cobj.split()
+ yield self.commit()
+
+ # Get the existing and new object data
+ cal = yield self.calendarUnderTest(name="calendar", home="user01")
+ cobjs = yield cal.calendarObjects()
+ self.assertEqual(len(cobjs), 2)
+ for cobj in cobjs:
+ self.assertTrue(cobj.isScheduleObject)
+ ical = yield cobj.component()
+ if ical.resourceUID() == "12345-67890":
+ ical_future = ical
+ else:
+ ical_past = ical
+
+ relID = ical_future.masterComponent().propertyValue("RELATED-TO")
+ newUID = ical_past.masterComponent().propertyValue("UID")
+
+ # Verify user01 data
+ title = "user01"
+ relsubs = dict(self.subs)
+ relsubs["uid"] = newUID
+ relsubs["relID"] = relID
+ self.assertEqual(normalize_iCalStr(ical_future), normalize_iCalStr(data_future) % relsubs, "Failed future: %s" % (title,))
+ self.assertEqual(normalize_iCalStr(ical_past), normalize_iCalStr(data_past) % relsubs, "Failed past: %s" % (title,))
+
+ # Get user02 data
+ cal = yield self.calendarUnderTest(name="calendar", home="user02")
+ cobjs = yield cal.calendarObjects()
+ self.assertEqual(len(cobjs), 2)
+ for cobj in cobjs:
+ ical = yield cobj.component()
+ if ical.resourceUID() == "12345-67890":
+ ical_future = ical
+ else:
+ ical_past = ical
+
+ cal = yield self.calendarUnderTest(name="inbox", home="user02")
+ cobjs = yield cal.calendarObjects()
+ self.assertEqual(len(cobjs), 0)
+
+ # Verify user02 data
+ title = "user02"
+ self.assertEqual(normalize_iCalStr(ical_future), normalize_iCalStr(data_future2) % relsubs, "Failed future: %s" % (title,))
+ self.assertEqual(normalize_iCalStr(ical_past), normalize_iCalStr(data_past2) % relsubs, "Failed past: %s" % (title,))
+
+
+ @inlineCallbacks
</ins><span class="cx"> def _setupSplitAt(self):
</span><span class="cx"> """
</span><span class="cx"> Test that user triggered splitting of calendar objects works.
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavdatastoretesttest_sql_sharingpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/datastore/test/test_sql_sharing.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -23,6 +23,10 @@
</span><span class="cx"> populateCalendarsFrom
</span><span class="cx"> from txdav.common.datastore.sql_tables import _BIND_MODE_READ, \
</span><span class="cx"> _BIND_STATUS_INVITED, _BIND_MODE_DIRECT, _BIND_STATUS_ACCEPTED
</span><ins>+from txdav.base.propertystore.base import PropertyName
+from txdav.xml.base import WebDAVTextElement
+from twistedcaldav import customxml
+from txdav.xml.element import registerElement, registerElementClass
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> class BaseSharingTests(CommonCommonTests, TestCase):
</span><span class="lines">@@ -489,7 +493,94 @@
</span><span class="cx"> yield self.commit()
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
+ def test_perUserSharedProxyCollectionProperties(self):
+ """
+ Test that sharees and proxies get their own per-user properties, with some being
+ initialized based ont he owner value.
+ """
+ @registerElement
+ @registerElementClass
+ class DummySharingProperty (WebDAVTextElement):
+ namespace = "http://calendarserver.org/ns/"
+ name = "dummy-sharing"
</ins><span class="cx">
</span><ins>+ shared_name = yield self._createShare()
+
+ # Add owner properties
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user01")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000001")
+ yield self.commit()
+
+ # Check/add sharee properties
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertTrue(PropertyName.fromElement(DummySharingProperty) not in calendar.properties())
+ self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) not in calendar.properties())
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user02")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000002")
+ yield self.commit()
+
+ # Check/add owner proxy properties
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user03"
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+ self.assertTrue(PropertyName.fromElement(DummySharingProperty) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user01")
+ self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000001")
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user03")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000003")
+ yield self.commit()
+
+ # Check/add sharee proxy properties
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user04"
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertTrue(PropertyName.fromElement(DummySharingProperty) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user02")
+ self.assertTrue(PropertyName.fromElement(customxml.CalendarColor) in calendar.properties())
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000002")
+ calendar.properties()[PropertyName.fromElement(DummySharingProperty)] = DummySharingProperty.fromString("user04")
+ calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)] = customxml.CalendarColor.fromString("#000004")
+ yield self.commit()
+
+ # Validate all properties
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user03")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000001")
+ yield self.commit()
+
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user04")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000002")
+ yield self.commit()
+
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user03"
+ home = yield self.homeUnderTest(name="user01")
+ calendar = yield home.calendarWithName("calendar")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user03")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000003")
+ yield self.commit()
+
+ txn = self.transactionUnderTest()
+ txn._authz_uid = "user04"
+ home = yield self.homeUnderTest(name="user02")
+ calendar = yield home.calendarWithName(shared_name)
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(DummySharingProperty)]), "user04")
+ self.assertEqual(str(calendar.properties()[PropertyName.fromElement(customxml.CalendarColor)]), "#000004")
+ yield self.commit()
+
+
+
</ins><span class="cx"> class SharingRevisions(BaseSharingTests):
</span><span class="cx"> """
</span><span class="cx"> Test store-based sharing and interaction with revision table.
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcaldavicalendarstorepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/caldav/icalendarstore.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -857,6 +857,13 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><ins>+class UnknownTimezone(CommonStoreError):
+ """
+ Unknown timezone id used.
+ """
+
+
+
</ins><span class="cx"> #
</span><span class="cx"> # FIXME: These may belong elsewhere.
</span><span class="cx"> #
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorefilepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/file.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -139,6 +139,7 @@
</span><span class="cx"> (
</span><span class="cx"> PropertyName.fromElement(customxml.GETCTag),
</span><span class="cx"> ),
</span><ins>+ (),
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastorequeryfilterpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/query/filter.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx"> return not allof
</span><span class="cx"> return allof
</span><span class="cx"> else:
</span><del>- return False
</del><ins>+ return True
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def valid(self):
</span><span class="lines">@@ -242,8 +242,8 @@
</span><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> allof = self.propfilter_test == "allof"
</span><del>- if self.qualifier and allof != self.qualifier.match(item):
- return not allof
</del><ins>+ if self.qualifier and allof and not self.qualifier.match(item):
+ return False
</ins><span class="cx">
</span><span class="cx"> if len(self.filters) > 0:
</span><span class="cx"> for filter in self.filters:
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcarddavdatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/carddav/datastore/sql.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, returnValue
</span><span class="cx"> from twisted.python import hashlib
</span><span class="cx">
</span><del>-from twistedcaldav import carddavxml, customxml
</del><span class="cx"> from twistedcaldav.config import config
</span><span class="cx"> from twistedcaldav.memcacher import Memcacher
</span><span class="cx"> from twistedcaldav.vcard import Component as VCard, InvalidVCardDataError, Property, \
</span><span class="lines">@@ -65,6 +64,7 @@
</span><span class="cx"> AllRetriesFailed, ObjectResourceNameAlreadyExistsError, \
</span><span class="cx"> SyncTokenValidException, IndexedSearchException
</span><span class="cx"> from txdav.xml import element
</span><ins>+from txdav.xml.parser import WebDAVDocument
</ins><span class="cx">
</span><span class="cx"> from zope.interface.declarations import implements
</span><span class="cx">
</span><span class="lines">@@ -87,9 +87,9 @@
</span><span class="cx"> _cacher = Memcacher("SQL.adbkhome", pickle=True, key_normalization=False)
</span><span class="cx">
</span><span class="cx">
</span><del>- def __init__(self, transaction, ownerUID):
</del><ins>+ def __init__(self, transaction, ownerUID, authzUID=None):
</ins><span class="cx">
</span><del>- super(AddressBookHome, self).__init__(transaction, ownerUID)
</del><ins>+ super(AddressBookHome, self).__init__(transaction, ownerUID, authzUID=authzUID)
</ins><span class="cx"> self._addressbookPropertyStoreID = None
</span><span class="cx"> self._addressbook = None
</span><span class="cx">
</span><span class="lines">@@ -467,6 +467,9 @@
</span><span class="cx"> "UID": _objectSchema.UID,
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ _shadowProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.AddressBooks.CollectionProperties.Shadowable])
+ _proxyProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.AddressBooks.CollectionProperties.ProxyOverride])
+ _globalProperties = tuple([PropertyName.fromString(prop) for prop in config.Sharing.AddressBooks.CollectionProperties.Global])
</ins><span class="cx">
</span><span class="cx"> @classmethod
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -797,6 +800,7 @@
</span><span class="cx"> props = yield PropertyStore.load(
</span><span class="cx"> self.ownerHome().uid(),
</span><span class="cx"> self.viewerHome().uid(),
</span><ins>+ None,
</ins><span class="cx"> self._txn,
</span><span class="cx"> self.ownerHome()._addressbookPropertyStoreID, # not ._resourceID as in CommonHomeChild._loadPropertyStore()
</span><span class="cx"> notifyCallback=self.notifyPropertyChanged
</span><span class="lines">@@ -807,25 +811,22 @@
</span><span class="cx"> def initPropertyStore(self, props):
</span><span class="cx"> # Setup peruser special properties
</span><span class="cx"> props.setSpecialProperties(
</span><del>- (
- PropertyName.fromElement(carddavxml.AddressBookDescription),
- ),
- (
- PropertyName.fromElement(customxml.GETCTag),
- ),
</del><ins>+ self._shadowProperties,
+ self._globalProperties,
+ self._proxyProperties,
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> def getInviteCopyProperties(self):
</span><span class="cx"> """
</span><del>- Get a dictionary of property name/values (as strings) for properties that are shadowable and
</del><ins>+ Get a dictionary of property name/values (as XML strings) for properties that are shadowable and
</ins><span class="cx"> need to be copied to a sharee's collection when an external (cross-pod) share is created.
</span><span class="cx"> Sub-classes should override to expose the properties they care about.
</span><span class="cx"> """
</span><span class="cx"> props = {}
</span><del>- for elem in (element.DisplayName, carddavxml.AddressBookDescription,):
- if PropertyName.fromElement(elem) in self.properties():
- props[elem.sname()] = str(self.properties()[PropertyName.fromElement(elem)])
</del><ins>+ for ename in (PropertyName.fromElement(element.DisplayName),) + self._shadowProperties:
+ if ename in self.properties():
+ props[ename.toString()] = self.properties()[ename].toxml()
</ins><span class="cx"> return props
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -836,15 +837,15 @@
</span><span class="cx"> care about.
</span><span class="cx"> """
</span><span class="cx"> # Initialize these for all shares
</span><del>- for elem in (carddavxml.AddressBookDescription,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
</del><ins>+ for ename in self._shadowProperties:
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
</ins><span class="cx">
</span><span class="cx"> # Only initialize these for direct shares
</span><span class="cx"> if self.direct():
</span><del>- for elem in (element.DisplayName,):
- if PropertyName.fromElement(elem) not in self.properties() and elem.sname() in props:
- self.properties()[PropertyName.fromElement(elem)] = elem.fromString(props[elem.sname()])
</del><ins>+ for ename in (PropertyName.fromElement(element.DisplayName),):
+ if ename not in self.properties() and ename.toString() in props:
+ self.properties()[ename] = WebDAVDocument.fromString(props[ename]).root_element
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def contentType(self):
</span><span class="lines">@@ -1165,12 +1166,12 @@
</span><span class="cx">
</span><span class="cx"> if ownerHomeToDataRowMap:
</span><span class="cx"> # Get property stores for all these child resources (if any found)
</span><del>- addressbookPropertyStoreIDs = [ownerHome._addressbookPropertyStoreID for ownerHome in ownerHomeToDataRowMap]
</del><ins>+ addressbookPropertyStoreIDs = [ownerHomeItem._addressbookPropertyStoreID for ownerHomeItem in ownerHomeToDataRowMap]
</ins><span class="cx"> propertyStores = yield PropertyStore.forMultipleResourcesWithResourceIDs(
</span><del>- home.uid(), home._txn, addressbookPropertyStoreIDs
</del><ins>+ home.uid(), None, None, home._txn, addressbookPropertyStoreIDs
</ins><span class="cx"> )
</span><span class="cx">
</span><del>- addressbookResourceIDs = [ownerHome.addressbook()._resourceID for ownerHome in ownerHomeToDataRowMap]
</del><ins>+ addressbookResourceIDs = [ownerHomeItem.addressbook()._resourceID for ownerHomeItem in ownerHomeToDataRowMap]
</ins><span class="cx"> revisions = yield cls._revisionsForResourceIDs(addressbookResourceIDs).on(home._txn, resourceIDs=addressbookResourceIDs)
</span><span class="cx"> revisions = dict(revisions)
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastorefilepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/file.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -1701,6 +1701,7 @@
</span><span class="cx"> (
</span><span class="cx"> PropertyName.fromElement(customxml.NotificationType),
</span><span class="cx"> ),
</span><ins>+ (),
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -635,8 +635,7 @@
</span><span class="cx">
</span><span class="cx"> For example::
</span><span class="cx">
</span><del>- yield (txn.enqueue(MyWorkItem, workDescription="some work to do")
- .whenProposed())
</del><ins>+ yield (txn.enqueue(MyWorkItem, workDescription="some work to do"))
</ins><span class="cx">
</span><span class="cx"> @return: a work proposal describing various events in the work's
</span><span class="cx"> life-cycle.
</span><span class="lines">@@ -695,7 +694,7 @@
</span><span class="cx"> ).on(self)
</span><span class="cx">
</span><span class="cx">
</span><del>- def _determineMemo(self, storeType, uid, create=False):
</del><ins>+ def _determineMemo(self, storeType, uid, create=False, authzUID=None):
</ins><span class="cx"> """
</span><span class="cx"> Determine the memo dictionary to use for homeWithUID.
</span><span class="cx"> """
</span><span class="lines">@@ -721,19 +720,27 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @memoizedKey("uid", _determineMemo)
</span><del>- def homeWithUID(self, storeType, uid, create=False):
</del><ins>+ def homeWithUID(self, storeType, uid, create=False, authzUID=None):
+ """
+ We need to distinguish between various different users "looking" at a home and its
+ child resources because we have per-user properties that depend on which user is "looking".
+ By default the viewer is set to the authz_uid on the transaction, or the owner if no authz,
+ but it can be overridden using L{authzUID}. This is useful when the store needs to get to
+ other user's homes with the viewer being the owner of that home as opposed to authz_uid. That
+ often happens when manipulating shares.
+ """
</ins><span class="cx"> if storeType not in (ECALENDARTYPE, EADDRESSBOOKTYPE):
</span><span class="cx"> raise RuntimeError("Unknown home type.")
</span><span class="cx">
</span><del>- return self._homeClass[storeType].homeWithUID(self, uid, create)
</del><ins>+ return self._homeClass[storeType].homeWithUID(self, uid, create, authzUID)
</ins><span class="cx">
</span><span class="cx">
</span><del>- def calendarHomeWithUID(self, uid, create=False):
- return self.homeWithUID(ECALENDARTYPE, uid, create=create)
</del><ins>+ def calendarHomeWithUID(self, uid, create=False, authzUID=None):
+ return self.homeWithUID(ECALENDARTYPE, uid, create=create, authzUID=authzUID)
</ins><span class="cx">
</span><span class="cx">
</span><del>- def addressbookHomeWithUID(self, uid, create=False):
- return self.homeWithUID(EADDRESSBOOKTYPE, uid, create=create)
</del><ins>+ def addressbookHomeWithUID(self, uid, create=False, authzUID=None):
+ return self.homeWithUID(EADDRESSBOOKTYPE, uid, create=create, authzUID=authzUID)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -741,10 +748,10 @@
</span><span class="cx"> """
</span><span class="cx"> Load a calendar or addressbook home by its integer resource ID.
</span><span class="cx"> """
</span><del>- uid = (yield self._homeClass[storeType]
- .homeUIDWithResourceID(self, rid))
</del><ins>+ uid = (yield self._homeClass[storeType].homeUIDWithResourceID(self, rid))
</ins><span class="cx"> if uid:
</span><del>- result = (yield self.homeWithUID(storeType, uid))
</del><ins>+ # Always get the owner's view of the home = i.e., authzUID=uid
+ result = (yield self.homeWithUID(storeType, uid, authzUID=uid))
</ins><span class="cx"> else:
</span><span class="cx"> result = None
</span><span class="cx"> returnValue(result)
</span><span class="lines">@@ -2839,7 +2846,7 @@
</span><span class="cx">
</span><span class="cx"> @classmethod
</span><span class="cx"> @inlineCallbacks
</span><del>- def makeClass(cls, transaction, ownerUID, no_cache=False):
</del><ins>+ def makeClass(cls, transaction, ownerUID, no_cache=False, authzUID=None):
</ins><span class="cx"> """
</span><span class="cx"> Build the actual home class taking into account the possibility that we might need to
</span><span class="cx"> switch in the external version of the class.
</span><span class="lines">@@ -2851,14 +2858,20 @@
</span><span class="cx"> @param no_cache: should cached query be used
</span><span class="cx"> @type no_cache: C{bool}
</span><span class="cx"> """
</span><del>- home = cls(transaction, ownerUID)
</del><ins>+ home = cls(transaction, ownerUID, authzUID=authzUID)
</ins><span class="cx"> actualHome = yield home.initFromStore(no_cache)
</span><span class="cx"> returnValue(actualHome)
</span><span class="cx">
</span><span class="cx">
</span><del>- def __init__(self, transaction, ownerUID):
</del><ins>+ def __init__(self, transaction, ownerUID, authzUID=None):
</ins><span class="cx"> self._txn = transaction
</span><span class="cx"> self._ownerUID = ownerUID
</span><ins>+ self._authzUID = authzUID
+ if self._authzUID is None:
+ if self._txn._authz_uid is not None:
+ self._authzUID = self._txn._authz_uid
+ else:
+ self._authzUID = self._ownerUID
</ins><span class="cx"> self._resourceID = None
</span><span class="cx"> self._status = _HOME_STATUS_NORMAL
</span><span class="cx"> self._dataVersion = None
</span><span class="lines">@@ -3053,11 +3066,11 @@
</span><span class="cx">
</span><span class="cx"> @classmethod
</span><span class="cx"> @inlineCallbacks
</span><del>- def homeWithUID(cls, txn, uid, create=False):
</del><ins>+ def homeWithUID(cls, txn, uid, create=False, authzUID=None):
</ins><span class="cx"> """
</span><span class="cx"> @param uid: I'm going to assume uid is utf-8 encoded bytes
</span><span class="cx"> """
</span><del>- homeObject = yield cls.makeClass(txn, uid)
</del><ins>+ homeObject = yield cls.makeClass(txn, uid, authzUID=authzUID)
</ins><span class="cx"> if homeObject is not None:
</span><span class="cx"> returnValue(homeObject)
</span><span class="cx"> else:
</span><span class="lines">@@ -3092,7 +3105,7 @@
</span><span class="cx"> yield savepoint.rollback(txn)
</span><span class="cx">
</span><span class="cx"> # Retry the query - row may exist now, if not re-raise
</span><del>- homeObject = yield cls.makeClass(txn, uid)
</del><ins>+ homeObject = yield cls.makeClass(txn, uid, authzUID=authzUID)
</ins><span class="cx"> if homeObject:
</span><span class="cx"> returnValue(homeObject)
</span><span class="cx"> else:
</span><span class="lines">@@ -3103,7 +3116,7 @@
</span><span class="cx"> # Note that we must not cache the owner_uid->resource_id
</span><span class="cx"> # mapping in _cacher when creating as we don't want that to appear
</span><span class="cx"> # until AFTER the commit
</span><del>- home = yield cls.makeClass(txn, uid, no_cache=True)
</del><ins>+ home = yield cls.makeClass(txn, uid, no_cache=True, authzUID=authzUID)
</ins><span class="cx"> yield home.createdHome()
</span><span class="cx"> returnValue(home)
</span><span class="cx">
</span><span class="lines">@@ -3141,6 +3154,15 @@
</span><span class="cx"> return self._ownerUID
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def authzuid(self):
+ """
+ Retrieve the unique identifier of the user accessing the data in this home.
+
+ @return: a string.
+ """
+ return self._authzUID
+
+
</ins><span class="cx"> def external(self):
</span><span class="cx"> """
</span><span class="cx"> Is this an external home.
</span><span class="lines">@@ -3541,9 +3563,13 @@
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def _loadPropertyStore(self):
</span><ins>+
+ # Use any authz uid in place of the viewer uid so delegates have their own
+ # set of properties
</ins><span class="cx"> props = yield PropertyStore.load(
</span><span class="cx"> self.uid(),
</span><span class="cx"> self.uid(),
</span><ins>+ self.authzuid(),
</ins><span class="cx"> self._txn,
</span><span class="cx"> self._resourceID,
</span><span class="cx"> notifyCallback=self.notifyChanged
</span><span class="lines">@@ -4653,6 +4679,9 @@
</span><span class="cx"> def ownerView(self):
</span><span class="cx"> """
</span><span class="cx"> Return the owner resource counterpart of this shared resource.
</span><ins>+
+ Note we have to play a trick with the property store to coerce it to match
+ the per-user properties for the owner.
</ins><span class="cx"> """
</span><span class="cx"> # Get the child of the owner home that has the same resource id as the owned one
</span><span class="cx"> ownerView = yield self.ownerHome().childWithID(self.id())
</span><span class="lines">@@ -4663,10 +4692,13 @@
</span><span class="cx"> def shareeView(self, shareeUID):
</span><span class="cx"> """
</span><span class="cx"> Return the shared resource counterpart of this owned resource for the specified sharee.
</span><ins>+
+ Note we have to play a trick with the property store to coerce it to match
+ the per-user properties for the sharee.
</ins><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> # Get the child of the sharee home that has the same resource id as the owned one
</span><del>- shareeHome = yield self._txn.homeWithUID(self._home._homeType, shareeUID)
</del><ins>+ shareeHome = yield self._txn.homeWithUID(self._home._homeType, shareeUID, authzUID=shareeUID)
</ins><span class="cx"> shareeView = (yield shareeHome.allChildWithID(self.id())) if shareeHome is not None else None
</span><span class="cx"> returnValue(shareeView)
</span><span class="cx">
</span><span class="lines">@@ -5435,7 +5467,7 @@
</span><span class="cx"> childResourceIDs = [dataRow[2] for dataRow in dataRows]
</span><span class="cx">
</span><span class="cx"> propertyStores = yield PropertyStore.forMultipleResourcesWithResourceIDs(
</span><del>- home.uid(), home._txn, childResourceIDs
</del><ins>+ home.uid(), None, None, home._txn, childResourceIDs
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> # Get revisions
</span><span class="lines">@@ -6217,9 +6249,12 @@
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def _loadPropertyStore(self, props=None):
</span><span class="cx"> if props is None:
</span><ins>+ # Use any authz uid in place of the viewer uid so delegates have their own
+ # set of properties
</ins><span class="cx"> props = yield PropertyStore.load(
</span><span class="cx"> self.ownerHome().uid(),
</span><span class="cx"> self.viewerHome().uid(),
</span><ins>+ self.viewerHome().authzuid(),
</ins><span class="cx"> self._txn,
</span><span class="cx"> self._resourceID,
</span><span class="cx"> notifyCallback=self.notifyPropertyChanged
</span><span class="lines">@@ -6535,6 +6570,8 @@
</span><span class="cx"> if parent.objectResourcesHaveProperties():
</span><span class="cx"> propertyStores = (yield PropertyStore.forMultipleResources(
</span><span class="cx"> parent._home.uid(),
</span><ins>+ None,
+ None,
</ins><span class="cx"> parent._txn,
</span><span class="cx"> cls._objectSchema.RESOURCE_ID,
</span><span class="cx"> cls._objectSchema.PARENT_RESOURCE_ID,
</span><span class="lines">@@ -6612,6 +6649,8 @@
</span><span class="cx"> if parent.objectResourcesHaveProperties():
</span><span class="cx"> propertyStores = (yield PropertyStore.forMultipleResourcesWithResourceIDs(
</span><span class="cx"> parent._home.uid(),
</span><ins>+ None,
+ None,
</ins><span class="cx"> parent._txn,
</span><span class="cx"> tuple([row[0] for row in dataRows]),
</span><span class="cx"> ))
</span><span class="lines">@@ -6790,8 +6829,9 @@
</span><span class="cx"> if props is None:
</span><span class="cx"> if self._parentCollection.objectResourcesHaveProperties():
</span><span class="cx"> props = yield PropertyStore.load(
</span><ins>+ self._parentCollection.ownerHome().uid(),
</ins><span class="cx"> self._parentCollection.viewerHome().uid(),
</span><del>- self._parentCollection.ownerHome().uid(),
</del><ins>+ self._parentCollection.viewerHome().authzuid(),
</ins><span class="cx"> self._txn,
</span><span class="cx"> self._resourceID,
</span><span class="cx"> created=created
</span><span class="lines">@@ -7154,6 +7194,7 @@
</span><span class="cx"> self._propertyStore = yield PropertyStore.load(
</span><span class="cx"> self._uid,
</span><span class="cx"> self._uid,
</span><ins>+ None,
</ins><span class="cx"> self._txn,
</span><span class="cx"> self._resourceID,
</span><span class="cx"> notifyCallback=self.notifyChanged
</span><span class="lines">@@ -7493,6 +7534,8 @@
</span><span class="cx"> # Get property stores for all these child resources (if any found)
</span><span class="cx"> propertyStores = (yield PropertyStore.forMultipleResources(
</span><span class="cx"> parent.uid(),
</span><ins>+ None,
+ None,
</ins><span class="cx"> parent._txn,
</span><span class="cx"> schema.NOTIFICATION.RESOURCE_ID,
</span><span class="cx"> schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID,
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastoresql_externalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/sql_external.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -149,6 +149,7 @@
</span><span class="cx"> props = yield PropertyStore.load(
</span><span class="cx"> self.uid(),
</span><span class="cx"> self.uid(),
</span><ins>+ None,
</ins><span class="cx"> self._txn,
</span><span class="cx"> self._resourceID,
</span><span class="cx"> notifyCallback=self.notifyChanged
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavcommondatastoretestaccountsaccountsxml"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/common/datastore/test/accounts/accounts.xml        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -387,6 +387,12 @@
</span><span class="cx"> <member-uid>8B4288F6-CC82-491D-8EF9-642EF4F3E7D0</member-uid>
</span><span class="cx"> </record>
</span><span class="cx">
</span><ins>+ <record type="group">
+ <uid>emptygroup</uid>
+ <short-name>emptygroup</short-name>
+ <full-name>Empty Group</full-name>
+ </record>
+
</ins><span class="cx"> <!-- Calverify test records -->
</span><span class="cx">
</span><span class="cx"> <record type="user">
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpsclientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/client.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> RecordsMatchingTokensCommand, RecordsMatchingFieldsCommand,
</span><span class="cx"> MembersCommand, GroupsCommand, SetMembersCommand,
</span><span class="cx"> VerifyPlaintextPasswordCommand, VerifyHTTPDigestCommand,
</span><del>- WikiAccessForUID
</del><ins>+ WikiAccessForUIDCommand, ContinuationCommand
</ins><span class="cx"> )
</span><span class="cx"> from txdav.who.directory import (
</span><span class="cx"> CalendarDirectoryRecordMixin, CalendarDirectoryServiceMixin
</span><span class="lines">@@ -127,12 +127,24 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> def _processSingleRecord(self, result):
</span><ins>+ """
+ Takes a dictionary with a "fields" key whose value is a pickled
+ dictionary of a record's fields, and returns a record.
+ """
</ins><span class="cx"> serializedFields = pickle.loads(result['fields'])
</span><span class="cx"> return self._dictToRecord(serializedFields)
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> def _processMultipleRecords(self, result):
</span><del>- serializedFieldsList = pickle.loads(result['fieldsList'])
</del><ins>+ """
+ Takes a dictionary with a "fieldsList" key whose value is an iterable
+ of pickled dictionaries (of records' fields), and returns a list of
+ records.
+ """
+ serializedFieldsList = []
+ for fields in result["fieldsList"]:
+ fields = pickle.loads(fields)
+ serializedFieldsList.append(fields)
</ins><span class="cx"> results = []
</span><span class="cx"> for serializedFields in serializedFieldsList:
</span><span class="cx"> record = self._dictToRecord(serializedFields)
</span><span class="lines">@@ -158,6 +170,26 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><ins>+ def _sendCommand(self, command, **kwds):
+ """
+ Execute a remote AMP command, first making the connection to the peer.
+ Any kwds are passed on to the AMP command.
+
+ @param command: the AMP command to call
+ @type command: L{twisted.protocols.amp.Command}
+ """
+ ampProto = (yield self._getConnection())
+ try:
+ results = (yield ampProto.callRemote(command, **kwds))
+ except Exception, e:
+ log.error("Failed AMP command", error=e)
+ # FIXME: is there a way to hook into ConnectionLost?
+ self._connection = None
+ raise
+ returnValue(results)
+
+
+ @inlineCallbacks
</ins><span class="cx"> def _call(self, command, postProcess, **kwds):
</span><span class="cx"> """
</span><span class="cx"> Execute a remote AMP command, first making the connection to the peer,
</span><span class="lines">@@ -172,14 +204,27 @@
</span><span class="cx"> L{Deferred} which fires with the post-processed results
</span><span class="cx"> @type postProcess: callable
</span><span class="cx"> """
</span><del>- ampProto = (yield self._getConnection())
- try:
- results = (yield ampProto.callRemote(command, **kwds))
- except Exception, e:
- log.error("Failed AMP command", error=e)
- # FIXME: is there a way to hook into ConnectionLost?
- self._connection = None
- raise
</del><ins>+ results = yield self._sendCommand(command, **kwds)
+ if results.get("continuation", None) is None:
+ # We have all the results
+ returnValue(postProcess(results))
+
+ # There are more results to fetch, so loop until the continuation
+ # keyword we get back is None
+
+ multi = [results]
+
+ while results.get("continuation", None) is not None:
+ results = yield self._sendCommand(
+ ContinuationCommand,
+ continuation=results["continuation"]
+ )
+ multi.append(results)
+
+ results = {"fieldsList": []}
+ for result in multi:
+ results["fieldsList"].extend(result["fieldsList"])
+
</ins><span class="cx"> returnValue(postProcess(results))
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -356,7 +401,7 @@
</span><span class="cx"> def accessForRecord(self, record):
</span><span class="cx"> log.debug("DPS Client accessForRecord")
</span><span class="cx"> return self.service._call(
</span><del>- WikiAccessForUID,
</del><ins>+ WikiAccessForUIDCommand,
</ins><span class="cx"> self._convertAccess,
</span><span class="cx"> wikiUID=self.uid.encode("utf-8"),
</span><span class="cx"> uid=record.uid.encode("utf-8")
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpscommandspy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/commands.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -53,7 +53,8 @@
</span><span class="cx"> ('recordType', amp.String()),
</span><span class="cx"> ]
</span><span class="cx"> response = [
</span><del>- ('fieldsList', amp.String()),
</del><ins>+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
</ins><span class="cx"> ]
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -63,18 +64,31 @@
</span><span class="cx"> ('emailAddress', amp.String()),
</span><span class="cx"> ]
</span><span class="cx"> response = [
</span><del>- ('fieldsList', amp.String()),
</del><ins>+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
</ins><span class="cx"> ]
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><ins>+class ContinuationCommand(amp.Command):
+ arguments = [
+ ('continuation', amp.String(optional=True)),
+ ]
+ response = [
+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
+ ]
+
+
+
</ins><span class="cx"> class RecordsMatchingTokensCommand(amp.Command):
</span><span class="cx"> arguments = [
</span><span class="cx"> ('tokens', amp.ListOf(amp.String())),
</span><span class="cx"> ('context', amp.String(optional=True)),
</span><span class="cx"> ]
</span><span class="cx"> response = [
</span><del>- ('fieldsList', amp.String()),
</del><ins>+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
</ins><span class="cx"> ]
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -86,14 +100,15 @@
</span><span class="cx"> ('recordType', amp.String(optional=True)),
</span><span class="cx"> ]
</span><span class="cx"> response = [
</span><del>- ('fieldsList', amp.String()),
</del><ins>+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
</ins><span class="cx"> ]
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> class UpdateRecordsCommand(amp.Command):
</span><span class="cx"> arguments = [
</span><del>- ('fieldsList', amp.String()),
</del><ins>+ ('fieldsList', amp.ListOf(amp.String())),
</ins><span class="cx"> ('create', amp.Boolean(optional=True)),
</span><span class="cx"> ]
</span><span class="cx"> response = [
</span><span class="lines">@@ -117,7 +132,8 @@
</span><span class="cx"> ('uid', amp.String()),
</span><span class="cx"> ]
</span><span class="cx"> response = [
</span><del>- ('fieldsList', amp.String()),
</del><ins>+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
</ins><span class="cx"> ]
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -127,7 +143,8 @@
</span><span class="cx"> ('uid', amp.String()),
</span><span class="cx"> ]
</span><span class="cx"> response = [
</span><del>- ('fieldsList', amp.String()),
</del><ins>+ ('fieldsList', amp.ListOf(amp.String())),
+ ('continuation', amp.String(optional=True)),
</ins><span class="cx"> ]
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -174,7 +191,7 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><del>-class WikiAccessForUID(amp.Command):
</del><ins>+class WikiAccessForUIDCommand(amp.Command):
</ins><span class="cx"> arguments = [
</span><span class="cx"> ('wikiUID', amp.String()),
</span><span class="cx"> ('uid', amp.String()),
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpsjsonpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/json.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -75,6 +75,27 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><ins>+def matchTypeFromJSON(json):
+ return MatchType.lookupByName(json)
+
+
+
+def matchFlagsFromJSON(json):
+ if json == "{}":
+ return MatchFlags.none
+
+ if json.startswith("{") and json.endswith("}"):
+ # Composite flags: "{A,B,C,...}"
+ flags = MatchFlags.none
+ for flag in json[1:-1].split(","):
+ flags |= MatchFlags.lookupByName(flag)
+
+ return flags
+
+ return MatchFlags.lookupByName(json)
+
+
+
</ins><span class="cx"> def matchExpressionFromJSON(service, json):
</span><span class="cx"> try:
</span><span class="cx"> jsonField = json["field"]
</span><span class="lines">@@ -84,23 +105,11 @@
</span><span class="cx"> "JSON match expression must have {!r} key.".format(e[0])
</span><span class="cx"> )
</span><span class="cx">
</span><del>- jsonMatch = json.get("match", "equals")
- jsonFlags = json.get("flags", "{}")
-
</del><span class="cx"> fieldName = service.fieldName.lookupByName(jsonField)
</span><span class="cx"> fieldValue = unicode(jsonValue)
</span><del>- matchType = MatchType.lookupByName(jsonMatch)
</del><ins>+ matchType = matchTypeFromJSON(json.get("match", "equals"))
+ flags = matchFlagsFromJSON(json.get("flags", "{}"))
</ins><span class="cx">
</span><del>- if jsonFlags == "{}":
- flags = MatchFlags.none
- elif jsonFlags.startswith("{") and jsonFlags.endswith("}"):
- # Composite flags: "{A,B,C,...}"
- flags = MatchFlags.none
- for flag in jsonFlags[1:-1].split(","):
- flags |= MatchFlags.lookupByName(flag)
- else:
- flags = MatchFlags.lookupByName(jsonFlags)
-
</del><span class="cx"> return MatchExpression(
</span><span class="cx"> fieldName, fieldValue,
</span><span class="cx"> matchType=matchType, flags=flags,
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpsserverpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/server.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -15,6 +15,7 @@
</span><span class="cx"> ##
</span><span class="cx">
</span><span class="cx"> import cPickle as pickle
</span><ins>+import datetime
</ins><span class="cx"> import uuid
</span><span class="cx">
</span><span class="cx"> from twext.python.log import Logger
</span><span class="lines">@@ -35,7 +36,7 @@
</span><span class="cx"> RecordsMatchingTokensCommand, RecordsMatchingFieldsCommand,
</span><span class="cx"> MembersCommand, GroupsCommand, SetMembersCommand,
</span><span class="cx"> VerifyPlaintextPasswordCommand, VerifyHTTPDigestCommand,
</span><del>- WikiAccessForUID
</del><ins>+ WikiAccessForUIDCommand, ContinuationCommand
</ins><span class="cx"> # UpdateRecordsCommand, RemoveRecordsCommand
</span><span class="cx"> )
</span><span class="cx"> from txdav.who.util import directoryFromConfig
</span><span class="lines">@@ -62,7 +63,104 @@
</span><span class="cx"> amp.AMP.__init__(self)
</span><span class="cx"> self._directory = directory
</span><span class="cx">
</span><ins>+ # How to large we let an AMP response get before breaking it up
+ self._maxSize = 60000
</ins><span class="cx">
</span><ins>+ # The cache of results we have not fully responded with. A dictionary
+ # whose keys are "continuation tokens" and whose values are tuples of
+ # (timestamp, list-of-records). When a response does not fit within
+ # AMP size limits, the remaining records are stored in this dictionary
+ # keyed by an opaque token we generate to return to the client so that
+ # it can ask for the remaining results later.
+ self._continuations = {}
+
+
+ def _storeContinuation(self, records):
+ """
+ Store an iterable of records and generate an opaque token we can
+ give back to the client so they can later retrieve these remaining
+ results that did not fit in the previous AMP response.
+
+ @param records: an iterable of records
+ @return: a C{str} token
+ """
+ token = str(uuid.uuid4())
+ # FIXME: I included a timestamp just in case we want to have code that
+ # looks for stale continuations to expire them.
+ self._continuations[token] = (datetime.datetime.now(), records)
+ return token
+
+
+ def _retrieveContinuation(self, token):
+ """
+ Retrieve the previously stored iterable of records associated with
+ the token, and remove the token.
+
+ @param token: a C{str} token previously returned by _storeContinuation
+ @return: an iterable of records, or None if the token does not exist
+ """
+ if token in self._continuations:
+ timestamp, records = self._continuations[token]
+ del self._continuations[token]
+ else:
+ records = None
+ return records
+
+
+ @ContinuationCommand.responder
+ def continuation(self, continuation):
+ """
+ The client calls this command in order to retrieve records that did
+ not fit into an earlier response.
+
+ @param continuation: the token returned via the "continuation" key
+ in the previous response.
+ """
+ log.debug("Continuation: {c}", c=continuation)
+ records = self._retrieveContinuation(continuation)
+ response = self._recordsToResponse(records)
+ log.debug("Responding with: {response}", response=response)
+ return response
+
+
+ def _recordsToResponse(self, records):
+ """
+ Craft an AMP response containing as many records as will fit within
+ the size limit. Remaining records are stored as a "continuation",
+ identified by a token that is returned to the client to fetch later
+ via the ContinuationCommand.
+
+ @param records: an iterable of records
+ @return: the response dictionary, with a list of pickled records
+ stored in the "fieldsList" key, and if there are leftover
+ records that did not fit, there will be a "continuation" key
+ containing the token the client must send via ContinuationCommand.
+ """
+ fieldsList = []
+ count = 0
+ if records:
+ size = 0
+ while size < self._maxSize:
+ try:
+ record = records.pop()
+ except (KeyError, IndexError):
+ # We're done.
+ # Note: because records is an iterable (list or set)
+ # we're catching both KeyError and IndexError.
+ break
+ pickled = pickle.dumps(self.recordToDict(record))
+ size = size + len(pickled)
+ fieldsList.append(pickled)
+ count += 1
+
+ response = {"fieldsList": fieldsList}
+
+ if records:
+ response["continuation"] = self._storeContinuation(records)
+
+ return response
+
+
</ins><span class="cx"> def recordToDict(self, record):
</span><span class="cx"> """
</span><span class="cx"> Turn a record in a dictionary of fields which can be reconstituted
</span><span class="lines">@@ -140,12 +238,7 @@
</span><span class="cx"> records = (yield self._directory.recordsWithRecordType(
</span><span class="cx"> self._directory.recordType.lookupByName(recordType))
</span><span class="cx"> )
</span><del>- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
</del><ins>+ response = self._recordsToResponse(records)
</ins><span class="cx"> log.debug("Responding with: {response}", response=response)
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="lines">@@ -156,16 +249,13 @@
</span><span class="cx"> emailAddress = emailAddress.decode("utf-8")
</span><span class="cx"> log.debug("RecordsWithEmailAddress: {e}", e=emailAddress)
</span><span class="cx"> records = (yield self._directory.recordsWithEmailAddress(emailAddress))
</span><del>- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
</del><ins>+ response = self._recordsToResponse(records)
</ins><span class="cx"> log.debug("Responding with: {response}", response=response)
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="cx">
</span><ins>+
+
</ins><span class="cx"> @RecordsMatchingTokensCommand.responder
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def recordsMatchingTokens(self, tokens, context=None):
</span><span class="lines">@@ -174,16 +264,12 @@
</span><span class="cx"> records = yield self._directory.recordsMatchingTokens(
</span><span class="cx"> tokens, context=context
</span><span class="cx"> )
</span><del>- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
</del><ins>+ response = self._recordsToResponse(records)
</ins><span class="cx"> log.debug("Responding with: {response}", response=response)
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="cx">
</span><ins>+
</ins><span class="cx"> @RecordsMatchingFieldsCommand.responder
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def recordsMatchingFields(self, fields, operand="OR", recordType=None):
</span><span class="lines">@@ -200,8 +286,18 @@
</span><span class="cx"> valueType = self._directory.fieldName.valueType(field)
</span><span class="cx"> if valueType is uuid.UUID:
</span><span class="cx"> searchTerm = uuid.UUID(searchTerm)
</span><del>- matchFlags = MatchFlags.lookupByName(matchFlags.decode("utf-8"))
</del><ins>+
+ matchFlags = matchFlags.decode("utf-8")
+ if matchFlags.startswith("{") and matchFlags.endswith("}"):
+ flags = MatchFlags.none
+ for flag in matchFlags[1:-1].split(","):
+ flags |= MatchFlags.lookupByName(flag)
+ matchFlags = flags
+ else:
+ matchFlags = MatchFlags.lookupByName(matchFlags)
+
</ins><span class="cx"> matchType = MatchType.lookupByName(matchType.decode("utf-8"))
</span><ins>+
</ins><span class="cx"> newFields.append((fieldName, searchTerm, matchFlags, matchType))
</span><span class="cx"> operand = Operand.lookupByName(operand)
</span><span class="cx"> if recordType:
</span><span class="lines">@@ -209,12 +305,7 @@
</span><span class="cx"> records = yield self._directory.recordsMatchingFields(
</span><span class="cx"> newFields, operand=operand, recordType=recordType
</span><span class="cx"> )
</span><del>- fieldsList = []
- for record in records:
- fieldsList.append(self.recordToDict(record))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
</del><ins>+ response = self._recordsToResponse(records)
</ins><span class="cx"> log.debug("Responding with: {response}", response=response)
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="lines">@@ -230,13 +321,12 @@
</span><span class="cx"> log.error("Failed in members", error=e)
</span><span class="cx"> record = None
</span><span class="cx">
</span><del>- fieldsList = []
</del><ins>+ records = []
</ins><span class="cx"> if record is not None:
</span><span class="cx"> for member in (yield record.members()):
</span><del>- fieldsList.append(self.recordToDict(member))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
</del><ins>+ records.append(member)
+
+ response = self._recordsToResponse(records)
</ins><span class="cx"> log.debug("Responding with: {response}", response=response)
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="lines">@@ -282,12 +372,10 @@
</span><span class="cx"> log.error("Failed in groups", error=e)
</span><span class="cx"> record = None
</span><span class="cx">
</span><del>- fieldsList = []
</del><ins>+ records = []
</ins><span class="cx"> for group in (yield record.groups()):
</span><del>- fieldsList.append(self.recordToDict(group))
- response = {
- "fieldsList": pickle.dumps(fieldsList),
- }
</del><ins>+ records.append(group)
+ response = self._recordsToResponse(records)
</ins><span class="cx"> log.debug("Responding with: {response}", response=response)
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="lines">@@ -342,7 +430,7 @@
</span><span class="cx"> returnValue(response)
</span><span class="cx">
</span><span class="cx">
</span><del>- @WikiAccessForUID.responder
</del><ins>+ @WikiAccessForUIDCommand.responder
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def wikiAccessForUID(self, wikiUID, uid):
</span><span class="cx"> wikiUID = wikiUID.decode("utf-8")
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavdpstesttest_clientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/dps/test/test_client.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -27,11 +27,15 @@
</span><span class="cx"> from twisted.python.filepath import FilePath
</span><span class="cx"> from twisted.test.testutils import returnConnected
</span><span class="cx"> from twisted.trial import unittest
</span><ins>+from twistedcaldav.config import config
+from twistedcaldav.test.util import StoreTestCase
</ins><span class="cx"> from txdav.dps.client import DirectoryService
</span><span class="cx"> from txdav.dps.server import DirectoryProxyAMPProtocol
</span><span class="cx"> from txdav.who.directory import CalendarDirectoryServiceMixin
</span><del>-from twistedcaldav.test.util import StoreTestCase
-from twistedcaldav.config import config
</del><ins>+from txdav.who.groups import GroupCacher
+from txdav.who.test.support import (
+ TestRecord, CalendarInMemoryDirectoryService
+)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> testMode = "xml" # "xml" or "od"
</span><span class="lines">@@ -230,6 +234,28 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><ins>+ def test_recordsMatchingFields_not(self):
+ fields = (
+ (
+ u"fullNames", "anche",
+ MatchFlags.NOT | MatchFlags.caseInsensitive,
+ MatchType.contains
+ ),
+ )
+ records = (yield self.directory.recordsMatchingFields(
+ fields, operand=Operand.OR, recordType=None
+ ))
+ matchingShortNames = set()
+ for r in records:
+ for shortName in r.shortNames:
+ matchingShortNames.add(shortName)
+ self.assertTrue("sagen" in matchingShortNames)
+ self.assertTrue("dre" not in matchingShortNames)
+ self.assertTrue("wsanchez" not in matchingShortNames)
+ self.assertTrue("sanchezoffice" not in matchingShortNames)
+
+
+ @inlineCallbacks
</ins><span class="cx"> def test_recordsFromMatchExpression(self):
</span><span class="cx"> expression = MatchExpression(
</span><span class="cx"> FieldName.uid,
</span><span class="lines">@@ -244,6 +270,22 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><ins>+ def test_members(self):
+ group = yield self.directory.recordWithUID(u"__calendar-dev__")
+ members = yield group.members()
+ self.assertEquals(len(members), 5)
+
+
+ @inlineCallbacks
+ def test_groups(self):
+ # No need to use group cacher as the XML service directly supports
+ # groups()
+ record = yield self.directory.recordWithUID(u"__sagen__")
+ groups = yield record.groups()
+ self.assertEquals(len(groups), 1)
+
+
+ @inlineCallbacks
</ins><span class="cx"> def test_verifyPlaintextPassword(self):
</span><span class="cx"> expectations = (
</span><span class="cx"> (testPassword, True), # Correct
</span><span class="lines">@@ -537,6 +579,35 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><ins>+ def test_members(self):
+ group = yield self.client.recordWithUID(u"__top_group_1__")
+ members = yield group.members()
+ self.assertEquals(len(members), 3)
+
+ group = yield self.client.recordWithUID(u"emptygroup")
+ members = yield group.members()
+ self.assertEquals(len(members), 0)
+
+
+ @inlineCallbacks
+ def test_groups(self):
+
+ # A group must first be "refreshed" into the DB otherwise we won't
+ # consider it for group memberships
+ txn = self.store.newTransaction()
+ groupCacher = GroupCacher(self.directory)
+ yield groupCacher.refreshGroup(txn, u"__sub_group_1__")
+ yield txn.commit()
+
+ # record = yield self.client.recordWithUID(u"__sagen1__")
+ # FIXME: this call hangs during unit tests, but not in a real server:
+ # groups = yield record.groups()
+ # self.assertEquals(len(groups), 1)
+
+ test_groups.todo = "Figure out why this hangs"
+
+
+ @inlineCallbacks
</ins><span class="cx"> def test_verifyPlaintextPassword(self):
</span><span class="cx"> expectations = (
</span><span class="cx"> (u"zehcnasw", True), # Correct
</span><span class="lines">@@ -590,3 +661,109 @@
</span><span class="cx"> )
</span><span class="cx"> )
</span><span class="cx"> self.assertEquals(authenticated, answer)
</span><ins>+
+
+class DPSClientLargeResultsTest(unittest.TestCase):
+ """
+ Tests the client against a single directory service (as opposed to the
+ augmented, aggregated structure you get from directoryFromConfig(), which
+ is tested in the class below)
+ """
+
+ @inlineCallbacks
+ def setUp(self):
+
+ self.numUsers = 1000
+
+ # The "local" directory service
+ self.directory = DirectoryService(None)
+
+ # The "remote" directory service
+ remoteDirectory = CalendarInMemoryDirectoryService(None)
+
+ # Add users
+ records = []
+ fieldName = remoteDirectory.fieldName
+ for i in xrange(self.numUsers):
+ records.append(
+ TestRecord(
+ remoteDirectory,
+ {
+ fieldName.uid: u"foo{ctr:05d}".format(ctr=i),
+ fieldName.shortNames: (u"foo{ctr:05d}".format(ctr=i),),
+ fieldName.fullNames: (u"foo{ctr:05d}".format(ctr=i),),
+ fieldName.recordType: RecordType.user,
+ }
+ )
+ )
+
+ # Add a big group
+ records.append(
+ TestRecord(
+ remoteDirectory,
+ {
+ fieldName.uid: u"bigGroup",
+ fieldName.recordType: RecordType.group,
+ }
+ )
+ )
+
+ yield remoteDirectory.updateRecords(records, create=True)
+
+ group = yield remoteDirectory.recordWithUID(u"bigGroup")
+ members = yield remoteDirectory.recordsWithRecordType(RecordType.user)
+ yield group.setMembers(members)
+
+ # Connect the two services directly via an IOPump
+ client = AMP()
+ server = DirectoryProxyAMPProtocol(remoteDirectory)
+ pump = returnConnected(server, client)
+
+ # Replace the normal _getConnection method with one that bypasses any
+ # actual networking
+ self.patch(self.directory, "_getConnection", lambda: succeed(client))
+
+ # Wrap the normal _call method with one that flushes the IOPump
+ # afterwards
+ origCall = self.directory._call
+
+ def newCall(*args, **kwds):
+ d = origCall(*args, **kwds)
+ pump.flush()
+ return d
+
+ self.patch(self.directory, "_call", newCall)
+
+
+ @inlineCallbacks
+ def test_tooBigResults(self):
+ """
+ The AMP protocol limits values to 65,535 bytes, so the DPS server
+ breaks up the responses to fit. This test uses 1000 records to verify
+ the various methods work seamlessly in the face of large results.
+ Normally only a couple hundred records would fit in a single response.
+ """
+
+ # recordsMatchingTokens
+ records = yield self.directory.recordsMatchingTokens([u"foo"])
+ self.assertEquals(len(records), self.numUsers)
+
+ # recordsMatchingFields
+ fields = (
+ (u"fullNames", "foo", MatchFlags.caseInsensitive, MatchType.contains),
+ )
+ records = yield self.directory.recordsMatchingFields(
+ fields, operand=Operand.OR, recordType=RecordType.user
+ )
+ self.assertEquals(len(records), self.numUsers)
+
+ # recordsWithRecordType
+ records = yield self.directory.recordsWithRecordType(
+ RecordType.user
+ )
+ self.assertEquals(len(records), self.numUsers)
+
+ # members()
+ group = yield self.directory.recordWithUID(u"bigGroup")
+ members = yield group.members()
+ self.assertEquals(len(members), self.numUsers)
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhoaugmentpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/augment.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -23,6 +23,8 @@
</span><span class="cx"> "AugmentedDirectoryService",
</span><span class="cx"> ]
</span><span class="cx">
</span><ins>+import time
+
</ins><span class="cx"> from zope.interface import implementer
</span><span class="cx">
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks, returnValue
</span><span class="lines">@@ -47,6 +49,47 @@
</span><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><ins>+def timed(f):
+ """
+ A decorator which keeps track of the wrapped function's call count and
+ total duration
+ """
+
+ def recordTiming(result, key, startTime):
+ """
+ Figures out how much time to add to the total time spent within the
+ method identified by key and stores that in the timings dict.
+
+ @param result: the result of the wrapped method
+ @param timings: the dictionary to store timings in
+ @type timings: C{dict}
+ @param key: the method name
+ @type key: C{str}
+ @param startTime: the start time of the call in seconds
+ @type startTime: C{float}
+ """
+ timings = AugmentedDirectoryService._timings
+ if key not in timings:
+ timings[key] = (0, 0.0)
+ count, timeSpent = timings[key]
+ count += 1
+ duration = (time.time() - startTime)
+ timeSpent += duration
+ timings[key] = (count, timeSpent)
+ return result
+
+
+ def timingWrapper(self, *args, **kwds):
+ """
+ Records the start time of the call and the method's name
+ """
+ d = f(self, *args, **kwds)
+ d.addBoth(recordTiming, f.func_name, time.time())
+ return d
+
+ return timingWrapper
+
+
</ins><span class="cx"> @implementer(IDirectoryService, IStoreDirectoryService)
</span><span class="cx"> class AugmentedDirectoryService(
</span><span class="cx"> BaseDirectoryService, CalendarDirectoryServiceMixin
</span><span class="lines">@@ -63,7 +106,9 @@
</span><span class="cx"> FieldName,
</span><span class="cx"> ))
</span><span class="cx">
</span><ins>+ _timings = {}
</ins><span class="cx">
</span><ins>+
</ins><span class="cx"> def __init__(self, directory, store, augmentDB):
</span><span class="cx"> BaseDirectoryService.__init__(self, directory.realmName)
</span><span class="cx"> self._directory = directory
</span><span class="lines">@@ -71,6 +116,10 @@
</span><span class="cx"> self._augmentDB = augmentDB
</span><span class="cx">
</span><span class="cx">
</span><ins>+ def stats(self):
+ return self._timings
+
+
</ins><span class="cx"> @property
</span><span class="cx"> def recordType(self):
</span><span class="cx"> # Defer to the directory service we're augmenting
</span><span class="lines">@@ -104,6 +153,7 @@
</span><span class="cx"> returnValue(augmented)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def recordWithUID(self, uid):
</span><span class="cx"> # MOVE2WHO, REMOVE THIS:
</span><span class="lines">@@ -116,6 +166,7 @@
</span><span class="cx"> returnValue(record)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def recordWithGUID(self, guid):
</span><span class="cx"> record = yield self._directory.recordWithGUID(guid)
</span><span class="lines">@@ -123,6 +174,7 @@
</span><span class="cx"> returnValue(record)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def recordsWithRecordType(self, recordType):
</span><span class="cx"> records = yield self._directory.recordsWithRecordType(recordType)
</span><span class="lines">@@ -133,6 +185,7 @@
</span><span class="cx"> returnValue(augmented)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def recordWithShortName(self, recordType, shortName):
</span><span class="cx"> # MOVE2WHO, REMOVE THIS:
</span><span class="lines">@@ -147,6 +200,7 @@
</span><span class="cx"> returnValue(record)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def recordsWithEmailAddress(self, emailAddress):
</span><span class="cx"> # MOVE2WHO, REMOVE THIS:
</span><span class="lines">@@ -162,6 +216,28 @@
</span><span class="cx"> returnValue(augmented)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
+ def recordWithCalendarUserAddress(self, *args, **kwds):
+ return CalendarDirectoryServiceMixin.recordWithCalendarUserAddress(
+ self, *args, **kwds
+ )
+
+
+ @timed
+ def recordsMatchingTokens(self, *args, **kwds):
+ return CalendarDirectoryServiceMixin.recordsMatchingTokens(
+ self, *args, **kwds
+ )
+
+
+ @timed
+ def recordsMatchingFields(self, *args, **kwds):
+ return CalendarDirectoryServiceMixin.recordsMatchingFields(
+ self, *args, **kwds
+ )
+
+
+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def updateRecords(self, records, create=False):
</span><span class="cx"> """
</span><span class="lines">@@ -364,6 +440,7 @@
</span><span class="cx"> self._baseRecord = baseRecord
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def members(self):
</span><span class="cx"> augmented = []
</span><span class="lines">@@ -375,6 +452,7 @@
</span><span class="cx"> returnValue(augmented)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> @inlineCallbacks
</span><span class="cx"> def groups(self):
</span><span class="cx"> augmented = []
</span><span class="lines">@@ -397,13 +475,16 @@
</span><span class="cx"> returnValue(augmented)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> def verifyPlaintextPassword(self, password):
</span><span class="cx"> return self._baseRecord.verifyPlaintextPassword(password)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> def verifyHTTPDigest(self, *args):
</span><span class="cx"> return self._baseRecord.verifyHTTPDigest(*args)
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @timed
</ins><span class="cx"> def accessForRecord(self, record):
</span><span class="cx"> return self._baseRecord.accessForRecord(record)
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhodirectorypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/directory.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -143,6 +143,7 @@
</span><span class="cx"> return recordTypes
</span><span class="cx">
</span><span class="cx">
</span><ins>+ @inlineCallbacks
</ins><span class="cx"> def recordsMatchingTokens(self, tokens, context=None, limitResults=50,
</span><span class="cx"> timeoutSeconds=10):
</span><span class="cx"> fields = [
</span><span class="lines">@@ -174,37 +175,45 @@
</span><span class="cx"> else:
</span><span class="cx"> expression = CompoundExpression(outer, Operand.AND)
</span><span class="cx">
</span><ins>+ results = []
+
</ins><span class="cx"> if context is not None:
</span><ins>+ # We're limiting record types, so for each recordType, build a
+ # CompoundExpression that ANDs the original expression with a
+ # typeSpecific one. Collect all the results from these expressions.
</ins><span class="cx"> recordTypes = self.recordTypesForSearchContext(context)
</span><del>- log.debug("Context {c}, recordTypes {r}", c=context, r=recordTypes)
- typeSpecific = []
</del><ins>+ log.debug("Tokens: {t}, recordTypes {r}", t=tokens, r=recordTypes)
</ins><span class="cx"> for recordType in recordTypes:
</span><del>- typeSpecific.append(
- MatchExpression(
- self.fieldName.recordType,
- recordType,
- MatchType.equals,
- MatchFlags.none
- )
</del><ins>+ typeSpecific = MatchExpression(
+ self.fieldName.recordType,
+ recordType,
+ MatchType.equals,
+ MatchFlags.none
</ins><span class="cx"> )
</span><span class="cx">
</span><del>- if len(typeSpecific) == 1:
- typeSpecific = typeSpecific[0]
-
- else:
</del><span class="cx"> typeSpecific = CompoundExpression(
</span><del>- typeSpecific,
- Operand.OR
</del><ins>+ [expression, typeSpecific],
+ Operand.AND
</ins><span class="cx"> )
</span><span class="cx">
</span><del>- expression = CompoundExpression(
- [expression, typeSpecific],
- Operand.AND
</del><ins>+ subResults = yield self.recordsFromExpression(typeSpecific)
+ log.debug(
+ "Tokens ({t}) matched {n} of {r}",
+ t=tokens, n=len(subResults), r=recordType
+ )
+ results.extend(subResults)
+
+ else:
+ # No record type limits
+ results = yield self.recordsFromExpression(expression)
+ log.debug(
+ "Tokens ({t}) matched {n} records",
+ t=tokens, n=len(results)
</ins><span class="cx"> )
</span><span class="cx">
</span><del>- log.debug("Expression {e}", e=expression)
</del><ins>+ log.debug("Tokens ({t}) matched records {r}", t=tokens, r=results)
</ins><span class="cx">
</span><del>- return self.recordsFromExpression(expression)
</del><ins>+ returnValue(results)
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def recordsMatchingFieldsWithCUType(self, fields, operand=Operand.OR,
</span><span class="lines">@@ -326,19 +335,7 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx">
</span><del>- @property
- def calendarUserAddresses(self):
- try:
- if not (
- self.hasCalendars or (
- config.GroupAttendees.Enabled and
- self.recordType == BaseRecordType.group
- )
- ):
- return frozenset()
- except AttributeError:
- pass
-
</del><ins>+ def _calendarAddresses(self):
</ins><span class="cx"> cuas = set()
</span><span class="cx">
</span><span class="cx"> # urn:x-uid:
</span><span class="lines">@@ -366,6 +363,22 @@
</span><span class="cx">
</span><span class="cx"> return frozenset(cuas)
</span><span class="cx">
</span><ins>+
+ @property
+ def calendarUserAddresses(self):
+ try:
+ if not (
+ self.hasCalendars or (
+ config.GroupAttendees.Enabled and
+ self.recordType == BaseRecordType.group
+ )
+ ):
+ return frozenset()
+ except AttributeError:
+ pass
+
+ return self._calendarAddresses()
+
</ins><span class="cx"> # Mapping from directory record.recordType to RFC2445 CUTYPE values
</span><span class="cx"> _cuTypes = {
</span><span class="cx"> BaseRecordType.user: 'INDIVIDUAL',
</span><span class="lines">@@ -427,7 +440,7 @@
</span><span class="cx"> ))
</span><span class="cx">
</span><span class="cx">
</span><del>- def canonicalCalendarUserAddress(self):
</del><ins>+ def canonicalCalendarUserAddress(self, checkCal=True):
</ins><span class="cx"> """
</span><span class="cx"> Return a CUA for this record, preferring in this order:
</span><span class="cx"> urn:x-uid: form
</span><span class="lines">@@ -437,8 +450,13 @@
</span><span class="cx"> first in calendarUserAddresses list (sorted)
</span><span class="cx"> """
</span><span class="cx">
</span><del>- sortedCuas = sorted(self.calendarUserAddresses)
</del><ins>+ if checkCal:
+ cuas = self.calendarUserAddresses
+ else:
+ cuas = self._calendarAddresses()
</ins><span class="cx">
</span><ins>+ sortedCuas = sorted(cuas)
+
</ins><span class="cx"> for prefix in (
</span><span class="cx"> "urn:x-uid:",
</span><span class="cx"> "urn:uuid:",
</span><span class="lines">@@ -450,7 +468,7 @@
</span><span class="cx"> return candidate
</span><span class="cx">
</span><span class="cx"> # fall back to using the first one
</span><del>- return sortedCuas[0]
</del><ins>+ return sortedCuas[0] if sortedCuas else None # groups may not have cua
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def enabledAsOrganizer(self):
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhoopendirectorypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/opendirectory.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -24,32 +24,14 @@
</span><span class="cx">
</span><span class="cx"> __all__ = [
</span><span class="cx"> "DirectoryService",
</span><del>- "RecordType"
</del><span class="cx"> ]
</span><span class="cx">
</span><span class="cx"> from twext.who.opendirectory import DirectoryService
</span><del>-from twisted.python.constants import Names, NamedConstant
</del><span class="cx">
</span><span class="cx">
</span><del>-
</del><span class="cx"> # Hoorj OMG haxx
</span><span class="cx"> from twext.who.opendirectory._constants import ODRecordType as _ODRecordType
</span><span class="cx"> from .idirectory import RecordType as _CSRecordType
</span><span class="cx">
</span><span class="cx"> _ODRecordType.location.recordType = _CSRecordType.location
</span><span class="cx"> _ODRecordType.resource.recordType = _CSRecordType.resource
</span><del>-
-
-class RecordType(Names):
-
- user = NamedConstant()
- user.description = u"user"
-
- group = NamedConstant()
- group.description = u"group"
-
- location = NamedConstant()
- location.description = u"location"
-
- resource = NamedConstant()
- resource.description = u"resource"
</del></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhotestsupportpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/test/support.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -18,15 +18,24 @@
</span><span class="cx"> RecordType,
</span><span class="cx"> NoSuchRecordError
</span><span class="cx"> )
</span><del>-from twext.who.index import DirectoryService as IndexDirectoryService
</del><ins>+from twext.who.index import (
+ DirectoryService as IndexDirectoryService,
+ DirectoryRecord as IndexedDirectoryRecord
+)
</ins><span class="cx"> from twext.who.util import ConstantsContainer
</span><ins>+from twisted.internet.defer import succeed, inlineCallbacks
+from txdav.who.directory import (
+ CalendarDirectoryRecordMixin, CalendarDirectoryServiceMixin
+)
</ins><span class="cx"> from txdav.who.idirectory import (
</span><span class="cx"> RecordType as CalRecordType
</span><span class="cx"> )
</span><del>-from twisted.internet.defer import succeed, inlineCallbacks
</del><span class="cx">
</span><span class="cx">
</span><ins>+class TestRecord(IndexedDirectoryRecord, CalendarDirectoryRecordMixin):
+ pass
</ins><span class="cx">
</span><ins>+
</ins><span class="cx"> class InMemoryDirectoryService(IndexDirectoryService):
</span><span class="cx"> """
</span><span class="cx"> An in-memory IDirectoryService. You must call updateRecords( ) if you want
</span><span class="lines">@@ -69,3 +78,11 @@
</span><span class="cx"> if record.uid in uids:
</span><span class="cx"> recordSet.remove(record)
</span><span class="cx"> return succeed(None)
</span><ins>+
+
+
+class CalendarInMemoryDirectoryService(
+ InMemoryDirectoryService,
+ CalendarDirectoryServiceMixin
+):
+ pass
</ins></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxdavwhovcardpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txdav/who/vcard.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -323,8 +323,9 @@
</span><span class="cx"> # add members
</span><span class="cx"> # FIXME: members() is a deferred, so all of vCardFromRecord is deferred.
</span><span class="cx"> for memberRecord in (yield record.members()):
</span><del>- if memberRecord:
- vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", memberRecord.canonicalCalendarUserAddress().encode("utf-8")))
</del><ins>+ cua = memberRecord.canonicalCalendarUserAddress(False)
+ if cua:
+ vcard.addProperty(Property("X-ADDRESSBOOKSERVER-MEMBER", cua.encode("utf-8")))
</ins><span class="cx">
</span><span class="cx"> #===================================================================
</span><span class="cx"> # vCard 4.0 http://tools.ietf.org/html/rfc6350
</span></span></pre></div>
<a id="CalendarServerbranchesusersgayagroupshareetxweb2davmethodreport_expandpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py (13629 => 13630)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py        2014-06-10 20:15:11 UTC (rev 13629)
+++ CalendarServer/branches/users/gaya/groupsharee/txweb2/dav/method/report_expand.py        2014-06-11 03:50:42 UTC (rev 13630)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">
</span><span class="cx"> for property in expand_property.children:
</span><span class="cx"> namespace = property.attributes.get("namespace", dav_namespace)
</span><del>- name = property.attributes.get("name", "")
</del><ins>+ name = property.attributes.get("name", "")
</ins><span class="cx">
</span><span class="cx"> # Make sure children have no children
</span><span class="cx"> props_to_find = []
</span><span class="lines">@@ -81,7 +81,7 @@
</span><span class="cx"> "expand-property REPORT only supports single level expansion"
</span><span class="cx"> ))
</span><span class="cx"> child_namespace = child.attributes.get("namespace", dav_namespace)
</span><del>- child_name = child.attributes.get("name", "")
</del><ins>+ child_name = child.attributes.get("name", "")
</ins><span class="cx"> props_to_find.append((child_namespace, child_name))
</span><span class="cx">
</span><span class="cx"> properties[(namespace, name)] = props_to_find
</span><span class="lines">@@ -161,16 +161,17 @@
</span><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> status = statusForFailure(f, "getting property: %s" % (qname,))
</span><del>- if status not in properties_by_status: properties_by_status[status] = []
</del><ins>+ if status not in properties_by_status:
+ properties_by_status[status] = []
</ins><span class="cx"> properties_by_status[status].append(propertyName(qname))
</span><span class="cx">
</span><span class="cx"> # Build the overall response
</span><span class="cx"> propstats = [
</span><span class="cx"> element.PropertyStatus(
</span><del>- element.PropertyContainer(*properties_by_status[status]),
- element.Status.fromResponseCode(status)
</del><ins>+ element.PropertyContainer(*properties_by_status[pstatus]),
+ element.Status.fromResponseCode(pstatus)
</ins><span class="cx"> )
</span><del>- for status in properties_by_status if properties_by_status[status]
</del><ins>+ for pstatus in properties_by_status if properties_by_status[pstatus]
</ins><span class="cx"> ]
</span><span class="cx">
</span><span class="cx"> returnValue(MultiStatusResponse((element.PropertyStatusResponse(element.HRef(request.uri), *propstats),)))
</span></span></pre>
</div>
</div>
</body>
</html>