diff --git a/meta-networking/recipes-daemons/autofs/autofs/0001-Do-not-hardcode-path-for-pkg.m4.patch b/meta-networking/recipes-daemons/autofs/autofs/0001-Do-not-hardcode-path-for-pkg.m4.patch index f3f25f461e9..410827b3383 100644 --- a/meta-networking/recipes-daemons/autofs/autofs/0001-Do-not-hardcode-path-for-pkg.m4.patch +++ b/meta-networking/recipes-daemons/autofs/autofs/0001-Do-not-hardcode-path-for-pkg.m4.patch @@ -1,21 +1,26 @@ -From 6d24365f0828185fd1bb4d199209ca07eb95c41d Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Fri, 24 Aug 2018 06:24:36 +0000 -Subject: [PATCH] Do not hardcode path for pkg.m4 +From a27217a5437da313d251b4a765bf7cb60ffaa62d Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Tue, 27 Nov 2018 15:27:47 +0800 +Subject: [PATCH] From 6d24365f0828185fd1bb4d199209ca07eb95c41d Mon Sep 17 + 00:00:00 2001 From: Khem Raj Date: Fri, 24 Aug 2018 + 06:24:36 +0000 Subject: [PATCH] Do not hardcode path for pkg.m4 Upstream-Status: Pending Signed-off-by: Khem Raj + +update patch to version 5.1.5 +Signed-off-by: Changqing Li --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in -index 50aed15..f81767c 100644 +index 493b9f1..268d06b 100644 --- a/configure.in +++ b/configure.in @@ -12,7 +12,7 @@ define([AC_CACHE_SAVE], )dnl - AC_INIT(.autofs-5.1.4) + AC_INIT(.autofs-5.1.5) # for pkg-config macros -m4_include([/usr/share/aclocal/pkg.m4]) @@ -24,5 +29,5 @@ index 50aed15..f81767c 100644 # # autofs installs by default in /usr -- -1.9.1 +2.7.4 diff --git a/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch b/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch index 469027aacce..e7fdd10aabd 100644 --- a/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch +++ b/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch @@ -1,22 +1,26 @@ -From 557ca399f4b3a397f20bb147ec6dc4ab9732dd1e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Fri, 31 Mar 2017 19:12:10 -0700 -Subject: [PATCH] Replace __S_IEXEC with S_IEXEC +From 096e33743158e0e8c04d60d01cc66e2945d79777 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Tue, 27 Nov 2018 16:52:35 +0800 +Subject: [PATCH] From 557ca399f4b3a397f20bb147ec6dc4ab9732dd1e Mon Sep 17 + 00:00:00 2001 From: Khem Raj Date: Fri, 31 Mar 2017 + 19:12:10 -0700 Subject: [PATCH] Replace __S_IEXEC with S_IEXEC S_IEXEC is portable Signed-off-by: Khem Raj +update patch to version 5.1.5 +Signed-off-by: Changqing Li --- - daemon/lookup.c | 4 ++-- + daemon/lookup.c | 6 +++--- modules/lookup_multi.c | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) + 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/daemon/lookup.c b/daemon/lookup.c -index 201ccbb..d821db8 100644 +index 18df935..d35d484 100644 --- a/daemon/lookup.c +++ b/daemon/lookup.c -@@ -366,7 +366,7 @@ static int read_file_source_instance(struct autofs_point *ap, struct map_source +@@ -382,7 +382,7 @@ static int read_file_source_instance(struct autofs_point *ap, struct map_source if (!S_ISREG(st.st_mode)) return NSS_STATUS_NOTFOUND; @@ -25,7 +29,7 @@ index 201ccbb..d821db8 100644 type = src_prog; else type = src_file; -@@ -856,7 +856,7 @@ static int lookup_name_file_source_instance(struct autofs_point *ap, struct map_ +@@ -942,7 +942,7 @@ static int lookup_name_file_source_instance(struct autofs_point *ap, struct map_ if (!S_ISREG(st.st_mode)) return NSS_STATUS_NOTFOUND; @@ -34,8 +38,17 @@ index 201ccbb..d821db8 100644 type = src_prog; else type = src_file; +@@ -1118,7 +1118,7 @@ static struct map_source *lookup_get_map_source(struct master_mapent *entry) + if (!S_ISREG(st.st_mode)) + return NULL; + +- if (st.st_mode & __S_IEXEC) ++ if (st.st_mode & S_IEXEC) + type = "program"; + else + type = "file"; diff --git a/modules/lookup_multi.c b/modules/lookup_multi.c -index fadd2ea..3ecda6d 100644 +index bb9f88c..cf109de 100644 --- a/modules/lookup_multi.c +++ b/modules/lookup_multi.c @@ -247,7 +247,7 @@ static struct lookup_mod *nss_open_lookup(const char *format, int argc, const ch @@ -47,3 +60,6 @@ index fadd2ea..3ecda6d 100644 type = src_prog; else type = src_file; +-- +2.7.4 + diff --git a/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-do-not-check-for-modprobe.patch b/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-do-not-check-for-modprobe.patch deleted file mode 100644 index 1d5c3e1eeb2..00000000000 --- a/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-do-not-check-for-modprobe.patch +++ /dev/null @@ -1,89 +0,0 @@ -From 2cbc576ea1fbd1cbf4579d64b30e41d762084e7f Mon Sep 17 00:00:00 2001 -From: "yanjun.zhu" -Date: Tue, 15 Jan 2013 12:45:44 +0800 -Subject: [PATCH] autofs: do not check for modprobe - -Description: Loading autofs module is #ifdef'ed in the source, so - there is no need to check for /proc (which is only used - to load module) or modprobe. Both modprobe and /proc - are always in the fixed location so there's no need to - check for these to start with. - -Upstream-Status: Backport [1] -[1] http://www.spinics.net/lists/autofs/msg00139.html - ---- - configure.in | 6 ------ - daemon/module.c | 3 +++ - include/automount.h | 11 +++-------- - 3 files changed, 6 insertions(+), 14 deletions(-) - -diff --git a/configure.in b/configure.in -index 44a1c8b..b226236 100644 ---- a/configure.in -+++ b/configure.in -@@ -34,11 +34,6 @@ AC_MSG_CHECKING([for binaries in]) - AC_MSG_RESULT([$searchpath]) - - # --# Make sure we have "/proc" --# --AF_LINUX_PROCFS() -- --# - # Location of init.d directory? - # - AF_INIT_D() -@@ -142,7 +137,6 @@ AF_PATH_INCLUDE(UMOUNT, umount, /bin/umount, $searchpath) - AF_PATH_INCLUDE(E2FSCK, fsck.ext2 e2fsck, , $searchpath) - AF_PATH_INCLUDE(E3FSCK, fsck.ext3 e3fsck, , $searchpath) - AF_PATH_INCLUDE(E4FSCK, fsck.ext4 e4fsck, , $searchpath) --AF_PATH_INCLUDE(MODPROBE, modprobe, , $searchpath) - - AF_CHECK_PROG(LEX, flex lex, , $searchpath) - AF_CHECK_PROG(YACC, bison, , $searchpath) -diff --git a/daemon/module.c b/daemon/module.c -index bed8f7a..e41a98e 100644 ---- a/daemon/module.c -+++ b/daemon/module.c -@@ -19,6 +19,8 @@ - #include "automount.h" - #include "nsswitch.h" - -+#if 0 -+/* see comment in daemon/automount.c around load_autofs4_module() call */ - int load_autofs4_module(void) - { - FILE *fp; -@@ -53,6 +55,7 @@ int load_autofs4_module(void) - - return 1; - } -+#endif - - int open_lookup(const char *name, const char *err_prefix, const char *mapfmt, - int argc, const char *const *argv, struct lookup_mod **lookup) -diff --git a/include/automount.h b/include/automount.h -index c0f5fbf..cc336ad 100644 ---- a/include/automount.h -+++ b/include/automount.h -@@ -51,16 +51,11 @@ - #error Failed to locate umount(8)! - #endif - --#ifndef HAVE_MODPROBE --#error Failed to locate modprobe(8)! --#endif -- --#ifndef HAVE_LINUX_PROCFS --#error Failed to verify existence of procfs filesystem! --#endif -- -+#if 0 -+/* see comment in daemon/automount.c around load_autofs4_module() call */ - #define FS_MODULE_NAME "autofs4" - int load_autofs4_module(void); -+#endif - - /* The -s (sloppy) option to mount is good, if we have it... */ - diff --git a/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch b/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch index 1c7b11997c9..be750ab897b 100644 --- a/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch +++ b/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch @@ -1,7 +1,9 @@ -From e3ae56cf0bb4063c31295f45d04e3c504f4b6cc7 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 24 Apr 2017 20:41:25 -0700 -Subject: [PATCH] autofs: Upgrade to 5.1.2 release +From 602f9ca83c2bdbf511bcb178fcb4b9fc54da955f Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Tue, 27 Nov 2018 15:20:46 +0800 +Subject: [PATCH] From e3ae56cf0bb4063c31295f45d04e3c504f4b6cc7 Mon Sep 17 + 00:00:00 2001 From: Khem Raj Date: Mon, 24 Apr 2017 + 20:41:25 -0700 Subject: [PATCH] autofs: Upgrade to 5.1.2 release Use pkg-config first to look for external libnsl which is now split out from glibc, if it does not exist then see if its provided @@ -9,20 +11,27 @@ by glibc itself. -Khem +Upstream-Status: Pending + +update patch to version 5.1.5 +Signed-off-by: Changqing Li --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in -index 9cf73b8..1016c71 100644 +index 76ecb40..493b9f1 100644 --- a/configure.in +++ b/configure.in -@@ -186,7 +186,7 @@ fi - # - # glibc/libc 6 new libraries - # --AC_CHECK_LIB(nsl, yp_match, LIBNSL="-lnsl") -+PKG_CHECK_MODULES([NSL], [libnsl], [], [AC_CHECK_LIB([nsl],[yp_match],[LIBNSL="-lnsl"],[LIBNSL=""])]) - AC_SUBST(LIBNSL) +@@ -238,7 +238,7 @@ AC_SUBST(LIBCLOCK_GETTIME) - AC_CHECK_LIB(resolv, res_query, LIBRESOLV="-lresolv") + PKG_CHECK_MODULES([NSL],[libnsl],, + [ +-AC_CHECK_LIB(nsl, yp_match, NSL_LIBS="-lnsl") ++PKG_CHECK_MODULES([NSL], [libnsl], [], [AC_CHECK_LIB([nsl],[yp_match],[LIBNSL="-lnsl"],[LIBNSL=""])]) + AC_SUBST(NSL_LIBS) + NSL_CFLAGS="" + ]) +-- +2.7.4 + diff --git a/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch b/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch index 3d0c6bd7153..d1f9f3493ec 100644 --- a/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch +++ b/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch @@ -1,22 +1,27 @@ -From dabcbdae38038a8e4ad2c4286112381c407c5ce7 Mon Sep 17 00:00:00 2001 -From: Roy Li -Date: Tue, 19 Aug 2014 11:31:35 +0800 -Subject: [PATCH] using pkg-config to detect libxml-2.0 and krb5 +From dd90a690f95569b999b8ac9ab57e834b3421dcbb Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Tue, 27 Nov 2018 15:19:07 +0800 +Subject: [PATCH] From dabcbdae38038a8e4ad2c4286112381c407c5ce7 Mon Sep 17 + 00:00:00 2001 From: Roy Li Date: Tue, 19 Aug 2014 + 11:31:35 +0800 Subject: [PATCH] using pkg-config to detect libxml-2.0 and + krb5 -Upstream-status: Pending +Upstream-Status: Pending Signed-off-by: Roy Li +update patch to 5.1.5 +Signed-off-by: Changqing Li --- configure.in | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/configure.in b/configure.in -index b226236..9cf73b8 100644 +index f5fbb35..76ecb40 100644 --- a/configure.in +++ b/configure.in -@@ -162,8 +162,20 @@ if test x$enable_sloppy_mount = xyes; then - fi +@@ -211,8 +211,20 @@ fi + AC_SUBST(ENABLE_FEDFS) # LDAP SASL auth needs libxml and Kerberos -AF_CHECK_LIBXML() @@ -38,3 +43,6 @@ index b226236..9cf73b8 100644 AC_SEARCH_LIBS([versionsort],[]) if test "$ac_cv_search_versionsort" = "no"; then +-- +2.7.4 + diff --git a/meta-networking/recipes-daemons/autofs/autofs_5.1.4.bb b/meta-networking/recipes-daemons/autofs/autofs_5.1.5.bb similarity index 92% rename from meta-networking/recipes-daemons/autofs/autofs_5.1.4.bb rename to meta-networking/recipes-daemons/autofs/autofs_5.1.5.bb index 8a1bcad2851..8016586d7d2 100644 --- a/meta-networking/recipes-daemons/autofs/autofs_5.1.4.bb +++ b/meta-networking/recipes-daemons/autofs/autofs_5.1.5.bb @@ -13,7 +13,6 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/autofs-${PV}.tar.gz \ file://autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch \ file://no-bash.patch \ file://cross.patch \ - file://autofs-5.0.7-do-not-check-for-modprobe.patch \ file://fix_disable_ldap.patch \ file://autofs-5.0.7-fix-lib-deps.patch \ file://add-the-needed-stdarg.h.patch \ @@ -27,8 +26,10 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/autofs-${PV}.tar.gz \ file://0001-modules-lookup_multi.c-Replace-__S_IEXEC-with-S_IEXE.patch \ file://0001-Do-not-hardcode-path-for-pkg.m4.patch \ " -SRC_URI[md5sum] = "17bc9d371cf39d99f400ebadfc2289bb" -SRC_URI[sha256sum] = "8d1c9964c8286ccb08262ad47c60bb6343492902def5399fd36d79a0ccb0e718" + + +SRC_URI[md5sum] = "03b13168ec7bd66a6f2d5f6fea705eee" +SRC_URI[sha256sum] = "86a8e56ea9d72bb53ff8cdfeefb5cafe983592c6b0178fb99c4a731e59879181" UPSTREAM_CHECK_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/" diff --git a/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_8.0.1.bb b/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_8.2.0.bb similarity index 90% rename from meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_8.0.1.bb rename to meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_8.2.0.bb index b1fa51bf036..221493172cc 100644 --- a/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_8.0.1.bb +++ b/meta-oe/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_8.2.0.bb @@ -6,8 +6,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" SECTION = "console/tests" SRC_URI = "http://www.phoronix-test-suite.com/releases/${BP}.tar.gz" -SRC_URI[md5sum] = "3dc3a0e490e909f188379a9e05fd4780" -SRC_URI[sha256sum] = "6306549109c7254baf31edb385265b19557b5692217d2dfcf96f6fb17de8e842" +SRC_URI[md5sum] = "33e7b9ba5a65e7fcef91d47117450e6c" +SRC_URI[sha256sum] = "d7160df5ab15fbd65ade82c6cc13c02a4826d46eff10113f615e38316c9c01f1" S = "${WORKDIR}/phoronix-test-suite" diff --git a/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/69-libmtp.rules b/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/69-libmtp.rules deleted file mode 100644 index 4cd27c762c4..00000000000 --- a/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/69-libmtp.rules +++ /dev/null @@ -1,999 +0,0 @@ -# UDEV-style hotplug map for libmtp -# Put this file in /etc/udev/rules.d - -ACTION!="add", GOTO="libmtp_rules_end" -ENV{MAJOR}!="?*", GOTO="libmtp_rules_end" -SUBSYSTEM=="usb", GOTO="libmtp_usb_rules" -GOTO="libmtp_rules_end" - -LABEL="libmtp_usb_rules" - -# Some sensitive devices we surely don't wanna probe -# Color instruments -ATTR{idVendor}=="0670", GOTO="libmtp_rules_end" -ATTR{idVendor}=="0765", GOTO="libmtp_rules_end" -ATTR{idVendor}=="085c", GOTO="libmtp_rules_end" -ATTR{idVendor}=="0971", GOTO="libmtp_rules_end" -# Canon scanners that look like MTP devices (PID 0x22nn) -ATTR{idVendor}=="04a9", ATTR{idProduct}=="22*", GOTO="libmtp_rules_end" -# Canon digital camera (EOS 3D) that looks like MTP device (PID 0x3113) -ATTR{idVendor}=="04a9", ATTR{idProduct}=="3113", GOTO="libmtp_rules_end" -# Sensitive Atheros devices that look like MTP devices -ATTR{idVendor}=="0cf3", GOTO="libmtp_rules_end" -# Sensitive Atmel JTAG programmers -ATTR{idVendor}=="03eb", GOTO="libmtp_rules_end" -# Creative ZEN Vision -ATTR{idVendor}=="041e", ATTR{idProduct}=="411f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative Portable Media Center -ATTR{idVendor}=="041e", ATTR{idProduct}=="4123", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Xtra (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4128", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell DJ (2nd generation) -ATTR{idVendor}=="041e", ATTR{idProduct}=="412f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Micro (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4130", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Touch (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4131", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell Dell Pocket DJ (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN MicroPhoto (alternate version) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4133", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Sleek (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4137", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN MicroPhoto -ATTR{idVendor}=="041e", ATTR{idProduct}=="413c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Sleek Photo -ATTR{idVendor}=="041e", ATTR{idProduct}=="413d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Vision:M -ATTR{idVendor}=="041e", ATTR{idProduct}=="413e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN V -ATTR{idVendor}=="041e", ATTR{idProduct}=="4150", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Vision:M (DVP-HD0004) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4151", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN V Plus -ATTR{idVendor}=="041e", ATTR{idProduct}=="4152", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Vision W -ATTR{idVendor}=="041e", ATTR{idProduct}=="4153", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN -ATTR{idVendor}=="041e", ATTR{idProduct}=="4157", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN V 2GB -ATTR{idVendor}=="041e", ATTR{idProduct}=="4158", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Mozaic -ATTR{idVendor}=="041e", ATTR{idProduct}=="4161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN X-Fi -ATTR{idVendor}=="041e", ATTR{idProduct}=="4162", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN X-Fi 3 -ATTR{idVendor}=="041e", ATTR{idProduct}=="4169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZiiLABS Zii EGG -ATTR{idVendor}=="041e", ATTR{idProduct}=="6000", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-900 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="0409", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung I550W Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="04a4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Jet S8000 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="4f1f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-920 (501d) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="501d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-920 (5022) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5022", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-925GS -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5024", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-820 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="502e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-925(-GS) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="502f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-J70J -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5033", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Z5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="503c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-T7J -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5047", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U2J (YP-U2JXB/XAA) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5054", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-F2J -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5057", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-K5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="505a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="507d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-T9 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="507f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-K3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5081", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-P2 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5083", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-T10 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="508a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-S5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="508b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-S3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5091", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U4 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5093", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-R1 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="510f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Q1 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5115", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-M1 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5118", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-P3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="511a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Q2 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="511d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5121", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-R0 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5125", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Q3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5130", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Z3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5137", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-999 Portable Media Center/SGH-A707/SGH-L760V/SGH-U900/Verizon Intensity/Fascinate -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5a0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung M7600 Beat/GT-S8300T/SGH-F490/S8300 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6642", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung X830 Mobile Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6702", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung U600 Mobile Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6709", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung F250 Mobile Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6727", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Juke (SCH-U470) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6734", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-B2700 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6752", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung SAMSUNG Trance -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6763", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-S8500 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6819", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Galaxy models (MTP+ADB) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="685c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Galaxy Y -ATTR{idVendor}=="04e8", ATTR{idProduct}=="685e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Galaxy models (MTP) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Galaxy models Kies mode -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6877", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Vibrant SGH-T959/Captivate/Media player mode -ATTR{idVendor}=="04e8", ATTR{idProduct}=="68a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-B2710/Xcover 271 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="68af", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-S5230 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="e20c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft/Intel Bandon Portable Media Center -ATTR{idVendor}=="045e", ATTR{idProduct}=="00c9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Windows Phone -ATTR{idVendor}=="045e", ATTR{idProduct}=="04ec", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Windows MTP Simulator -ATTR{idVendor}=="045e", ATTR{idProduct}=="0622", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Zune HD -ATTR{idVendor}=="045e", ATTR{idProduct}=="063e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Kin 1 -ATTR{idVendor}=="045e", ATTR{idProduct}=="0640", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft/Sharp/nVidia Kin TwoM -ATTR{idVendor}=="045e", ATTR{idProduct}=="0641", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Zune -ATTR{idVendor}=="045e", ATTR{idProduct}=="0710", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# JVC Alneo XA-HD500 -ATTR{idVendor}=="04f1", ATTR{idProduct}=="6105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD6320/00 or HDD6330/17 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD14XX,HDD1620 or HDD1630/17 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD085/00 or HDD082/17 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA9200 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips SA1115/55 -ATTR{idVendor}=="0471", ATTR{idProduct}=="0164", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Audio -ATTR{idVendor}=="0471", ATTR{idProduct}=="0165", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips Shoqbox -ATTR{idVendor}=="0471", ATTR{idProduct}=="0172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips PSA610 -ATTR{idVendor}=="0471", ATTR{idProduct}=="0181", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD6320 -ATTR{idVendor}=="0471", ATTR{idProduct}=="01eb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA6014/SA6015/SA6024/SA6025/SA6044/SA6045 -ATTR{idVendor}=="0471", ATTR{idProduct}=="084e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA5145 -ATTR{idVendor}=="0471", ATTR{idProduct}=="0857", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA6125/SA6145/SA6185 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA3345 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2004", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips SA5285 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2022", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear ViBE SA1VBE04 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2075", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Muse -ATTR{idVendor}=="0471", ATTR{idProduct}=="2077", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear ViBE SA1VBE04/08 -ATTR{idVendor}=="0471", ATTR{idProduct}=="207b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Aria -ATTR{idVendor}=="0471", ATTR{idProduct}=="207c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA1VBE08KX/78 -ATTR{idVendor}=="0471", ATTR{idProduct}=="208e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear VIBE SA2VBE[08|16]K/02 -ATTR{idVendor}=="0471", ATTR{idProduct}=="20b7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Ariaz -ATTR{idVendor}=="0471", ATTR{idProduct}=="20b9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Vibe/02 -ATTR{idVendor}=="0471", ATTR{idProduct}=="20e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips PSA235 -ATTR{idVendor}=="0471", ATTR{idProduct}=="7e01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A500 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3325", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A500 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3341", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A501 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3344", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A100 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3348", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A100 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3349", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A700 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3378", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A200 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="337c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A200 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="337d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A510 -ATTR{idVendor}=="0502", ATTR{idProduct}=="338a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer E350 Liquid Gallant Duo -ATTR{idVendor}=="0502", ATTR{idProduct}=="33c3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa m230/m240 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7400", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa m200-tcc (MTP mode) -ATTR{idVendor}=="0781", ATTR{idProduct}=="7401", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa c150 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7410", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa e200/e250/e260/e270/e280 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7420", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa e260/e280 v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7422", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa m240/m250 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7430", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip -ATTR{idVendor}=="0781", ATTR{idProduct}=="7432", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7434", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa c240/c250 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7450", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa c250 v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7452", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Express -ATTR{idVendor}=="0781", ATTR{idProduct}=="7460", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Connect -ATTR{idVendor}=="0781", ATTR{idProduct}=="7480", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa View -ATTR{idVendor}=="0781", ATTR{idProduct}=="74b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Fuze -ATTR{idVendor}=="0781", ATTR{idProduct}=="74c0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Fuze v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="74c2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip+ -ATTR{idVendor}=="0781", ATTR{idProduct}=="74d0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Fuze+ -ATTR{idVendor}=="0781", ATTR{idProduct}=="74e0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip Zip -ATTR{idVendor}=="0781", ATTR{idProduct}=="74e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H300 Series MTP -ATTR{idVendor}=="1006", ATTR{idProduct}=="3004", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Portable Media Center -ATTR{idVendor}=="1006", ATTR{idProduct}=="4002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Portable Media Center -ATTR{idVendor}=="1006", ATTR{idProduct}=="4003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T7 Volcano -ATTR{idVendor}=="1042", ATTR{idProduct}=="1143", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver iFP-880 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T10 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1113", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T20 FM -ATTR{idVendor}=="4102", ATTR{idProduct}=="1114", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T20 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1115", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver U10 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1116", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T10a -ATTR{idVendor}=="4102", ATTR{idProduct}=="1117", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T20 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1118", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T30 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1119", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T10 2GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="1120", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver N12 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1122", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Clix2 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1126", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Clix -ATTR{idVendor}=="4102", ATTR{idProduct}=="112a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver X20 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T60 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1134", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E100 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1141", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E100 v2/Lplayer -ATTR{idVendor}=="4102", ATTR{idProduct}=="1142", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Spinn -ATTR{idVendor}=="4102", ATTR{idProduct}=="1147", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E50 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1151", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T5 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1153", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E30 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H10 20GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="2101", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H10 5GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="2102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H10 5.6GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="2105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell, Inc DJ Itty -ATTR{idVendor}=="413c", ATTR{idProduct}=="4500", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell, Inc Dell Streak 7 -ATTR{idVendor}=="413c", ATTR{idProduct}=="b10b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MEGF-40 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0009", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat -ATTR{idVendor}=="0930", ATTR{idProduct}=="000c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat P20 -ATTR{idVendor}=="0930", ATTR{idProduct}=="000f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat S -ATTR{idVendor}=="0930", ATTR{idProduct}=="0010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat P10 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat V30 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0014", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat U -ATTR{idVendor}=="0930", ATTR{idProduct}=="0016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MEU202 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0018", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat T -ATTR{idVendor}=="0930", ATTR{idProduct}=="0019", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MEU201 -ATTR{idVendor}=="0930", ATTR{idProduct}=="001a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MET401 -ATTR{idVendor}=="0930", ATTR{idProduct}=="001d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Excite AT300 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0963", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Thrive AT100/AT105 -ATTR{idVendor}=="0930", ATTR{idProduct}=="7100", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Gmini XS100 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1207", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos XS202 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1208", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 104 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="120a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 204 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="120c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 404 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1301", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 404CAM (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1303", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 504 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1307", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 604 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1309", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 604WIFI (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="130b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 704 mobile dvr -ATTR{idVendor}=="0e79", ATTR{idProduct}=="130d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 704TV (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="130f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 405 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1311", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 605 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1313", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 605F (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1315", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 705 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1319", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos TV+ (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="131b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 105 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="131d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 405HDD (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1321", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1331", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1333", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 7 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1335", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos SPOD (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1341", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5S IT (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1351", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5H IT (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1357", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Arnova Childpad -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1458", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 8o G9 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1508", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 8o G9 Turbo (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1509", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 80G9 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1518", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1528", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 (v2) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1529", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 Turbo 250 HD -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1538", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 Turbo -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1539", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 70it2 (mode 1) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1568", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 70it2 (mode 2) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1569", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dunlop MP3 player 1GB / EGOMAN MD223AFD -ATTR{idVendor}=="10d6", ATTR{idProduct}=="2200", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Memorex or iRiver MMP 8585/8586 or iRiver E200 -ATTR{idVendor}=="10d6", ATTR{idProduct}=="2300", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sirius Stiletto -ATTR{idVendor}=="18f6", ATTR{idProduct}=="0102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sirius Stiletto 2 -ATTR{idVendor}=="18f6", ATTR{idProduct}=="0110", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Canon Ixus Digital 700 (PTP/MTP mode) -ATTR{idVendor}=="04a9", ATTR{idProduct}=="30f2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Canon PowerShot A640 (PTP/MTP mode) -ATTR{idVendor}=="04a9", ATTR{idProduct}=="3139", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Canon PowerShot SX20IS (PTP/MTP mode) -ATTR{idVendor}=="04a9", ATTR{idProduct}=="31e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N81 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="000a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6120c Classic Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="002e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N96 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6500c Classic Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="003c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3110c Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="005f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3109c Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0065", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5310 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="006c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N95 Mobile Phone 8GB -ATTR{idVendor}=="0421", ATTR{idProduct}=="006e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N82 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0074", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N78 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0079", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6220 Classic -ATTR{idVendor}=="0421", ATTR{idProduct}=="008d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N85 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0092", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6210 Navigator -ATTR{idVendor}=="0421", ATTR{idProduct}=="0098", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E71 -ATTR{idVendor}=="0421", ATTR{idProduct}=="00e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E66 -ATTR{idVendor}=="0421", ATTR{idProduct}=="00e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5320 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="00ea", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5800 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="0154", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5800 XpressMusic v2 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0155", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5800 XpressMusic v3 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0159", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E63 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0179", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N79 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0186", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E71x -ATTR{idVendor}=="0421", ATTR{idProduct}=="01a1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E52 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01cf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3710 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01ee", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N97-1 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01f4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N97 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01f5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5130 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="0209", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E72 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0221", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5530 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0229", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N97 mini -ATTR{idVendor}=="0421", ATTR{idProduct}=="026b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia X6 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0274", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6600i -ATTR{idVendor}=="0421", ATTR{idProduct}=="0297", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 2710 -ATTR{idVendor}=="0421", ATTR{idProduct}=="02c1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5230 -ATTR{idVendor}=="0421", ATTR{idProduct}=="02e2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N8 -ATTR{idVendor}=="0421", ATTR{idProduct}=="02fe", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N8 (Ovi mode) -ATTR{idVendor}=="0421", ATTR{idProduct}=="0302", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E7 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0334", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E7 (Ovi mode) -ATTR{idVendor}=="0421", ATTR{idProduct}=="0335", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia C7 -ATTR{idVendor}=="0421", ATTR{idProduct}=="03c1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia C7 (ID2) -ATTR{idVendor}=="0421", ATTR{idProduct}=="03cd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N950 -ATTR{idVendor}=="0421", ATTR{idProduct}=="03d2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3250 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0462", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N93 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0478", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5500 Sport Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="047e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N91 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0485", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5700 XpressMusic Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04b4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5300 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5200 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04be", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N73 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04d1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N75 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04e1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N93i Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N95 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N80 Internet Edition (Media Player) -ATTR{idVendor}=="0421", ATTR{idProduct}=="04f1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N9 -ATTR{idVendor}=="0421", ATTR{idProduct}=="051a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5530 Xpressmusic -ATTR{idVendor}=="05c6", ATTR{idProduct}=="0229", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia/Verizon 6205 Balboa/Verizon Music Phone -ATTR{idVendor}=="05c6", ATTR{idProduct}=="3196", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Logik LOG DAX MP3 and DAB Player -ATTR{idVendor}=="13d1", ATTR{idProduct}=="7002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Technika MP-709 -ATTR{idVendor}=="13d1", ATTR{idProduct}=="7017", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson EM28 Series -ATTR{idVendor}=="069b", ATTR{idProduct}=="0774", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson / RCA Opal / Lyra MC4002 -ATTR{idVendor}=="069b", ATTR{idProduct}=="0777", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson Lyra MC5104B (M51 Series) -ATTR{idVendor}=="069b", ATTR{idProduct}=="077c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson RCA H106 -ATTR{idVendor}=="069b", ATTR{idProduct}=="301a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson scenium E308 -ATTR{idVendor}=="069b", ATTR{idProduct}=="3028", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson / RCA Lyra HC308A -ATTR{idVendor}=="069b", ATTR{idProduct}=="3035", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# FOMA F903iX HIGH-SPEED -ATTR{idVendor}=="04c5", ATTR{idProduct}=="1140", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NormSoft, Inc. Pocket Tunes -ATTR{idVendor}=="1703", ATTR{idProduct}=="0001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NormSoft, Inc. Pocket Tunes 4 -ATTR{idVendor}=="1703", ATTR{idProduct}=="0002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TrekStor Vibez 8/12GB -ATTR{idVendor}=="066f", ATTR{idProduct}=="842a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion MD8333 -ATTR{idVendor}=="066f", ATTR{idProduct}=="8550", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion MD8333 -ATTR{idVendor}=="066f", ATTR{idProduct}=="8588", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion MD99000 (P9514)/Olivetti Olipad 110 -ATTR{idVendor}=="0408", ATTR{idProduct}=="b009", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion Lifetab P9514 -ATTR{idVendor}=="0408", ATTR{idProduct}=="b00a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Maxfield G-Flash NG 1GB -ATTR{idVendor}=="066f", ATTR{idProduct}=="846c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SigmaTel Inc. MTPMSCN Audio Player -ATTR{idVendor}=="066f", ATTR{idProduct}=="a010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TrekStor i.Beat Sweez FM -ATTR{idVendor}=="0402", ATTR{idProduct}=="0611", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TrekStor i.Beat Organix 2.0 -ATTR{idVendor}=="1e68", ATTR{idProduct}=="0002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Disney MixMax -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="6021", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Tevion MD 81488 -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="3011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# MyMusix PD-6070 -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="9601", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio U3 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0701", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 6 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0711", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 7 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0751", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio U5 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0761", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0801", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ FW 2.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0861", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ DAB FW 4.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0871", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ FW 3.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0881", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ DMB FW 1.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0891", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio S9 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0901", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 9 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0911", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio J3 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0921", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio X7 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0931", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio C2 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0941", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 10 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0952", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Insignia NS-DV45 -ATTR{idVendor}=="19ff", ATTR{idProduct}=="0303", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Insignia Sport Player -ATTR{idVendor}=="19ff", ATTR{idProduct}=="0307", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Insignia Pilot 4GB -ATTR{idVendor}=="19ff", ATTR{idProduct}=="0309", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. T54 -ATTR{idVendor}=="043e", ATTR{idProduct}=="7040", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. UP3 -ATTR{idVendor}=="043e", ATTR{idProduct}=="70b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. VX8550 V CAST Mobile Phone -ATTR{idVendor}=="1004", ATTR{idProduct}=="6010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. KC910 Renoir Mobile Phone -ATTR{idVendor}=="1004", ATTR{idProduct}=="608f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. GR-500 Music Player -ATTR{idVendor}=="1004", ATTR{idProduct}=="611b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. KM900 -ATTR{idVendor}=="1004", ATTR{idProduct}=="6132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG8575 -ATTR{idVendor}=="1004", ATTR{idProduct}=="619a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. V909 G-Slate -ATTR{idVendor}=="1004", ATTR{idProduct}=="61f9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG-E617G/P700 -ATTR{idVendor}=="1004", ATTR{idProduct}=="631c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-A815/NWZ-A818 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0325", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-S516 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0326", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-S615F/NWZ-S616F/NWZ-S618F -ATTR{idVendor}=="054c", ATTR{idProduct}=="0327", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-S716F -ATTR{idVendor}=="054c", ATTR{idProduct}=="035a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-A826/NWZ-A828/NWZ-A829 -ATTR{idVendor}=="054c", ATTR{idProduct}=="035b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-A726/NWZ-A728/NWZ-A768 -ATTR{idVendor}=="054c", ATTR{idProduct}=="035c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-B135 -ATTR{idVendor}=="054c", ATTR{idProduct}=="036e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-E436F -ATTR{idVendor}=="054c", ATTR{idProduct}=="0385", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-W202 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0388", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-S739F -ATTR{idVendor}=="054c", ATTR{idProduct}=="038c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-S638F -ATTR{idVendor}=="054c", ATTR{idProduct}=="038e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-X1050B/NWZ-X1060B -ATTR{idVendor}=="054c", ATTR{idProduct}=="0397", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-X1051/NWZ-X1061 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0398", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-B142F -ATTR{idVendor}=="054c", ATTR{idProduct}=="03d8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-E344 -ATTR{idVendor}=="054c", ATTR{idProduct}=="03fc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-E445 -ATTR{idVendor}=="054c", ATTR{idProduct}=="03fd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-S545 -ATTR{idVendor}=="054c", ATTR{idProduct}=="03fe", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-A845 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0404", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-W252B -ATTR{idVendor}=="054c", ATTR{idProduct}=="04bb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-B153F -ATTR{idVendor}=="054c", ATTR{idProduct}=="04be", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-E354 -ATTR{idVendor}=="054c", ATTR{idProduct}=="04cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-S754 -ATTR{idVendor}=="054c", ATTR{idProduct}=="04cc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-B163F -ATTR{idVendor}=="054c", ATTR{idProduct}=="059a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Walkman NWZ-E464 -ATTR{idVendor}=="054c", ATTR{idProduct}=="05a6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S765 -ATTR{idVendor}=="054c", ATTR{idProduct}=="05a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Sony Tablet S -ATTR{idVendor}=="054c", ATTR{idProduct}=="05b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Sony Tablet S1 -ATTR{idVendor}=="054c", ATTR{idProduct}=="05b4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony DCR-SR75 -ATTR{idVendor}=="054c", ATTR{idProduct}=="1294", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson K850i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0075", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W910 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0076", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W890i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W760i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00c6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson C902 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00d4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson C702 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00d9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W980 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00da", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson C905 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W595 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00f3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W902 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00f5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson T700 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00fb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W705/W715 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W995 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0112", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson U5 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0133", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson U8i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="013a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson j10i2 (Elm) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0144", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson j108i (Cedar) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="014e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W302 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="10c8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson j10i (Elm) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="d144", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson K550i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="e000", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson LT15i (Xperia arc S) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="014f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MT11i Xperia Neo -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0156", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MK16i Xperia -ATTR{idVendor}=="0fce", ATTR{idProduct}=="015a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST18a Xperia Ray -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson SK17i Xperia Mini Pro -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0166", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST15i Xperia Mini -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST17i Xperia Active -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26i Xperia S -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY WT19i Live Walkman -ATTR{idVendor}=="0fce", ATTR{idProduct}=="016d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST21i Xperia Tipo -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST15i Xperia U -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT22i Xperia P -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26w Xperia Acro S -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST17i Xperia Active (MTP+UMS mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26i Xperia S (MTP+UMS mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST21i Xperia Tipo (MTP+UMS mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST25i Xperia U (MTP+UMS mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT22i Xperia P (MTP+UMS mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26w Xperia Acro S (MTP+UMS mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson LT15i Xperia Arc (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="514f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MT11i Xperia Neo (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5156", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST17i Xperia Active (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26i Xperia S (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MK16i Xperia (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="515a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST18i Xperia Ray (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson SK17i Xperia Mini Pro (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5166", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST15i Xperia Mini (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson SK17i Xperia Mini Pro (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="516d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST21i Xperia Tipo (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST25i Xperia U (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT22i Xperia P (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26w Xperia Acro S (MTP+ADB mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY MT27i Xperia Sola (MTP+UMS+? mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="a173", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST27i Xperia Go (MTP+UMS+? mode) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="a17e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola V3m/V750 verizon -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2a65", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom 2 Media Edition (ID2) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="41cf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Droid X/MB525 (Defy) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="41d6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Milestone / Verizon Droid -ATTR{idVendor}=="22b8", ATTR{idProduct}=="41dc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola DROID2 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="42a7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom 2 Media Edition -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4311", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola XT912/XT928 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4362", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola DROID4 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="437f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola IdeaPad K1 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4811", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola A1200 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="60ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola MTP Test Command Interface -ATTR{idVendor}=="22b8", ATTR{idProduct}=="6413", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola RAZR2 V8/U9/Z6 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="6415", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom (Factory test) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom (MTP+ADB) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Milestone X2 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Sony) S1 -ATTR{idVendor}=="18d1", ATTR{idProduct}=="05b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Barnes & Noble) Nook Color -ATTR{idVendor}=="18d1", ATTR{idProduct}=="2d02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Asus) TF101 Transformer -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Samsung) Nexus S -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e21", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Asus) Nexus 7 (MTP) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e41", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Asus) Nexus 7 (MTP+ADB) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Motorola) Xoom (MZ604) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="70a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Toshiba) Thrive 7/AT105 -ATTR{idVendor}=="18d1", ATTR{idProduct}=="7102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Lenovo) Ideapad K1 -ATTR{idVendor}=="18d1", ATTR{idProduct}=="740a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Medion) MD99000 (P9514) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="b00a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for LG Electronics) P990/Optimus (Cyanogen) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="d109", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for LG Electronics) P990/Optimus -ATTR{idVendor}=="18d1", ATTR{idProduct}=="d10a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kenwood Media Keg HD10GB7 Sport Player -ATTR{idVendor}=="0b28", ATTR{idProduct}=="100c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Micro-Star International P610/Model MS-5557 -ATTR{idVendor}=="0db0", ATTR{idProduct}=="5572", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# FOMA D905i -ATTR{idVendor}=="06d3", ATTR{idProduct}=="21ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Haier Ibiza Rhapsody -ATTR{idVendor}=="1302", ATTR{idProduct}=="1016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Haier Ibiza Rhapsody -ATTR{idVendor}=="1302", ATTR{idProduct}=="1017", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Panasonic P905i -ATTR{idVendor}=="04da", ATTR{idProduct}=="2145", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Panasonic P906i -ATTR{idVendor}=="04da", ATTR{idProduct}=="2158", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Polaroid Freescape/MPU-433158 -ATTR{idVendor}=="0546", ATTR{idProduct}=="2035", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Pioneer XMP3 -ATTR{idVendor}=="08e4", ATTR{idProduct}=="0148", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Slacker Inc. Slacker Portable Media Player -ATTR{idVendor}=="1bdc", ATTR{idProduct}=="fabf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Conceptronic CMTD2 -ATTR{idVendor}=="1e53", ATTR{idProduct}=="0005", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# O2 Sistemas ZoltarTV -ATTR{idVendor}=="1e53", ATTR{idProduct}=="0006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Wyplay Wyplayer -ATTR{idVendor}=="1e53", ATTR{idProduct}=="0007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Perception Digital, Ltd Gigaware GX400 -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="9702", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# RIM BlackBerry Storm/9650 -ATTR{idVendor}=="0fca", ATTR{idProduct}=="8007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nextar MA715A-8R -ATTR{idVendor}=="0402", ATTR{idProduct}=="5668", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Coby COBY MP705 -ATTR{idVendor}=="1e74", ATTR{idProduct}=="6512", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple iPhone -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1290", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple iPod Touch 1st Gen -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1291", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple iPhone 3G -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1292", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple iPod Touch 2nd Gen -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1293", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple iPhone 3GS -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1294", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple 0x1296 -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1296", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple 0x1297 -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1297", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple 0x1298 -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1298", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple iPod Touch 3rd Gen -ATTR{idVendor}=="05ac", ATTR{idProduct}=="1299", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Apple iPad -ATTR{idVendor}=="05ac", ATTR{idProduct}=="129a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Curitel Communications, Inc. Verizon Wireless Device -ATTR{idVendor}=="106c", ATTR{idProduct}=="3215", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Pantech Crux -ATTR{idVendor}=="106c", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF300 Transformer -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c80", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF300 Transformer (USB debug mode) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c81", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF700 Transformer -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c90", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF201 Transformer Prime (keyboard dock) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d00", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF201 Transformer Prime (tablet only) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TFXXX Transformer Prime (unknown version) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d04", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF101 Eeepad Slider -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF101 Eeepad Transformer -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF101 Eeepad Transformer (debug mode) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e1f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K1 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="740a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo ThinkPad Tablet -ATTR{idVendor}=="17ef", ATTR{idProduct}=="741c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo P700 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7497", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Lifetab S9512 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="74cc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Honor U8860 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="1051", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Mediapad (mode 0) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="360f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Mediapad (mode 1) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="361f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V55 ID 1 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0244", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V55 ID 2 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0245", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Zopo ZP100 (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC EVO 4G LTE -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c93", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC EVO 4G LTE (second ID) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ca8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Hewlett-Packard HP Touchpad -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="685c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Hewlett-Packard HP Touchpad (debug mode) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="6860", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Zopo ZP100 (ID2) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NEC FOMA N01A -ATTR{idVendor}=="0409", ATTR{idProduct}=="0242", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia CM9-Adam -ATTR{idVendor}=="0955", ATTR{idProduct}=="70a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Vizio VTAB1008 -ATTR{idVendor}=="0489", ATTR{idProduct}=="e040", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Various Viewpia DR/bq Kepler -ATTR{idVendor}=="2207", ATTR{idProduct}=="0001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Isabella Her Prototype -ATTR{idVendor}=="0b20", ATTR{idProduct}=="ddee", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" - -# Autoprobe vendor-specific, communication and PTP devices -ENV{ID_MTP_DEVICE}!="1", ENV{MTP_NO_PROBE}!="1", ENV{COLOR_MEASUREMENT_DEVICE}!="1", ENV{libsane_matched}!="yes", ATTR{bDeviceClass}=="00|02|06|ef|ff", PROGRAM="mtp-probe /sys$env{DEVPATH} $attr{busnum} $attr{devnum}", RESULT=="1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" - -LABEL="libmtp_rules_end" diff --git a/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/glibc-2.20.patch b/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/glibc-2.20.patch deleted file mode 100644 index 38b45c2a93b..00000000000 --- a/meta-oe/recipes-connectivity/libmtp/libmtp-1.1.5/glibc-2.20.patch +++ /dev/null @@ -1,36 +0,0 @@ - -Include config.h so we get the defines available for subsequent -include files - -Fixes errors like - -| In file included from /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/sysroots/beaglebone/usr/include/string.h:634:0, -| from /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/work/cortexa8t2hf-vfp-neon-oe-linux-gnueabi/libmtp/1.1.5-r0/libmtp-1.1.5/src/util.c:36: -| /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/work/cortexa8t2hf-vfp-neon-oe-linux-gnueabi/libmtp/1.1.5-r0/libmtp-1.1.5/src/util.h:29:7: error: expected identifier or '(' before '__extension -__' -| char *strndup (const char *s, size_t n); -| ^ -| /home/ubuntu/work/upstream/openembedded-core/build/tmp-glibc/work/cortexa8t2hf-vfp-neon-oe-linux-gnueabi/libmtp/1.1.5-r0/libmtp-1.1.5/src/util.c:111:7: error: expected identifier or '(' before '__extensio -n__' -| char *strndup (const char *s, size_t n) -| ^ -| make[2]: *** [libmtp_la-util.lo] Error 1 - - -Signed-off-by: Khem Raj - -Upstream-Status: Pending - -Index: libmtp-1.1.5/src/util.c -=================================================================== ---- libmtp-1.1.5.orig/src/util.c 2011-01-10 05:37:21.000000000 -0800 -+++ libmtp-1.1.5/src/util.c 2014-09-03 23:50:44.703563888 -0700 -@@ -22,6 +22,8 @@ - * Boston, MA 02111-1307, USA. - */ - -+#include "config.h" -+ - /* MSVC does not have these */ - #ifndef _MSC_VER - #include diff --git a/meta-oe/recipes-connectivity/libmtp/libmtp/0001-Use-native-mtp-hotplug.patch b/meta-oe/recipes-connectivity/libmtp/libmtp/0001-Use-native-mtp-hotplug.patch new file mode 100644 index 00000000000..83c58061f77 --- /dev/null +++ b/meta-oe/recipes-connectivity/libmtp/libmtp/0001-Use-native-mtp-hotplug.patch @@ -0,0 +1,43 @@ +From 4e8eab047a43e48bd541f2887104299fcfb99b0d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andreas=20M=C3=BCller?= +Date: Tue, 27 Nov 2018 12:03:20 +0100 +Subject: [PATCH] Use native mtp-hotplug +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Upstream-Status: Inappropriate [OE-specific] + +Signed-off-by: Andreas Müller +--- + Makefile.am | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 7b7e06b..083e1c6 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -16,16 +16,16 @@ hwdb_DATA=69-libmtp.hwdb + noinst_DATA=libmtp.usermap libmtp.fdi + + libmtp.usermap: util/mtp-hotplug +- util/mtp-hotplug > libmtp.usermap ++ mtp-hotplug > libmtp.usermap + + @UDEV_RULES@: util/mtp-hotplug +- util/mtp-hotplug -u -p"@UDEV@" @UDEV_GROUP@ @UDEV_MODE@ > @UDEV_RULES@ ++ mtp-hotplug -u -p"@UDEV@" @UDEV_GROUP@ @UDEV_MODE@ > @UDEV_RULES@ + + libmtp.fdi: util/mtp-hotplug +- util/mtp-hotplug -H > libmtp.fdi ++ mtp-hotplug -H > libmtp.fdi + + $(hwdb_DATA): util/mtp-hotplug +- util/mtp-hotplug -w > $(hwdb_DATA) ++ mtp-hotplug -w > $(hwdb_DATA) + + CLEANFILES = libmtp.usermap @UDEV_RULES@ libmtp.fdi libmtp.hwdb + endif +-- +2.14.5 + diff --git a/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.16.bb b/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.16.bb new file mode 100644 index 00000000000..a648c890ec1 --- /dev/null +++ b/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.16.bb @@ -0,0 +1,47 @@ +# TODO: include debian's mtp-tools man page (needs xsltproc-native and +# docbook-xsl-native, or we pregenerate it), add support for doxygen +# generation fully with -natives +DESCRIPTION = "libmtp is an Initiator implementation of the Media Transfer \ +Protocol (MTP) in the form of a library suitable primarily for POSIX \ +compliant operating systems" +SUMMARY = "libmtp is an Initiator implementation of the Media Transfer Protocol (MTP)" +HOMEPAGE = "http://libmtp.sourceforge.net/" +LICENSE = "LGPL-2.1+" +LIC_FILES_CHKSUM = "\ + file://COPYING;md5=0448d3676bc0de00406af227d341a4d1 \ + file://src/ptp.c;beginline=3;endline=22;md5=303cc4422fd549ef8689aded20434a9a \ + file://examples/albums.c;beginline=5;endline=21;md5=84f4e55dfec49e898b7f68a828c15620 \ +" + +BBCLASSEXTEND = "native" + +DEPENDS = "libusb1 gettext-native" +DEPENDS_append_class-target = " ${BPN}-native" + +SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz" +SRC_URI_append_class-target = " file://0001-Use-native-mtp-hotplug.patch" + +SRC_URI[md5sum] = "7796179af46e90938dde1d0c4d1d1d4c" +SRC_URI[sha256sum] = "5b68f9dd1ed38de558de687f40e255a39e4d5e32ef3de601f0ac19dd5682bba0" + +inherit autotools pkgconfig lib_package + +EXTRA_OECONF += "--disable-rpath" + +PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'largefile', d)}" +PACKAGECONFIG[doxygen] = "--enable-doxygen,--disable-doxygen" +PACKAGECONFIG[largefile] = "--enable-largefile,--disable-largefile" +PACKAGECONFIG[mtpz] = "--enable-mtpz,--disable-mtpz,libgcrypt" + +PACKAGES =+ "${BPN}-common ${BPN}-runtime" + +RDEPENDS_${BPN} += "libmtp-common" +RRECOMMENDS_${BPN} += "libmtp-runtime ${PN}-bin" + +FILES_${BPN}-common = "${nonarch_base_libdir}/udev/rules.d/*" +SUMMARY_${BPN}-common = "The udev rules file for MTP devices" + +FILES_${BPN}-runtime = "${nonarch_base_libdir}/udev/mtp-probe" +RDEPENDS_${BPN}-runtime = "libmtp-common" +SUMMARY_${BPN}-runtime = "mtp-probe, used for the MTP udev rules" +DESCRIPTION_${BPN}-runtime = "This package provides mtp-probe, a program to probe newly connected device interfaces from userspace to determine if they are MTP devices, used for udev rules." diff --git a/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.5.bb b/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.5.bb deleted file mode 100644 index 798b1707d7c..00000000000 --- a/meta-oe/recipes-connectivity/libmtp/libmtp_1.1.5.bb +++ /dev/null @@ -1,58 +0,0 @@ -# TODO: include debian's mtp-tools man page (needs xsltproc-native and -# docbook-xsl-native, or we pregenerate it), add support for doxygen -# generation fully with -natives -DESCRIPTION = "libmtp is an Initiator implementation of the Media Transfer \ -Protocol (MTP) in the form of a library suitable primarily for POSIX \ -compliant operating systems" -SUMMARY = "libmtp is an Initiator implementation of the Media Transfer Protocol (MTP)" -HOMEPAGE = "http://libmtp.sourceforge.net/" -LICENSE = "LGPL-2.1+" -LIC_FILES_CHKSUM = "\ - file://COPYING;md5=0448d3676bc0de00406af227d341a4d1 \ - file://src/ptp.c;beginline=3;endline=22;md5=dafe6cfd1782f56471bb94ab06624c1f \ - file://examples/albums.c;beginline=5;endline=21;md5=84f4e55dfec49e898b7f68a828c15620 \ -" - -DEPENDS += "libusb1 gettext-native" - -SCM_URI = "git://git.code.sf.net/p/libmtp/code" -SRC_URI = "\ - ${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz \ - file://69-libmtp.rules \ - file://glibc-2.20.patch \ -" -SRC_URI[md5sum] = "f80e45c0e6e5798c434bb1c26a7b602d" -SRC_URI[sha256sum] = "787679171baf8b3cf2fcc03196c705ab4d7cbc969bd71f9d3696be1ce7f1c63a" - -# Currently we use a pregenerated rules file produced by mtp-hotplug, rather -# than having to depend upon libmtp-native or run mtp-hotplug in a postinst. -do_unpack[vardeps] += "skip_udev_rules_generation" -do_unpack[postfuncs] += "skip_udev_rules_generation" - -skip_udev_rules_generation () { - sed -i -e '/^noinst_DATA=/,/util\/mtp-hotplug -H/d' ${S}/Makefile.am - cp ${WORKDIR}/69-libmtp.rules ${S}/ -} - -inherit autotools pkgconfig lib_package - -EXTRA_OECONF += "--disable-rpath" - -PACKAGECONFIG ?= "\ - ${@bb.utils.contains('DISTRO_FEATURES', 'largefile$', 'largefile', '', d)} \ -" -PACKAGECONFIG[doxygen] = "--enable-doxygen,--disable-doxygen" -PACKAGECONFIG[largefile] = "--enable-largefile,--disable-largefile" -PACKAGECONFIG[mtpz] = "--enable-mtpz,--disable-mtpz,libgcrypt" - -PACKAGES =+ "libmtp-common libmtp-runtime" - -RDEPENDS_${PN} += "libmtp-common" -RRECOMMENDS_${PN} += "libmtp-runtime ${PN}-bin" -FILES_${PN}-dbg += "${nonarch_base_libdir}/udev/.debug/*" -FILES_libmtp-common = "${nonarch_base_libdir}/udev/rules.d/*" -SUMMARY_libmtp-common = "The udev rules file for MTP devices" -FILES_libmtp-runtime = "${nonarch_base_libdir}/udev/mtp-probe" -DEPENDS_libmtp-runtime = "libmtp-common" -SUMMARY_libmtp-runtime = "mtp-probe, used for the MTP udev rules" -DESCRIPTION_libmtp-runtime = "This package provides mtp-probe, a program to probe newly connected device interfaces from userspace to determine if they are MTP devices, used for udev rules." diff --git a/meta-oe/recipes-dbs/postgresql/files/0001-Sync-our-copy-of-the-timezone-library-with-IANA-rele.patch b/meta-oe/recipes-dbs/postgresql/files/0001-Sync-our-copy-of-the-timezone-library-with-IANA-rele.patch deleted file mode 100644 index 6d8c46e7481..00000000000 --- a/meta-oe/recipes-dbs/postgresql/files/0001-Sync-our-copy-of-the-timezone-library-with-IANA-rele.patch +++ /dev/null @@ -1,1164 +0,0 @@ -From 12bfb778ce688fc662a6cb35f6298734fcf4856f Mon Sep 17 00:00:00 2001 -From: Tom Lane -Date: Fri, 19 Oct 2018 19:36:34 -0400 -Subject: [PATCH] Sync our copy of the timezone library with IANA release - tzcode2018f. - -About half of this is purely cosmetic changes to reduce the diff between -our code and theirs, like inserting "const" markers where they have them. - -The other half is tracking actual code changes in zic.c and localtime.c. -I don't think any of these represent near-term compatibility hazards, but -it seems best to stay up to date. - -I also fixed longstanding bugs in our code for producing the -known_abbrevs.txt list, which by chance hadn't been exposed before, -but which resulted in some garbage output after applying the upstream -changes in zic.c. Notably, because upstream removed their old phony -transitions at the Big Bang, it's now necessary to cope with TZif files -containing no DST transition times at all. - -Upstream-Status: Backport -Signed-off-by: Armin Kuster - ---- - src/timezone/README | 2 +- - src/timezone/localtime.c | 126 ++++++++++++------ - src/timezone/pgtz.h | 10 +- - src/timezone/private.h | 3 + - src/timezone/strftime.c | 10 +- - src/timezone/tzfile.h | 7 +- - src/timezone/zic.c | 330 ++++++++++++++++++++++++++--------------------- - 7 files changed, 291 insertions(+), 197 deletions(-) - -Index: postgresql-10.5/src/timezone/README -=================================================================== ---- postgresql-10.5.orig/src/timezone/README -+++ postgresql-10.5/src/timezone/README -@@ -55,7 +55,7 @@ match properly on the old version. - Time Zone code - ============== - --The code in this directory is currently synced with tzcode release 2018e. -+The code in this directory is currently synced with tzcode release 2018f. - There are many cosmetic (and not so cosmetic) differences from the - original tzcode library, but diffs in the upstream version should usually - be propagated to our version. Here are some notes about that. -Index: postgresql-10.5/src/timezone/localtime.c -=================================================================== ---- postgresql-10.5.orig/src/timezone/localtime.c -+++ postgresql-10.5/src/timezone/localtime.c -@@ -1,3 +1,5 @@ -+/* Convert timestamp from pg_time_t to struct pg_tm. */ -+ - /* - * This file is in the public domain, so clarified as of - * 1996-06-05 by Arthur David Olson. -@@ -117,7 +119,7 @@ init_ttinfo(struct ttinfo *s, int32 gmto - } - - static int32 --detzcode(const char *codep) -+detzcode(const char *const codep) - { - int32 result; - int i; -@@ -143,7 +145,7 @@ detzcode(const char *codep) - } - - static int64 --detzcode64(const char *codep) -+detzcode64(const char *const codep) - { - uint64 result; - int i; -@@ -258,8 +260,13 @@ tzloadbody(char const *name, char *canon - int32 charcnt = detzcode(up->tzhead.tzh_charcnt); - char const *p = up->buf + tzheadsize; - -+ /* -+ * Although tzfile(5) currently requires typecnt to be nonzero, -+ * support future formats that may allow zero typecnt in files that -+ * have a TZ string and no transitions. -+ */ - if (!(0 <= leapcnt && leapcnt < TZ_MAX_LEAPS -- && 0 < typecnt && typecnt < TZ_MAX_TYPES -+ && 0 <= typecnt && typecnt < TZ_MAX_TYPES - && 0 <= timecnt && timecnt < TZ_MAX_TIMES - && 0 <= charcnt && charcnt < TZ_MAX_CHARS - && (ttisstdcnt == typecnt || ttisstdcnt == 0) -@@ -416,8 +423,7 @@ tzloadbody(char const *name, char *canon - struct state *ts = &lsp->u.st; - - up->buf[nread - 1] = '\0'; -- if (tzparse(&up->buf[1], ts, false) -- && ts->typecnt == 2) -+ if (tzparse(&up->buf[1], ts, false)) - { - /* - * Attempt to reuse existing abbreviations. Without this, -@@ -430,7 +436,7 @@ tzloadbody(char const *name, char *canon - int gotabbr = 0; - int charcnt = sp->charcnt; - -- for (i = 0; i < 2; i++) -+ for (i = 0; i < ts->typecnt; i++) - { - char *tsabbr = ts->chars + ts->ttis[i].tt_abbrind; - int j; -@@ -455,7 +461,7 @@ tzloadbody(char const *name, char *canon - } - } - } -- if (gotabbr == 2) -+ if (gotabbr == ts->typecnt) - { - sp->charcnt = charcnt; - -@@ -470,7 +476,8 @@ tzloadbody(char const *name, char *canon - sp->timecnt--; - - for (i = 0; i < ts->timecnt; i++) -- if (sp->ats[sp->timecnt - 1] < ts->ats[i]) -+ if (sp->timecnt == 0 -+ || sp->ats[sp->timecnt - 1] < ts->ats[i]) - break; - while (i < ts->timecnt - && sp->timecnt < TZ_MAX_TIMES) -@@ -481,11 +488,13 @@ tzloadbody(char const *name, char *canon - sp->timecnt++; - i++; - } -- sp->ttis[sp->typecnt++] = ts->ttis[0]; -- sp->ttis[sp->typecnt++] = ts->ttis[1]; -+ for (i = 0; i < ts->typecnt; i++) -+ sp->ttis[sp->typecnt++] = ts->ttis[i]; - } - } - } -+ if (sp->typecnt == 0) -+ return EINVAL; - if (sp->timecnt > 1) - { - for (i = 1; i < sp->timecnt; ++i) -@@ -507,6 +516,18 @@ tzloadbody(char const *name, char *canon - } - - /* -+ * Infer sp->defaulttype from the data. Although this default type is -+ * always zero for data from recent tzdb releases, things are trickier for -+ * data from tzdb 2018e or earlier. -+ * -+ * The first set of heuristics work around bugs in 32-bit data generated -+ * by tzdb 2013c or earlier. The workaround is for zones like -+ * Australia/Macquarie where timestamps before the first transition have a -+ * time type that is not the earliest standard-time type. See: -+ * https://mm.icann.org/pipermail/tz/2013-May/019368.html -+ */ -+ -+ /* - * If type 0 is unused in transitions, it's the type to use for early - * times. - */ -@@ -529,6 +550,11 @@ tzloadbody(char const *name, char *canon - } - - /* -+ * The next heuristics are for data generated by tzdb 2018e or earlier, -+ * for zones like EST5EDT where the first transition is to DST. -+ */ -+ -+ /* - * If no result yet, find the first standard type. If there is none, punt - * to type zero. - */ -@@ -542,7 +568,14 @@ tzloadbody(char const *name, char *canon - break; - } - } -+ -+ /* -+ * A simple 'sp->defaulttype = 0;' would suffice here if we didn't have to -+ * worry about 2018e-or-earlier data. Even simpler would be to remove the -+ * defaulttype member and just use 0 in its place. -+ */ - sp->defaulttype = i; -+ - return 0; - } - -@@ -601,10 +634,11 @@ static const int year_lengths[2] = { - }; - - /* -- * Given a pointer into a time zone string, scan until a character that is not -- * a valid character in a zone name is found. Return a pointer to that -- * character. -+ * Given a pointer into a timezone string, scan until a character that is not -+ * a valid character in a time zone abbreviation is found. -+ * Return a pointer to that character. - */ -+ - static const char * - getzname(const char *strp) - { -@@ -617,15 +651,17 @@ getzname(const char *strp) - } - - /* -- * Given a pointer into an extended time zone string, scan until the ending -- * delimiter of the zone name is located. Return a pointer to the delimiter. -+ * Given a pointer into an extended timezone string, scan until the ending -+ * delimiter of the time zone abbreviation is located. -+ * Return a pointer to the delimiter. - * - * As with getzname above, the legal character set is actually quite - * restricted, with other characters producing undefined results. - * We don't do any checking here; checking is done later in common-case code. - */ -+ - static const char * --getqzname(const char *strp, int delim) -+getqzname(const char *strp, const int delim) - { - int c; - -@@ -635,13 +671,14 @@ getqzname(const char *strp, int delim) - } - - /* -- * Given a pointer into a time zone string, extract a number from that string. -+ * Given a pointer into a timezone string, extract a number from that string. - * Check that the number is within a specified range; if it is not, return - * NULL. - * Otherwise, return a pointer to the first character not part of the number. - */ -+ - static const char * --getnum(const char *strp, int *nump, int min, int max) -+getnum(const char *strp, int *const nump, const int min, const int max) - { - char c; - int num; -@@ -663,14 +700,15 @@ getnum(const char *strp, int *nump, int - } - - /* -- * Given a pointer into a time zone string, extract a number of seconds, -+ * Given a pointer into a timezone string, extract a number of seconds, - * in hh[:mm[:ss]] form, from the string. - * If any error occurs, return NULL. - * Otherwise, return a pointer to the first character not part of the number - * of seconds. - */ -+ - static const char * --getsecs(const char *strp, int32 *secsp) -+getsecs(const char *strp, int32 *const secsp) - { - int num; - -@@ -704,13 +742,14 @@ getsecs(const char *strp, int32 *secsp) - } - - /* -- * Given a pointer into a time zone string, extract an offset, in -+ * Given a pointer into a timezone string, extract an offset, in - * [+-]hh[:mm[:ss]] form, from the string. - * If any error occurs, return NULL. - * Otherwise, return a pointer to the first character not part of the time. - */ -+ - static const char * --getoffset(const char *strp, int32 *offsetp) -+getoffset(const char *strp, int32 *const offsetp) - { - bool neg = false; - -@@ -730,13 +769,14 @@ getoffset(const char *strp, int32 *offse - } - - /* -- * Given a pointer into a time zone string, extract a rule in the form -+ * Given a pointer into a timezone string, extract a rule in the form - * date[/time]. See POSIX section 8 for the format of "date" and "time". - * If a valid rule is not found, return NULL. - * Otherwise, return a pointer to the first character not part of the rule. - */ -+ - static const char * --getrule(const char *strp, struct rule *rulep) -+getrule(const char *strp, struct rule *const rulep) - { - if (*strp == 'J') - { -@@ -795,9 +835,10 @@ getrule(const char *strp, struct rule *r - * Given a year, a rule, and the offset from UT at the time that rule takes - * effect, calculate the year-relative time that rule takes effect. - */ -+ - static int32 --transtime(int year, const struct rule *rulep, -- int32 offset) -+transtime(const int year, const struct rule *const rulep, -+ const int32 offset) - { - bool leapyear; - int32 value; -@@ -981,7 +1022,7 @@ tzparse(const char *name, struct state * - { - dstname = name; - name = getzname(name); -- dstlen = name - dstname; /* length of DST zone name */ -+ dstlen = name - dstname; /* length of DST abbr. */ - } - if (!dstlen) - return false; -@@ -1023,8 +1064,8 @@ tzparse(const char *name, struct state * - /* - * Two transitions per year, from EPOCH_YEAR forward. - */ -- init_ttinfo(&sp->ttis[0], -dstoffset, true, stdlen + 1); -- init_ttinfo(&sp->ttis[1], -stdoffset, false, 0); -+ init_ttinfo(&sp->ttis[0], -stdoffset, false, 0); -+ init_ttinfo(&sp->ttis[1], -dstoffset, true, stdlen + 1); - sp->defaulttype = 0; - timecnt = 0; - janfirst = 0; -@@ -1073,19 +1114,15 @@ tzparse(const char *name, struct state * - if (!increment_overflow_time - (&sp->ats[timecnt], - janoffset + starttime)) -- sp->types[timecnt++] = reversed; -- else if (janoffset) -- sp->defaulttype = reversed; -+ sp->types[timecnt++] = !reversed; - sp->ats[timecnt] = janfirst; - if (!increment_overflow_time - (&sp->ats[timecnt], - janoffset + endtime)) - { -- sp->types[timecnt++] = !reversed; -+ sp->types[timecnt++] = reversed; - yearlim = year + YEARSPERREPEAT + 1; - } -- else if (janoffset) -- sp->defaulttype = !reversed; - } - if (increment_overflow_time - (&janfirst, janoffset + yearsecs)) -@@ -1094,7 +1131,10 @@ tzparse(const char *name, struct state * - } - sp->timecnt = timecnt; - if (!timecnt) -+ { -+ sp->ttis[0] = sp->ttis[1]; - sp->typecnt = 1; /* Perpetual DST. */ -+ } - else if (YEARSPERREPEAT < year - yearbeg) - sp->goback = sp->goahead = true; - } -@@ -1163,7 +1203,6 @@ tzparse(const char *name, struct state * - * otherwise, add the standard time offset to the - * transition time. - */ -- - /* - * Transitions from DST to DDST will effectively disappear - * since POSIX provides for only one DST offset. -@@ -1217,7 +1256,7 @@ tzparse(const char *name, struct state * - } - - static void --gmtload(struct state *sp) -+gmtload(struct state *const sp) - { - if (tzload(gmt, NULL, sp, true) != 0) - tzparse(gmt, sp, true); -@@ -1232,7 +1271,7 @@ gmtload(struct state *sp) - */ - static struct pg_tm * - localsub(struct state const *sp, pg_time_t const *timep, -- struct pg_tm *tmp) -+ struct pg_tm *const tmp) - { - const struct ttinfo *ttisp; - int i; -@@ -1300,6 +1339,11 @@ localsub(struct state const *sp, pg_time - } - ttisp = &sp->ttis[i]; - -+ /* -+ * To get (wrong) behavior that's compatible with System V Release 2.0 -+ * you'd replace the statement below with t += ttisp->tt_gmtoff; -+ * timesub(&t, 0L, sp, tmp); -+ */ - result = timesub(&t, ttisp->tt_gmtoff, sp, tmp); - if (result) - { -@@ -1322,8 +1366,10 @@ pg_localtime(const pg_time_t *timep, con - * - * Except we have a private "struct state" for GMT, so no sp is passed in. - */ -+ - static struct pg_tm * --gmtsub(pg_time_t const *timep, int32 offset, struct pg_tm *tmp) -+gmtsub(pg_time_t const *timep, int32 offset, -+ struct pg_tm *tmp) - { - struct pg_tm *result; - -@@ -1337,6 +1383,7 @@ gmtsub(pg_time_t const *timep, int32 off - gmt_is_set = true; - gmtload(gmtptr); - } -+ - result = timesub(timep, offset, gmtptr, tmp); - - /* -@@ -1361,6 +1408,7 @@ pg_gmtime(const pg_time_t *timep) - * Return the number of leap years through the end of the given year - * where, to make the math easy, the answer for year zero is defined as zero. - */ -+ - static int - leaps_thru_end_of_nonneg(int y) - { -Index: postgresql-10.5/src/timezone/pgtz.h -=================================================================== ---- postgresql-10.5.orig/src/timezone/pgtz.h -+++ postgresql-10.5/src/timezone/pgtz.h -@@ -49,10 +49,16 @@ struct state - pg_time_t ats[TZ_MAX_TIMES]; - unsigned char types[TZ_MAX_TIMES]; - struct ttinfo ttis[TZ_MAX_TYPES]; -- char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, 3 /* sizeof gmt */ ), -+ char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, 4 /* sizeof gmt */ ), - (2 * (TZ_STRLEN_MAX + 1)))]; - struct lsinfo lsis[TZ_MAX_LEAPS]; -- int defaulttype; /* for early times or if no transitions */ -+ -+ /* -+ * The time type to use for early times or if no transitions. It is always -+ * zero for recent tzdb releases. It might be nonzero for data from tzdb -+ * 2018e or earlier. -+ */ -+ int defaulttype; - }; - - -Index: postgresql-10.5/src/timezone/private.h -=================================================================== ---- postgresql-10.5.orig/src/timezone/private.h -+++ postgresql-10.5/src/timezone/private.h -@@ -1,4 +1,7 @@ -+/* Private header for tzdb code. */ -+ - #ifndef PRIVATE_H -+ - #define PRIVATE_H - - /* -Index: postgresql-10.5/src/timezone/strftime.c -=================================================================== ---- postgresql-10.5.orig/src/timezone/strftime.c -+++ postgresql-10.5/src/timezone/strftime.c -@@ -1,4 +1,4 @@ --/* Convert a broken-down timestamp to a string. */ -+/* Convert a broken-down timestamp to a string. */ - - /* - * Copyright 1989 The Regents of the University of California. -@@ -115,7 +115,7 @@ static char *_add(const char *, char *, - static char *_conv(int, const char *, char *, const char *); - static char *_fmt(const char *, const struct pg_tm *, char *, const char *, - enum warn *); --static char *_yconv(int, int, bool, bool, char *, const char *); -+static char *_yconv(int, int, bool, bool, char *, char const *); - - - size_t -@@ -441,7 +441,8 @@ _fmt(const char *format, const struct pg - - /* - * C99 and later say that %Z must be replaced by the empty -- * string if the time zone is not determinable. -+ * string if the time zone abbreviation is not -+ * determinable. - */ - continue; - case 'z': -@@ -519,6 +520,7 @@ _add(const char *str, char *pt, const ch - * same output as %Y, and that %Y contains at least 4 bytes, - * with more only if necessary. - */ -+ - static char * - _yconv(int a, int b, bool convert_top, bool convert_yy, - char *pt, const char *ptlim) -@@ -526,7 +528,7 @@ _yconv(int a, int b, bool convert_top, b - int lead; - int trail; - --#define DIVISOR 100 -+#define DIVISOR 100 - trail = a % DIVISOR + b % DIVISOR; - lead = a / DIVISOR + b / DIVISOR + trail / DIVISOR; - trail %= DIVISOR; -Index: postgresql-10.5/src/timezone/tzfile.h -=================================================================== ---- postgresql-10.5.orig/src/timezone/tzfile.h -+++ postgresql-10.5/src/timezone/tzfile.h -@@ -1,4 +1,7 @@ -+/* Layout and location of TZif files. */ -+ - #ifndef TZFILE_H -+ - #define TZFILE_H - - /* -@@ -21,14 +24,14 @@ - * Information about time zone files. - */ - --#define TZDEFAULT "localtime" -+#define TZDEFAULT "/etc/localtime" - #define TZDEFRULES "posixrules" - - /* - * Each file begins with. . . - */ - --#define TZ_MAGIC "TZif" -+#define TZ_MAGIC "TZif" - - struct tzhead - { -Index: postgresql-10.5/src/timezone/zic.c -=================================================================== ---- postgresql-10.5.orig/src/timezone/zic.c -+++ postgresql-10.5/src/timezone/zic.c -@@ -1,3 +1,5 @@ -+/* Compile .zi time zone data into TZif binary files. */ -+ - /* - * This file is in the public domain, so clarified as of - * 2006-07-17 by Arthur David Olson. -@@ -130,8 +132,7 @@ static void adjleap(void); - static void associate(void); - static void dolink(const char *, const char *, bool); - static char **getfields(char *buf); --static zic_t gethms(const char *string, const char *errstring, -- bool); -+static zic_t gethms(const char *string, const char *errstring); - static zic_t getstdoff(char *, bool *); - static void infile(const char *filename); - static void inleap(char **fields, int nfields); -@@ -162,7 +163,7 @@ enum - PERCENT_Z_LEN_BOUND = sizeof "+995959" - 1}; - - /* If true, work around a bug in Qt 5.6.1 and earlier, which mishandles -- tz binary files whose POSIX-TZ-style strings contain '<'; see -+ TZif files whose POSIX-TZ-style strings contain '<'; see - QTBUG-53071 . This - workaround will no longer be needed when Qt 5.6.1 and earlier are - obsolete, say in the year 2021. */ -@@ -211,7 +212,7 @@ static int typecnt; - #define ZF_RULE 3 - #define ZF_FORMAT 4 - #define ZF_TILYEAR 5 --#define ZF_TILMONTH 6 -+#define ZF_TILMONTH 6 - #define ZF_TILDAY 7 - #define ZF_TILTIME 8 - #define ZONE_MINFIELDS 5 -@@ -224,12 +225,12 @@ static int typecnt; - #define ZFC_GMTOFF 0 - #define ZFC_RULE 1 - #define ZFC_FORMAT 2 --#define ZFC_TILYEAR 3 -+#define ZFC_TILYEAR 3 - #define ZFC_TILMONTH 4 - #define ZFC_TILDAY 5 --#define ZFC_TILTIME 6 --#define ZONEC_MINFIELDS 3 --#define ZONEC_MAXFIELDS 7 -+#define ZFC_TILTIME 6 -+#define ZONEC_MINFIELDS 3 -+#define ZONEC_MAXFIELDS 7 - - /* - * Which files are which on a Rule line. -@@ -244,7 +245,7 @@ static int typecnt; - #define RF_TOD 7 - #define RF_STDOFF 8 - #define RF_ABBRVAR 9 --#define RULE_FIELDS 10 -+#define RULE_FIELDS 10 - - /* - * Which fields are which on a Link line. -@@ -252,7 +253,7 @@ static int typecnt; - - #define LF_FROM 1 - #define LF_TO 2 --#define LINK_FIELDS 3 -+#define LINK_FIELDS 3 - - /* - * Which fields are which on a Leap line. -@@ -264,7 +265,7 @@ static int typecnt; - #define LP_TIME 4 - #define LP_CORR 5 - #define LP_ROLL 6 --#define LEAP_FIELDS 7 -+#define LEAP_FIELDS 7 - - /* - * Year synonyms. -@@ -998,48 +999,6 @@ dolink(char const *fromfield, char const - static zic_t const min_time = MINVAL(zic_t, TIME_T_BITS_IN_FILE); - static zic_t const max_time = MAXVAL(zic_t, TIME_T_BITS_IN_FILE); - --/* -- * Estimated time of the Big Bang, in seconds since the POSIX epoch. -- * rounded downward to the negation of a power of two that is -- * comfortably outside the error bounds. -- * -- * For the time of the Big Bang, see: -- * -- * Ade PAR, Aghanim N, Armitage-Caplan C et al. Planck 2013 results. -- * I. Overview of products and scientific results. -- * arXiv:1303.5062 2013-03-20 20:10:01 UTC -- * [PDF] -- * -- * Page 36, Table 9, row Age/Gyr, column Planck+WP+highL+BAO 68% limits -- * gives the value 13.798 plus-or-minus 0.037 billion years. -- * Multiplying this by 1000000000 and then by 31557600 (the number of -- * seconds in an astronomical year) gives a value that is comfortably -- * less than 2**59, so BIG_BANG is - 2**59. -- * -- * BIG_BANG is approximate, and may change in future versions. -- * Please do not rely on its exact value. -- */ -- --#ifndef BIG_BANG --#define BIG_BANG (- (((zic_t) 1) << 59)) --#endif -- --/* If true, work around GNOME bug 730332 -- -- by refusing to output time stamps before BIG_BANG. -- Such time stamps are physically suspect anyway. -- -- The GNOME bug is scheduled to be fixed in GNOME 3.22, and if so -- this workaround will no longer be needed when GNOME 3.21 and -- earlier are obsolete, say in the year 2021. */ --enum --{ --WORK_AROUND_GNOME_BUG_730332 = true}; -- --static const zic_t early_time = (WORK_AROUND_GNOME_BUG_730332 -- ? BIG_BANG -- : MINVAL(zic_t, TIME_T_BITS_IN_FILE)); -- - /* Return true if NAME is a directory. */ - static bool - itsdir(char const *name) -@@ -1281,8 +1240,9 @@ infile(const char *name) - * A null string maps to zero. - * Call error with errstring and return zero on errors. - */ -+ - static zic_t --gethms(char const *string, char const *errstring, bool signable) -+gethms(char const *string, char const *errstring) - { - /* PG: make hh be int not zic_t to avoid sscanf portability issues */ - int hh; -@@ -1299,9 +1259,7 @@ gethms(char const *string, char const *e - - if (string == NULL || *string == '\0') - return 0; -- if (!signable) -- sign = 1; -- else if (*string == '-') -+ if (*string == '-') - { - sign = -1; - ++string; -@@ -1384,7 +1342,7 @@ getstdoff(char *field, bool *isdst) - break; - } - } -- stdoff = gethms(field, _("invalid saved time"), true); -+ stdoff = gethms(field, _("invalid saved time")); - *isdst = dst < 0 ? stdoff != 0 : dst; - return stdoff; - } -@@ -1399,10 +1357,29 @@ inrule(char **fields, int nfields) - error(_("wrong number of fields on Rule line")); - return; - } -- if (*fields[RF_NAME] == '\0') -+ switch (*fields[RF_NAME]) - { -- error(_("nameless rule")); -- return; -+ case '\0': -+ case ' ': -+ case '\f': -+ case '\n': -+ case '\r': -+ case '\t': -+ case '\v': -+ case '+': -+ case '-': -+ case '0': -+ case '1': -+ case '2': -+ case '3': -+ case '4': -+ case '5': -+ case '6': -+ case '7': -+ case '8': -+ case '9': -+ error(_("Invalid rule name \"%s\""), fields[RF_NAME]); -+ return; - } - r.r_filename = filename; - r.r_linenum = linenum; -@@ -1507,7 +1484,7 @@ inzsub(char **fields, int nfields, bool - } - z.z_filename = filename; - z.z_linenum = linenum; -- z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UT offset"), true); -+ z.z_gmtoff = gethms(fields[i_gmtoff], _("invalid UT offset")); - if ((cp = strchr(fields[i_format], '%')) != NULL) - { - if ((*++cp != 's' && *cp != 'z') || strchr(cp, '%') -@@ -1649,7 +1626,7 @@ inleap(char **fields, int nfields) - return; - } - t = dayoff * SECSPERDAY; -- tod = gethms(fields[LP_TIME], _("invalid time of day"), false); -+ tod = gethms(fields[LP_TIME], _("invalid time of day")); - cp = fields[LP_CORR]; - { - bool positive; -@@ -1757,7 +1734,7 @@ rulesub(struct rule *rp, const char *loy - break; - } - } -- rp->r_tod = gethms(dp, _("invalid time of day"), false); -+ rp->r_tod = gethms(dp, _("invalid time of day")); - free(dp); - - /* -@@ -1942,7 +1919,43 @@ is32(const zic_t x) - } - - static void --writezone(const char *const name, const char *const string, char version) -+swaptypes(int i, int j) -+{ -+ { -+ zic_t t = gmtoffs[i]; -+ -+ gmtoffs[i] = gmtoffs[j]; -+ gmtoffs[j] = t; -+ } -+ { -+ char t = isdsts[i]; -+ -+ isdsts[i] = isdsts[j]; -+ isdsts[j] = t; -+ } -+ { -+ unsigned char t = abbrinds[i]; -+ -+ abbrinds[i] = abbrinds[j]; -+ abbrinds[j] = t; -+ } -+ { -+ bool t = ttisstds[i]; -+ -+ ttisstds[i] = ttisstds[j]; -+ ttisstds[j] = t; -+ } -+ { -+ bool t = ttisgmts[i]; -+ -+ ttisgmts[i] = ttisgmts[j]; -+ ttisgmts[j] = t; -+ } -+} -+ -+static void -+writezone(const char *const name, const char *const string, char version, -+ int defaulttype) - { - FILE *fp; - ptrdiff_t i, -@@ -1977,14 +1990,12 @@ writezone(const char *const name, const - - toi = 0; - fromi = 0; -- while (fromi < timecnt && attypes[fromi].at < early_time) -- ++fromi; - for (; fromi < timecnt; ++fromi) - { -- if (toi > 1 && ((attypes[fromi].at + -- gmtoffs[attypes[toi - 1].type]) <= -- (attypes[toi - 1].at + -- gmtoffs[attypes[toi - 2].type]))) -+ if (toi != 0 && ((attypes[fromi].at + -+ gmtoffs[attypes[toi - 1].type]) <= -+ (attypes[toi - 1].at + gmtoffs[toi == 1 ? 0 -+ : attypes[toi - 2].type]))) - { - attypes[toi - 1].type = - attypes[fromi].type; -@@ -2019,8 +2030,8 @@ writezone(const char *const name, const - } - - /* -- * Work around QTBUG-53071 for time stamps less than y2038_boundary - 1, -- * by inserting a no-op transition at time y2038_boundary - 1. This works -+ * Work around QTBUG-53071 for timestamps less than y2038_boundary - 1, by -+ * inserting a no-op transition at time y2038_boundary - 1. This works - * only for timestamps before the boundary, which should be good enough in - * practice as QTBUG-53071 should be long-dead by 2038. - */ -@@ -2116,7 +2127,8 @@ writezone(const char *const name, const - int thisleapi, - thisleapcnt, - thisleaplim; -- int writetype[TZ_MAX_TYPES]; -+ int old0; -+ char omittype[TZ_MAX_TYPES]; - int typemap[TZ_MAX_TYPES]; - int thistypecnt; - char thischars[TZ_MAX_CHARS]; -@@ -2144,28 +2156,19 @@ writezone(const char *const name, const - error(_("too many transition times")); - thistimelim = thistimei + thistimecnt; - thisleaplim = thisleapi + thisleapcnt; -- for (i = 0; i < typecnt; ++i) -- writetype[i] = thistimecnt == timecnt; -- if (thistimecnt == 0) -- { -- /* -- * No transition times fall in the current (32- or 64-bit) window. -- */ -- if (typecnt != 0) -- writetype[typecnt - 1] = true; -- } -- else -- { -- for (i = thistimei - 1; i < thistimelim; ++i) -- if (i >= 0) -- writetype[types[i]] = true; -+ memset(omittype, true, typecnt); -+ omittype[defaulttype] = false; -+ for (i = thistimei; i < thistimelim; i++) -+ omittype[types[i]] = false; -+ -+ /* -+ * Reorder types to make DEFAULTTYPE type 0. Use TYPEMAP to swap OLD0 -+ * and DEFAULTTYPE so that DEFAULTTYPE appears as type 0 in the output -+ * instead of OLD0. TYPEMAP also omits unused types. -+ */ -+ old0 = strlen(omittype); -+ swaptypes(old0, defaulttype); - -- /* -- * For America/Godthab and Antarctica/Palmer -- */ -- if (thistimei == 0) -- writetype[0] = true; -- } - #ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH - - /* -@@ -2187,8 +2190,8 @@ writezone(const char *const name, const - mrudst = types[i]; - else - mrustd = types[i]; -- for (i = 0; i < typecnt; ++i) -- if (writetype[i]) -+ for (i = old0; i < typecnt; i++) -+ if (!omittype[i]) - { - if (isdsts[i]) - hidst = i; -@@ -2205,7 +2208,7 @@ writezone(const char *const name, const - ttisstds[mrudst], - ttisgmts[mrudst]); - isdsts[mrudst] = 1; -- writetype[type] = true; -+ omittype[type] = false; - } - if (histd >= 0 && mrustd >= 0 && histd != mrustd && - gmtoffs[histd] != gmtoffs[mrustd]) -@@ -2217,22 +2220,26 @@ writezone(const char *const name, const - ttisstds[mrustd], - ttisgmts[mrustd]); - isdsts[mrustd] = 0; -- writetype[type] = true; -+ omittype[type] = false; - } - } - #endif /* !defined - * LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */ - thistypecnt = 0; -- for (i = 0; i < typecnt; ++i) -- typemap[i] = writetype[i] ? thistypecnt++ : -1; -+ for (i = old0; i < typecnt; i++) -+ if (!omittype[i]) -+ typemap[i == old0 ? defaulttype -+ : i == defaulttype ? old0 : i] -+ = thistypecnt++; -+ - for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i) - indmap[i] = -1; - thischarcnt = 0; -- for (i = 0; i < typecnt; ++i) -+ for (i = old0; i < typecnt; i++) - { - char *thisabbr; - -- if (!writetype[i]) -+ if (omittype[i]) - continue; - if (indmap[abbrinds[i]] >= 0) - continue; -@@ -2267,23 +2274,16 @@ writezone(const char *const name, const - DO(tzh_typecnt); - DO(tzh_charcnt); - #undef DO -- for (i = thistimei; i < thistimelim; ++i) -- if (pass == 1) - -- /* -- * Output an INT32_MIN "transition" if appropriate; see above. -- */ -- puttzcode(((ats[i] < PG_INT32_MIN) ? -- PG_INT32_MIN : ats[i]), fp); -- else -+ /* PG: print current timezone abbreviations if requested */ -+ if (print_abbrevs && pass == 2) -+ { -+ /* Print "type" data for periods ending after print_cutoff */ -+ for (i = thistimei; i < thistimelim; ++i) - { -- puttzcode64(ats[i], fp); -- -- /* Print current timezone abbreviations if requested */ -- if (print_abbrevs && -- (i == thistimelim - 1 || ats[i + 1] > print_cutoff)) -+ if (i == thistimelim - 1 || ats[i + 1] > print_cutoff) - { -- unsigned char tm = typemap[types[i]]; -+ unsigned char tm = types[i]; - char *thisabbrev = &thischars[indmap[abbrinds[tm]]]; - - /* filter out assorted junk entries */ -@@ -2295,6 +2295,32 @@ writezone(const char *const name, const - isdsts[tm] ? "\tD" : ""); - } - } -+ /* Print the default type if we have no transitions at all */ -+ if (thistimei >= thistimelim) -+ { -+ unsigned char tm = defaulttype; -+ char *thisabbrev = &thischars[indmap[abbrinds[tm]]]; -+ -+ /* filter out assorted junk entries */ -+ if (strcmp(thisabbrev, GRANDPARENTED) != 0 && -+ strcmp(thisabbrev, "zzz") != 0) -+ fprintf(stdout, "%s\t" INT64_FORMAT "%s\n", -+ thisabbrev, -+ gmtoffs[tm], -+ isdsts[tm] ? "\tD" : ""); -+ } -+ } -+ -+ for (i = thistimei; i < thistimelim; ++i) -+ if (pass == 1) -+ -+ /* -+ * Output an INT32_MIN "transition" if appropriate; see above. -+ */ -+ puttzcode(((ats[i] < PG_INT32_MIN) ? -+ PG_INT32_MIN : ats[i]), fp); -+ else -+ puttzcode64(ats[i], fp); - for (i = thistimei; i < thistimelim; ++i) - { - unsigned char uc; -@@ -2302,8 +2328,8 @@ writezone(const char *const name, const - uc = typemap[types[i]]; - fwrite(&uc, sizeof uc, 1, fp); - } -- for (i = 0; i < typecnt; ++i) -- if (writetype[i]) -+ for (i = old0; i < typecnt; i++) -+ if (!omittype[i]) - { - puttzcode(gmtoffs[i], fp); - putc(isdsts[i], fp); -@@ -2346,12 +2372,13 @@ writezone(const char *const name, const - puttzcode64(todo, fp); - puttzcode(corr[i], fp); - } -- for (i = 0; i < typecnt; ++i) -- if (writetype[i]) -+ for (i = old0; i < typecnt; i++) -+ if (!omittype[i]) - putc(ttisstds[i], fp); -- for (i = 0; i < typecnt; ++i) -- if (writetype[i]) -+ for (i = old0; i < typecnt; i++) -+ if (!omittype[i]) - putc(ttisgmts[i], fp); -+ swaptypes(old0, defaulttype); - } - fprintf(fp, "\n%s\n", string); - close_file(fp, directory, name); -@@ -2757,6 +2784,7 @@ outzone(const struct zone *zpfirst, ptrd - zic_t one = 1; - zic_t y2038_boundary = one << 31; - zic_t max_year0; -+ int defaulttype = -1; - - max_abbr_len = 2 + max_format_len + max_abbrvar_len; - max_envvar_len = 2 * max_abbr_len + 5 * 9; -@@ -2880,9 +2908,9 @@ outzone(const struct zone *zpfirst, ptrd - */ - stdoff = 0; - zp = &zpfirst[i]; -- usestart = i > 0 && (zp - 1)->z_untiltime > early_time; -+ usestart = i > 0 && (zp - 1)->z_untiltime > min_time; - useuntil = i < (zonecount - 1); -- if (useuntil && zp->z_untiltime <= early_time) -+ if (useuntil && zp->z_untiltime <= min_time) - continue; - gmtoff = zp->z_gmtoff; - eat(zp->z_filename, zp->z_linenum); -@@ -2901,7 +2929,7 @@ outzone(const struct zone *zpfirst, ptrd - usestart = false; - } - else -- addtt(early_time, type); -+ defaulttype = type; - } - else - for (year = min_year; year <= max_year; ++year) -@@ -3032,6 +3060,8 @@ outzone(const struct zone *zpfirst, ptrd - offset = oadd(zp->z_gmtoff, rp->r_stdoff); - type = addtype(offset, ab, rp->r_isdst, - rp->r_todisstd, rp->r_todisgmt); -+ if (defaulttype < 0 && !rp->r_isdst) -+ defaulttype = type; - if (rp->r_hiyear == ZIC_MAX - && !(0 <= lastatmax - && ktime < attypes[lastatmax].at)) -@@ -3050,11 +3080,15 @@ outzone(const struct zone *zpfirst, ptrd - if (*startbuf == '\0') - error(_("cannot determine time zone abbreviation to use just after until time")); - else -- addtt(starttime, -- addtype(startoff, startbuf, -- startoff != zp->z_gmtoff, -- startttisstd, -- startttisgmt)); -+ { -+ bool isdst = startoff != zp->z_gmtoff; -+ -+ type = addtype(startoff, startbuf, isdst, -+ startttisstd, startttisgmt); -+ if (defaulttype < 0 && !isdst) -+ defaulttype = type; -+ addtt(starttime, type); -+ } - } - - /* -@@ -3071,6 +3105,8 @@ outzone(const struct zone *zpfirst, ptrd - starttime = tadd(starttime, -gmtoff); - } - } -+ if (defaulttype < 0) -+ defaulttype = 0; - if (0 <= lastatmax) - attypes[lastatmax].dontmerge = true; - if (do_extend) -@@ -3100,7 +3136,7 @@ outzone(const struct zone *zpfirst, ptrd - attypes[timecnt - 1].dontmerge = true; - } - } -- writezone(zpfirst->z_name, envvar, version); -+ writezone(zpfirst->z_name, envvar, version, defaulttype); - free(startbuf); - free(ab); - free(envvar); -@@ -3109,21 +3145,6 @@ outzone(const struct zone *zpfirst, ptrd - static void - addtt(zic_t starttime, int type) - { -- if (starttime <= early_time -- || (timecnt == 1 && attypes[0].at < early_time)) -- { -- gmtoffs[0] = gmtoffs[type]; -- isdsts[0] = isdsts[type]; -- ttisstds[0] = ttisstds[type]; -- ttisgmts[0] = ttisgmts[type]; -- if (abbrinds[type] != 0) -- strcpy(chars, &chars[abbrinds[type]]); -- abbrinds[0] = 0; -- charcnt = strlen(chars) + 1; -- typecnt = 1; -- timecnt = 0; -- type = 0; -- } - attypes = growalloc(attypes, sizeof *attypes, timecnt, &timecnt_alloc); - attypes[timecnt].at = starttime; - attypes[timecnt].dontmerge = false; -@@ -3361,7 +3382,7 @@ is_alpha(char a) - } - - /* If A is an uppercase character in the C locale, return its lowercase -- * counterpart. Otherwise, return A. */ -+ counterpart. Otherwise, return A. */ - static char - lowerit(char a) - { -@@ -3628,6 +3649,18 @@ rpytime(const struct rule *rp, zic_t wan - dayoff = 0; - m = TM_JANUARY; - y = EPOCH_YEAR; -+ if (y < wantedy) -+ { -+ wantedy -= y; -+ dayoff = (wantedy / YEARSPERREPEAT) * (SECSPERREPEAT / SECSPERDAY); -+ wantedy %= YEARSPERREPEAT; -+ wantedy += y; -+ } -+ else if (wantedy < 0) -+ { -+ dayoff = (wantedy / YEARSPERREPEAT) * (SECSPERREPEAT / SECSPERDAY); -+ wantedy %= YEARSPERREPEAT; -+ } - while (wantedy != y) - { - if (wantedy > y) -@@ -3706,7 +3739,6 @@ will not work with pre-2004 versions of - if (dayoff > max_time / SECSPERDAY) - return max_time; - t = (zic_t) dayoff * SECSPERDAY; -- - return tadd(t, rp->r_tod); - } - diff --git a/meta-oe/recipes-dbs/postgresql/files/0001-Update-time-zone-data-files-to-tzdata-release-2018f.patch b/meta-oe/recipes-dbs/postgresql/files/0001-Update-time-zone-data-files-to-tzdata-release-2018f.patch deleted file mode 100644 index 41e763c5509..00000000000 --- a/meta-oe/recipes-dbs/postgresql/files/0001-Update-time-zone-data-files-to-tzdata-release-2018f.patch +++ /dev/null @@ -1,6452 +0,0 @@ -From 13877d30f2ec93f6043937f76af207dcc614a4e7 Mon Sep 17 00:00:00 2001 -From: Tom Lane -Date: Fri, 19 Oct 2018 17:01:34 -0400 -Subject: [PATCH] Update time zone data files to tzdata release 2018f. - -DST law changes in Chile, Fiji, and Russia (Volgograd). -Historical corrections for China, Japan, Macau, and North Korea. - -Note: like the previous tzdata update, this involves a depressingly -large amount of semantically-meaningless churn in tzdata.zi. That -is a consequence of upstream's data compression method assigning -unstable abbreviations to DST rulesets. I complained about that -to them last time, and this version now uses an assignment method -that pays some heed to not changing abbreviations unnecessarily. -So hopefully, that'll be better going forward. - -Upstream-Status: Backport -Signed-off-by: Armin Kuster - ---- - src/timezone/data/tzdata.zi | 5273 +++++++++++++++++++------------------- - src/timezone/known_abbrevs.txt | 1 + - src/timezone/tznames/America.txt | 3 + - src/timezone/tznames/Asia.txt | 4 + - src/timezone/tznames/Default | 3 + - src/timezone/tznames/Pacific.txt | 3 + - 6 files changed, 2660 insertions(+), 2627 deletions(-) - -diff --git a/src/timezone/data/tzdata.zi b/src/timezone/data/tzdata.zi -index c470112..6d98902 100644 ---- a/src/timezone/data/tzdata.zi -+++ b/src/timezone/data/tzdata.zi -@@ -1,36 +1,36 @@ --# version 2018e -+# version 2018f - # This zic input file is in the public domain. --R A 1916 o - Jun 14 23s 1 S --R A 1916 1919 - O Sun>=1 23s 0 - --R A 1917 o - Mar 24 23s 1 S --R A 1918 o - Mar 9 23s 1 S --R A 1919 o - Mar 1 23s 1 S --R A 1920 o - F 14 23s 1 S --R A 1920 o - O 23 23s 0 - --R A 1921 o - Mar 14 23s 1 S --R A 1921 o - Jun 21 23s 0 - --R A 1939 o - S 11 23s 1 S --R A 1939 o - N 19 1 0 - --R A 1944 1945 - Ap M>=1 2 1 S --R A 1944 o - O 8 2 0 - --R A 1945 o - S 16 1 0 - --R A 1971 o - Ap 25 23s 1 S --R A 1971 o - S 26 23s 0 - --R A 1977 o - May 6 0 1 S --R A 1977 o - O 21 0 0 - --R A 1978 o - Mar 24 1 1 S --R A 1978 o - S 22 3 0 - --R A 1980 o - Ap 25 0 1 S --R A 1980 o - O 31 2 0 - -+R d 1916 o - Jun 14 23s 1 S -+R d 1916 1919 - O Sun>=1 23s 0 - -+R d 1917 o - Mar 24 23s 1 S -+R d 1918 o - Mar 9 23s 1 S -+R d 1919 o - Mar 1 23s 1 S -+R d 1920 o - F 14 23s 1 S -+R d 1920 o - O 23 23s 0 - -+R d 1921 o - Mar 14 23s 1 S -+R d 1921 o - Jun 21 23s 0 - -+R d 1939 o - S 11 23s 1 S -+R d 1939 o - N 19 1 0 - -+R d 1944 1945 - Ap M>=1 2 1 S -+R d 1944 o - O 8 2 0 - -+R d 1945 o - S 16 1 0 - -+R d 1971 o - Ap 25 23s 1 S -+R d 1971 o - S 26 23s 0 - -+R d 1977 o - May 6 0 1 S -+R d 1977 o - O 21 0 0 - -+R d 1978 o - Mar 24 1 1 S -+R d 1978 o - S 22 3 0 - -+R d 1980 o - Ap 25 0 1 S -+R d 1980 o - O 31 2 0 - - Z Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:1 - 0:9:21 - PMT 1911 Mar 11 --0 A WE%sT 1940 F 25 2 --1 A CE%sT 1946 O 7 -+0 d WE%sT 1940 F 25 2 -+1 d CE%sT 1946 O 7 - 0 - WET 1956 Ja 29 - 1 - CET 1963 Ap 14 --0 A WE%sT 1977 O 21 --1 A CE%sT 1979 O 26 --0 A WE%sT 1981 May -+0 d WE%sT 1977 O 21 -+1 d CE%sT 1979 O 26 -+0 d WE%sT 1981 May - 1 - CET - Z Atlantic/Cape_Verde -1:34:4 - LMT 1912 Ja 1 2u - -2 - -02 1942 S -@@ -52,44 +52,44 @@ Li Africa/Abidjan Africa/Lome - Li Africa/Abidjan Africa/Nouakchott - Li Africa/Abidjan Africa/Ouagadougou - Li Africa/Abidjan Atlantic/St_Helena --R B 1940 o - Jul 15 0 1 S --R B 1940 o - O 1 0 0 - --R B 1941 o - Ap 15 0 1 S --R B 1941 o - S 16 0 0 - --R B 1942 1944 - Ap 1 0 1 S --R B 1942 o - O 27 0 0 - --R B 1943 1945 - N 1 0 0 - --R B 1945 o - Ap 16 0 1 S --R B 1957 o - May 10 0 1 S --R B 1957 1958 - O 1 0 0 - --R B 1958 o - May 1 0 1 S --R B 1959 1981 - May 1 1 1 S --R B 1959 1965 - S 30 3 0 - --R B 1966 1994 - O 1 3 0 - --R B 1982 o - Jul 25 1 1 S --R B 1983 o - Jul 12 1 1 S --R B 1984 1988 - May 1 1 1 S --R B 1989 o - May 6 1 1 S --R B 1990 1994 - May 1 1 1 S --R B 1995 2010 - Ap lastF 0s 1 S --R B 1995 2005 - S lastTh 24 0 - --R B 2006 o - S 21 24 0 - --R B 2007 o - S Th>=1 24 0 - --R B 2008 o - Au lastTh 24 0 - --R B 2009 o - Au 20 24 0 - --R B 2010 o - Au 10 24 0 - --R B 2010 o - S 9 24 1 S --R B 2010 o - S lastTh 24 0 - --R B 2014 o - May 15 24 1 S --R B 2014 o - Jun 26 24 0 - --R B 2014 o - Jul 31 24 1 S --R B 2014 o - S lastTh 24 0 - -+R K 1940 o - Jul 15 0 1 S -+R K 1940 o - O 1 0 0 - -+R K 1941 o - Ap 15 0 1 S -+R K 1941 o - S 16 0 0 - -+R K 1942 1944 - Ap 1 0 1 S -+R K 1942 o - O 27 0 0 - -+R K 1943 1945 - N 1 0 0 - -+R K 1945 o - Ap 16 0 1 S -+R K 1957 o - May 10 0 1 S -+R K 1957 1958 - O 1 0 0 - -+R K 1958 o - May 1 0 1 S -+R K 1959 1981 - May 1 1 1 S -+R K 1959 1965 - S 30 3 0 - -+R K 1966 1994 - O 1 3 0 - -+R K 1982 o - Jul 25 1 1 S -+R K 1983 o - Jul 12 1 1 S -+R K 1984 1988 - May 1 1 1 S -+R K 1989 o - May 6 1 1 S -+R K 1990 1994 - May 1 1 1 S -+R K 1995 2010 - Ap lastF 0s 1 S -+R K 1995 2005 - S lastTh 24 0 - -+R K 2006 o - S 21 24 0 - -+R K 2007 o - S Th>=1 24 0 - -+R K 2008 o - Au lastTh 24 0 - -+R K 2009 o - Au 20 24 0 - -+R K 2010 o - Au 10 24 0 - -+R K 2010 o - S 9 24 1 S -+R K 2010 o - S lastTh 24 0 - -+R K 2014 o - May 15 24 1 S -+R K 2014 o - Jun 26 24 0 - -+R K 2014 o - Jul 31 24 1 S -+R K 2014 o - S lastTh 24 0 - - Z Africa/Cairo 2:5:9 - LMT 1900 O --2 B EE%sT --R C 1920 1942 - S 1 0 0:20 - --R C 1920 1942 - D 31 0 0 - -+2 K EE%sT -+R GH 1920 1942 - S 1 0 0:20 - -+R GH 1920 1942 - D 31 0 0 - - Z Africa/Accra -0:0:52 - LMT 1918 --0 C GMT/+0020 -+0 GH GMT/+0020 - Z Africa/Bissau -1:2:20 - LMT 1912 Ja 1 1u - -1 - -01 1975 - 0 - GMT -@@ -111,99 +111,99 @@ Z Africa/Monrovia -0:43:8 - LMT 1882 - -0:43:8 - MMT 1919 Mar - -0:44:30 - MMT 1972 Ja 7 - 0 - GMT --R D 1951 o - O 14 2 1 S --R D 1952 o - Ja 1 0 0 - --R D 1953 o - O 9 2 1 S --R D 1954 o - Ja 1 0 0 - --R D 1955 o - S 30 0 1 S --R D 1956 o - Ja 1 0 0 - --R D 1982 1984 - Ap 1 0 1 S --R D 1982 1985 - O 1 0 0 - --R D 1985 o - Ap 6 0 1 S --R D 1986 o - Ap 4 0 1 S --R D 1986 o - O 3 0 0 - --R D 1987 1989 - Ap 1 0 1 S --R D 1987 1989 - O 1 0 0 - --R D 1997 o - Ap 4 0 1 S --R D 1997 o - O 4 0 0 - --R D 2013 o - Mar lastF 1 1 S --R D 2013 o - O lastF 2 0 - -+R L 1951 o - O 14 2 1 S -+R L 1952 o - Ja 1 0 0 - -+R L 1953 o - O 9 2 1 S -+R L 1954 o - Ja 1 0 0 - -+R L 1955 o - S 30 0 1 S -+R L 1956 o - Ja 1 0 0 - -+R L 1982 1984 - Ap 1 0 1 S -+R L 1982 1985 - O 1 0 0 - -+R L 1985 o - Ap 6 0 1 S -+R L 1986 o - Ap 4 0 1 S -+R L 1986 o - O 3 0 0 - -+R L 1987 1989 - Ap 1 0 1 S -+R L 1987 1989 - O 1 0 0 - -+R L 1997 o - Ap 4 0 1 S -+R L 1997 o - O 4 0 0 - -+R L 2013 o - Mar lastF 1 1 S -+R L 2013 o - O lastF 2 0 - - Z Africa/Tripoli 0:52:44 - LMT 1920 --1 D CE%sT 1959 -+1 L CE%sT 1959 - 2 - EET 1982 --1 D CE%sT 1990 May 4 -+1 L CE%sT 1990 May 4 - 2 - EET 1996 S 30 --1 D CE%sT 1997 O 4 -+1 L CE%sT 1997 O 4 - 2 - EET 2012 N 10 2 --1 D CE%sT 2013 O 25 2 -+1 L CE%sT 2013 O 25 2 - 2 - EET --R E 1982 o - O 10 0 1 - --R E 1983 o - Mar 21 0 0 - --R E 2008 o - O lastSun 2 1 - --R E 2009 o - Mar lastSun 2 0 - -+R MU 1982 o - O 10 0 1 - -+R MU 1983 o - Mar 21 0 0 - -+R MU 2008 o - O lastSun 2 1 - -+R MU 2009 o - Mar lastSun 2 0 - - Z Indian/Mauritius 3:50 - LMT 1907 --4 E +04/+05 --R F 1939 o - S 12 0 1 S --R F 1939 o - N 19 0 0 - --R F 1940 o - F 25 0 1 S --R F 1945 o - N 18 0 0 - --R F 1950 o - Jun 11 0 1 S --R F 1950 o - O 29 0 0 - --R F 1967 o - Jun 3 12 1 S --R F 1967 o - O 1 0 0 - --R F 1974 o - Jun 24 0 1 S --R F 1974 o - S 1 0 0 - --R F 1976 1977 - May 1 0 1 S --R F 1976 o - Au 1 0 0 - --R F 1977 o - S 28 0 0 - --R F 1978 o - Jun 1 0 1 S --R F 1978 o - Au 4 0 0 - --R F 2008 o - Jun 1 0 1 S --R F 2008 o - S 1 0 0 - --R F 2009 o - Jun 1 0 1 S --R F 2009 o - Au 21 0 0 - --R F 2010 o - May 2 0 1 S --R F 2010 o - Au 8 0 0 - --R F 2011 o - Ap 3 0 1 S --R F 2011 o - Jul 31 0 0 - --R F 2012 2013 - Ap lastSun 2 1 S --R F 2012 o - Jul 20 3 0 - --R F 2012 o - Au 20 2 1 S --R F 2012 o - S 30 3 0 - --R F 2013 o - Jul 7 3 0 - --R F 2013 o - Au 10 2 1 S --R F 2013 ma - O lastSun 3 0 - --R F 2014 2021 - Mar lastSun 2 1 S --R F 2014 o - Jun 28 3 0 - --R F 2014 o - Au 2 2 1 S --R F 2015 o - Jun 14 3 0 - --R F 2015 o - Jul 19 2 1 S --R F 2016 o - Jun 5 3 0 - --R F 2016 o - Jul 10 2 1 S --R F 2017 o - May 21 3 0 - --R F 2017 o - Jul 2 2 1 S --R F 2018 o - May 13 3 0 - --R F 2018 o - Jun 17 2 1 S --R F 2019 o - May 5 3 0 - --R F 2019 o - Jun 9 2 1 S --R F 2020 o - Ap 19 3 0 - --R F 2020 o - May 24 2 1 S --R F 2021 o - Ap 11 3 0 - --R F 2021 o - May 16 2 1 S --R F 2022 o - May 8 2 1 S --R F 2023 o - Ap 23 2 1 S --R F 2024 o - Ap 14 2 1 S --R F 2025 o - Ap 6 2 1 S --R F 2026 ma - Mar lastSun 2 1 S --R F 2036 o - O 19 3 0 - --R F 2037 o - O 4 3 0 - -+4 MU +04/+05 -+R M 1939 o - S 12 0 1 S -+R M 1939 o - N 19 0 0 - -+R M 1940 o - F 25 0 1 S -+R M 1945 o - N 18 0 0 - -+R M 1950 o - Jun 11 0 1 S -+R M 1950 o - O 29 0 0 - -+R M 1967 o - Jun 3 12 1 S -+R M 1967 o - O 1 0 0 - -+R M 1974 o - Jun 24 0 1 S -+R M 1974 o - S 1 0 0 - -+R M 1976 1977 - May 1 0 1 S -+R M 1976 o - Au 1 0 0 - -+R M 1977 o - S 28 0 0 - -+R M 1978 o - Jun 1 0 1 S -+R M 1978 o - Au 4 0 0 - -+R M 2008 o - Jun 1 0 1 S -+R M 2008 o - S 1 0 0 - -+R M 2009 o - Jun 1 0 1 S -+R M 2009 o - Au 21 0 0 - -+R M 2010 o - May 2 0 1 S -+R M 2010 o - Au 8 0 0 - -+R M 2011 o - Ap 3 0 1 S -+R M 2011 o - Jul 31 0 0 - -+R M 2012 2013 - Ap lastSun 2 1 S -+R M 2012 o - Jul 20 3 0 - -+R M 2012 o - Au 20 2 1 S -+R M 2012 o - S 30 3 0 - -+R M 2013 o - Jul 7 3 0 - -+R M 2013 o - Au 10 2 1 S -+R M 2013 ma - O lastSun 3 0 - -+R M 2014 2021 - Mar lastSun 2 1 S -+R M 2014 o - Jun 28 3 0 - -+R M 2014 o - Au 2 2 1 S -+R M 2015 o - Jun 14 3 0 - -+R M 2015 o - Jul 19 2 1 S -+R M 2016 o - Jun 5 3 0 - -+R M 2016 o - Jul 10 2 1 S -+R M 2017 o - May 21 3 0 - -+R M 2017 o - Jul 2 2 1 S -+R M 2018 o - May 13 3 0 - -+R M 2018 o - Jun 17 2 1 S -+R M 2019 o - May 5 3 0 - -+R M 2019 o - Jun 9 2 1 S -+R M 2020 o - Ap 19 3 0 - -+R M 2020 o - May 24 2 1 S -+R M 2021 o - Ap 11 3 0 - -+R M 2021 o - May 16 2 1 S -+R M 2022 o - May 8 2 1 S -+R M 2023 o - Ap 23 2 1 S -+R M 2024 o - Ap 14 2 1 S -+R M 2025 o - Ap 6 2 1 S -+R M 2026 ma - Mar lastSun 2 1 S -+R M 2036 o - O 19 3 0 - -+R M 2037 o - O 4 3 0 - - Z Africa/Casablanca -0:30:20 - LMT 1913 O 26 --0 F WE%sT 1984 Mar 16 -+0 M WE%sT 1984 Mar 16 - 1 - CET 1986 --0 F WE%sT -+0 M WE%sT - Z Africa/El_Aaiun -0:52:48 - LMT 1934 - -1 - -01 1976 Ap 14 --0 F WE%sT -+0 M WE%sT - Z Africa/Maputo 2:10:20 - LMT 1903 Mar - 2 - CAT - Li Africa/Maputo Africa/Blantyre -@@ -213,15 +213,15 @@ Li Africa/Maputo Africa/Harare - Li Africa/Maputo Africa/Kigali - Li Africa/Maputo Africa/Lubumbashi - Li Africa/Maputo Africa/Lusaka --R G 1994 o - Mar 21 0 -1 WAT --R G 1994 2017 - S Sun>=1 2 0 CAT --R G 1995 2017 - Ap Sun>=1 2 -1 WAT -+R NA 1994 o - Mar 21 0 -1 WAT -+R NA 1994 2017 - S Sun>=1 2 0 CAT -+R NA 1995 2017 - Ap Sun>=1 2 -1 WAT - Z Africa/Windhoek 1:8:24 - LMT 1892 F 8 - 1:30 - +0130 1903 Mar - 2 - SAST 1942 S 20 2 - 2 1 SAST 1943 Mar 21 2 - 2 - SAST 1990 Mar 21 --2 G %s -+2 NA %s - Z Africa/Lagos 0:13:36 - LMT 1919 S - 1 - WAT - Li Africa/Lagos Africa/Bangui -@@ -241,52 +241,52 @@ Z Africa/Sao_Tome 0:26:56 - LMT 1884 - 1 - WAT - Z Indian/Mahe 3:41:48 - LMT 1906 Jun - 4 - +04 --R H 1942 1943 - S Sun>=15 2 1 - --R H 1943 1944 - Mar Sun>=15 2 0 - -+R SA 1942 1943 - S Sun>=15 2 1 - -+R SA 1943 1944 - Mar Sun>=15 2 0 - - Z Africa/Johannesburg 1:52 - LMT 1892 F 8 - 1:30 - SAST 1903 Mar --2 H SAST -+2 SA SAST - Li Africa/Johannesburg Africa/Maseru - Li Africa/Johannesburg Africa/Mbabane --R I 1970 o - May 1 0 1 S --R I 1970 1985 - O 15 0 0 - --R I 1971 o - Ap 30 0 1 S --R I 1972 1985 - Ap lastSun 0 1 S -+R SD 1970 o - May 1 0 1 S -+R SD 1970 1985 - O 15 0 0 - -+R SD 1971 o - Ap 30 0 1 S -+R SD 1972 1985 - Ap lastSun 0 1 S - Z Africa/Khartoum 2:10:8 - LMT 1931 --2 I CA%sT 2000 Ja 15 12 -+2 SD CA%sT 2000 Ja 15 12 - 3 - EAT 2017 N - 2 - CAT - Z Africa/Juba 2:6:28 - LMT 1931 --2 I CA%sT 2000 Ja 15 12 -+2 SD CA%sT 2000 Ja 15 12 - 3 - EAT --R J 1939 o - Ap 15 23s 1 S --R J 1939 o - N 18 23s 0 - --R J 1940 o - F 25 23s 1 S --R J 1941 o - O 6 0 0 - --R J 1942 o - Mar 9 0 1 S --R J 1942 o - N 2 3 0 - --R J 1943 o - Mar 29 2 1 S --R J 1943 o - Ap 17 2 0 - --R J 1943 o - Ap 25 2 1 S --R J 1943 o - O 4 2 0 - --R J 1944 1945 - Ap M>=1 2 1 S --R J 1944 o - O 8 0 0 - --R J 1945 o - S 16 0 0 - --R J 1977 o - Ap 30 0s 1 S --R J 1977 o - S 24 0s 0 - --R J 1978 o - May 1 0s 1 S --R J 1978 o - O 1 0s 0 - --R J 1988 o - Jun 1 0s 1 S --R J 1988 1990 - S lastSun 0s 0 - --R J 1989 o - Mar 26 0s 1 S --R J 1990 o - May 1 0s 1 S --R J 2005 o - May 1 0s 1 S --R J 2005 o - S 30 1s 0 - --R J 2006 2008 - Mar lastSun 2s 1 S --R J 2006 2008 - O lastSun 2s 0 - -+R n 1939 o - Ap 15 23s 1 S -+R n 1939 o - N 18 23s 0 - -+R n 1940 o - F 25 23s 1 S -+R n 1941 o - O 6 0 0 - -+R n 1942 o - Mar 9 0 1 S -+R n 1942 o - N 2 3 0 - -+R n 1943 o - Mar 29 2 1 S -+R n 1943 o - Ap 17 2 0 - -+R n 1943 o - Ap 25 2 1 S -+R n 1943 o - O 4 2 0 - -+R n 1944 1945 - Ap M>=1 2 1 S -+R n 1944 o - O 8 0 0 - -+R n 1945 o - S 16 0 0 - -+R n 1977 o - Ap 30 0s 1 S -+R n 1977 o - S 24 0s 0 - -+R n 1978 o - May 1 0s 1 S -+R n 1978 o - O 1 0s 0 - -+R n 1988 o - Jun 1 0s 1 S -+R n 1988 1990 - S lastSun 0s 0 - -+R n 1989 o - Mar 26 0s 1 S -+R n 1990 o - May 1 0s 1 S -+R n 2005 o - May 1 0s 1 S -+R n 2005 o - S 30 1s 0 - -+R n 2006 2008 - Mar lastSun 2s 1 S -+R n 2006 2008 - O lastSun 2s 0 - - Z Africa/Tunis 0:40:44 - LMT 1881 May 12 - 0:9:21 - PMT 1911 Mar 11 --1 J CE%sT -+1 n CE%sT - Z Antarctica/Casey 0 - -00 1969 - 8 - +08 2009 O 18 2 - 11 - +11 2010 Mar 5 2 -@@ -314,10 +314,10 @@ Z Antarctica/DumontDUrville 0 - -00 1947 - 10 - +10 - Z Antarctica/Syowa 0 - -00 1957 Ja 29 - 3 - +03 --R K 2005 ma - Mar lastSun 1u 2 +02 --R K 2004 ma - O lastSun 1u 0 +00 -+R Tr 2005 ma - Mar lastSun 1u 2 +02 -+R Tr 2004 ma - O lastSun 1u 0 +00 - Z Antarctica/Troll 0 - -00 2005 F 12 --0 K %s -+0 Tr %s - Z Antarctica/Vostok 0 - -00 1957 D 16 - 6 - +06 - Z Antarctica/Rothera 0 - -00 1976 D -@@ -325,33 +325,33 @@ Z Antarctica/Rothera 0 - -00 1976 D - Z Asia/Kabul 4:36:48 - LMT 1890 - 4 - +04 1945 - 4:30 - +0430 --R L 2011 o - Mar lastSun 2s 1 - --R L 2011 o - O lastSun 2s 0 - -+R AM 2011 o - Mar lastSun 2s 1 - -+R AM 2011 o - O lastSun 2s 0 - - Z Asia/Yerevan 2:58 - LMT 1924 May 2 - 3 - +03 1957 Mar --4 M +04/+05 1991 Mar 31 2s --3 M +03/+04 1995 S 24 2s -+4 R +04/+05 1991 Mar 31 2s -+3 R +03/+04 1995 S 24 2s - 4 - +04 1997 --4 M +04/+05 2011 --4 L +04/+05 --R N 1997 2015 - Mar lastSun 4 1 - --R N 1997 2015 - O lastSun 5 0 - -+4 R +04/+05 2011 -+4 AM +04/+05 -+R AZ 1997 2015 - Mar lastSun 4 1 - -+R AZ 1997 2015 - O lastSun 5 0 - - Z Asia/Baku 3:19:24 - LMT 1924 May 2 - 3 - +03 1957 Mar --4 M +04/+05 1991 Mar 31 2s --3 M +03/+04 1992 S lastSun 2s -+4 R +04/+05 1991 Mar 31 2s -+3 R +03/+04 1992 S lastSun 2s - 4 - +04 1996 --4 O +04/+05 1997 --4 N +04/+05 --R P 2009 o - Jun 19 23 1 - --R P 2009 o - D 31 24 0 - -+4 E +04/+05 1997 -+4 AZ +04/+05 -+R BD 2009 o - Jun 19 23 1 - -+R BD 2009 o - D 31 24 0 - - Z Asia/Dhaka 6:1:40 - LMT 1890 - 5:53:20 - HMT 1941 O - 6:30 - +0630 1942 May 15 - 5:30 - +0530 1942 S - 6:30 - +0630 1951 S 30 - 6 - +06 2009 --6 P +06/+07 -+6 BD +06/+07 - Z Asia/Thimphu 5:58:36 - LMT 1947 Au 15 - 5:30 - +0530 1987 O - 6 - +06 -@@ -366,103 +366,127 @@ Z Asia/Yangon 6:24:47 - LMT 1880 - 6:30 - +0630 1942 May - 9 - +09 1945 May 3 - 6:30 - +0630 --R Q 1940 o - Jun 3 0 1 D --R Q 1940 1941 - O 1 0 0 S --R Q 1941 o - Mar 16 0 1 D --R R 1986 o - May 4 0 1 D --R R 1986 1991 - S Sun>=11 0 0 S --R R 1987 1991 - Ap Sun>=10 0 1 D -+R Sh 1940 o - Jun 1 0 1 D -+R Sh 1940 o - O 12 24 0 S -+R Sh 1941 o - Mar 15 0 1 D -+R Sh 1941 o - N 1 24 0 S -+R Sh 1942 o - Ja 31 0 1 D -+R Sh 1945 o - S 1 24 0 S -+R Sh 1946 o - May 15 0 1 D -+R Sh 1946 o - S 30 24 0 S -+R Sh 1947 o - Ap 15 0 1 D -+R Sh 1947 o - O 31 24 0 S -+R Sh 1948 1949 - May 1 0 1 D -+R Sh 1948 1949 - S 30 24 0 S -+R CN 1986 o - May 4 2 1 D -+R CN 1986 1991 - S Sun>=11 2 0 S -+R CN 1987 1991 - Ap Sun>=11 2 1 D - Z Asia/Shanghai 8:5:43 - LMT 1901 --8 Q C%sT 1949 --8 R C%sT -+8 Sh C%sT 1949 May 28 -+8 CN C%sT - Z Asia/Urumqi 5:50:20 - LMT 1928 - 6 - +06 --R S 1941 o - Ap 1 3:30 1 S --R S 1941 o - S 30 3:30 0 - --R S 1946 o - Ap 20 3:30 1 S --R S 1946 o - D 1 3:30 0 - --R S 1947 o - Ap 13 3:30 1 S --R S 1947 o - D 30 3:30 0 - --R S 1948 o - May 2 3:30 1 S --R S 1948 1951 - O lastSun 3:30 0 - --R S 1952 o - O 25 3:30 0 - --R S 1949 1953 - Ap Sun>=1 3:30 1 S --R S 1953 o - N 1 3:30 0 - --R S 1954 1964 - Mar Sun>=18 3:30 1 S --R S 1954 o - O 31 3:30 0 - --R S 1955 1964 - N Sun>=1 3:30 0 - --R S 1965 1976 - Ap Sun>=16 3:30 1 S --R S 1965 1976 - O Sun>=16 3:30 0 - --R S 1973 o - D 30 3:30 1 S --R S 1979 o - May Sun>=8 3:30 1 S --R S 1979 o - O Sun>=16 3:30 0 - -+R HK 1941 o - Ap 1 3:30 1 S -+R HK 1941 o - S 30 3:30 0 - -+R HK 1946 o - Ap 20 3:30 1 S -+R HK 1946 o - D 1 3:30 0 - -+R HK 1947 o - Ap 13 3:30 1 S -+R HK 1947 o - D 30 3:30 0 - -+R HK 1948 o - May 2 3:30 1 S -+R HK 1948 1951 - O lastSun 3:30 0 - -+R HK 1952 o - O 25 3:30 0 - -+R HK 1949 1953 - Ap Sun>=1 3:30 1 S -+R HK 1953 o - N 1 3:30 0 - -+R HK 1954 1964 - Mar Sun>=18 3:30 1 S -+R HK 1954 o - O 31 3:30 0 - -+R HK 1955 1964 - N Sun>=1 3:30 0 - -+R HK 1965 1976 - Ap Sun>=16 3:30 1 S -+R HK 1965 1976 - O Sun>=16 3:30 0 - -+R HK 1973 o - D 30 3:30 1 S -+R HK 1979 o - May Sun>=8 3:30 1 S -+R HK 1979 o - O Sun>=16 3:30 0 - - Z Asia/Hong_Kong 7:36:42 - LMT 1904 O 30 --8 S HK%sT 1941 D 25 -+8 HK HK%sT 1941 D 25 - 9 - JST 1945 S 15 --8 S HK%sT --R T 1946 o - May 15 0 1 D --R T 1946 o - O 1 0 0 S --R T 1947 o - Ap 15 0 1 D --R T 1947 o - N 1 0 0 S --R T 1948 1951 - May 1 0 1 D --R T 1948 1951 - O 1 0 0 S --R T 1952 o - Mar 1 0 1 D --R T 1952 1954 - N 1 0 0 S --R T 1953 1959 - Ap 1 0 1 D --R T 1955 1961 - O 1 0 0 S --R T 1960 1961 - Jun 1 0 1 D --R T 1974 1975 - Ap 1 0 1 D --R T 1974 1975 - O 1 0 0 S --R T 1979 o - Jul 1 0 1 D --R T 1979 o - O 1 0 0 S -+8 HK HK%sT -+R f 1946 o - May 15 0 1 D -+R f 1946 o - O 1 0 0 S -+R f 1947 o - Ap 15 0 1 D -+R f 1947 o - N 1 0 0 S -+R f 1948 1951 - May 1 0 1 D -+R f 1948 1951 - O 1 0 0 S -+R f 1952 o - Mar 1 0 1 D -+R f 1952 1954 - N 1 0 0 S -+R f 1953 1959 - Ap 1 0 1 D -+R f 1955 1961 - O 1 0 0 S -+R f 1960 1961 - Jun 1 0 1 D -+R f 1974 1975 - Ap 1 0 1 D -+R f 1974 1975 - O 1 0 0 S -+R f 1979 o - Jul 1 0 1 D -+R f 1979 o - O 1 0 0 S - Z Asia/Taipei 8:6 - LMT 1896 - 8 - CST 1937 O - 9 - JST 1945 S 21 1 --8 T C%sT --R U 1961 1962 - Mar Sun>=16 3:30 1 D --R U 1961 1964 - N Sun>=1 3:30 0 S --R U 1963 o - Mar Sun>=16 0 1 D --R U 1964 o - Mar Sun>=16 3:30 1 D --R U 1965 o - Mar Sun>=16 0 1 D --R U 1965 o - O 31 0 0 S --R U 1966 1971 - Ap Sun>=16 3:30 1 D --R U 1966 1971 - O Sun>=16 3:30 0 S --R U 1972 1974 - Ap Sun>=15 0 1 D --R U 1972 1973 - O Sun>=15 0 0 S --R U 1974 1977 - O Sun>=15 3:30 0 S --R U 1975 1977 - Ap Sun>=15 3:30 1 D --R U 1978 1980 - Ap Sun>=15 0 1 D --R U 1978 1980 - O Sun>=15 0 0 S --Z Asia/Macau 7:34:20 - LMT 1911 D 31 16u --8 U C%sT --R V 1975 o - Ap 13 0 1 S --R V 1975 o - O 12 0 0 - --R V 1976 o - May 15 0 1 S --R V 1976 o - O 11 0 0 - --R V 1977 1980 - Ap Sun>=1 0 1 S --R V 1977 o - S 25 0 0 - --R V 1978 o - O 2 0 0 - --R V 1979 1997 - S lastSun 0 0 - --R V 1981 1998 - Mar lastSun 0 1 S -+8 f C%sT -+R _ 1942 1943 - Ap 30 23 1 - -+R _ 1942 o - N 17 23 0 - -+R _ 1943 o - S 30 23 0 S -+R _ 1946 o - Ap 30 23s 1 D -+R _ 1946 o - S 30 23s 0 S -+R _ 1947 o - Ap 19 23s 1 D -+R _ 1947 o - N 30 23s 0 S -+R _ 1948 o - May 2 23s 1 D -+R _ 1948 o - O 31 23s 0 S -+R _ 1949 1950 - Ap Sat>=1 23s 1 D -+R _ 1949 1950 - O lastSat 23s 0 S -+R _ 1951 o - Mar 31 23s 1 D -+R _ 1951 o - O 28 23s 0 S -+R _ 1952 1953 - Ap Sat>=1 23s 1 D -+R _ 1952 o - N 1 23s 0 S -+R _ 1953 1954 - O lastSat 23s 0 S -+R _ 1954 1956 - Mar Sat>=17 23s 1 D -+R _ 1955 o - N 5 23s 0 S -+R _ 1956 1964 - N Sun>=1 3:30 0 S -+R _ 1957 1964 - Mar Sun>=18 3:30 1 D -+R _ 1965 1973 - Ap Sun>=16 3:30 1 D -+R _ 1965 1966 - O Sun>=16 2:30 0 S -+R _ 1967 1976 - O Sun>=16 3:30 0 S -+R _ 1973 o - D 30 3:30 1 D -+R _ 1975 1976 - Ap Sun>=16 3:30 1 D -+R _ 1979 o - May 13 3:30 1 D -+R _ 1979 o - O Sun>=16 3:30 0 S -+Z Asia/Macau 7:34:10 - LMT 1904 O 30 -+8 - CST 1941 D 21 23 -+9 _ +09/+10 1945 S 30 24 -+8 _ C%sT -+R CY 1975 o - Ap 13 0 1 S -+R CY 1975 o - O 12 0 0 - -+R CY 1976 o - May 15 0 1 S -+R CY 1976 o - O 11 0 0 - -+R CY 1977 1980 - Ap Sun>=1 0 1 S -+R CY 1977 o - S 25 0 0 - -+R CY 1978 o - O 2 0 0 - -+R CY 1979 1997 - S lastSun 0 0 - -+R CY 1981 1998 - Mar lastSun 0 1 S - Z Asia/Nicosia 2:13:28 - LMT 1921 N 14 --2 V EE%sT 1998 S --2 O EE%sT -+2 CY EE%sT 1998 S -+2 E EE%sT - Z Asia/Famagusta 2:15:48 - LMT 1921 N 14 --2 V EE%sT 1998 S --2 O EE%sT 2016 S 8 -+2 CY EE%sT 1998 S -+2 E EE%sT 2016 S 8 - 3 - +03 2017 O 29 1u --2 O EE%sT -+2 E EE%sT - Li Asia/Nicosia Europe/Nicosia - Z Asia/Tbilisi 2:59:11 - LMT 1880 - 2:59:11 - TBMT 1924 May 2 - 3 - +03 1957 Mar --4 M +04/+05 1991 Mar 31 2s --3 M +03/+04 1992 --3 W +03/+04 1994 S lastSun --4 W +04/+05 1996 O lastSun -+4 R +04/+05 1991 Mar 31 2s -+3 R +03/+04 1992 -+3 e +03/+04 1994 S lastSun -+4 e +04/+05 1996 O lastSun - 4 1 +05 1997 Mar lastSun --4 W +04/+05 2004 Jun 27 --3 M +03/+04 2005 Mar lastSun 2 -+4 e +04/+05 2004 Jun 27 -+3 R +03/+04 2005 Mar lastSun 2 - 4 - +04 - Z Asia/Dili 8:22:20 - LMT 1912 - 8 - +08 1942 F 21 23 -@@ -504,72 +528,72 @@ Z Asia/Jayapura 9:22:48 - LMT 1932 N - 9 - +09 1944 S - 9:30 - +0930 1964 - 9 - WIT --R X 1978 1980 - Mar 21 0 1 - --R X 1978 o - O 21 0 0 - --R X 1979 o - S 19 0 0 - --R X 1980 o - S 23 0 0 - --R X 1991 o - May 3 0 1 - --R X 1992 1995 - Mar 22 0 1 - --R X 1991 1995 - S 22 0 0 - --R X 1996 o - Mar 21 0 1 - --R X 1996 o - S 21 0 0 - --R X 1997 1999 - Mar 22 0 1 - --R X 1997 1999 - S 22 0 0 - --R X 2000 o - Mar 21 0 1 - --R X 2000 o - S 21 0 0 - --R X 2001 2003 - Mar 22 0 1 - --R X 2001 2003 - S 22 0 0 - --R X 2004 o - Mar 21 0 1 - --R X 2004 o - S 21 0 0 - --R X 2005 o - Mar 22 0 1 - --R X 2005 o - S 22 0 0 - --R X 2008 o - Mar 21 0 1 - --R X 2008 o - S 21 0 0 - --R X 2009 2011 - Mar 22 0 1 - --R X 2009 2011 - S 22 0 0 - --R X 2012 o - Mar 21 0 1 - --R X 2012 o - S 21 0 0 - --R X 2013 2015 - Mar 22 0 1 - --R X 2013 2015 - S 22 0 0 - --R X 2016 o - Mar 21 0 1 - --R X 2016 o - S 21 0 0 - --R X 2017 2019 - Mar 22 0 1 - --R X 2017 2019 - S 22 0 0 - --R X 2020 o - Mar 21 0 1 - --R X 2020 o - S 21 0 0 - --R X 2021 2023 - Mar 22 0 1 - --R X 2021 2023 - S 22 0 0 - --R X 2024 o - Mar 21 0 1 - --R X 2024 o - S 21 0 0 - --R X 2025 2027 - Mar 22 0 1 - --R X 2025 2027 - S 22 0 0 - --R X 2028 2029 - Mar 21 0 1 - --R X 2028 2029 - S 21 0 0 - --R X 2030 2031 - Mar 22 0 1 - --R X 2030 2031 - S 22 0 0 - --R X 2032 2033 - Mar 21 0 1 - --R X 2032 2033 - S 21 0 0 - --R X 2034 2035 - Mar 22 0 1 - --R X 2034 2035 - S 22 0 0 - --R X 2036 ma - Mar 21 0 1 - --R X 2036 ma - S 21 0 0 - -+R i 1978 1980 - Mar 21 0 1 - -+R i 1978 o - O 21 0 0 - -+R i 1979 o - S 19 0 0 - -+R i 1980 o - S 23 0 0 - -+R i 1991 o - May 3 0 1 - -+R i 1992 1995 - Mar 22 0 1 - -+R i 1991 1995 - S 22 0 0 - -+R i 1996 o - Mar 21 0 1 - -+R i 1996 o - S 21 0 0 - -+R i 1997 1999 - Mar 22 0 1 - -+R i 1997 1999 - S 22 0 0 - -+R i 2000 o - Mar 21 0 1 - -+R i 2000 o - S 21 0 0 - -+R i 2001 2003 - Mar 22 0 1 - -+R i 2001 2003 - S 22 0 0 - -+R i 2004 o - Mar 21 0 1 - -+R i 2004 o - S 21 0 0 - -+R i 2005 o - Mar 22 0 1 - -+R i 2005 o - S 22 0 0 - -+R i 2008 o - Mar 21 0 1 - -+R i 2008 o - S 21 0 0 - -+R i 2009 2011 - Mar 22 0 1 - -+R i 2009 2011 - S 22 0 0 - -+R i 2012 o - Mar 21 0 1 - -+R i 2012 o - S 21 0 0 - -+R i 2013 2015 - Mar 22 0 1 - -+R i 2013 2015 - S 22 0 0 - -+R i 2016 o - Mar 21 0 1 - -+R i 2016 o - S 21 0 0 - -+R i 2017 2019 - Mar 22 0 1 - -+R i 2017 2019 - S 22 0 0 - -+R i 2020 o - Mar 21 0 1 - -+R i 2020 o - S 21 0 0 - -+R i 2021 2023 - Mar 22 0 1 - -+R i 2021 2023 - S 22 0 0 - -+R i 2024 o - Mar 21 0 1 - -+R i 2024 o - S 21 0 0 - -+R i 2025 2027 - Mar 22 0 1 - -+R i 2025 2027 - S 22 0 0 - -+R i 2028 2029 - Mar 21 0 1 - -+R i 2028 2029 - S 21 0 0 - -+R i 2030 2031 - Mar 22 0 1 - -+R i 2030 2031 - S 22 0 0 - -+R i 2032 2033 - Mar 21 0 1 - -+R i 2032 2033 - S 21 0 0 - -+R i 2034 2035 - Mar 22 0 1 - -+R i 2034 2035 - S 22 0 0 - -+R i 2036 ma - Mar 21 0 1 - -+R i 2036 ma - S 21 0 0 - - Z Asia/Tehran 3:25:44 - LMT 1916 - 3:25:44 - TMT 1946 - 3:30 - +0330 1977 N --4 X +04/+05 1979 --3:30 X +0330/+0430 --R Y 1982 o - May 1 0 1 - --R Y 1982 1984 - O 1 0 0 - --R Y 1983 o - Mar 31 0 1 - --R Y 1984 1985 - Ap 1 0 1 - --R Y 1985 1990 - S lastSun 1s 0 - --R Y 1986 1990 - Mar lastSun 1s 1 - --R Y 1991 2007 - Ap 1 3s 1 - --R Y 1991 2007 - O 1 3s 0 - -+4 i +04/+05 1979 -+3:30 i +0330/+0430 -+R IQ 1982 o - May 1 0 1 - -+R IQ 1982 1984 - O 1 0 0 - -+R IQ 1983 o - Mar 31 0 1 - -+R IQ 1984 1985 - Ap 1 0 1 - -+R IQ 1985 1990 - S lastSun 1s 0 - -+R IQ 1986 1990 - Mar lastSun 1s 1 - -+R IQ 1991 2007 - Ap 1 3s 1 - -+R IQ 1991 2007 - O 1 3s 0 - - Z Asia/Baghdad 2:57:40 - LMT 1890 - 2:57:36 - BMT 1918 - 3 - +03 1982 May --3 Y +03/+04 -+3 IQ +03/+04 - R Z 1940 o - Jun 1 0 1 D - R Z 1942 1944 - N 1 0 0 S - R Z 1943 o - Ap 1 2 1 D -@@ -659,163 +683,163 @@ R Z 2013 ma - O lastSun 2 0 S - Z Asia/Jerusalem 2:20:54 - LMT 1880 - 2:20:40 - JMT 1918 - 2 Z I%sT --R a 1948 o - May Sat>=1 24 1 D --R a 1948 1951 - S Sun>=9 0 0 S --R a 1949 o - Ap Sat>=1 24 1 D --R a 1950 1951 - May Sat>=1 24 1 D -+R JP 1948 o - May Sat>=1 24 1 D -+R JP 1948 1951 - S Sat>=8 25 0 S -+R JP 1949 o - Ap Sat>=1 24 1 D -+R JP 1950 1951 - May Sat>=1 24 1 D - Z Asia/Tokyo 9:18:59 - LMT 1887 D 31 15u --9 a J%sT --R b 1973 o - Jun 6 0 1 S --R b 1973 1975 - O 1 0 0 - --R b 1974 1977 - May 1 0 1 S --R b 1976 o - N 1 0 0 - --R b 1977 o - O 1 0 0 - --R b 1978 o - Ap 30 0 1 S --R b 1978 o - S 30 0 0 - --R b 1985 o - Ap 1 0 1 S --R b 1985 o - O 1 0 0 - --R b 1986 1988 - Ap F>=1 0 1 S --R b 1986 1990 - O F>=1 0 0 - --R b 1989 o - May 8 0 1 S --R b 1990 o - Ap 27 0 1 S --R b 1991 o - Ap 17 0 1 S --R b 1991 o - S 27 0 0 - --R b 1992 o - Ap 10 0 1 S --R b 1992 1993 - O F>=1 0 0 - --R b 1993 1998 - Ap F>=1 0 1 S --R b 1994 o - S F>=15 0 0 - --R b 1995 1998 - S F>=15 0s 0 - --R b 1999 o - Jul 1 0s 1 S --R b 1999 2002 - S lastF 0s 0 - --R b 2000 2001 - Mar lastTh 0s 1 S --R b 2002 2012 - Mar lastTh 24 1 S --R b 2003 o - O 24 0s 0 - --R b 2004 o - O 15 0s 0 - --R b 2005 o - S lastF 0s 0 - --R b 2006 2011 - O lastF 0s 0 - --R b 2013 o - D 20 0 0 - --R b 2014 ma - Mar lastTh 24 1 S --R b 2014 ma - O lastF 0s 0 - -+9 JP J%sT -+R J 1973 o - Jun 6 0 1 S -+R J 1973 1975 - O 1 0 0 - -+R J 1974 1977 - May 1 0 1 S -+R J 1976 o - N 1 0 0 - -+R J 1977 o - O 1 0 0 - -+R J 1978 o - Ap 30 0 1 S -+R J 1978 o - S 30 0 0 - -+R J 1985 o - Ap 1 0 1 S -+R J 1985 o - O 1 0 0 - -+R J 1986 1988 - Ap F>=1 0 1 S -+R J 1986 1990 - O F>=1 0 0 - -+R J 1989 o - May 8 0 1 S -+R J 1990 o - Ap 27 0 1 S -+R J 1991 o - Ap 17 0 1 S -+R J 1991 o - S 27 0 0 - -+R J 1992 o - Ap 10 0 1 S -+R J 1992 1993 - O F>=1 0 0 - -+R J 1993 1998 - Ap F>=1 0 1 S -+R J 1994 o - S F>=15 0 0 - -+R J 1995 1998 - S F>=15 0s 0 - -+R J 1999 o - Jul 1 0s 1 S -+R J 1999 2002 - S lastF 0s 0 - -+R J 2000 2001 - Mar lastTh 0s 1 S -+R J 2002 2012 - Mar lastTh 24 1 S -+R J 2003 o - O 24 0s 0 - -+R J 2004 o - O 15 0s 0 - -+R J 2005 o - S lastF 0s 0 - -+R J 2006 2011 - O lastF 0s 0 - -+R J 2013 o - D 20 0 0 - -+R J 2014 ma - Mar lastTh 24 1 S -+R J 2014 ma - O lastF 0s 0 - - Z Asia/Amman 2:23:44 - LMT 1931 --2 b EE%sT -+2 J EE%sT - Z Asia/Almaty 5:7:48 - LMT 1924 May 2 - 5 - +05 1930 Jun 21 --6 M +06/+07 1991 Mar 31 2s --5 M +05/+06 1992 Ja 19 2s --6 M +06/+07 2004 O 31 2s -+6 R +06/+07 1991 Mar 31 2s -+5 R +05/+06 1992 Ja 19 2s -+6 R +06/+07 2004 O 31 2s - 6 - +06 - Z Asia/Qyzylorda 4:21:52 - LMT 1924 May 2 - 4 - +04 1930 Jun 21 - 5 - +05 1981 Ap - 5 1 +06 1981 O - 6 - +06 1982 Ap --5 M +05/+06 1991 Mar 31 2s --4 M +04/+05 1991 S 29 2s --5 M +05/+06 1992 Ja 19 2s --6 M +06/+07 1992 Mar 29 2s --5 M +05/+06 2004 O 31 2s -+5 R +05/+06 1991 Mar 31 2s -+4 R +04/+05 1991 S 29 2s -+5 R +05/+06 1992 Ja 19 2s -+6 R +06/+07 1992 Mar 29 2s -+5 R +05/+06 2004 O 31 2s - 6 - +06 - Z Asia/Aqtobe 3:48:40 - LMT 1924 May 2 - 4 - +04 1930 Jun 21 - 5 - +05 1981 Ap - 5 1 +06 1981 O - 6 - +06 1982 Ap --5 M +05/+06 1991 Mar 31 2s --4 M +04/+05 1992 Ja 19 2s --5 M +05/+06 2004 O 31 2s -+5 R +05/+06 1991 Mar 31 2s -+4 R +04/+05 1992 Ja 19 2s -+5 R +05/+06 2004 O 31 2s - 5 - +05 - Z Asia/Aqtau 3:21:4 - LMT 1924 May 2 - 4 - +04 1930 Jun 21 - 5 - +05 1981 O - 6 - +06 1982 Ap --5 M +05/+06 1991 Mar 31 2s --4 M +04/+05 1992 Ja 19 2s --5 M +05/+06 1994 S 25 2s --4 M +04/+05 2004 O 31 2s -+5 R +05/+06 1991 Mar 31 2s -+4 R +04/+05 1992 Ja 19 2s -+5 R +05/+06 1994 S 25 2s -+4 R +04/+05 2004 O 31 2s - 5 - +05 - Z Asia/Atyrau 3:27:44 - LMT 1924 May 2 - 3 - +03 1930 Jun 21 - 5 - +05 1981 O - 6 - +06 1982 Ap --5 M +05/+06 1991 Mar 31 2s --4 M +04/+05 1992 Ja 19 2s --5 M +05/+06 1999 Mar 28 2s --4 M +04/+05 2004 O 31 2s -+5 R +05/+06 1991 Mar 31 2s -+4 R +04/+05 1992 Ja 19 2s -+5 R +05/+06 1999 Mar 28 2s -+4 R +04/+05 2004 O 31 2s - 5 - +05 - Z Asia/Oral 3:25:24 - LMT 1924 May 2 - 3 - +03 1930 Jun 21 - 5 - +05 1981 Ap - 5 1 +06 1981 O - 6 - +06 1982 Ap --5 M +05/+06 1989 Mar 26 2s --4 M +04/+05 1992 Ja 19 2s --5 M +05/+06 1992 Mar 29 2s --4 M +04/+05 2004 O 31 2s -+5 R +05/+06 1989 Mar 26 2s -+4 R +04/+05 1992 Ja 19 2s -+5 R +05/+06 1992 Mar 29 2s -+4 R +04/+05 2004 O 31 2s - 5 - +05 --R c 1992 1996 - Ap Sun>=7 0s 1 - --R c 1992 1996 - S lastSun 0 0 - --R c 1997 2005 - Mar lastSun 2:30 1 - --R c 1997 2004 - O lastSun 2:30 0 - -+R KG 1992 1996 - Ap Sun>=7 0s 1 - -+R KG 1992 1996 - S lastSun 0 0 - -+R KG 1997 2005 - Mar lastSun 2:30 1 - -+R KG 1997 2004 - O lastSun 2:30 0 - - Z Asia/Bishkek 4:58:24 - LMT 1924 May 2 - 5 - +05 1930 Jun 21 --6 M +06/+07 1991 Mar 31 2s --5 M +05/+06 1991 Au 31 2 --5 c +05/+06 2005 Au 12 -+6 R +06/+07 1991 Mar 31 2s -+5 R +05/+06 1991 Au 31 2 -+5 KG +05/+06 2005 Au 12 - 6 - +06 --R d 1948 o - Jun 1 0 1 D --R d 1948 o - S 13 0 0 S --R d 1949 o - Ap 3 0 1 D --R d 1949 1951 - S Sun>=8 0 0 S --R d 1950 o - Ap 1 0 1 D --R d 1951 o - May 6 0 1 D --R d 1955 o - May 5 0 1 D --R d 1955 o - S 9 0 0 S --R d 1956 o - May 20 0 1 D --R d 1956 o - S 30 0 0 S --R d 1957 1960 - May Sun>=1 0 1 D --R d 1957 1960 - S Sun>=18 0 0 S --R d 1987 1988 - May Sun>=8 2 1 D --R d 1987 1988 - O Sun>=8 3 0 S -+R KR 1948 o - Jun 1 0 1 D -+R KR 1948 o - S 13 0 0 S -+R KR 1949 o - Ap 3 0 1 D -+R KR 1949 1951 - S Sun>=8 0 0 S -+R KR 1950 o - Ap 1 0 1 D -+R KR 1951 o - May 6 0 1 D -+R KR 1955 o - May 5 0 1 D -+R KR 1955 o - S 9 0 0 S -+R KR 1956 o - May 20 0 1 D -+R KR 1956 o - S 30 0 0 S -+R KR 1957 1960 - May Sun>=1 0 1 D -+R KR 1957 1960 - S Sun>=18 0 0 S -+R KR 1987 1988 - May Sun>=8 2 1 D -+R KR 1987 1988 - O Sun>=8 3 0 S - Z Asia/Seoul 8:27:52 - LMT 1908 Ap - 8:30 - KST 1912 - 9 - JST 1945 S 8 - 9 - KST 1954 Mar 21 --8:30 d K%sT 1961 Au 10 --9 d K%sT -+8:30 KR K%sT 1961 Au 10 -+9 KR K%sT - Z Asia/Pyongyang 8:23 - LMT 1908 Ap - 8:30 - KST 1912 - 9 - JST 1945 Au 24 - 9 - KST 2015 Au 15 --8:30 - KST 2018 May 5 -+8:30 - KST 2018 May 4 23:30 - 9 - KST --R e 1920 o - Mar 28 0 1 S --R e 1920 o - O 25 0 0 - --R e 1921 o - Ap 3 0 1 S --R e 1921 o - O 3 0 0 - --R e 1922 o - Mar 26 0 1 S --R e 1922 o - O 8 0 0 - --R e 1923 o - Ap 22 0 1 S --R e 1923 o - S 16 0 0 - --R e 1957 1961 - May 1 0 1 S --R e 1957 1961 - O 1 0 0 - --R e 1972 o - Jun 22 0 1 S --R e 1972 1977 - O 1 0 0 - --R e 1973 1977 - May 1 0 1 S --R e 1978 o - Ap 30 0 1 S --R e 1978 o - S 30 0 0 - --R e 1984 1987 - May 1 0 1 S --R e 1984 1991 - O 16 0 0 - --R e 1988 o - Jun 1 0 1 S --R e 1989 o - May 10 0 1 S --R e 1990 1992 - May 1 0 1 S --R e 1992 o - O 4 0 0 - --R e 1993 ma - Mar lastSun 0 1 S --R e 1993 1998 - S lastSun 0 0 - --R e 1999 ma - O lastSun 0 0 - -+R l 1920 o - Mar 28 0 1 S -+R l 1920 o - O 25 0 0 - -+R l 1921 o - Ap 3 0 1 S -+R l 1921 o - O 3 0 0 - -+R l 1922 o - Mar 26 0 1 S -+R l 1922 o - O 8 0 0 - -+R l 1923 o - Ap 22 0 1 S -+R l 1923 o - S 16 0 0 - -+R l 1957 1961 - May 1 0 1 S -+R l 1957 1961 - O 1 0 0 - -+R l 1972 o - Jun 22 0 1 S -+R l 1972 1977 - O 1 0 0 - -+R l 1973 1977 - May 1 0 1 S -+R l 1978 o - Ap 30 0 1 S -+R l 1978 o - S 30 0 0 - -+R l 1984 1987 - May 1 0 1 S -+R l 1984 1991 - O 16 0 0 - -+R l 1988 o - Jun 1 0 1 S -+R l 1989 o - May 10 0 1 S -+R l 1990 1992 - May 1 0 1 S -+R l 1992 o - O 4 0 0 - -+R l 1993 ma - Mar lastSun 0 1 S -+R l 1993 1998 - S lastSun 0 0 - -+R l 1999 ma - O lastSun 0 0 - - Z Asia/Beirut 2:22 - LMT 1880 --2 e EE%sT --R f 1935 1941 - S 14 0 0:20 - --R f 1935 1941 - D 14 0 0 - -+2 l EE%sT -+R NB 1935 1941 - S 14 0 0:20 - -+R NB 1935 1941 - D 14 0 0 - - Z Asia/Kuala_Lumpur 6:46:46 - LMT 1901 - 6:55:25 - SMT 1905 Jun - 7 - +07 1933 -@@ -827,98 +851,98 @@ Z Asia/Kuala_Lumpur 6:46:46 - LMT 1901 - 8 - +08 - Z Asia/Kuching 7:21:20 - LMT 1926 Mar - 7:30 - +0730 1933 --8 f +08/+0820 1942 F 16 -+8 NB +08/+0820 1942 F 16 - 9 - +09 1945 S 12 - 8 - +08 - Z Indian/Maldives 4:54 - LMT 1880 - 4:54 - MMT 1960 - 5 - +05 --R g 1983 1984 - Ap 1 0 1 - --R g 1983 o - O 1 0 0 - --R g 1985 1998 - Mar lastSun 0 1 - --R g 1984 1998 - S lastSun 0 0 - --R g 2001 o - Ap lastSat 2 1 - --R g 2001 2006 - S lastSat 2 0 - --R g 2002 2006 - Mar lastSat 2 1 - --R g 2015 2016 - Mar lastSat 2 1 - --R g 2015 2016 - S lastSat 0 0 - -+R X 1983 1984 - Ap 1 0 1 - -+R X 1983 o - O 1 0 0 - -+R X 1985 1998 - Mar lastSun 0 1 - -+R X 1984 1998 - S lastSun 0 0 - -+R X 2001 o - Ap lastSat 2 1 - -+R X 2001 2006 - S lastSat 2 0 - -+R X 2002 2006 - Mar lastSat 2 1 - -+R X 2015 2016 - Mar lastSat 2 1 - -+R X 2015 2016 - S lastSat 0 0 - - Z Asia/Hovd 6:6:36 - LMT 1905 Au - 6 - +06 1978 --7 g +07/+08 -+7 X +07/+08 - Z Asia/Ulaanbaatar 7:7:32 - LMT 1905 Au - 7 - +07 1978 --8 g +08/+09 -+8 X +08/+09 - Z Asia/Choibalsan 7:38 - LMT 1905 Au - 7 - +07 1978 - 8 - +08 1983 Ap --9 g +09/+10 2008 Mar 31 --8 g +08/+09 -+9 X +09/+10 2008 Mar 31 -+8 X +08/+09 - Z Asia/Kathmandu 5:41:16 - LMT 1920 - 5:30 - +0530 1986 - 5:45 - +0545 --R h 2002 o - Ap Sun>=2 0 1 S --R h 2002 o - O Sun>=2 0 0 - --R h 2008 o - Jun 1 0 1 S --R h 2008 2009 - N 1 0 0 - --R h 2009 o - Ap 15 0 1 S -+R PK 2002 o - Ap Sun>=2 0 1 S -+R PK 2002 o - O Sun>=2 0 0 - -+R PK 2008 o - Jun 1 0 1 S -+R PK 2008 2009 - N 1 0 0 - -+R PK 2009 o - Ap 15 0 1 S - Z Asia/Karachi 4:28:12 - LMT 1907 - 5:30 - +0530 1942 S - 5:30 1 +0630 1945 O 15 - 5:30 - +0530 1951 S 30 - 5 - +05 1971 Mar 26 --5 h PK%sT --R i 1999 2005 - Ap F>=15 0 1 S --R i 1999 2003 - O F>=15 0 0 - --R i 2004 o - O 1 1 0 - --R i 2005 o - O 4 2 0 - --R i 2006 2007 - Ap 1 0 1 S --R i 2006 o - S 22 0 0 - --R i 2007 o - S Th>=8 2 0 - --R i 2008 2009 - Mar lastF 0 1 S --R i 2008 o - S 1 0 0 - --R i 2009 o - S F>=1 1 0 - --R i 2010 o - Mar 26 0 1 S --R i 2010 o - Au 11 0 0 - --R i 2011 o - Ap 1 0:1 1 S --R i 2011 o - Au 1 0 0 - --R i 2011 o - Au 30 0 1 S --R i 2011 o - S 30 0 0 - --R i 2012 2014 - Mar lastTh 24 1 S --R i 2012 o - S 21 1 0 - --R i 2013 o - S F>=21 0 0 - --R i 2014 2015 - O F>=21 0 0 - --R i 2015 o - Mar lastF 24 1 S --R i 2016 ma - Mar Sat>=22 1 1 S --R i 2016 ma - O lastSat 1 0 - -+5 PK PK%sT -+R P 1999 2005 - Ap F>=15 0 1 S -+R P 1999 2003 - O F>=15 0 0 - -+R P 2004 o - O 1 1 0 - -+R P 2005 o - O 4 2 0 - -+R P 2006 2007 - Ap 1 0 1 S -+R P 2006 o - S 22 0 0 - -+R P 2007 o - S Th>=8 2 0 - -+R P 2008 2009 - Mar lastF 0 1 S -+R P 2008 o - S 1 0 0 - -+R P 2009 o - S F>=1 1 0 - -+R P 2010 o - Mar 26 0 1 S -+R P 2010 o - Au 11 0 0 - -+R P 2011 o - Ap 1 0:1 1 S -+R P 2011 o - Au 1 0 0 - -+R P 2011 o - Au 30 0 1 S -+R P 2011 o - S 30 0 0 - -+R P 2012 2014 - Mar lastTh 24 1 S -+R P 2012 o - S 21 1 0 - -+R P 2013 o - S F>=21 0 0 - -+R P 2014 2015 - O F>=21 0 0 - -+R P 2015 o - Mar lastF 24 1 S -+R P 2016 ma - Mar Sat>=22 1 1 S -+R P 2016 ma - O lastSat 1 0 - - Z Asia/Gaza 2:17:52 - LMT 1900 O - 2 Z EET/EEST 1948 May 15 --2 B EE%sT 1967 Jun 5 -+2 K EE%sT 1967 Jun 5 - 2 Z I%sT 1996 --2 b EE%sT 1999 --2 i EE%sT 2008 Au 29 -+2 J EE%sT 1999 -+2 P EE%sT 2008 Au 29 - 2 - EET 2008 S --2 i EE%sT 2010 -+2 P EE%sT 2010 - 2 - EET 2010 Mar 27 0:1 --2 i EE%sT 2011 Au -+2 P EE%sT 2011 Au - 2 - EET 2012 --2 i EE%sT -+2 P EE%sT - Z Asia/Hebron 2:20:23 - LMT 1900 O - 2 Z EET/EEST 1948 May 15 --2 B EE%sT 1967 Jun 5 -+2 K EE%sT 1967 Jun 5 - 2 Z I%sT 1996 --2 b EE%sT 1999 --2 i EE%sT --R j 1936 o - N 1 0 1 - --R j 1937 o - F 1 0 0 - --R j 1954 o - Ap 12 0 1 - --R j 1954 o - Jul 1 0 0 - --R j 1978 o - Mar 22 0 1 - --R j 1978 o - S 21 0 0 - -+2 J EE%sT 1999 -+2 P EE%sT -+R PH 1936 o - N 1 0 1 D -+R PH 1937 o - F 1 0 0 S -+R PH 1954 o - Ap 12 0 1 D -+R PH 1954 o - Jul 1 0 0 S -+R PH 1978 o - Mar 22 0 1 D -+R PH 1978 o - S 21 0 0 S - Z Asia/Manila -15:56 - LMT 1844 D 31 - 8:4 - LMT 1899 May 11 --8 j +08/+09 1942 May --9 - +09 1944 N --8 j +08/+09 -+8 PH P%sT 1942 May -+9 - JST 1944 N -+8 PH P%sT - Z Asia/Qatar 3:26:8 - LMT 1920 - 4 - +04 1972 Jun - 3 - +03 -@@ -945,52 +969,52 @@ Z Asia/Colombo 5:19:24 - LMT 1880 - 6:30 - +0630 1996 O 26 0:30 - 6 - +06 2006 Ap 15 0:30 - 5:30 - +0530 --R k 1920 1923 - Ap Sun>=15 2 1 S --R k 1920 1923 - O Sun>=1 2 0 - --R k 1962 o - Ap 29 2 1 S --R k 1962 o - O 1 2 0 - --R k 1963 1965 - May 1 2 1 S --R k 1963 o - S 30 2 0 - --R k 1964 o - O 1 2 0 - --R k 1965 o - S 30 2 0 - --R k 1966 o - Ap 24 2 1 S --R k 1966 1976 - O 1 2 0 - --R k 1967 1978 - May 1 2 1 S --R k 1977 1978 - S 1 2 0 - --R k 1983 1984 - Ap 9 2 1 S --R k 1983 1984 - O 1 2 0 - --R k 1986 o - F 16 2 1 S --R k 1986 o - O 9 2 0 - --R k 1987 o - Mar 1 2 1 S --R k 1987 1988 - O 31 2 0 - --R k 1988 o - Mar 15 2 1 S --R k 1989 o - Mar 31 2 1 S --R k 1989 o - O 1 2 0 - --R k 1990 o - Ap 1 2 1 S --R k 1990 o - S 30 2 0 - --R k 1991 o - Ap 1 0 1 S --R k 1991 1992 - O 1 0 0 - --R k 1992 o - Ap 8 0 1 S --R k 1993 o - Mar 26 0 1 S --R k 1993 o - S 25 0 0 - --R k 1994 1996 - Ap 1 0 1 S --R k 1994 2005 - O 1 0 0 - --R k 1997 1998 - Mar lastM 0 1 S --R k 1999 2006 - Ap 1 0 1 S --R k 2006 o - S 22 0 0 - --R k 2007 o - Mar lastF 0 1 S --R k 2007 o - N F>=1 0 0 - --R k 2008 o - Ap F>=1 0 1 S --R k 2008 o - N 1 0 0 - --R k 2009 o - Mar lastF 0 1 S --R k 2010 2011 - Ap F>=1 0 1 S --R k 2012 ma - Mar lastF 0 1 S --R k 2009 ma - O lastF 0 0 - -+R S 1920 1923 - Ap Sun>=15 2 1 S -+R S 1920 1923 - O Sun>=1 2 0 - -+R S 1962 o - Ap 29 2 1 S -+R S 1962 o - O 1 2 0 - -+R S 1963 1965 - May 1 2 1 S -+R S 1963 o - S 30 2 0 - -+R S 1964 o - O 1 2 0 - -+R S 1965 o - S 30 2 0 - -+R S 1966 o - Ap 24 2 1 S -+R S 1966 1976 - O 1 2 0 - -+R S 1967 1978 - May 1 2 1 S -+R S 1977 1978 - S 1 2 0 - -+R S 1983 1984 - Ap 9 2 1 S -+R S 1983 1984 - O 1 2 0 - -+R S 1986 o - F 16 2 1 S -+R S 1986 o - O 9 2 0 - -+R S 1987 o - Mar 1 2 1 S -+R S 1987 1988 - O 31 2 0 - -+R S 1988 o - Mar 15 2 1 S -+R S 1989 o - Mar 31 2 1 S -+R S 1989 o - O 1 2 0 - -+R S 1990 o - Ap 1 2 1 S -+R S 1990 o - S 30 2 0 - -+R S 1991 o - Ap 1 0 1 S -+R S 1991 1992 - O 1 0 0 - -+R S 1992 o - Ap 8 0 1 S -+R S 1993 o - Mar 26 0 1 S -+R S 1993 o - S 25 0 0 - -+R S 1994 1996 - Ap 1 0 1 S -+R S 1994 2005 - O 1 0 0 - -+R S 1997 1998 - Mar lastM 0 1 S -+R S 1999 2006 - Ap 1 0 1 S -+R S 2006 o - S 22 0 0 - -+R S 2007 o - Mar lastF 0 1 S -+R S 2007 o - N F>=1 0 0 - -+R S 2008 o - Ap F>=1 0 1 S -+R S 2008 o - N 1 0 0 - -+R S 2009 o - Mar lastF 0 1 S -+R S 2010 2011 - Ap F>=1 0 1 S -+R S 2012 ma - Mar lastF 0 1 S -+R S 2009 ma - O lastF 0 0 - - Z Asia/Damascus 2:25:12 - LMT 1920 --2 k EE%sT -+2 S EE%sT - Z Asia/Dushanbe 4:35:12 - LMT 1924 May 2 - 5 - +05 1930 Jun 21 --6 M +06/+07 1991 Mar 31 2s -+6 R +06/+07 1991 Mar 31 2s - 5 1 +05/+06 1991 S 9 2s - 5 - +05 - Z Asia/Bangkok 6:42:4 - LMT 1880 -@@ -1000,8 +1024,8 @@ Li Asia/Bangkok Asia/Phnom_Penh - Li Asia/Bangkok Asia/Vientiane - Z Asia/Ashgabat 3:53:32 - LMT 1924 May 2 - 4 - +04 1930 Jun 21 --5 M +05/+06 1991 Mar 31 2 --4 M +04/+05 1992 Ja 19 2 -+5 R +05/+06 1991 Mar 31 2 -+4 R +04/+05 1992 Ja 19 2 - 5 - +05 - Z Asia/Dubai 3:41:12 - LMT 1920 - 4 - +04 -@@ -1011,12 +1035,12 @@ Z Asia/Samarkand 4:27:53 - LMT 1924 May 2 - 5 - +05 1981 Ap - 5 1 +06 1981 O - 6 - +06 1982 Ap --5 M +05/+06 1992 -+5 R +05/+06 1992 - 5 - +05 - Z Asia/Tashkent 4:37:11 - LMT 1924 May 2 - 5 - +05 1930 Jun 21 --6 M +06/+07 1991 Mar 31 2 --5 M +05/+06 1992 -+6 R +06/+07 1991 Mar 31 2 -+5 R +05/+06 1992 - 5 - +05 - Z Asia/Ho_Chi_Minh 7:6:40 - LMT 1906 Jul - 7:6:30 - PLMT 1911 May -@@ -1028,176 +1052,176 @@ Z Asia/Ho_Chi_Minh 7:6:40 - LMT 1906 Jul - 7 - +07 1959 D 31 23 - 8 - +08 1975 Jun 13 - 7 - +07 --R l 1917 o - Ja 1 0:1 1 D --R l 1917 o - Mar 25 2 0 S --R l 1942 o - Ja 1 2 1 D --R l 1942 o - Mar 29 2 0 S --R l 1942 o - S 27 2 1 D --R l 1943 1944 - Mar lastSun 2 0 S --R l 1943 o - O 3 2 1 D -+R AU 1917 o - Ja 1 0:1 1 D -+R AU 1917 o - Mar 25 2 0 S -+R AU 1942 o - Ja 1 2 1 D -+R AU 1942 o - Mar 29 2 0 S -+R AU 1942 o - S 27 2 1 D -+R AU 1943 1944 - Mar lastSun 2 0 S -+R AU 1943 o - O 3 2 1 D - Z Australia/Darwin 8:43:20 - LMT 1895 F - 9 - ACST 1899 May --9:30 l AC%sT --R m 1974 o - O lastSun 2s 1 D --R m 1975 o - Mar Sun>=1 2s 0 S --R m 1983 o - O lastSun 2s 1 D --R m 1984 o - Mar Sun>=1 2s 0 S --R m 1991 o - N 17 2s 1 D --R m 1992 o - Mar Sun>=1 2s 0 S --R m 2006 o - D 3 2s 1 D --R m 2007 2009 - Mar lastSun 2s 0 S --R m 2007 2008 - O lastSun 2s 1 D -+9:30 AU AC%sT -+R AW 1974 o - O lastSun 2s 1 D -+R AW 1975 o - Mar Sun>=1 2s 0 S -+R AW 1983 o - O lastSun 2s 1 D -+R AW 1984 o - Mar Sun>=1 2s 0 S -+R AW 1991 o - N 17 2s 1 D -+R AW 1992 o - Mar Sun>=1 2s 0 S -+R AW 2006 o - D 3 2s 1 D -+R AW 2007 2009 - Mar lastSun 2s 0 S -+R AW 2007 2008 - O lastSun 2s 1 D - Z Australia/Perth 7:43:24 - LMT 1895 D --8 l AW%sT 1943 Jul --8 m AW%sT -+8 AU AW%sT 1943 Jul -+8 AW AW%sT - Z Australia/Eucla 8:35:28 - LMT 1895 D --8:45 l +0845/+0945 1943 Jul --8:45 m +0845/+0945 --R n 1971 o - O lastSun 2s 1 D --R n 1972 o - F lastSun 2s 0 S --R n 1989 1991 - O lastSun 2s 1 D --R n 1990 1992 - Mar Sun>=1 2s 0 S --R o 1992 1993 - O lastSun 2s 1 D --R o 1993 1994 - Mar Sun>=1 2s 0 S -+8:45 AU +0845/+0945 1943 Jul -+8:45 AW +0845/+0945 -+R AQ 1971 o - O lastSun 2s 1 D -+R AQ 1972 o - F lastSun 2s 0 S -+R AQ 1989 1991 - O lastSun 2s 1 D -+R AQ 1990 1992 - Mar Sun>=1 2s 0 S -+R Ho 1992 1993 - O lastSun 2s 1 D -+R Ho 1993 1994 - Mar Sun>=1 2s 0 S - Z Australia/Brisbane 10:12:8 - LMT 1895 --10 l AE%sT 1971 --10 n AE%sT -+10 AU AE%sT 1971 -+10 AQ AE%sT - Z Australia/Lindeman 9:55:56 - LMT 1895 --10 l AE%sT 1971 --10 n AE%sT 1992 Jul --10 o AE%sT --R p 1971 1985 - O lastSun 2s 1 D --R p 1986 o - O 19 2s 1 D --R p 1987 2007 - O lastSun 2s 1 D --R p 1972 o - F 27 2s 0 S --R p 1973 1985 - Mar Sun>=1 2s 0 S --R p 1986 1990 - Mar Sun>=15 2s 0 S --R p 1991 o - Mar 3 2s 0 S --R p 1992 o - Mar 22 2s 0 S --R p 1993 o - Mar 7 2s 0 S --R p 1994 o - Mar 20 2s 0 S --R p 1995 2005 - Mar lastSun 2s 0 S --R p 2006 o - Ap 2 2s 0 S --R p 2007 o - Mar lastSun 2s 0 S --R p 2008 ma - Ap Sun>=1 2s 0 S --R p 2008 ma - O Sun>=1 2s 1 D -+10 AU AE%sT 1971 -+10 AQ AE%sT 1992 Jul -+10 Ho AE%sT -+R AS 1971 1985 - O lastSun 2s 1 D -+R AS 1986 o - O 19 2s 1 D -+R AS 1987 2007 - O lastSun 2s 1 D -+R AS 1972 o - F 27 2s 0 S -+R AS 1973 1985 - Mar Sun>=1 2s 0 S -+R AS 1986 1990 - Mar Sun>=15 2s 0 S -+R AS 1991 o - Mar 3 2s 0 S -+R AS 1992 o - Mar 22 2s 0 S -+R AS 1993 o - Mar 7 2s 0 S -+R AS 1994 o - Mar 20 2s 0 S -+R AS 1995 2005 - Mar lastSun 2s 0 S -+R AS 2006 o - Ap 2 2s 0 S -+R AS 2007 o - Mar lastSun 2s 0 S -+R AS 2008 ma - Ap Sun>=1 2s 0 S -+R AS 2008 ma - O Sun>=1 2s 1 D - Z Australia/Adelaide 9:14:20 - LMT 1895 F - 9 - ACST 1899 May --9:30 l AC%sT 1971 --9:30 p AC%sT --R q 1967 o - O Sun>=1 2s 1 D --R q 1968 o - Mar lastSun 2s 0 S --R q 1968 1985 - O lastSun 2s 1 D --R q 1969 1971 - Mar Sun>=8 2s 0 S --R q 1972 o - F lastSun 2s 0 S --R q 1973 1981 - Mar Sun>=1 2s 0 S --R q 1982 1983 - Mar lastSun 2s 0 S --R q 1984 1986 - Mar Sun>=1 2s 0 S --R q 1986 o - O Sun>=15 2s 1 D --R q 1987 1990 - Mar Sun>=15 2s 0 S --R q 1987 o - O Sun>=22 2s 1 D --R q 1988 1990 - O lastSun 2s 1 D --R q 1991 1999 - O Sun>=1 2s 1 D --R q 1991 2005 - Mar lastSun 2s 0 S --R q 2000 o - Au lastSun 2s 1 D --R q 2001 ma - O Sun>=1 2s 1 D --R q 2006 o - Ap Sun>=1 2s 0 S --R q 2007 o - Mar lastSun 2s 0 S --R q 2008 ma - Ap Sun>=1 2s 0 S -+9:30 AU AC%sT 1971 -+9:30 AS AC%sT -+R AT 1967 o - O Sun>=1 2s 1 D -+R AT 1968 o - Mar lastSun 2s 0 S -+R AT 1968 1985 - O lastSun 2s 1 D -+R AT 1969 1971 - Mar Sun>=8 2s 0 S -+R AT 1972 o - F lastSun 2s 0 S -+R AT 1973 1981 - Mar Sun>=1 2s 0 S -+R AT 1982 1983 - Mar lastSun 2s 0 S -+R AT 1984 1986 - Mar Sun>=1 2s 0 S -+R AT 1986 o - O Sun>=15 2s 1 D -+R AT 1987 1990 - Mar Sun>=15 2s 0 S -+R AT 1987 o - O Sun>=22 2s 1 D -+R AT 1988 1990 - O lastSun 2s 1 D -+R AT 1991 1999 - O Sun>=1 2s 1 D -+R AT 1991 2005 - Mar lastSun 2s 0 S -+R AT 2000 o - Au lastSun 2s 1 D -+R AT 2001 ma - O Sun>=1 2s 1 D -+R AT 2006 o - Ap Sun>=1 2s 0 S -+R AT 2007 o - Mar lastSun 2s 0 S -+R AT 2008 ma - Ap Sun>=1 2s 0 S - Z Australia/Hobart 9:49:16 - LMT 1895 S - 10 - AEST 1916 O 1 2 - 10 1 AEDT 1917 F --10 l AE%sT 1967 --10 q AE%sT -+10 AU AE%sT 1967 -+10 AT AE%sT - Z Australia/Currie 9:35:28 - LMT 1895 S - 10 - AEST 1916 O 1 2 - 10 1 AEDT 1917 F --10 l AE%sT 1971 Jul --10 q AE%sT --R r 1971 1985 - O lastSun 2s 1 D --R r 1972 o - F lastSun 2s 0 S --R r 1973 1985 - Mar Sun>=1 2s 0 S --R r 1986 1990 - Mar Sun>=15 2s 0 S --R r 1986 1987 - O Sun>=15 2s 1 D --R r 1988 1999 - O lastSun 2s 1 D --R r 1991 1994 - Mar Sun>=1 2s 0 S --R r 1995 2005 - Mar lastSun 2s 0 S --R r 2000 o - Au lastSun 2s 1 D --R r 2001 2007 - O lastSun 2s 1 D --R r 2006 o - Ap Sun>=1 2s 0 S --R r 2007 o - Mar lastSun 2s 0 S --R r 2008 ma - Ap Sun>=1 2s 0 S --R r 2008 ma - O Sun>=1 2s 1 D -+10 AU AE%sT 1971 Jul -+10 AT AE%sT -+R AV 1971 1985 - O lastSun 2s 1 D -+R AV 1972 o - F lastSun 2s 0 S -+R AV 1973 1985 - Mar Sun>=1 2s 0 S -+R AV 1986 1990 - Mar Sun>=15 2s 0 S -+R AV 1986 1987 - O Sun>=15 2s 1 D -+R AV 1988 1999 - O lastSun 2s 1 D -+R AV 1991 1994 - Mar Sun>=1 2s 0 S -+R AV 1995 2005 - Mar lastSun 2s 0 S -+R AV 2000 o - Au lastSun 2s 1 D -+R AV 2001 2007 - O lastSun 2s 1 D -+R AV 2006 o - Ap Sun>=1 2s 0 S -+R AV 2007 o - Mar lastSun 2s 0 S -+R AV 2008 ma - Ap Sun>=1 2s 0 S -+R AV 2008 ma - O Sun>=1 2s 1 D - Z Australia/Melbourne 9:39:52 - LMT 1895 F --10 l AE%sT 1971 --10 r AE%sT --R s 1971 1985 - O lastSun 2s 1 D --R s 1972 o - F 27 2s 0 S --R s 1973 1981 - Mar Sun>=1 2s 0 S --R s 1982 o - Ap Sun>=1 2s 0 S --R s 1983 1985 - Mar Sun>=1 2s 0 S --R s 1986 1989 - Mar Sun>=15 2s 0 S --R s 1986 o - O 19 2s 1 D --R s 1987 1999 - O lastSun 2s 1 D --R s 1990 1995 - Mar Sun>=1 2s 0 S --R s 1996 2005 - Mar lastSun 2s 0 S --R s 2000 o - Au lastSun 2s 1 D --R s 2001 2007 - O lastSun 2s 1 D --R s 2006 o - Ap Sun>=1 2s 0 S --R s 2007 o - Mar lastSun 2s 0 S --R s 2008 ma - Ap Sun>=1 2s 0 S --R s 2008 ma - O Sun>=1 2s 1 D -+10 AU AE%sT 1971 -+10 AV AE%sT -+R AN 1971 1985 - O lastSun 2s 1 D -+R AN 1972 o - F 27 2s 0 S -+R AN 1973 1981 - Mar Sun>=1 2s 0 S -+R AN 1982 o - Ap Sun>=1 2s 0 S -+R AN 1983 1985 - Mar Sun>=1 2s 0 S -+R AN 1986 1989 - Mar Sun>=15 2s 0 S -+R AN 1986 o - O 19 2s 1 D -+R AN 1987 1999 - O lastSun 2s 1 D -+R AN 1990 1995 - Mar Sun>=1 2s 0 S -+R AN 1996 2005 - Mar lastSun 2s 0 S -+R AN 2000 o - Au lastSun 2s 1 D -+R AN 2001 2007 - O lastSun 2s 1 D -+R AN 2006 o - Ap Sun>=1 2s 0 S -+R AN 2007 o - Mar lastSun 2s 0 S -+R AN 2008 ma - Ap Sun>=1 2s 0 S -+R AN 2008 ma - O Sun>=1 2s 1 D - Z Australia/Sydney 10:4:52 - LMT 1895 F --10 l AE%sT 1971 --10 s AE%sT -+10 AU AE%sT 1971 -+10 AN AE%sT - Z Australia/Broken_Hill 9:25:48 - LMT 1895 F - 10 - AEST 1896 Au 23 - 9 - ACST 1899 May --9:30 l AC%sT 1971 --9:30 s AC%sT 2000 --9:30 p AC%sT --R t 1981 1984 - O lastSun 2 1 - --R t 1982 1985 - Mar Sun>=1 2 0 - --R t 1985 o - O lastSun 2 0:30 - --R t 1986 1989 - Mar Sun>=15 2 0 - --R t 1986 o - O 19 2 0:30 - --R t 1987 1999 - O lastSun 2 0:30 - --R t 1990 1995 - Mar Sun>=1 2 0 - --R t 1996 2005 - Mar lastSun 2 0 - --R t 2000 o - Au lastSun 2 0:30 - --R t 2001 2007 - O lastSun 2 0:30 - --R t 2006 o - Ap Sun>=1 2 0 - --R t 2007 o - Mar lastSun 2 0 - --R t 2008 ma - Ap Sun>=1 2 0 - --R t 2008 ma - O Sun>=1 2 0:30 - -+9:30 AU AC%sT 1971 -+9:30 AN AC%sT 2000 -+9:30 AS AC%sT -+R LH 1981 1984 - O lastSun 2 1 - -+R LH 1982 1985 - Mar Sun>=1 2 0 - -+R LH 1985 o - O lastSun 2 0:30 - -+R LH 1986 1989 - Mar Sun>=15 2 0 - -+R LH 1986 o - O 19 2 0:30 - -+R LH 1987 1999 - O lastSun 2 0:30 - -+R LH 1990 1995 - Mar Sun>=1 2 0 - -+R LH 1996 2005 - Mar lastSun 2 0 - -+R LH 2000 o - Au lastSun 2 0:30 - -+R LH 2001 2007 - O lastSun 2 0:30 - -+R LH 2006 o - Ap Sun>=1 2 0 - -+R LH 2007 o - Mar lastSun 2 0 - -+R LH 2008 ma - Ap Sun>=1 2 0 - -+R LH 2008 ma - O Sun>=1 2 0:30 - - Z Australia/Lord_Howe 10:36:20 - LMT 1895 F - 10 - AEST 1981 Mar --10:30 t +1030/+1130 1985 Jul --10:30 t +1030/+11 -+10:30 LH +1030/+1130 1985 Jul -+10:30 LH +1030/+11 - Z Antarctica/Macquarie 0 - -00 1899 N - 10 - AEST 1916 O 1 2 - 10 1 AEDT 1917 F --10 l AE%sT 1919 Ap 1 0s -+10 AU AE%sT 1919 Ap 1 0s - 0 - -00 1948 Mar 25 --10 l AE%sT 1967 --10 q AE%sT 2010 Ap 4 3 -+10 AU AE%sT 1967 -+10 AT AE%sT 2010 Ap 4 3 - 11 - +11 - Z Indian/Christmas 7:2:52 - LMT 1895 F - 7 - +07 - Z Indian/Cocos 6:27:40 - LMT 1900 - 6:30 - +0630 --R u 1998 1999 - N Sun>=1 2 1 - --R u 1999 2000 - F lastSun 3 0 - --R u 2009 o - N 29 2 1 - --R u 2010 o - Mar lastSun 3 0 - --R u 2010 2013 - O Sun>=21 2 1 - --R u 2011 o - Mar Sun>=1 3 0 - --R u 2012 2013 - Ja Sun>=18 3 0 - --R u 2014 o - Ja Sun>=18 2 0 - --R u 2014 ma - N Sun>=1 2 1 - --R u 2015 ma - Ja Sun>=14 3 0 - -+R FJ 1998 1999 - N Sun>=1 2 1 - -+R FJ 1999 2000 - F lastSun 3 0 - -+R FJ 2009 o - N 29 2 1 - -+R FJ 2010 o - Mar lastSun 3 0 - -+R FJ 2010 2013 - O Sun>=21 2 1 - -+R FJ 2011 o - Mar Sun>=1 3 0 - -+R FJ 2012 2013 - Ja Sun>=18 3 0 - -+R FJ 2014 o - Ja Sun>=18 2 0 - -+R FJ 2014 ma - N Sun>=1 2 1 - -+R FJ 2015 ma - Ja Sun>=13 3 0 - - Z Pacific/Fiji 11:55:44 - LMT 1915 O 26 --12 u +12/+13 -+12 FJ +12/+13 - Z Pacific/Gambier -8:59:48 - LMT 1912 O - -9 - -09 - Z Pacific/Marquesas -9:18 - LMT 1912 O -@@ -1239,50 +1263,50 @@ Z Pacific/Nauru 11:7:40 - LMT 1921 Ja 15 - 9 - +09 1944 Au 15 - 11:30 - +1130 1979 May - 12 - +12 --R v 1977 1978 - D Sun>=1 0 1 - --R v 1978 1979 - F 27 0 0 - --R v 1996 o - D 1 2s 1 - --R v 1997 o - Mar 2 2s 0 - -+R NC 1977 1978 - D Sun>=1 0 1 - -+R NC 1978 1979 - F 27 0 0 - -+R NC 1996 o - D 1 2s 1 - -+R NC 1997 o - Mar 2 2s 0 - - Z Pacific/Noumea 11:5:48 - LMT 1912 Ja 13 --11 v +11/+12 --R w 1927 o - N 6 2 1 S --R w 1928 o - Mar 4 2 0 M --R w 1928 1933 - O Sun>=8 2 0:30 S --R w 1929 1933 - Mar Sun>=15 2 0 M --R w 1934 1940 - Ap lastSun 2 0 M --R w 1934 1940 - S lastSun 2 0:30 S --R w 1946 o - Ja 1 0 0 S --R w 1974 o - N Sun>=1 2s 1 D --R x 1974 o - N Sun>=1 2:45s 1 - --R w 1975 o - F lastSun 2s 0 S --R x 1975 o - F lastSun 2:45s 0 - --R w 1975 1988 - O lastSun 2s 1 D --R x 1975 1988 - O lastSun 2:45s 1 - --R w 1976 1989 - Mar Sun>=1 2s 0 S --R x 1976 1989 - Mar Sun>=1 2:45s 0 - --R w 1989 o - O Sun>=8 2s 1 D --R x 1989 o - O Sun>=8 2:45s 1 - --R w 1990 2006 - O Sun>=1 2s 1 D --R x 1990 2006 - O Sun>=1 2:45s 1 - --R w 1990 2007 - Mar Sun>=15 2s 0 S --R x 1990 2007 - Mar Sun>=15 2:45s 0 - --R w 2007 ma - S lastSun 2s 1 D --R x 2007 ma - S lastSun 2:45s 1 - --R w 2008 ma - Ap Sun>=1 2s 0 S --R x 2008 ma - Ap Sun>=1 2:45s 0 - -+11 NC +11/+12 -+R NZ 1927 o - N 6 2 1 S -+R NZ 1928 o - Mar 4 2 0 M -+R NZ 1928 1933 - O Sun>=8 2 0:30 S -+R NZ 1929 1933 - Mar Sun>=15 2 0 M -+R NZ 1934 1940 - Ap lastSun 2 0 M -+R NZ 1934 1940 - S lastSun 2 0:30 S -+R NZ 1946 o - Ja 1 0 0 S -+R NZ 1974 o - N Sun>=1 2s 1 D -+R k 1974 o - N Sun>=1 2:45s 1 - -+R NZ 1975 o - F lastSun 2s 0 S -+R k 1975 o - F lastSun 2:45s 0 - -+R NZ 1975 1988 - O lastSun 2s 1 D -+R k 1975 1988 - O lastSun 2:45s 1 - -+R NZ 1976 1989 - Mar Sun>=1 2s 0 S -+R k 1976 1989 - Mar Sun>=1 2:45s 0 - -+R NZ 1989 o - O Sun>=8 2s 1 D -+R k 1989 o - O Sun>=8 2:45s 1 - -+R NZ 1990 2006 - O Sun>=1 2s 1 D -+R k 1990 2006 - O Sun>=1 2:45s 1 - -+R NZ 1990 2007 - Mar Sun>=15 2s 0 S -+R k 1990 2007 - Mar Sun>=15 2:45s 0 - -+R NZ 2007 ma - S lastSun 2s 1 D -+R k 2007 ma - S lastSun 2:45s 1 - -+R NZ 2008 ma - Ap Sun>=1 2s 0 S -+R k 2008 ma - Ap Sun>=1 2:45s 0 - - Z Pacific/Auckland 11:39:4 - LMT 1868 N 2 --11:30 w NZ%sT 1946 --12 w NZ%sT -+11:30 NZ NZ%sT 1946 -+12 NZ NZ%sT - Z Pacific/Chatham 12:13:48 - LMT 1868 N 2 - 12:15 - +1215 1946 --12:45 x +1245/+1345 -+12:45 k +1245/+1345 - Li Pacific/Auckland Antarctica/McMurdo --R y 1978 o - N 12 0 0:30 - --R y 1979 1991 - Mar Sun>=1 0 0 - --R y 1979 1990 - O lastSun 0 0:30 - -+R CK 1978 o - N 12 0 0:30 - -+R CK 1979 1991 - Mar Sun>=1 0 0 - -+R CK 1979 1990 - O lastSun 0 0:30 - - Z Pacific/Rarotonga -10:39:4 - LMT 1901 - -10:30 - -1030 1978 N 12 ---10 y -10/-0930 -+-10 CK -10/-0930 - Z Pacific/Niue -11:19:40 - LMT 1901 - -11:20 - -1120 1951 - -11:30 - -1130 1978 O -@@ -1311,570 +1335,570 @@ Z Pacific/Pago_Pago 12:37:12 - LMT 1892 Jul 5 - -11:22:48 - LMT 1911 - -11 - SST - Li Pacific/Pago_Pago Pacific/Midway --R z 2010 o - S lastSun 0 1 - --R z 2011 o - Ap Sat>=1 4 0 - --R z 2011 o - S lastSat 3 1 - --R z 2012 ma - Ap Sun>=1 4 0 - --R z 2012 ma - S lastSun 3 1 - -+R WS 2010 o - S lastSun 0 1 - -+R WS 2011 o - Ap Sat>=1 4 0 - -+R WS 2011 o - S lastSat 3 1 - -+R WS 2012 ma - Ap Sun>=1 4 0 - -+R WS 2012 ma - S lastSun 3 1 - - Z Pacific/Apia 12:33:4 - LMT 1892 Jul 5 - -11:26:56 - LMT 1911 - -11:30 - -1130 1950 ---11 z -11/-10 2011 D 29 24 --13 z +13/+14 -+-11 WS -11/-10 2011 D 29 24 -+13 WS +13/+14 - Z Pacific/Guadalcanal 10:39:48 - LMT 1912 O - 11 - +11 - Z Pacific/Fakaofo -11:24:56 - LMT 1901 - -11 - -11 2011 D 30 - 13 - +13 --R ! 1999 o - O 7 2s 1 - --R ! 2000 o - Mar 19 2s 0 - --R ! 2000 2001 - N Sun>=1 2 1 - --R ! 2001 2002 - Ja lastSun 2 0 - --R ! 2016 o - N Sun>=1 2 1 - --R ! 2017 o - Ja Sun>=15 3 0 - -+R TO 1999 o - O 7 2s 1 - -+R TO 2000 o - Mar 19 2s 0 - -+R TO 2000 2001 - N Sun>=1 2 1 - -+R TO 2001 2002 - Ja lastSun 2 0 - -+R TO 2016 o - N Sun>=1 2 1 - -+R TO 2017 o - Ja Sun>=15 3 0 - - Z Pacific/Tongatapu 12:19:20 - LMT 1901 - 12:20 - +1220 1941 - 13 - +13 1999 --13 ! +13/+14 -+13 TO +13/+14 - Z Pacific/Funafuti 11:56:52 - LMT 1901 - 12 - +12 - Z Pacific/Wake 11:6:28 - LMT 1901 - 12 - +12 --R $ 1983 o - S 25 0 1 - --R $ 1984 1991 - Mar Sun>=23 0 0 - --R $ 1984 o - O 23 0 1 - --R $ 1985 1991 - S Sun>=23 0 1 - --R $ 1992 1993 - Ja Sun>=23 0 0 - --R $ 1992 o - O Sun>=23 0 1 - -+R VU 1983 o - S 25 0 1 - -+R VU 1984 1991 - Mar Sun>=23 0 0 - -+R VU 1984 o - O 23 0 1 - -+R VU 1985 1991 - S Sun>=23 0 1 - -+R VU 1992 1993 - Ja Sun>=23 0 0 - -+R VU 1992 o - O Sun>=23 0 1 - - Z Pacific/Efate 11:13:16 - LMT 1912 Ja 13 --11 $ +11/+12 -+11 VU +11/+12 - Z Pacific/Wallis 12:15:20 - LMT 1901 - 12 - +12 --R % 1916 o - May 21 2s 1 BST --R % 1916 o - O 1 2s 0 GMT --R % 1917 o - Ap 8 2s 1 BST --R % 1917 o - S 17 2s 0 GMT --R % 1918 o - Mar 24 2s 1 BST --R % 1918 o - S 30 2s 0 GMT --R % 1919 o - Mar 30 2s 1 BST --R % 1919 o - S 29 2s 0 GMT --R % 1920 o - Mar 28 2s 1 BST --R % 1920 o - O 25 2s 0 GMT --R % 1921 o - Ap 3 2s 1 BST --R % 1921 o - O 3 2s 0 GMT --R % 1922 o - Mar 26 2s 1 BST --R % 1922 o - O 8 2s 0 GMT --R % 1923 o - Ap Sun>=16 2s 1 BST --R % 1923 1924 - S Sun>=16 2s 0 GMT --R % 1924 o - Ap Sun>=9 2s 1 BST --R % 1925 1926 - Ap Sun>=16 2s 1 BST --R % 1925 1938 - O Sun>=2 2s 0 GMT --R % 1927 o - Ap Sun>=9 2s 1 BST --R % 1928 1929 - Ap Sun>=16 2s 1 BST --R % 1930 o - Ap Sun>=9 2s 1 BST --R % 1931 1932 - Ap Sun>=16 2s 1 BST --R % 1933 o - Ap Sun>=9 2s 1 BST --R % 1934 o - Ap Sun>=16 2s 1 BST --R % 1935 o - Ap Sun>=9 2s 1 BST --R % 1936 1937 - Ap Sun>=16 2s 1 BST --R % 1938 o - Ap Sun>=9 2s 1 BST --R % 1939 o - Ap Sun>=16 2s 1 BST --R % 1939 o - N Sun>=16 2s 0 GMT --R % 1940 o - F Sun>=23 2s 1 BST --R % 1941 o - May Sun>=2 1s 2 BDST --R % 1941 1943 - Au Sun>=9 1s 1 BST --R % 1942 1944 - Ap Sun>=2 1s 2 BDST --R % 1944 o - S Sun>=16 1s 1 BST --R % 1945 o - Ap M>=2 1s 2 BDST --R % 1945 o - Jul Sun>=9 1s 1 BST --R % 1945 1946 - O Sun>=2 2s 0 GMT --R % 1946 o - Ap Sun>=9 2s 1 BST --R % 1947 o - Mar 16 2s 1 BST --R % 1947 o - Ap 13 1s 2 BDST --R % 1947 o - Au 10 1s 1 BST --R % 1947 o - N 2 2s 0 GMT --R % 1948 o - Mar 14 2s 1 BST --R % 1948 o - O 31 2s 0 GMT --R % 1949 o - Ap 3 2s 1 BST --R % 1949 o - O 30 2s 0 GMT --R % 1950 1952 - Ap Sun>=14 2s 1 BST --R % 1950 1952 - O Sun>=21 2s 0 GMT --R % 1953 o - Ap Sun>=16 2s 1 BST --R % 1953 1960 - O Sun>=2 2s 0 GMT --R % 1954 o - Ap Sun>=9 2s 1 BST --R % 1955 1956 - Ap Sun>=16 2s 1 BST --R % 1957 o - Ap Sun>=9 2s 1 BST --R % 1958 1959 - Ap Sun>=16 2s 1 BST --R % 1960 o - Ap Sun>=9 2s 1 BST --R % 1961 1963 - Mar lastSun 2s 1 BST --R % 1961 1968 - O Sun>=23 2s 0 GMT --R % 1964 1967 - Mar Sun>=19 2s 1 BST --R % 1968 o - F 18 2s 1 BST --R % 1972 1980 - Mar Sun>=16 2s 1 BST --R % 1972 1980 - O Sun>=23 2s 0 GMT --R % 1981 1995 - Mar lastSun 1u 1 BST --R % 1981 1989 - O Sun>=23 1u 0 GMT --R % 1990 1995 - O Sun>=22 1u 0 GMT -+R G 1916 o - May 21 2s 1 BST -+R G 1916 o - O 1 2s 0 GMT -+R G 1917 o - Ap 8 2s 1 BST -+R G 1917 o - S 17 2s 0 GMT -+R G 1918 o - Mar 24 2s 1 BST -+R G 1918 o - S 30 2s 0 GMT -+R G 1919 o - Mar 30 2s 1 BST -+R G 1919 o - S 29 2s 0 GMT -+R G 1920 o - Mar 28 2s 1 BST -+R G 1920 o - O 25 2s 0 GMT -+R G 1921 o - Ap 3 2s 1 BST -+R G 1921 o - O 3 2s 0 GMT -+R G 1922 o - Mar 26 2s 1 BST -+R G 1922 o - O 8 2s 0 GMT -+R G 1923 o - Ap Sun>=16 2s 1 BST -+R G 1923 1924 - S Sun>=16 2s 0 GMT -+R G 1924 o - Ap Sun>=9 2s 1 BST -+R G 1925 1926 - Ap Sun>=16 2s 1 BST -+R G 1925 1938 - O Sun>=2 2s 0 GMT -+R G 1927 o - Ap Sun>=9 2s 1 BST -+R G 1928 1929 - Ap Sun>=16 2s 1 BST -+R G 1930 o - Ap Sun>=9 2s 1 BST -+R G 1931 1932 - Ap Sun>=16 2s 1 BST -+R G 1933 o - Ap Sun>=9 2s 1 BST -+R G 1934 o - Ap Sun>=16 2s 1 BST -+R G 1935 o - Ap Sun>=9 2s 1 BST -+R G 1936 1937 - Ap Sun>=16 2s 1 BST -+R G 1938 o - Ap Sun>=9 2s 1 BST -+R G 1939 o - Ap Sun>=16 2s 1 BST -+R G 1939 o - N Sun>=16 2s 0 GMT -+R G 1940 o - F Sun>=23 2s 1 BST -+R G 1941 o - May Sun>=2 1s 2 BDST -+R G 1941 1943 - Au Sun>=9 1s 1 BST -+R G 1942 1944 - Ap Sun>=2 1s 2 BDST -+R G 1944 o - S Sun>=16 1s 1 BST -+R G 1945 o - Ap M>=2 1s 2 BDST -+R G 1945 o - Jul Sun>=9 1s 1 BST -+R G 1945 1946 - O Sun>=2 2s 0 GMT -+R G 1946 o - Ap Sun>=9 2s 1 BST -+R G 1947 o - Mar 16 2s 1 BST -+R G 1947 o - Ap 13 1s 2 BDST -+R G 1947 o - Au 10 1s 1 BST -+R G 1947 o - N 2 2s 0 GMT -+R G 1948 o - Mar 14 2s 1 BST -+R G 1948 o - O 31 2s 0 GMT -+R G 1949 o - Ap 3 2s 1 BST -+R G 1949 o - O 30 2s 0 GMT -+R G 1950 1952 - Ap Sun>=14 2s 1 BST -+R G 1950 1952 - O Sun>=21 2s 0 GMT -+R G 1953 o - Ap Sun>=16 2s 1 BST -+R G 1953 1960 - O Sun>=2 2s 0 GMT -+R G 1954 o - Ap Sun>=9 2s 1 BST -+R G 1955 1956 - Ap Sun>=16 2s 1 BST -+R G 1957 o - Ap Sun>=9 2s 1 BST -+R G 1958 1959 - Ap Sun>=16 2s 1 BST -+R G 1960 o - Ap Sun>=9 2s 1 BST -+R G 1961 1963 - Mar lastSun 2s 1 BST -+R G 1961 1968 - O Sun>=23 2s 0 GMT -+R G 1964 1967 - Mar Sun>=19 2s 1 BST -+R G 1968 o - F 18 2s 1 BST -+R G 1972 1980 - Mar Sun>=16 2s 1 BST -+R G 1972 1980 - O Sun>=23 2s 0 GMT -+R G 1981 1995 - Mar lastSun 1u 1 BST -+R G 1981 1989 - O Sun>=23 1u 0 GMT -+R G 1990 1995 - O Sun>=22 1u 0 GMT - Z Europe/London -0:1:15 - LMT 1847 D 1 0s --0 % %s 1968 O 27 -+0 G %s 1968 O 27 - 1 - BST 1971 O 31 2u --0 % %s 1996 --0 O GMT/BST -+0 G %s 1996 -+0 E GMT/BST - Li Europe/London Europe/Jersey - Li Europe/London Europe/Guernsey - Li Europe/London Europe/Isle_of_Man --R & 1971 o - O 31 2u -1 - --R & 1972 1980 - Mar Sun>=16 2u 0 - --R & 1972 1980 - O Sun>=23 2u -1 - --R & 1981 ma - Mar lastSun 1u 0 - --R & 1981 1989 - O Sun>=23 1u -1 - --R & 1990 1995 - O Sun>=22 1u -1 - --R & 1996 ma - O lastSun 1u -1 - -+R IE 1971 o - O 31 2u -1 - -+R IE 1972 1980 - Mar Sun>=16 2u 0 - -+R IE 1972 1980 - O Sun>=23 2u -1 - -+R IE 1981 ma - Mar lastSun 1u 0 - -+R IE 1981 1989 - O Sun>=23 1u -1 - -+R IE 1990 1995 - O Sun>=22 1u -1 - -+R IE 1996 ma - O lastSun 1u -1 - - Z Europe/Dublin -0:25 - LMT 1880 Au 2 - -0:25:21 - DMT 1916 May 21 2s - -0:25:21 1 IST 1916 O 1 2s --0 % %s 1921 D 6 --0 % GMT/IST 1940 F 25 2s -+0 G %s 1921 D 6 -+0 G GMT/IST 1940 F 25 2s - 0 1 IST 1946 O 6 2s - 0 - GMT 1947 Mar 16 2s - 0 1 IST 1947 N 2 2s - 0 - GMT 1948 Ap 18 2s --0 % GMT/IST 1968 O 27 --1 & IST/GMT --R O 1977 1980 - Ap Sun>=1 1u 1 S --R O 1977 o - S lastSun 1u 0 - --R O 1978 o - O 1 1u 0 - --R O 1979 1995 - S lastSun 1u 0 - --R O 1981 ma - Mar lastSun 1u 1 S --R O 1996 ma - O lastSun 1u 0 - --R ' 1977 1980 - Ap Sun>=1 1s 1 S --R ' 1977 o - S lastSun 1s 0 - --R ' 1978 o - O 1 1s 0 - --R ' 1979 1995 - S lastSun 1s 0 - --R ' 1981 ma - Mar lastSun 1s 1 S --R ' 1996 ma - O lastSun 1s 0 - --R ( 1916 o - Ap 30 23 1 S --R ( 1916 o - O 1 1 0 - --R ( 1917 1918 - Ap M>=15 2s 1 S --R ( 1917 1918 - S M>=15 2s 0 - --R ( 1940 o - Ap 1 2s 1 S --R ( 1942 o - N 2 2s 0 - --R ( 1943 o - Mar 29 2s 1 S --R ( 1943 o - O 4 2s 0 - --R ( 1944 1945 - Ap M>=1 2s 1 S --R ( 1944 o - O 2 2s 0 - --R ( 1945 o - S 16 2s 0 - --R ( 1977 1980 - Ap Sun>=1 2s 1 S --R ( 1977 o - S lastSun 2s 0 - --R ( 1978 o - O 1 2s 0 - --R ( 1979 1995 - S lastSun 2s 0 - --R ( 1981 ma - Mar lastSun 2s 1 S --R ( 1996 ma - O lastSun 2s 0 - --R W 1977 1980 - Ap Sun>=1 0 1 S --R W 1977 o - S lastSun 0 0 - --R W 1978 o - O 1 0 0 - --R W 1979 1995 - S lastSun 0 0 - --R W 1981 ma - Mar lastSun 0 1 S --R W 1996 ma - O lastSun 0 0 - --R M 1917 o - Jul 1 23 1 MST --R M 1917 o - D 28 0 0 MMT --R M 1918 o - May 31 22 2 MDST --R M 1918 o - S 16 1 1 MST --R M 1919 o - May 31 23 2 MDST --R M 1919 o - Jul 1 0u 1 MSD --R M 1919 o - Au 16 0 0 MSK --R M 1921 o - F 14 23 1 MSD --R M 1921 o - Mar 20 23 2 +05 --R M 1921 o - S 1 0 1 MSD --R M 1921 o - O 1 0 0 - --R M 1981 1984 - Ap 1 0 1 S --R M 1981 1983 - O 1 0 0 - --R M 1984 1995 - S lastSun 2s 0 - --R M 1985 2010 - Mar lastSun 2s 1 S --R M 1996 2010 - O lastSun 2s 0 - --Z WET 0 O WE%sT --Z CET 1 ( CE%sT --Z MET 1 ( ME%sT --Z EET 2 O EE%sT --R ) 1940 o - Jun 16 0 1 S --R ) 1942 o - N 2 3 0 - --R ) 1943 o - Mar 29 2 1 S --R ) 1943 o - Ap 10 3 0 - --R ) 1974 o - May 4 0 1 S --R ) 1974 o - O 2 0 0 - --R ) 1975 o - May 1 0 1 S --R ) 1975 o - O 2 0 0 - --R ) 1976 o - May 2 0 1 S --R ) 1976 o - O 3 0 0 - --R ) 1977 o - May 8 0 1 S --R ) 1977 o - O 2 0 0 - --R ) 1978 o - May 6 0 1 S --R ) 1978 o - O 1 0 0 - --R ) 1979 o - May 5 0 1 S --R ) 1979 o - S 30 0 0 - --R ) 1980 o - May 3 0 1 S --R ) 1980 o - O 4 0 0 - --R ) 1981 o - Ap 26 0 1 S --R ) 1981 o - S 27 0 0 - --R ) 1982 o - May 2 0 1 S --R ) 1982 o - O 3 0 0 - --R ) 1983 o - Ap 18 0 1 S --R ) 1983 o - O 1 0 0 - --R ) 1984 o - Ap 1 0 1 S -+0 G GMT/IST 1968 O 27 -+1 IE IST/GMT -+R E 1977 1980 - Ap Sun>=1 1u 1 S -+R E 1977 o - S lastSun 1u 0 - -+R E 1978 o - O 1 1u 0 - -+R E 1979 1995 - S lastSun 1u 0 - -+R E 1981 ma - Mar lastSun 1u 1 S -+R E 1996 ma - O lastSun 1u 0 - -+R W- 1977 1980 - Ap Sun>=1 1s 1 S -+R W- 1977 o - S lastSun 1s 0 - -+R W- 1978 o - O 1 1s 0 - -+R W- 1979 1995 - S lastSun 1s 0 - -+R W- 1981 ma - Mar lastSun 1s 1 S -+R W- 1996 ma - O lastSun 1s 0 - -+R c 1916 o - Ap 30 23 1 S -+R c 1916 o - O 1 1 0 - -+R c 1917 1918 - Ap M>=15 2s 1 S -+R c 1917 1918 - S M>=15 2s 0 - -+R c 1940 o - Ap 1 2s 1 S -+R c 1942 o - N 2 2s 0 - -+R c 1943 o - Mar 29 2s 1 S -+R c 1943 o - O 4 2s 0 - -+R c 1944 1945 - Ap M>=1 2s 1 S -+R c 1944 o - O 2 2s 0 - -+R c 1945 o - S 16 2s 0 - -+R c 1977 1980 - Ap Sun>=1 2s 1 S -+R c 1977 o - S lastSun 2s 0 - -+R c 1978 o - O 1 2s 0 - -+R c 1979 1995 - S lastSun 2s 0 - -+R c 1981 ma - Mar lastSun 2s 1 S -+R c 1996 ma - O lastSun 2s 0 - -+R e 1977 1980 - Ap Sun>=1 0 1 S -+R e 1977 o - S lastSun 0 0 - -+R e 1978 o - O 1 0 0 - -+R e 1979 1995 - S lastSun 0 0 - -+R e 1981 ma - Mar lastSun 0 1 S -+R e 1996 ma - O lastSun 0 0 - -+R R 1917 o - Jul 1 23 1 MST -+R R 1917 o - D 28 0 0 MMT -+R R 1918 o - May 31 22 2 MDST -+R R 1918 o - S 16 1 1 MST -+R R 1919 o - May 31 23 2 MDST -+R R 1919 o - Jul 1 0u 1 MSD -+R R 1919 o - Au 16 0 0 MSK -+R R 1921 o - F 14 23 1 MSD -+R R 1921 o - Mar 20 23 2 +05 -+R R 1921 o - S 1 0 1 MSD -+R R 1921 o - O 1 0 0 - -+R R 1981 1984 - Ap 1 0 1 S -+R R 1981 1983 - O 1 0 0 - -+R R 1984 1995 - S lastSun 2s 0 - -+R R 1985 2010 - Mar lastSun 2s 1 S -+R R 1996 2010 - O lastSun 2s 0 - -+Z WET 0 E WE%sT -+Z CET 1 c CE%sT -+Z MET 1 c ME%sT -+Z EET 2 E EE%sT -+R q 1940 o - Jun 16 0 1 S -+R q 1942 o - N 2 3 0 - -+R q 1943 o - Mar 29 2 1 S -+R q 1943 o - Ap 10 3 0 - -+R q 1974 o - May 4 0 1 S -+R q 1974 o - O 2 0 0 - -+R q 1975 o - May 1 0 1 S -+R q 1975 o - O 2 0 0 - -+R q 1976 o - May 2 0 1 S -+R q 1976 o - O 3 0 0 - -+R q 1977 o - May 8 0 1 S -+R q 1977 o - O 2 0 0 - -+R q 1978 o - May 6 0 1 S -+R q 1978 o - O 1 0 0 - -+R q 1979 o - May 5 0 1 S -+R q 1979 o - S 30 0 0 - -+R q 1980 o - May 3 0 1 S -+R q 1980 o - O 4 0 0 - -+R q 1981 o - Ap 26 0 1 S -+R q 1981 o - S 27 0 0 - -+R q 1982 o - May 2 0 1 S -+R q 1982 o - O 3 0 0 - -+R q 1983 o - Ap 18 0 1 S -+R q 1983 o - O 1 0 0 - -+R q 1984 o - Ap 1 0 1 S - Z Europe/Tirane 1:19:20 - LMT 1914 - 1 - CET 1940 Jun 16 --1 ) CE%sT 1984 Jul --1 O CE%sT -+1 q CE%sT 1984 Jul -+1 E CE%sT - Z Europe/Andorra 0:6:4 - LMT 1901 - 0 - WET 1946 S 30 - 1 - CET 1985 Mar 31 2 --1 O CE%sT --R * 1920 o - Ap 5 2s 1 S --R * 1920 o - S 13 2s 0 - --R * 1946 o - Ap 14 2s 1 S --R * 1946 1948 - O Sun>=1 2s 0 - --R * 1947 o - Ap 6 2s 1 S --R * 1948 o - Ap 18 2s 1 S --R * 1980 o - Ap 6 0 1 S --R * 1980 o - S 28 0 0 - -+1 E CE%sT -+R a 1920 o - Ap 5 2s 1 S -+R a 1920 o - S 13 2s 0 - -+R a 1946 o - Ap 14 2s 1 S -+R a 1946 1948 - O Sun>=1 2s 0 - -+R a 1947 o - Ap 6 2s 1 S -+R a 1948 o - Ap 18 2s 1 S -+R a 1980 o - Ap 6 0 1 S -+R a 1980 o - S 28 0 0 - - Z Europe/Vienna 1:5:21 - LMT 1893 Ap --1 ( CE%sT 1920 --1 * CE%sT 1940 Ap 1 2s --1 ( CE%sT 1945 Ap 2 2s -+1 c CE%sT 1920 -+1 a CE%sT 1940 Ap 1 2s -+1 c CE%sT 1945 Ap 2 2s - 1 1 CEST 1945 Ap 12 2s - 1 - CET 1946 --1 * CE%sT 1981 --1 O CE%sT -+1 a CE%sT 1981 -+1 E CE%sT - Z Europe/Minsk 1:50:16 - LMT 1880 - 1:50 - MMT 1924 May 2 - 2 - EET 1930 Jun 21 - 3 - MSK 1941 Jun 28 --1 ( CE%sT 1944 Jul 3 --3 M MSK/MSD 1990 -+1 c CE%sT 1944 Jul 3 -+3 R MSK/MSD 1990 - 3 - MSK 1991 Mar 31 2s --2 M EE%sT 2011 Mar 27 2s -+2 R EE%sT 2011 Mar 27 2s - 3 - +03 --R + 1918 o - Mar 9 0s 1 S --R + 1918 1919 - O Sat>=1 23s 0 - --R + 1919 o - Mar 1 23s 1 S --R + 1920 o - F 14 23s 1 S --R + 1920 o - O 23 23s 0 - --R + 1921 o - Mar 14 23s 1 S --R + 1921 o - O 25 23s 0 - --R + 1922 o - Mar 25 23s 1 S --R + 1922 1927 - O Sat>=1 23s 0 - --R + 1923 o - Ap 21 23s 1 S --R + 1924 o - Mar 29 23s 1 S --R + 1925 o - Ap 4 23s 1 S --R + 1926 o - Ap 17 23s 1 S --R + 1927 o - Ap 9 23s 1 S --R + 1928 o - Ap 14 23s 1 S --R + 1928 1938 - O Sun>=2 2s 0 - --R + 1929 o - Ap 21 2s 1 S --R + 1930 o - Ap 13 2s 1 S --R + 1931 o - Ap 19 2s 1 S --R + 1932 o - Ap 3 2s 1 S --R + 1933 o - Mar 26 2s 1 S --R + 1934 o - Ap 8 2s 1 S --R + 1935 o - Mar 31 2s 1 S --R + 1936 o - Ap 19 2s 1 S --R + 1937 o - Ap 4 2s 1 S --R + 1938 o - Mar 27 2s 1 S --R + 1939 o - Ap 16 2s 1 S --R + 1939 o - N 19 2s 0 - --R + 1940 o - F 25 2s 1 S --R + 1944 o - S 17 2s 0 - --R + 1945 o - Ap 2 2s 1 S --R + 1945 o - S 16 2s 0 - --R + 1946 o - May 19 2s 1 S --R + 1946 o - O 7 2s 0 - -+R b 1918 o - Mar 9 0s 1 S -+R b 1918 1919 - O Sat>=1 23s 0 - -+R b 1919 o - Mar 1 23s 1 S -+R b 1920 o - F 14 23s 1 S -+R b 1920 o - O 23 23s 0 - -+R b 1921 o - Mar 14 23s 1 S -+R b 1921 o - O 25 23s 0 - -+R b 1922 o - Mar 25 23s 1 S -+R b 1922 1927 - O Sat>=1 23s 0 - -+R b 1923 o - Ap 21 23s 1 S -+R b 1924 o - Mar 29 23s 1 S -+R b 1925 o - Ap 4 23s 1 S -+R b 1926 o - Ap 17 23s 1 S -+R b 1927 o - Ap 9 23s 1 S -+R b 1928 o - Ap 14 23s 1 S -+R b 1928 1938 - O Sun>=2 2s 0 - -+R b 1929 o - Ap 21 2s 1 S -+R b 1930 o - Ap 13 2s 1 S -+R b 1931 o - Ap 19 2s 1 S -+R b 1932 o - Ap 3 2s 1 S -+R b 1933 o - Mar 26 2s 1 S -+R b 1934 o - Ap 8 2s 1 S -+R b 1935 o - Mar 31 2s 1 S -+R b 1936 o - Ap 19 2s 1 S -+R b 1937 o - Ap 4 2s 1 S -+R b 1938 o - Mar 27 2s 1 S -+R b 1939 o - Ap 16 2s 1 S -+R b 1939 o - N 19 2s 0 - -+R b 1940 o - F 25 2s 1 S -+R b 1944 o - S 17 2s 0 - -+R b 1945 o - Ap 2 2s 1 S -+R b 1945 o - S 16 2s 0 - -+R b 1946 o - May 19 2s 1 S -+R b 1946 o - O 7 2s 0 - - Z Europe/Brussels 0:17:30 - LMT 1880 - 0:17:30 - BMT 1892 May 1 12 - 0 - WET 1914 N 8 - 1 - CET 1916 May --1 ( CE%sT 1918 N 11 11u --0 + WE%sT 1940 May 20 2s --1 ( CE%sT 1944 S 3 --1 + CE%sT 1977 --1 O CE%sT --R , 1979 o - Mar 31 23 1 S --R , 1979 o - O 1 1 0 - --R , 1980 1982 - Ap Sat>=1 23 1 S --R , 1980 o - S 29 1 0 - --R , 1981 o - S 27 2 0 - -+1 c CE%sT 1918 N 11 11u -+0 b WE%sT 1940 May 20 2s -+1 c CE%sT 1944 S 3 -+1 b CE%sT 1977 -+1 E CE%sT -+R BG 1979 o - Mar 31 23 1 S -+R BG 1979 o - O 1 1 0 - -+R BG 1980 1982 - Ap Sat>=1 23 1 S -+R BG 1980 o - S 29 1 0 - -+R BG 1981 o - S 27 2 0 - - Z Europe/Sofia 1:33:16 - LMT 1880 - 1:56:56 - IMT 1894 N 30 - 2 - EET 1942 N 2 3 --1 ( CE%sT 1945 -+1 c CE%sT 1945 - 1 - CET 1945 Ap 2 3 - 2 - EET 1979 Mar 31 23 --2 , EE%sT 1982 S 26 3 --2 ( EE%sT 1991 --2 W EE%sT 1997 --2 O EE%sT --R . 1945 o - Ap M>=1 2s 1 S --R . 1945 o - O 1 2s 0 - --R . 1946 o - May 6 2s 1 S --R . 1946 1949 - O Sun>=1 2s 0 - --R . 1947 1948 - Ap Sun>=15 2s 1 S --R . 1949 o - Ap 9 2s 1 S -+2 BG EE%sT 1982 S 26 3 -+2 c EE%sT 1991 -+2 e EE%sT 1997 -+2 E EE%sT -+R CZ 1945 o - Ap M>=1 2s 1 S -+R CZ 1945 o - O 1 2s 0 - -+R CZ 1946 o - May 6 2s 1 S -+R CZ 1946 1949 - O Sun>=1 2s 0 - -+R CZ 1947 1948 - Ap Sun>=15 2s 1 S -+R CZ 1949 o - Ap 9 2s 1 S - Z Europe/Prague 0:57:44 - LMT 1850 - 0:57:44 - PMT 1891 O --1 ( CE%sT 1945 May 9 --1 . CE%sT 1946 D 1 3 -+1 c CE%sT 1945 May 9 -+1 CZ CE%sT 1946 D 1 3 - 1 -1 GMT 1947 F 23 2 --1 . CE%sT 1979 --1 O CE%sT --R / 1916 o - May 14 23 1 S --R / 1916 o - S 30 23 0 - --R / 1940 o - May 15 0 1 S --R / 1945 o - Ap 2 2s 1 S --R / 1945 o - Au 15 2s 0 - --R / 1946 o - May 1 2s 1 S --R / 1946 o - S 1 2s 0 - --R / 1947 o - May 4 2s 1 S --R / 1947 o - Au 10 2s 0 - --R / 1948 o - May 9 2s 1 S --R / 1948 o - Au 8 2s 0 - -+1 CZ CE%sT 1979 -+1 E CE%sT -+R D 1916 o - May 14 23 1 S -+R D 1916 o - S 30 23 0 - -+R D 1940 o - May 15 0 1 S -+R D 1945 o - Ap 2 2s 1 S -+R D 1945 o - Au 15 2s 0 - -+R D 1946 o - May 1 2s 1 S -+R D 1946 o - S 1 2s 0 - -+R D 1947 o - May 4 2s 1 S -+R D 1947 o - Au 10 2s 0 - -+R D 1948 o - May 9 2s 1 S -+R D 1948 o - Au 8 2s 0 - - Z Europe/Copenhagen 0:50:20 - LMT 1890 - 0:50:20 - CMT 1894 --1 / CE%sT 1942 N 2 2s --1 ( CE%sT 1945 Ap 2 2 --1 / CE%sT 1980 --1 O CE%sT -+1 D CE%sT 1942 N 2 2s -+1 c CE%sT 1945 Ap 2 2 -+1 D CE%sT 1980 -+1 E CE%sT - Z Atlantic/Faroe -0:27:4 - LMT 1908 Ja 11 - 0 - WET 1981 --0 O WE%sT --R : 1991 1992 - Mar lastSun 2 1 D --R : 1991 1992 - S lastSun 2 0 S --R : 1993 2006 - Ap Sun>=1 2 1 D --R : 1993 2006 - O lastSun 2 0 S --R : 2007 ma - Mar Sun>=8 2 1 D --R : 2007 ma - N Sun>=1 2 0 S -+0 E WE%sT -+R Th 1991 1992 - Mar lastSun 2 1 D -+R Th 1991 1992 - S lastSun 2 0 S -+R Th 1993 2006 - Ap Sun>=1 2 1 D -+R Th 1993 2006 - O lastSun 2 0 S -+R Th 2007 ma - Mar Sun>=8 2 1 D -+R Th 2007 ma - N Sun>=1 2 0 S - Z America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28 - -3 - -03 1980 Ap 6 2 ---3 O -03/-02 1996 -+-3 E -03/-02 1996 - 0 - GMT - Z America/Scoresbysund -1:27:52 - LMT 1916 Jul 28 - -2 - -02 1980 Ap 6 2 ---2 ( -02/-01 1981 Mar 29 ---1 O -01/+00 -+-2 c -02/-01 1981 Mar 29 -+-1 E -01/+00 - Z America/Godthab -3:26:56 - LMT 1916 Jul 28 - -3 - -03 1980 Ap 6 2 ---3 O -03/-02 -+-3 E -03/-02 - Z America/Thule -4:35:8 - LMT 1916 Jul 28 ---4 : A%sT -+-4 Th A%sT - Z Europe/Tallinn 1:39 - LMT 1880 - 1:39 - TMT 1918 F --1 ( CE%sT 1919 Jul -+1 c CE%sT 1919 Jul - 1:39 - TMT 1921 May - 2 - EET 1940 Au 6 - 3 - MSK 1941 S 15 --1 ( CE%sT 1944 S 22 --3 M MSK/MSD 1989 Mar 26 2s -+1 c CE%sT 1944 S 22 -+3 R MSK/MSD 1989 Mar 26 2s - 2 1 EEST 1989 S 24 2s --2 ( EE%sT 1998 S 22 --2 O EE%sT 1999 O 31 4 -+2 c EE%sT 1998 S 22 -+2 E EE%sT 1999 O 31 4 - 2 - EET 2002 F 21 --2 O EE%sT --R ; 1942 o - Ap 2 24 1 S --R ; 1942 o - O 4 1 0 - --R ; 1981 1982 - Mar lastSun 2 1 S --R ; 1981 1982 - S lastSun 3 0 - -+2 E EE%sT -+R FI 1942 o - Ap 2 24 1 S -+R FI 1942 o - O 4 1 0 - -+R FI 1981 1982 - Mar lastSun 2 1 S -+R FI 1981 1982 - S lastSun 3 0 - - Z Europe/Helsinki 1:39:49 - LMT 1878 May 31 - 1:39:49 - HMT 1921 May --2 ; EE%sT 1983 --2 O EE%sT -+2 FI EE%sT 1983 -+2 E EE%sT - Li Europe/Helsinki Europe/Mariehamn --R < 1916 o - Jun 14 23s 1 S --R < 1916 1919 - O Sun>=1 23s 0 - --R < 1917 o - Mar 24 23s 1 S --R < 1918 o - Mar 9 23s 1 S --R < 1919 o - Mar 1 23s 1 S --R < 1920 o - F 14 23s 1 S --R < 1920 o - O 23 23s 0 - --R < 1921 o - Mar 14 23s 1 S --R < 1921 o - O 25 23s 0 - --R < 1922 o - Mar 25 23s 1 S --R < 1922 1938 - O Sat>=1 23s 0 - --R < 1923 o - May 26 23s 1 S --R < 1924 o - Mar 29 23s 1 S --R < 1925 o - Ap 4 23s 1 S --R < 1926 o - Ap 17 23s 1 S --R < 1927 o - Ap 9 23s 1 S --R < 1928 o - Ap 14 23s 1 S --R < 1929 o - Ap 20 23s 1 S --R < 1930 o - Ap 12 23s 1 S --R < 1931 o - Ap 18 23s 1 S --R < 1932 o - Ap 2 23s 1 S --R < 1933 o - Mar 25 23s 1 S --R < 1934 o - Ap 7 23s 1 S --R < 1935 o - Mar 30 23s 1 S --R < 1936 o - Ap 18 23s 1 S --R < 1937 o - Ap 3 23s 1 S --R < 1938 o - Mar 26 23s 1 S --R < 1939 o - Ap 15 23s 1 S --R < 1939 o - N 18 23s 0 - --R < 1940 o - F 25 2 1 S --R < 1941 o - May 5 0 2 M --R < 1941 o - O 6 0 1 S --R < 1942 o - Mar 9 0 2 M --R < 1942 o - N 2 3 1 S --R < 1943 o - Mar 29 2 2 M --R < 1943 o - O 4 3 1 S --R < 1944 o - Ap 3 2 2 M --R < 1944 o - O 8 1 1 S --R < 1945 o - Ap 2 2 2 M --R < 1945 o - S 16 3 0 - --R < 1976 o - Mar 28 1 1 S --R < 1976 o - S 26 1 0 - -+R F 1916 o - Jun 14 23s 1 S -+R F 1916 1919 - O Sun>=1 23s 0 - -+R F 1917 o - Mar 24 23s 1 S -+R F 1918 o - Mar 9 23s 1 S -+R F 1919 o - Mar 1 23s 1 S -+R F 1920 o - F 14 23s 1 S -+R F 1920 o - O 23 23s 0 - -+R F 1921 o - Mar 14 23s 1 S -+R F 1921 o - O 25 23s 0 - -+R F 1922 o - Mar 25 23s 1 S -+R F 1922 1938 - O Sat>=1 23s 0 - -+R F 1923 o - May 26 23s 1 S -+R F 1924 o - Mar 29 23s 1 S -+R F 1925 o - Ap 4 23s 1 S -+R F 1926 o - Ap 17 23s 1 S -+R F 1927 o - Ap 9 23s 1 S -+R F 1928 o - Ap 14 23s 1 S -+R F 1929 o - Ap 20 23s 1 S -+R F 1930 o - Ap 12 23s 1 S -+R F 1931 o - Ap 18 23s 1 S -+R F 1932 o - Ap 2 23s 1 S -+R F 1933 o - Mar 25 23s 1 S -+R F 1934 o - Ap 7 23s 1 S -+R F 1935 o - Mar 30 23s 1 S -+R F 1936 o - Ap 18 23s 1 S -+R F 1937 o - Ap 3 23s 1 S -+R F 1938 o - Mar 26 23s 1 S -+R F 1939 o - Ap 15 23s 1 S -+R F 1939 o - N 18 23s 0 - -+R F 1940 o - F 25 2 1 S -+R F 1941 o - May 5 0 2 M -+R F 1941 o - O 6 0 1 S -+R F 1942 o - Mar 9 0 2 M -+R F 1942 o - N 2 3 1 S -+R F 1943 o - Mar 29 2 2 M -+R F 1943 o - O 4 3 1 S -+R F 1944 o - Ap 3 2 2 M -+R F 1944 o - O 8 1 1 S -+R F 1945 o - Ap 2 2 2 M -+R F 1945 o - S 16 3 0 - -+R F 1976 o - Mar 28 1 1 S -+R F 1976 o - S 26 1 0 - - Z Europe/Paris 0:9:21 - LMT 1891 Mar 15 0:1 - 0:9:21 - PMT 1911 Mar 11 0:1 --0 < WE%sT 1940 Jun 14 23 --1 ( CE%sT 1944 Au 25 --0 < WE%sT 1945 S 16 3 --1 < CE%sT 1977 --1 O CE%sT --R = 1946 o - Ap 14 2s 1 S --R = 1946 o - O 7 2s 0 - --R = 1947 1949 - O Sun>=1 2s 0 - --R = 1947 o - Ap 6 3s 1 S --R = 1947 o - May 11 2s 2 M --R = 1947 o - Jun 29 3 1 S --R = 1948 o - Ap 18 2s 1 S --R = 1949 o - Ap 10 2s 1 S --R > 1945 o - May 24 2 2 M --R > 1945 o - S 24 3 1 S --R > 1945 o - N 18 2s 0 - -+0 F WE%sT 1940 Jun 14 23 -+1 c CE%sT 1944 Au 25 -+0 F WE%sT 1945 S 16 3 -+1 F CE%sT 1977 -+1 E CE%sT -+R DE 1946 o - Ap 14 2s 1 S -+R DE 1946 o - O 7 2s 0 - -+R DE 1947 1949 - O Sun>=1 2s 0 - -+R DE 1947 o - Ap 6 3s 1 S -+R DE 1947 o - May 11 2s 2 M -+R DE 1947 o - Jun 29 3 1 S -+R DE 1948 o - Ap 18 2s 1 S -+R DE 1949 o - Ap 10 2s 1 S -+R So 1945 o - May 24 2 2 M -+R So 1945 o - S 24 3 1 S -+R So 1945 o - N 18 2s 0 - - Z Europe/Berlin 0:53:28 - LMT 1893 Ap --1 ( CE%sT 1945 May 24 2 --1 > CE%sT 1946 --1 = CE%sT 1980 --1 O CE%sT -+1 c CE%sT 1945 May 24 2 -+1 So CE%sT 1946 -+1 DE CE%sT 1980 -+1 E CE%sT - Li Europe/Zurich Europe/Busingen - Z Europe/Gibraltar -0:21:24 - LMT 1880 Au 2 0s --0 % %s 1957 Ap 14 2 -+0 G %s 1957 Ap 14 2 - 1 - CET 1982 --1 O CE%sT --R ? 1932 o - Jul 7 0 1 S --R ? 1932 o - S 1 0 0 - --R ? 1941 o - Ap 7 0 1 S --R ? 1942 o - N 2 3 0 - --R ? 1943 o - Mar 30 0 1 S --R ? 1943 o - O 4 0 0 - --R ? 1952 o - Jul 1 0 1 S --R ? 1952 o - N 2 0 0 - --R ? 1975 o - Ap 12 0s 1 S --R ? 1975 o - N 26 0s 0 - --R ? 1976 o - Ap 11 2s 1 S --R ? 1976 o - O 10 2s 0 - --R ? 1977 1978 - Ap Sun>=1 2s 1 S --R ? 1977 o - S 26 2s 0 - --R ? 1978 o - S 24 4 0 - --R ? 1979 o - Ap 1 9 1 S --R ? 1979 o - S 29 2 0 - --R ? 1980 o - Ap 1 0 1 S --R ? 1980 o - S 28 0 0 - -+1 E CE%sT -+R g 1932 o - Jul 7 0 1 S -+R g 1932 o - S 1 0 0 - -+R g 1941 o - Ap 7 0 1 S -+R g 1942 o - N 2 3 0 - -+R g 1943 o - Mar 30 0 1 S -+R g 1943 o - O 4 0 0 - -+R g 1952 o - Jul 1 0 1 S -+R g 1952 o - N 2 0 0 - -+R g 1975 o - Ap 12 0s 1 S -+R g 1975 o - N 26 0s 0 - -+R g 1976 o - Ap 11 2s 1 S -+R g 1976 o - O 10 2s 0 - -+R g 1977 1978 - Ap Sun>=1 2s 1 S -+R g 1977 o - S 26 2s 0 - -+R g 1978 o - S 24 4 0 - -+R g 1979 o - Ap 1 9 1 S -+R g 1979 o - S 29 2 0 - -+R g 1980 o - Ap 1 0 1 S -+R g 1980 o - S 28 0 0 - - Z Europe/Athens 1:34:52 - LMT 1895 S 14 - 1:34:52 - AMT 1916 Jul 28 0:1 --2 ? EE%sT 1941 Ap 30 --1 ? CE%sT 1944 Ap 4 --2 ? EE%sT 1981 --2 O EE%sT --R @ 1918 o - Ap 1 3 1 S --R @ 1918 o - S 16 3 0 - --R @ 1919 o - Ap 15 3 1 S --R @ 1919 o - N 24 3 0 - --R @ 1945 o - May 1 23 1 S --R @ 1945 o - N 1 0 0 - --R @ 1946 o - Mar 31 2s 1 S --R @ 1946 1949 - O Sun>=1 2s 0 - --R @ 1947 1949 - Ap Sun>=4 2s 1 S --R @ 1950 o - Ap 17 2s 1 S --R @ 1950 o - O 23 2s 0 - --R @ 1954 1955 - May 23 0 1 S --R @ 1954 1955 - O 3 0 0 - --R @ 1956 o - Jun Sun>=1 0 1 S --R @ 1956 o - S lastSun 0 0 - --R @ 1957 o - Jun Sun>=1 1 1 S --R @ 1957 o - S lastSun 3 0 - --R @ 1980 o - Ap 6 1 1 S -+2 g EE%sT 1941 Ap 30 -+1 g CE%sT 1944 Ap 4 -+2 g EE%sT 1981 -+2 E EE%sT -+R h 1918 o - Ap 1 3 1 S -+R h 1918 o - S 16 3 0 - -+R h 1919 o - Ap 15 3 1 S -+R h 1919 o - N 24 3 0 - -+R h 1945 o - May 1 23 1 S -+R h 1945 o - N 1 0 0 - -+R h 1946 o - Mar 31 2s 1 S -+R h 1946 1949 - O Sun>=1 2s 0 - -+R h 1947 1949 - Ap Sun>=4 2s 1 S -+R h 1950 o - Ap 17 2s 1 S -+R h 1950 o - O 23 2s 0 - -+R h 1954 1955 - May 23 0 1 S -+R h 1954 1955 - O 3 0 0 - -+R h 1956 o - Jun Sun>=1 0 1 S -+R h 1956 o - S lastSun 0 0 - -+R h 1957 o - Jun Sun>=1 1 1 S -+R h 1957 o - S lastSun 3 0 - -+R h 1980 o - Ap 6 1 1 S - Z Europe/Budapest 1:16:20 - LMT 1890 O --1 ( CE%sT 1918 --1 @ CE%sT 1941 Ap 8 --1 ( CE%sT 1945 --1 @ CE%sT 1980 S 28 2s --1 O CE%sT --R [ 1917 1919 - F 19 23 1 - --R [ 1917 o - O 21 1 0 - --R [ 1918 1919 - N 16 1 0 - --R [ 1921 o - Mar 19 23 1 - --R [ 1921 o - Jun 23 1 0 - --R [ 1939 o - Ap 29 23 1 - --R [ 1939 o - O 29 2 0 - --R [ 1940 o - F 25 2 1 - --R [ 1940 1941 - N Sun>=2 1s 0 - --R [ 1941 1942 - Mar Sun>=2 1s 1 - --R [ 1943 1946 - Mar Sun>=1 1s 1 - --R [ 1942 1948 - O Sun>=22 1s 0 - --R [ 1947 1967 - Ap Sun>=1 1s 1 - --R [ 1949 o - O 30 1s 0 - --R [ 1950 1966 - O Sun>=22 1s 0 - --R [ 1967 o - O 29 1s 0 - -+1 c CE%sT 1918 -+1 h CE%sT 1941 Ap 8 -+1 c CE%sT 1945 -+1 h CE%sT 1980 S 28 2s -+1 E CE%sT -+R w 1917 1919 - F 19 23 1 - -+R w 1917 o - O 21 1 0 - -+R w 1918 1919 - N 16 1 0 - -+R w 1921 o - Mar 19 23 1 - -+R w 1921 o - Jun 23 1 0 - -+R w 1939 o - Ap 29 23 1 - -+R w 1939 o - O 29 2 0 - -+R w 1940 o - F 25 2 1 - -+R w 1940 1941 - N Sun>=2 1s 0 - -+R w 1941 1942 - Mar Sun>=2 1s 1 - -+R w 1943 1946 - Mar Sun>=1 1s 1 - -+R w 1942 1948 - O Sun>=22 1s 0 - -+R w 1947 1967 - Ap Sun>=1 1s 1 - -+R w 1949 o - O 30 1s 0 - -+R w 1950 1966 - O Sun>=22 1s 0 - -+R w 1967 o - O 29 1s 0 - - Z Atlantic/Reykjavik -1:28 - LMT 1908 ---1 [ -01/+00 1968 Ap 7 1s -+-1 w -01/+00 1968 Ap 7 1s - 0 - GMT --R \ 1916 o - Jun 3 24 1 S --R \ 1916 1917 - S 30 24 0 - --R \ 1917 o - Mar 31 24 1 S --R \ 1918 o - Mar 9 24 1 S --R \ 1918 o - O 6 24 0 - --R \ 1919 o - Mar 1 24 1 S --R \ 1919 o - O 4 24 0 - --R \ 1920 o - Mar 20 24 1 S --R \ 1920 o - S 18 24 0 - --R \ 1940 o - Jun 14 24 1 S --R \ 1942 o - N 2 2s 0 - --R \ 1943 o - Mar 29 2s 1 S --R \ 1943 o - O 4 2s 0 - --R \ 1944 o - Ap 2 2s 1 S --R \ 1944 o - S 17 2s 0 - --R \ 1945 o - Ap 2 2 1 S --R \ 1945 o - S 15 1 0 - --R \ 1946 o - Mar 17 2s 1 S --R \ 1946 o - O 6 2s 0 - --R \ 1947 o - Mar 16 0s 1 S --R \ 1947 o - O 5 0s 0 - --R \ 1948 o - F 29 2s 1 S --R \ 1948 o - O 3 2s 0 - --R \ 1966 1968 - May Sun>=22 0s 1 S --R \ 1966 o - S 24 24 0 - --R \ 1967 1969 - S Sun>=22 0s 0 - --R \ 1969 o - Jun 1 0s 1 S --R \ 1970 o - May 31 0s 1 S --R \ 1970 o - S lastSun 0s 0 - --R \ 1971 1972 - May Sun>=22 0s 1 S --R \ 1971 o - S lastSun 0s 0 - --R \ 1972 o - O 1 0s 0 - --R \ 1973 o - Jun 3 0s 1 S --R \ 1973 1974 - S lastSun 0s 0 - --R \ 1974 o - May 26 0s 1 S --R \ 1975 o - Jun 1 0s 1 S --R \ 1975 1977 - S lastSun 0s 0 - --R \ 1976 o - May 30 0s 1 S --R \ 1977 1979 - May Sun>=22 0s 1 S --R \ 1978 o - O 1 0s 0 - --R \ 1979 o - S 30 0s 0 - -+R I 1916 o - Jun 3 24 1 S -+R I 1916 1917 - S 30 24 0 - -+R I 1917 o - Mar 31 24 1 S -+R I 1918 o - Mar 9 24 1 S -+R I 1918 o - O 6 24 0 - -+R I 1919 o - Mar 1 24 1 S -+R I 1919 o - O 4 24 0 - -+R I 1920 o - Mar 20 24 1 S -+R I 1920 o - S 18 24 0 - -+R I 1940 o - Jun 14 24 1 S -+R I 1942 o - N 2 2s 0 - -+R I 1943 o - Mar 29 2s 1 S -+R I 1943 o - O 4 2s 0 - -+R I 1944 o - Ap 2 2s 1 S -+R I 1944 o - S 17 2s 0 - -+R I 1945 o - Ap 2 2 1 S -+R I 1945 o - S 15 1 0 - -+R I 1946 o - Mar 17 2s 1 S -+R I 1946 o - O 6 2s 0 - -+R I 1947 o - Mar 16 0s 1 S -+R I 1947 o - O 5 0s 0 - -+R I 1948 o - F 29 2s 1 S -+R I 1948 o - O 3 2s 0 - -+R I 1966 1968 - May Sun>=22 0s 1 S -+R I 1966 o - S 24 24 0 - -+R I 1967 1969 - S Sun>=22 0s 0 - -+R I 1969 o - Jun 1 0s 1 S -+R I 1970 o - May 31 0s 1 S -+R I 1970 o - S lastSun 0s 0 - -+R I 1971 1972 - May Sun>=22 0s 1 S -+R I 1971 o - S lastSun 0s 0 - -+R I 1972 o - O 1 0s 0 - -+R I 1973 o - Jun 3 0s 1 S -+R I 1973 1974 - S lastSun 0s 0 - -+R I 1974 o - May 26 0s 1 S -+R I 1975 o - Jun 1 0s 1 S -+R I 1975 1977 - S lastSun 0s 0 - -+R I 1976 o - May 30 0s 1 S -+R I 1977 1979 - May Sun>=22 0s 1 S -+R I 1978 o - O 1 0s 0 - -+R I 1979 o - S 30 0s 0 - - Z Europe/Rome 0:49:56 - LMT 1866 S 22 - 0:49:56 - RMT 1893 O 31 23:49:56 --1 \ CE%sT 1943 S 10 --1 ( CE%sT 1944 Jun 4 --1 \ CE%sT 1980 --1 O CE%sT -+1 I CE%sT 1943 S 10 -+1 c CE%sT 1944 Jun 4 -+1 I CE%sT 1980 -+1 E CE%sT - Li Europe/Rome Europe/Vatican - Li Europe/Rome Europe/San_Marino --R ] 1989 1996 - Mar lastSun 2s 1 S --R ] 1989 1996 - S lastSun 2s 0 - -+R LV 1989 1996 - Mar lastSun 2s 1 S -+R LV 1989 1996 - S lastSun 2s 0 - - Z Europe/Riga 1:36:34 - LMT 1880 - 1:36:34 - RMT 1918 Ap 15 2 - 1:36:34 1 LST 1918 S 16 3 -@@ -1883,13 +1907,13 @@ Z Europe/Riga 1:36:34 - LMT 1880 - 1:36:34 - RMT 1926 May 11 - 2 - EET 1940 Au 5 - 3 - MSK 1941 Jul --1 ( CE%sT 1944 O 13 --3 M MSK/MSD 1989 Mar lastSun 2s -+1 c CE%sT 1944 O 13 -+3 R MSK/MSD 1989 Mar lastSun 2s - 2 1 EEST 1989 S lastSun 2s --2 ] EE%sT 1997 Ja 21 --2 O EE%sT 2000 F 29 -+2 LV EE%sT 1997 Ja 21 -+2 E EE%sT 2000 F 29 - 2 - EET 2001 Ja 2 --2 O EE%sT -+2 E EE%sT - Li Europe/Zurich Europe/Vaduz - Z Europe/Vilnius 1:41:16 - LMT 1880 - 1:24 - WMT 1917 -@@ -1898,783 +1922,776 @@ Z Europe/Vilnius 1:41:16 - LMT 1880 - 2 - EET 1920 O 9 - 1 - CET 1940 Au 3 - 3 - MSK 1941 Jun 24 --1 ( CE%sT 1944 Au --3 M MSK/MSD 1989 Mar 26 2s --2 M EE%sT 1991 S 29 2s --2 ( EE%sT 1998 -+1 c CE%sT 1944 Au -+3 R MSK/MSD 1989 Mar 26 2s -+2 R EE%sT 1991 S 29 2s -+2 c EE%sT 1998 - 2 - EET 1998 Mar 29 1u --1 O CE%sT 1999 O 31 1u -+1 E CE%sT 1999 O 31 1u - 2 - EET 2003 --2 O EE%sT --R ^ 1916 o - May 14 23 1 S --R ^ 1916 o - O 1 1 0 - --R ^ 1917 o - Ap 28 23 1 S --R ^ 1917 o - S 17 1 0 - --R ^ 1918 o - Ap M>=15 2s 1 S --R ^ 1918 o - S M>=15 2s 0 - --R ^ 1919 o - Mar 1 23 1 S --R ^ 1919 o - O 5 3 0 - --R ^ 1920 o - F 14 23 1 S --R ^ 1920 o - O 24 2 0 - --R ^ 1921 o - Mar 14 23 1 S --R ^ 1921 o - O 26 2 0 - --R ^ 1922 o - Mar 25 23 1 S --R ^ 1922 o - O Sun>=2 1 0 - --R ^ 1923 o - Ap 21 23 1 S --R ^ 1923 o - O Sun>=2 2 0 - --R ^ 1924 o - Mar 29 23 1 S --R ^ 1924 1928 - O Sun>=2 1 0 - --R ^ 1925 o - Ap 5 23 1 S --R ^ 1926 o - Ap 17 23 1 S --R ^ 1927 o - Ap 9 23 1 S --R ^ 1928 o - Ap 14 23 1 S --R ^ 1929 o - Ap 20 23 1 S -+2 E EE%sT -+R LX 1916 o - May 14 23 1 S -+R LX 1916 o - O 1 1 0 - -+R LX 1917 o - Ap 28 23 1 S -+R LX 1917 o - S 17 1 0 - -+R LX 1918 o - Ap M>=15 2s 1 S -+R LX 1918 o - S M>=15 2s 0 - -+R LX 1919 o - Mar 1 23 1 S -+R LX 1919 o - O 5 3 0 - -+R LX 1920 o - F 14 23 1 S -+R LX 1920 o - O 24 2 0 - -+R LX 1921 o - Mar 14 23 1 S -+R LX 1921 o - O 26 2 0 - -+R LX 1922 o - Mar 25 23 1 S -+R LX 1922 o - O Sun>=2 1 0 - -+R LX 1923 o - Ap 21 23 1 S -+R LX 1923 o - O Sun>=2 2 0 - -+R LX 1924 o - Mar 29 23 1 S -+R LX 1924 1928 - O Sun>=2 1 0 - -+R LX 1925 o - Ap 5 23 1 S -+R LX 1926 o - Ap 17 23 1 S -+R LX 1927 o - Ap 9 23 1 S -+R LX 1928 o - Ap 14 23 1 S -+R LX 1929 o - Ap 20 23 1 S - Z Europe/Luxembourg 0:24:36 - LMT 1904 Jun --1 ^ CE%sT 1918 N 25 --0 ^ WE%sT 1929 O 6 2s --0 + WE%sT 1940 May 14 3 --1 ( WE%sT 1944 S 18 3 --1 + CE%sT 1977 --1 O CE%sT --R _ 1973 o - Mar 31 0s 1 S --R _ 1973 o - S 29 0s 0 - --R _ 1974 o - Ap 21 0s 1 S --R _ 1974 o - S 16 0s 0 - --R _ 1975 1979 - Ap Sun>=15 2 1 S --R _ 1975 1980 - S Sun>=15 2 0 - --R _ 1980 o - Mar 31 2 1 S -+1 LX CE%sT 1918 N 25 -+0 LX WE%sT 1929 O 6 2s -+0 b WE%sT 1940 May 14 3 -+1 c WE%sT 1944 S 18 3 -+1 b CE%sT 1977 -+1 E CE%sT -+R MT 1973 o - Mar 31 0s 1 S -+R MT 1973 o - S 29 0s 0 - -+R MT 1974 o - Ap 21 0s 1 S -+R MT 1974 o - S 16 0s 0 - -+R MT 1975 1979 - Ap Sun>=15 2 1 S -+R MT 1975 1980 - S Sun>=15 2 0 - -+R MT 1980 o - Mar 31 2 1 S - Z Europe/Malta 0:58:4 - LMT 1893 N 2 0s --1 \ CE%sT 1973 Mar 31 --1 _ CE%sT 1981 --1 O CE%sT --R ` 1997 ma - Mar lastSun 2 1 S --R ` 1997 ma - O lastSun 3 0 - -+1 I CE%sT 1973 Mar 31 -+1 MT CE%sT 1981 -+1 E CE%sT -+R MD 1997 ma - Mar lastSun 2 1 S -+R MD 1997 ma - O lastSun 3 0 - - Z Europe/Chisinau 1:55:20 - LMT 1880 - 1:55 - CMT 1918 F 15 - 1:44:24 - BMT 1931 Jul 24 --2 { EE%sT 1940 Au 15 -+2 z EE%sT 1940 Au 15 - 2 1 EEST 1941 Jul 17 --1 ( CE%sT 1944 Au 24 --3 M MSK/MSD 1990 May 6 2 --2 M EE%sT 1992 --2 W EE%sT 1997 --2 ` EE%sT -+1 c CE%sT 1944 Au 24 -+3 R MSK/MSD 1990 May 6 2 -+2 R EE%sT 1992 -+2 e EE%sT 1997 -+2 MD EE%sT - Z Europe/Monaco 0:29:32 - LMT 1891 Mar 15 - 0:9:21 - PMT 1911 Mar 11 --0 < WE%sT 1945 S 16 3 --1 < CE%sT 1977 --1 O CE%sT --R | 1916 o - May 1 0 1 NST --R | 1916 o - O 1 0 0 AMT --R | 1917 o - Ap 16 2s 1 NST --R | 1917 o - S 17 2s 0 AMT --R | 1918 1921 - Ap M>=1 2s 1 NST --R | 1918 1921 - S lastM 2s 0 AMT --R | 1922 o - Mar lastSun 2s 1 NST --R | 1922 1936 - O Sun>=2 2s 0 AMT --R | 1923 o - Jun F>=1 2s 1 NST --R | 1924 o - Mar lastSun 2s 1 NST --R | 1925 o - Jun F>=1 2s 1 NST --R | 1926 1931 - May 15 2s 1 NST --R | 1932 o - May 22 2s 1 NST --R | 1933 1936 - May 15 2s 1 NST --R | 1937 o - May 22 2s 1 NST --R | 1937 o - Jul 1 0 1 S --R | 1937 1939 - O Sun>=2 2s 0 - --R | 1938 1939 - May 15 2s 1 S --R | 1945 o - Ap 2 2s 1 S --R | 1945 o - S 16 2s 0 - -+0 F WE%sT 1945 S 16 3 -+1 F CE%sT 1977 -+1 E CE%sT -+R N 1916 o - May 1 0 1 NST -+R N 1916 o - O 1 0 0 AMT -+R N 1917 o - Ap 16 2s 1 NST -+R N 1917 o - S 17 2s 0 AMT -+R N 1918 1921 - Ap M>=1 2s 1 NST -+R N 1918 1921 - S lastM 2s 0 AMT -+R N 1922 o - Mar lastSun 2s 1 NST -+R N 1922 1936 - O Sun>=2 2s 0 AMT -+R N 1923 o - Jun F>=1 2s 1 NST -+R N 1924 o - Mar lastSun 2s 1 NST -+R N 1925 o - Jun F>=1 2s 1 NST -+R N 1926 1931 - May 15 2s 1 NST -+R N 1932 o - May 22 2s 1 NST -+R N 1933 1936 - May 15 2s 1 NST -+R N 1937 o - May 22 2s 1 NST -+R N 1937 o - Jul 1 0 1 S -+R N 1937 1939 - O Sun>=2 2s 0 - -+R N 1938 1939 - May 15 2s 1 S -+R N 1945 o - Ap 2 2s 1 S -+R N 1945 o - S 16 2s 0 - - Z Europe/Amsterdam 0:19:32 - LMT 1835 --0:19:32 | %s 1937 Jul --0:20 | +0020/+0120 1940 May 16 --1 ( CE%sT 1945 Ap 2 2 --1 | CE%sT 1977 --1 O CE%sT --R } 1916 o - May 22 1 1 S --R } 1916 o - S 30 0 0 - --R } 1945 o - Ap 2 2s 1 S --R } 1945 o - O 1 2s 0 - --R } 1959 1964 - Mar Sun>=15 2s 1 S --R } 1959 1965 - S Sun>=15 2s 0 - --R } 1965 o - Ap 25 2s 1 S -+0:19:32 N %s 1937 Jul -+0:20 N +0020/+0120 1940 May 16 -+1 c CE%sT 1945 Ap 2 2 -+1 N CE%sT 1977 -+1 E CE%sT -+R NO 1916 o - May 22 1 1 S -+R NO 1916 o - S 30 0 0 - -+R NO 1945 o - Ap 2 2s 1 S -+R NO 1945 o - O 1 2s 0 - -+R NO 1959 1964 - Mar Sun>=15 2s 1 S -+R NO 1959 1965 - S Sun>=15 2s 0 - -+R NO 1965 o - Ap 25 2s 1 S - Z Europe/Oslo 0:43 - LMT 1895 --1 } CE%sT 1940 Au 10 23 --1 ( CE%sT 1945 Ap 2 2 --1 } CE%sT 1980 --1 O CE%sT -+1 NO CE%sT 1940 Au 10 23 -+1 c CE%sT 1945 Ap 2 2 -+1 NO CE%sT 1980 -+1 E CE%sT - Li Europe/Oslo Arctic/Longyearbyen --R ~ 1918 1919 - S 16 2s 0 - --R ~ 1919 o - Ap 15 2s 1 S --R ~ 1944 o - Ap 3 2s 1 S --R ~ 1944 o - O 4 2 0 - --R ~ 1945 o - Ap 29 0 1 S --R ~ 1945 o - N 1 0 0 - --R ~ 1946 o - Ap 14 0s 1 S --R ~ 1946 o - O 7 2s 0 - --R ~ 1947 o - May 4 2s 1 S --R ~ 1947 1949 - O Sun>=1 2s 0 - --R ~ 1948 o - Ap 18 2s 1 S --R ~ 1949 o - Ap 10 2s 1 S --R ~ 1957 o - Jun 2 1s 1 S --R ~ 1957 1958 - S lastSun 1s 0 - --R ~ 1958 o - Mar 30 1s 1 S --R ~ 1959 o - May 31 1s 1 S --R ~ 1959 1961 - O Sun>=1 1s 0 - --R ~ 1960 o - Ap 3 1s 1 S --R ~ 1961 1964 - May lastSun 1s 1 S --R ~ 1962 1964 - S lastSun 1s 0 - -+R O 1918 1919 - S 16 2s 0 - -+R O 1919 o - Ap 15 2s 1 S -+R O 1944 o - Ap 3 2s 1 S -+R O 1944 o - O 4 2 0 - -+R O 1945 o - Ap 29 0 1 S -+R O 1945 o - N 1 0 0 - -+R O 1946 o - Ap 14 0s 1 S -+R O 1946 o - O 7 2s 0 - -+R O 1947 o - May 4 2s 1 S -+R O 1947 1949 - O Sun>=1 2s 0 - -+R O 1948 o - Ap 18 2s 1 S -+R O 1949 o - Ap 10 2s 1 S -+R O 1957 o - Jun 2 1s 1 S -+R O 1957 1958 - S lastSun 1s 0 - -+R O 1958 o - Mar 30 1s 1 S -+R O 1959 o - May 31 1s 1 S -+R O 1959 1961 - O Sun>=1 1s 0 - -+R O 1960 o - Ap 3 1s 1 S -+R O 1961 1964 - May lastSun 1s 1 S -+R O 1962 1964 - S lastSun 1s 0 - - Z Europe/Warsaw 1:24 - LMT 1880 - 1:24 - WMT 1915 Au 5 --1 ( CE%sT 1918 S 16 3 --2 ~ EE%sT 1922 Jun --1 ~ CE%sT 1940 Jun 23 2 --1 ( CE%sT 1944 O --1 ~ CE%sT 1977 --1 ' CE%sT 1988 --1 O CE%sT --R AA 1916 o - Jun 17 23 1 S --R AA 1916 o - N 1 1 0 - --R AA 1917 o - F 28 23s 1 S --R AA 1917 1921 - O 14 23s 0 - --R AA 1918 o - Mar 1 23s 1 S --R AA 1919 o - F 28 23s 1 S --R AA 1920 o - F 29 23s 1 S --R AA 1921 o - F 28 23s 1 S --R AA 1924 o - Ap 16 23s 1 S --R AA 1924 o - O 14 23s 0 - --R AA 1926 o - Ap 17 23s 1 S --R AA 1926 1929 - O Sat>=1 23s 0 - --R AA 1927 o - Ap 9 23s 1 S --R AA 1928 o - Ap 14 23s 1 S --R AA 1929 o - Ap 20 23s 1 S --R AA 1931 o - Ap 18 23s 1 S --R AA 1931 1932 - O Sat>=1 23s 0 - --R AA 1932 o - Ap 2 23s 1 S --R AA 1934 o - Ap 7 23s 1 S --R AA 1934 1938 - O Sat>=1 23s 0 - --R AA 1935 o - Mar 30 23s 1 S --R AA 1936 o - Ap 18 23s 1 S --R AA 1937 o - Ap 3 23s 1 S --R AA 1938 o - Mar 26 23s 1 S --R AA 1939 o - Ap 15 23s 1 S --R AA 1939 o - N 18 23s 0 - --R AA 1940 o - F 24 23s 1 S --R AA 1940 1941 - O 5 23s 0 - --R AA 1941 o - Ap 5 23s 1 S --R AA 1942 1945 - Mar Sat>=8 23s 1 S --R AA 1942 o - Ap 25 22s 2 M --R AA 1942 o - Au 15 22s 1 S --R AA 1942 1945 - O Sat>=24 23s 0 - --R AA 1943 o - Ap 17 22s 2 M --R AA 1943 1945 - Au Sat>=25 22s 1 S --R AA 1944 1945 - Ap Sat>=21 22s 2 M --R AA 1946 o - Ap Sat>=1 23s 1 S --R AA 1946 o - O Sat>=1 23s 0 - --R AA 1947 1949 - Ap Sun>=1 2s 1 S --R AA 1947 1949 - O Sun>=1 2s 0 - --R AA 1951 1965 - Ap Sun>=1 2s 1 S --R AA 1951 1965 - O Sun>=1 2s 0 - --R AA 1977 o - Mar 27 0s 1 S --R AA 1977 o - S 25 0s 0 - --R AA 1978 1979 - Ap Sun>=1 0s 1 S --R AA 1978 o - O 1 0s 0 - --R AA 1979 1982 - S lastSun 1s 0 - --R AA 1980 o - Mar lastSun 0s 1 S --R AA 1981 1982 - Mar lastSun 1s 1 S --R AA 1983 o - Mar lastSun 2s 1 S -+1 c CE%sT 1918 S 16 3 -+2 O EE%sT 1922 Jun -+1 O CE%sT 1940 Jun 23 2 -+1 c CE%sT 1944 O -+1 O CE%sT 1977 -+1 W- CE%sT 1988 -+1 E CE%sT -+R p 1916 o - Jun 17 23 1 S -+R p 1916 o - N 1 1 0 - -+R p 1917 o - F 28 23s 1 S -+R p 1917 1921 - O 14 23s 0 - -+R p 1918 o - Mar 1 23s 1 S -+R p 1919 o - F 28 23s 1 S -+R p 1920 o - F 29 23s 1 S -+R p 1921 o - F 28 23s 1 S -+R p 1924 o - Ap 16 23s 1 S -+R p 1924 o - O 14 23s 0 - -+R p 1926 o - Ap 17 23s 1 S -+R p 1926 1929 - O Sat>=1 23s 0 - -+R p 1927 o - Ap 9 23s 1 S -+R p 1928 o - Ap 14 23s 1 S -+R p 1929 o - Ap 20 23s 1 S -+R p 1931 o - Ap 18 23s 1 S -+R p 1931 1932 - O Sat>=1 23s 0 - -+R p 1932 o - Ap 2 23s 1 S -+R p 1934 o - Ap 7 23s 1 S -+R p 1934 1938 - O Sat>=1 23s 0 - -+R p 1935 o - Mar 30 23s 1 S -+R p 1936 o - Ap 18 23s 1 S -+R p 1937 o - Ap 3 23s 1 S -+R p 1938 o - Mar 26 23s 1 S -+R p 1939 o - Ap 15 23s 1 S -+R p 1939 o - N 18 23s 0 - -+R p 1940 o - F 24 23s 1 S -+R p 1940 1941 - O 5 23s 0 - -+R p 1941 o - Ap 5 23s 1 S -+R p 1942 1945 - Mar Sat>=8 23s 1 S -+R p 1942 o - Ap 25 22s 2 M -+R p 1942 o - Au 15 22s 1 S -+R p 1942 1945 - O Sat>=24 23s 0 - -+R p 1943 o - Ap 17 22s 2 M -+R p 1943 1945 - Au Sat>=25 22s 1 S -+R p 1944 1945 - Ap Sat>=21 22s 2 M -+R p 1946 o - Ap Sat>=1 23s 1 S -+R p 1946 o - O Sat>=1 23s 0 - -+R p 1947 1949 - Ap Sun>=1 2s 1 S -+R p 1947 1949 - O Sun>=1 2s 0 - -+R p 1951 1965 - Ap Sun>=1 2s 1 S -+R p 1951 1965 - O Sun>=1 2s 0 - -+R p 1977 o - Mar 27 0s 1 S -+R p 1977 o - S 25 0s 0 - -+R p 1978 1979 - Ap Sun>=1 0s 1 S -+R p 1978 o - O 1 0s 0 - -+R p 1979 1982 - S lastSun 1s 0 - -+R p 1980 o - Mar lastSun 0s 1 S -+R p 1981 1982 - Mar lastSun 1s 1 S -+R p 1983 o - Mar lastSun 2s 1 S - Z Europe/Lisbon -0:36:45 - LMT 1884 - -0:36:45 - LMT 1912 Ja 1 0u --0 AA WE%sT 1966 Ap 3 2 -+0 p WE%sT 1966 Ap 3 2 - 1 - CET 1976 S 26 1 --0 AA WE%sT 1983 S 25 1s --0 ' WE%sT 1992 S 27 1s --1 O CE%sT 1996 Mar 31 1u --0 O WE%sT -+0 p WE%sT 1983 S 25 1s -+0 W- WE%sT 1992 S 27 1s -+1 E CE%sT 1996 Mar 31 1u -+0 E WE%sT - Z Atlantic/Azores -1:42:40 - LMT 1884 - -1:54:32 - HMT 1912 Ja 1 2u ---2 AA -02/-01 1942 Ap 25 22s ---2 AA +00 1942 Au 15 22s ---2 AA -02/-01 1943 Ap 17 22s ---2 AA +00 1943 Au 28 22s ---2 AA -02/-01 1944 Ap 22 22s ---2 AA +00 1944 Au 26 22s ---2 AA -02/-01 1945 Ap 21 22s ---2 AA +00 1945 Au 25 22s ---2 AA -02/-01 1966 Ap 3 2 ---1 AA -01/+00 1983 S 25 1s ---1 ' -01/+00 1992 S 27 1s --0 O WE%sT 1993 Mar 28 1u ---1 O -01/+00 -+-2 p -02/-01 1942 Ap 25 22s -+-2 p +00 1942 Au 15 22s -+-2 p -02/-01 1943 Ap 17 22s -+-2 p +00 1943 Au 28 22s -+-2 p -02/-01 1944 Ap 22 22s -+-2 p +00 1944 Au 26 22s -+-2 p -02/-01 1945 Ap 21 22s -+-2 p +00 1945 Au 25 22s -+-2 p -02/-01 1966 Ap 3 2 -+-1 p -01/+00 1983 S 25 1s -+-1 W- -01/+00 1992 S 27 1s -+0 E WE%sT 1993 Mar 28 1u -+-1 E -01/+00 - Z Atlantic/Madeira -1:7:36 - LMT 1884 - -1:7:36 - FMT 1912 Ja 1 1u ---1 AA -01/+00 1942 Ap 25 22s ---1 AA +01 1942 Au 15 22s ---1 AA -01/+00 1943 Ap 17 22s ---1 AA +01 1943 Au 28 22s ---1 AA -01/+00 1944 Ap 22 22s ---1 AA +01 1944 Au 26 22s ---1 AA -01/+00 1945 Ap 21 22s ---1 AA +01 1945 Au 25 22s ---1 AA -01/+00 1966 Ap 3 2 --0 AA WE%sT 1983 S 25 1s --0 O WE%sT --R { 1932 o - May 21 0s 1 S --R { 1932 1939 - O Sun>=1 0s 0 - --R { 1933 1939 - Ap Sun>=2 0s 1 S --R { 1979 o - May 27 0 1 S --R { 1979 o - S lastSun 0 0 - --R { 1980 o - Ap 5 23 1 S --R { 1980 o - S lastSun 1 0 - --R { 1991 1993 - Mar lastSun 0s 1 S --R { 1991 1993 - S lastSun 0s 0 - -+-1 p -01/+00 1942 Ap 25 22s -+-1 p +01 1942 Au 15 22s -+-1 p -01/+00 1943 Ap 17 22s -+-1 p +01 1943 Au 28 22s -+-1 p -01/+00 1944 Ap 22 22s -+-1 p +01 1944 Au 26 22s -+-1 p -01/+00 1945 Ap 21 22s -+-1 p +01 1945 Au 25 22s -+-1 p -01/+00 1966 Ap 3 2 -+0 p WE%sT 1983 S 25 1s -+0 E WE%sT -+R z 1932 o - May 21 0s 1 S -+R z 1932 1939 - O Sun>=1 0s 0 - -+R z 1933 1939 - Ap Sun>=2 0s 1 S -+R z 1979 o - May 27 0 1 S -+R z 1979 o - S lastSun 0 0 - -+R z 1980 o - Ap 5 23 1 S -+R z 1980 o - S lastSun 1 0 - -+R z 1991 1993 - Mar lastSun 0s 1 S -+R z 1991 1993 - S lastSun 0s 0 - - Z Europe/Bucharest 1:44:24 - LMT 1891 O - 1:44:24 - BMT 1931 Jul 24 --2 { EE%sT 1981 Mar 29 2s --2 ( EE%sT 1991 --2 { EE%sT 1994 --2 W EE%sT 1997 --2 O EE%sT -+2 z EE%sT 1981 Mar 29 2s -+2 c EE%sT 1991 -+2 z EE%sT 1994 -+2 e EE%sT 1997 -+2 E EE%sT - Z Europe/Kaliningrad 1:22 - LMT 1893 Ap --1 ( CE%sT 1945 --2 ~ CE%sT 1946 --3 M MSK/MSD 1989 Mar 26 2s --2 M EE%sT 2011 Mar 27 2s -+1 c CE%sT 1945 -+2 O CE%sT 1946 -+3 R MSK/MSD 1989 Mar 26 2s -+2 R EE%sT 2011 Mar 27 2s - 3 - +03 2014 O 26 2s - 2 - EET - Z Europe/Moscow 2:30:17 - LMT 1880 - 2:30:17 - MMT 1916 Jul 3 --2:31:19 M %s 1919 Jul 1 0u --3 M %s 1921 O --3 M MSK/MSD 1922 O -+2:31:19 R %s 1919 Jul 1 0u -+3 R %s 1921 O -+3 R MSK/MSD 1922 O - 2 - EET 1930 Jun 21 --3 M MSK/MSD 1991 Mar 31 2s --2 M EE%sT 1992 Ja 19 2s --3 M MSK/MSD 2011 Mar 27 2s -+3 R MSK/MSD 1991 Mar 31 2s -+2 R EE%sT 1992 Ja 19 2s -+3 R MSK/MSD 2011 Mar 27 2s - 4 - MSK 2014 O 26 2s - 3 - MSK - Z Europe/Simferopol 2:16:24 - LMT 1880 - 2:16 - SMT 1924 May 2 - 2 - EET 1930 Jun 21 - 3 - MSK 1941 N --1 ( CE%sT 1944 Ap 13 --3 M MSK/MSD 1990 -+1 c CE%sT 1944 Ap 13 -+3 R MSK/MSD 1990 - 3 - MSK 1990 Jul 1 2 - 2 - EET 1992 --2 W EE%sT 1994 May --3 W MSK/MSD 1996 Mar 31 0s -+2 e EE%sT 1994 May -+3 e MSK/MSD 1996 Mar 31 0s - 3 1 MSD 1996 O 27 3s --3 M MSK/MSD 1997 -+3 R MSK/MSD 1997 - 3 - MSK 1997 Mar lastSun 1u --2 O EE%sT 2014 Mar 30 2 -+2 E EE%sT 2014 Mar 30 2 - 4 - MSK 2014 O 26 2s - 3 - MSK - Z Europe/Astrakhan 3:12:12 - LMT 1924 May - 3 - +03 1930 Jun 21 --4 M +04/+05 1989 Mar 26 2s --3 M +03/+04 1991 Mar 31 2s -+4 R +04/+05 1989 Mar 26 2s -+3 R +03/+04 1991 Mar 31 2s - 4 - +04 1992 Mar 29 2s --3 M +03/+04 2011 Mar 27 2s -+3 R +03/+04 2011 Mar 27 2s - 4 - +04 2014 O 26 2s - 3 - +03 2016 Mar 27 2s - 4 - +04 - Z Europe/Volgograd 2:57:40 - LMT 1920 Ja 3 - 3 - +03 1930 Jun 21 - 4 - +04 1961 N 11 --4 M +04/+05 1988 Mar 27 2s --3 M +03/+04 1991 Mar 31 2s -+4 R +04/+05 1988 Mar 27 2s -+3 R +03/+04 1991 Mar 31 2s - 4 - +04 1992 Mar 29 2s --3 M +03/+04 2011 Mar 27 2s -+3 R +03/+04 2011 Mar 27 2s - 4 - +04 2014 O 26 2s --3 - +03 -+3 - +03 2018 O 28 2s -+4 - +04 - Z Europe/Saratov 3:4:18 - LMT 1919 Jul 1 0u - 3 - +03 1930 Jun 21 --4 M +04/+05 1988 Mar 27 2s --3 M +03/+04 1991 Mar 31 2s -+4 R +04/+05 1988 Mar 27 2s -+3 R +03/+04 1991 Mar 31 2s - 4 - +04 1992 Mar 29 2s --3 M +03/+04 2011 Mar 27 2s -+3 R +03/+04 2011 Mar 27 2s - 4 - +04 2014 O 26 2s - 3 - +03 2016 D 4 2s - 4 - +04 - Z Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0u - 3 - +03 1930 Jun 21 --4 M +04/+05 1989 Mar 26 2s --3 M +03/+04 1991 Mar 31 2s -+4 R +04/+05 1989 Mar 26 2s -+3 R +03/+04 1991 Mar 31 2s - 4 - +04 1992 Mar 29 2s --3 M +03/+04 2011 Mar 27 2s -+3 R +03/+04 2011 Mar 27 2s - 4 - +04 2014 O 26 2s - 3 - +03 - Z Europe/Samara 3:20:20 - LMT 1919 Jul 1 0u - 3 - +03 1930 Jun 21 - 4 - +04 1935 Ja 27 --4 M +04/+05 1989 Mar 26 2s --3 M +03/+04 1991 Mar 31 2s --2 M +02/+03 1991 S 29 2s -+4 R +04/+05 1989 Mar 26 2s -+3 R +03/+04 1991 Mar 31 2s -+2 R +02/+03 1991 S 29 2s - 3 - +03 1991 O 20 3 --4 M +04/+05 2010 Mar 28 2s --3 M +03/+04 2011 Mar 27 2s -+4 R +04/+05 2010 Mar 28 2s -+3 R +03/+04 2011 Mar 27 2s - 4 - +04 - Z Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0u - 3 - +03 1930 Jun 21 --4 M +04/+05 1989 Mar 26 2s --3 M +03/+04 1991 Mar 31 2s --2 M +02/+03 1992 Ja 19 2s --3 M +03/+04 2011 Mar 27 2s -+4 R +04/+05 1989 Mar 26 2s -+3 R +03/+04 1991 Mar 31 2s -+2 R +02/+03 1992 Ja 19 2s -+3 R +03/+04 2011 Mar 27 2s - 4 - +04 2014 O 26 2s - 3 - +03 2016 Mar 27 2s - 4 - +04 - Z Asia/Yekaterinburg 4:2:33 - LMT 1916 Jul 3 - 3:45:5 - PMT 1919 Jul 15 4 - 4 - +04 1930 Jun 21 --5 M +05/+06 1991 Mar 31 2s --4 M +04/+05 1992 Ja 19 2s --5 M +05/+06 2011 Mar 27 2s -+5 R +05/+06 1991 Mar 31 2s -+4 R +04/+05 1992 Ja 19 2s -+5 R +05/+06 2011 Mar 27 2s - 6 - +06 2014 O 26 2s - 5 - +05 - Z Asia/Omsk 4:53:30 - LMT 1919 N 14 - 5 - +05 1930 Jun 21 --6 M +06/+07 1991 Mar 31 2s --5 M +05/+06 1992 Ja 19 2s --6 M +06/+07 2011 Mar 27 2s -+6 R +06/+07 1991 Mar 31 2s -+5 R +05/+06 1992 Ja 19 2s -+6 R +06/+07 2011 Mar 27 2s - 7 - +07 2014 O 26 2s - 6 - +06 - Z Asia/Barnaul 5:35 - LMT 1919 D 10 - 6 - +06 1930 Jun 21 --7 M +07/+08 1991 Mar 31 2s --6 M +06/+07 1992 Ja 19 2s --7 M +07/+08 1995 May 28 --6 M +06/+07 2011 Mar 27 2s -+7 R +07/+08 1991 Mar 31 2s -+6 R +06/+07 1992 Ja 19 2s -+7 R +07/+08 1995 May 28 -+6 R +06/+07 2011 Mar 27 2s - 7 - +07 2014 O 26 2s - 6 - +06 2016 Mar 27 2s - 7 - +07 - Z Asia/Novosibirsk 5:31:40 - LMT 1919 D 14 6 - 6 - +06 1930 Jun 21 --7 M +07/+08 1991 Mar 31 2s --6 M +06/+07 1992 Ja 19 2s --7 M +07/+08 1993 May 23 --6 M +06/+07 2011 Mar 27 2s -+7 R +07/+08 1991 Mar 31 2s -+6 R +06/+07 1992 Ja 19 2s -+7 R +07/+08 1993 May 23 -+6 R +06/+07 2011 Mar 27 2s - 7 - +07 2014 O 26 2s - 6 - +06 2016 Jul 24 2s - 7 - +07 - Z Asia/Tomsk 5:39:51 - LMT 1919 D 22 - 6 - +06 1930 Jun 21 --7 M +07/+08 1991 Mar 31 2s --6 M +06/+07 1992 Ja 19 2s --7 M +07/+08 2002 May 1 3 --6 M +06/+07 2011 Mar 27 2s -+7 R +07/+08 1991 Mar 31 2s -+6 R +06/+07 1992 Ja 19 2s -+7 R +07/+08 2002 May 1 3 -+6 R +06/+07 2011 Mar 27 2s - 7 - +07 2014 O 26 2s - 6 - +06 2016 May 29 2s - 7 - +07 - Z Asia/Novokuznetsk 5:48:48 - LMT 1924 May - 6 - +06 1930 Jun 21 --7 M +07/+08 1991 Mar 31 2s --6 M +06/+07 1992 Ja 19 2s --7 M +07/+08 2010 Mar 28 2s --6 M +06/+07 2011 Mar 27 2s -+7 R +07/+08 1991 Mar 31 2s -+6 R +06/+07 1992 Ja 19 2s -+7 R +07/+08 2010 Mar 28 2s -+6 R +06/+07 2011 Mar 27 2s - 7 - +07 - Z Asia/Krasnoyarsk 6:11:26 - LMT 1920 Ja 6 - 6 - +06 1930 Jun 21 --7 M +07/+08 1991 Mar 31 2s --6 M +06/+07 1992 Ja 19 2s --7 M +07/+08 2011 Mar 27 2s -+7 R +07/+08 1991 Mar 31 2s -+6 R +06/+07 1992 Ja 19 2s -+7 R +07/+08 2011 Mar 27 2s - 8 - +08 2014 O 26 2s - 7 - +07 - Z Asia/Irkutsk 6:57:5 - LMT 1880 - 6:57:5 - IMT 1920 Ja 25 - 7 - +07 1930 Jun 21 --8 M +08/+09 1991 Mar 31 2s --7 M +07/+08 1992 Ja 19 2s --8 M +08/+09 2011 Mar 27 2s -+8 R +08/+09 1991 Mar 31 2s -+7 R +07/+08 1992 Ja 19 2s -+8 R +08/+09 2011 Mar 27 2s - 9 - +09 2014 O 26 2s - 8 - +08 - Z Asia/Chita 7:33:52 - LMT 1919 D 15 - 8 - +08 1930 Jun 21 --9 M +09/+10 1991 Mar 31 2s --8 M +08/+09 1992 Ja 19 2s --9 M +09/+10 2011 Mar 27 2s -+9 R +09/+10 1991 Mar 31 2s -+8 R +08/+09 1992 Ja 19 2s -+9 R +09/+10 2011 Mar 27 2s - 10 - +10 2014 O 26 2s - 8 - +08 2016 Mar 27 2 - 9 - +09 - Z Asia/Yakutsk 8:38:58 - LMT 1919 D 15 - 8 - +08 1930 Jun 21 --9 M +09/+10 1991 Mar 31 2s --8 M +08/+09 1992 Ja 19 2s --9 M +09/+10 2011 Mar 27 2s -+9 R +09/+10 1991 Mar 31 2s -+8 R +08/+09 1992 Ja 19 2s -+9 R +09/+10 2011 Mar 27 2s - 10 - +10 2014 O 26 2s - 9 - +09 - Z Asia/Vladivostok 8:47:31 - LMT 1922 N 15 - 9 - +09 1930 Jun 21 --10 M +10/+11 1991 Mar 31 2s --9 M +09/+10 1992 Ja 19 2s --10 M +10/+11 2011 Mar 27 2s -+10 R +10/+11 1991 Mar 31 2s -+9 R +09/+10 1992 Ja 19 2s -+10 R +10/+11 2011 Mar 27 2s - 11 - +11 2014 O 26 2s - 10 - +10 - Z Asia/Khandyga 9:2:13 - LMT 1919 D 15 - 8 - +08 1930 Jun 21 --9 M +09/+10 1991 Mar 31 2s --8 M +08/+09 1992 Ja 19 2s --9 M +09/+10 2004 --10 M +10/+11 2011 Mar 27 2s -+9 R +09/+10 1991 Mar 31 2s -+8 R +08/+09 1992 Ja 19 2s -+9 R +09/+10 2004 -+10 R +10/+11 2011 Mar 27 2s - 11 - +11 2011 S 13 0s - 10 - +10 2014 O 26 2s - 9 - +09 - Z Asia/Sakhalin 9:30:48 - LMT 1905 Au 23 - 9 - +09 1945 Au 25 --11 M +11/+12 1991 Mar 31 2s --10 M +10/+11 1992 Ja 19 2s --11 M +11/+12 1997 Mar lastSun 2s --10 M +10/+11 2011 Mar 27 2s -+11 R +11/+12 1991 Mar 31 2s -+10 R +10/+11 1992 Ja 19 2s -+11 R +11/+12 1997 Mar lastSun 2s -+10 R +10/+11 2011 Mar 27 2s - 11 - +11 2014 O 26 2s - 10 - +10 2016 Mar 27 2s - 11 - +11 - Z Asia/Magadan 10:3:12 - LMT 1924 May 2 - 10 - +10 1930 Jun 21 --11 M +11/+12 1991 Mar 31 2s --10 M +10/+11 1992 Ja 19 2s --11 M +11/+12 2011 Mar 27 2s -+11 R +11/+12 1991 Mar 31 2s -+10 R +10/+11 1992 Ja 19 2s -+11 R +11/+12 2011 Mar 27 2s - 12 - +12 2014 O 26 2s - 10 - +10 2016 Ap 24 2s - 11 - +11 - Z Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2 - 10 - +10 1930 Jun 21 --11 M +11/+12 1991 Mar 31 2s --10 M +10/+11 1992 Ja 19 2s --11 M +11/+12 2011 Mar 27 2s -+11 R +11/+12 1991 Mar 31 2s -+10 R +10/+11 1992 Ja 19 2s -+11 R +11/+12 2011 Mar 27 2s - 12 - +12 2014 O 26 2s - 11 - +11 - Z Asia/Ust-Nera 9:32:54 - LMT 1919 D 15 - 8 - +08 1930 Jun 21 --9 M +09/+10 1981 Ap --11 M +11/+12 1991 Mar 31 2s --10 M +10/+11 1992 Ja 19 2s --11 M +11/+12 2011 Mar 27 2s -+9 R +09/+10 1981 Ap -+11 R +11/+12 1991 Mar 31 2s -+10 R +10/+11 1992 Ja 19 2s -+11 R +11/+12 2011 Mar 27 2s - 12 - +12 2011 S 13 0s - 11 - +11 2014 O 26 2s - 10 - +10 - Z Asia/Kamchatka 10:34:36 - LMT 1922 N 10 - 11 - +11 1930 Jun 21 --12 M +12/+13 1991 Mar 31 2s --11 M +11/+12 1992 Ja 19 2s --12 M +12/+13 2010 Mar 28 2s --11 M +11/+12 2011 Mar 27 2s -+12 R +12/+13 1991 Mar 31 2s -+11 R +11/+12 1992 Ja 19 2s -+12 R +12/+13 2010 Mar 28 2s -+11 R +11/+12 2011 Mar 27 2s - 12 - +12 - Z Asia/Anadyr 11:49:56 - LMT 1924 May 2 - 12 - +12 1930 Jun 21 --13 M +13/+14 1982 Ap 1 0s --12 M +12/+13 1991 Mar 31 2s --11 M +11/+12 1992 Ja 19 2s --12 M +12/+13 2010 Mar 28 2s --11 M +11/+12 2011 Mar 27 2s -+13 R +13/+14 1982 Ap 1 0s -+12 R +12/+13 1991 Mar 31 2s -+11 R +11/+12 1992 Ja 19 2s -+12 R +12/+13 2010 Mar 28 2s -+11 R +11/+12 2011 Mar 27 2s - 12 - +12 - Z Europe/Belgrade 1:22 - LMT 1884 - 1 - CET 1941 Ap 18 23 --1 ( CE%sT 1945 -+1 c CE%sT 1945 - 1 - CET 1945 May 8 2s - 1 1 CEST 1945 S 16 2s - 1 - CET 1982 N 27 --1 O CE%sT -+1 E CE%sT - Li Europe/Belgrade Europe/Ljubljana - Li Europe/Belgrade Europe/Podgorica - Li Europe/Belgrade Europe/Sarajevo - Li Europe/Belgrade Europe/Skopje - Li Europe/Belgrade Europe/Zagreb - Li Europe/Prague Europe/Bratislava --R AB 1918 o - Ap 15 23 1 S --R AB 1918 1919 - O 6 24s 0 - --R AB 1919 o - Ap 6 23 1 S --R AB 1924 o - Ap 16 23 1 S --R AB 1924 o - O 4 24s 0 - --R AB 1926 o - Ap 17 23 1 S --R AB 1926 1929 - O Sat>=1 24s 0 - --R AB 1927 o - Ap 9 23 1 S --R AB 1928 o - Ap 15 0 1 S --R AB 1929 o - Ap 20 23 1 S --R AB 1937 o - Jun 16 23 1 S --R AB 1937 o - O 2 24s 0 - --R AB 1938 o - Ap 2 23 1 S --R AB 1938 o - Ap 30 23 2 M --R AB 1938 o - O 2 24 1 S --R AB 1939 o - O 7 24s 0 - --R AB 1942 o - May 2 23 1 S --R AB 1942 o - S 1 1 0 - --R AB 1943 1946 - Ap Sat>=13 23 1 S --R AB 1943 1944 - O Sun>=1 1 0 - --R AB 1945 1946 - S lastSun 1 0 - --R AB 1949 o - Ap 30 23 1 S --R AB 1949 o - O 2 1 0 - --R AB 1974 1975 - Ap Sat>=12 23 1 S --R AB 1974 1975 - O Sun>=1 1 0 - --R AB 1976 o - Mar 27 23 1 S --R AB 1976 1977 - S lastSun 1 0 - --R AB 1977 o - Ap 2 23 1 S --R AB 1978 o - Ap 2 2s 1 S --R AB 1978 o - O 1 2s 0 - --R AC 1967 o - Jun 3 12 1 S --R AC 1967 o - O 1 0 0 - --R AC 1974 o - Jun 24 0 1 S --R AC 1974 o - S 1 0 0 - --R AC 1976 1977 - May 1 0 1 S --R AC 1976 o - Au 1 0 0 - --R AC 1977 o - S 28 0 0 - --R AC 1978 o - Jun 1 0 1 S --R AC 1978 o - Au 4 0 0 - -+R s 1918 o - Ap 15 23 1 S -+R s 1918 1919 - O 6 24s 0 - -+R s 1919 o - Ap 6 23 1 S -+R s 1924 o - Ap 16 23 1 S -+R s 1924 o - O 4 24s 0 - -+R s 1926 o - Ap 17 23 1 S -+R s 1926 1929 - O Sat>=1 24s 0 - -+R s 1927 o - Ap 9 23 1 S -+R s 1928 o - Ap 15 0 1 S -+R s 1929 o - Ap 20 23 1 S -+R s 1937 o - Jun 16 23 1 S -+R s 1937 o - O 2 24s 0 - -+R s 1938 o - Ap 2 23 1 S -+R s 1938 o - Ap 30 23 2 M -+R s 1938 o - O 2 24 1 S -+R s 1939 o - O 7 24s 0 - -+R s 1942 o - May 2 23 1 S -+R s 1942 o - S 1 1 0 - -+R s 1943 1946 - Ap Sat>=13 23 1 S -+R s 1943 1944 - O Sun>=1 1 0 - -+R s 1945 1946 - S lastSun 1 0 - -+R s 1949 o - Ap 30 23 1 S -+R s 1949 o - O 2 1 0 - -+R s 1974 1975 - Ap Sat>=12 23 1 S -+R s 1974 1975 - O Sun>=1 1 0 - -+R s 1976 o - Mar 27 23 1 S -+R s 1976 1977 - S lastSun 1 0 - -+R s 1977 o - Ap 2 23 1 S -+R s 1978 o - Ap 2 2s 1 S -+R s 1978 o - O 1 2s 0 - - Z Europe/Madrid -0:14:44 - LMT 1900 D 31 23:45:16 --0 AB WE%sT 1940 Mar 16 23 --1 AB CE%sT 1979 --1 O CE%sT -+0 s WE%sT 1940 Mar 16 23 -+1 s CE%sT 1979 -+1 E CE%sT - Z Africa/Ceuta -0:21:16 - LMT 1900 D 31 23:38:44 - 0 - WET 1918 May 6 23 - 0 1 WEST 1918 O 7 23 - 0 - WET 1924 --0 AB WE%sT 1929 --0 AC WE%sT 1984 Mar 16 -+0 s WE%sT 1929 -+0 - WET 1967 -+0 M WE%sT 1984 Mar 16 - 1 - CET 1986 --1 O CE%sT -+1 E CE%sT - Z Atlantic/Canary -1:1:36 - LMT 1922 Mar - -1 - -01 1946 S 30 1 - 0 - WET 1980 Ap 6 0s - 0 1 WEST 1980 S 28 1u --0 O WE%sT -+0 E WE%sT - Z Europe/Stockholm 1:12:12 - LMT 1879 - 1:0:14 - SET 1900 - 1 - CET 1916 May 14 23 - 1 1 CEST 1916 O 1 1 - 1 - CET 1980 --1 O CE%sT --R AD 1941 1942 - May M>=1 1 1 S --R AD 1941 1942 - O M>=1 2 0 - -+1 E CE%sT -+R CH 1941 1942 - May M>=1 1 1 S -+R CH 1941 1942 - O M>=1 2 0 - - Z Europe/Zurich 0:34:8 - LMT 1853 Jul 16 - 0:29:46 - BMT 1894 Jun --1 AD CE%sT 1981 --1 O CE%sT --R AE 1916 o - May 1 0 1 S --R AE 1916 o - O 1 0 0 - --R AE 1920 o - Mar 28 0 1 S --R AE 1920 o - O 25 0 0 - --R AE 1921 o - Ap 3 0 1 S --R AE 1921 o - O 3 0 0 - --R AE 1922 o - Mar 26 0 1 S --R AE 1922 o - O 8 0 0 - --R AE 1924 o - May 13 0 1 S --R AE 1924 1925 - O 1 0 0 - --R AE 1925 o - May 1 0 1 S --R AE 1940 o - Jun 30 0 1 S --R AE 1940 o - O 5 0 0 - --R AE 1940 o - D 1 0 1 S --R AE 1941 o - S 21 0 0 - --R AE 1942 o - Ap 1 0 1 S --R AE 1942 o - N 1 0 0 - --R AE 1945 o - Ap 2 0 1 S --R AE 1945 o - O 8 0 0 - --R AE 1946 o - Jun 1 0 1 S --R AE 1946 o - O 1 0 0 - --R AE 1947 1948 - Ap Sun>=16 0 1 S --R AE 1947 1950 - O Sun>=2 0 0 - --R AE 1949 o - Ap 10 0 1 S --R AE 1950 o - Ap 19 0 1 S --R AE 1951 o - Ap 22 0 1 S --R AE 1951 o - O 8 0 0 - --R AE 1962 o - Jul 15 0 1 S --R AE 1962 o - O 8 0 0 - --R AE 1964 o - May 15 0 1 S --R AE 1964 o - O 1 0 0 - --R AE 1970 1972 - May Sun>=2 0 1 S --R AE 1970 1972 - O Sun>=2 0 0 - --R AE 1973 o - Jun 3 1 1 S --R AE 1973 o - N 4 3 0 - --R AE 1974 o - Mar 31 2 1 S --R AE 1974 o - N 3 5 0 - --R AE 1975 o - Mar 30 0 1 S --R AE 1975 1976 - O lastSun 0 0 - --R AE 1976 o - Jun 1 0 1 S --R AE 1977 1978 - Ap Sun>=1 0 1 S --R AE 1977 o - O 16 0 0 - --R AE 1979 1980 - Ap Sun>=1 3 1 S --R AE 1979 1982 - O M>=11 0 0 - --R AE 1981 1982 - Mar lastSun 3 1 S --R AE 1983 o - Jul 31 0 1 S --R AE 1983 o - O 2 0 0 - --R AE 1985 o - Ap 20 0 1 S --R AE 1985 o - S 28 0 0 - --R AE 1986 1993 - Mar lastSun 1s 1 S --R AE 1986 1995 - S lastSun 1s 0 - --R AE 1994 o - Mar 20 1s 1 S --R AE 1995 2006 - Mar lastSun 1s 1 S --R AE 1996 2006 - O lastSun 1s 0 - -+1 CH CE%sT 1981 -+1 E CE%sT -+R T 1916 o - May 1 0 1 S -+R T 1916 o - O 1 0 0 - -+R T 1920 o - Mar 28 0 1 S -+R T 1920 o - O 25 0 0 - -+R T 1921 o - Ap 3 0 1 S -+R T 1921 o - O 3 0 0 - -+R T 1922 o - Mar 26 0 1 S -+R T 1922 o - O 8 0 0 - -+R T 1924 o - May 13 0 1 S -+R T 1924 1925 - O 1 0 0 - -+R T 1925 o - May 1 0 1 S -+R T 1940 o - Jun 30 0 1 S -+R T 1940 o - O 5 0 0 - -+R T 1940 o - D 1 0 1 S -+R T 1941 o - S 21 0 0 - -+R T 1942 o - Ap 1 0 1 S -+R T 1942 o - N 1 0 0 - -+R T 1945 o - Ap 2 0 1 S -+R T 1945 o - O 8 0 0 - -+R T 1946 o - Jun 1 0 1 S -+R T 1946 o - O 1 0 0 - -+R T 1947 1948 - Ap Sun>=16 0 1 S -+R T 1947 1950 - O Sun>=2 0 0 - -+R T 1949 o - Ap 10 0 1 S -+R T 1950 o - Ap 19 0 1 S -+R T 1951 o - Ap 22 0 1 S -+R T 1951 o - O 8 0 0 - -+R T 1962 o - Jul 15 0 1 S -+R T 1962 o - O 8 0 0 - -+R T 1964 o - May 15 0 1 S -+R T 1964 o - O 1 0 0 - -+R T 1970 1972 - May Sun>=2 0 1 S -+R T 1970 1972 - O Sun>=2 0 0 - -+R T 1973 o - Jun 3 1 1 S -+R T 1973 o - N 4 3 0 - -+R T 1974 o - Mar 31 2 1 S -+R T 1974 o - N 3 5 0 - -+R T 1975 o - Mar 30 0 1 S -+R T 1975 1976 - O lastSun 0 0 - -+R T 1976 o - Jun 1 0 1 S -+R T 1977 1978 - Ap Sun>=1 0 1 S -+R T 1977 o - O 16 0 0 - -+R T 1979 1980 - Ap Sun>=1 3 1 S -+R T 1979 1982 - O M>=11 0 0 - -+R T 1981 1982 - Mar lastSun 3 1 S -+R T 1983 o - Jul 31 0 1 S -+R T 1983 o - O 2 0 0 - -+R T 1985 o - Ap 20 0 1 S -+R T 1985 o - S 28 0 0 - -+R T 1986 1993 - Mar lastSun 1s 1 S -+R T 1986 1995 - S lastSun 1s 0 - -+R T 1994 o - Mar 20 1s 1 S -+R T 1995 2006 - Mar lastSun 1s 1 S -+R T 1996 2006 - O lastSun 1s 0 - - Z Europe/Istanbul 1:55:52 - LMT 1880 - 1:56:56 - IMT 1910 O --2 AE EE%sT 1978 O 15 --3 AE +03/+04 1985 Ap 20 --2 AE EE%sT 2007 --2 O EE%sT 2011 Mar 27 1u -+2 T EE%sT 1978 O 15 -+3 T +03/+04 1985 Ap 20 -+2 T EE%sT 2007 -+2 E EE%sT 2011 Mar 27 1u - 2 - EET 2011 Mar 28 1u --2 O EE%sT 2014 Mar 30 1u -+2 E EE%sT 2014 Mar 30 1u - 2 - EET 2014 Mar 31 1u --2 O EE%sT 2015 O 25 1u -+2 E EE%sT 2015 O 25 1u - 2 1 EEST 2015 N 8 1u --2 O EE%sT 2016 S 7 -+2 E EE%sT 2016 S 7 - 3 - +03 - Li Europe/Istanbul Asia/Istanbul - Z Europe/Kiev 2:2:4 - LMT 1880 - 2:2:4 - KMT 1924 May 2 - 2 - EET 1930 Jun 21 - 3 - MSK 1941 S 20 --1 ( CE%sT 1943 N 6 --3 M MSK/MSD 1990 Jul 1 2 -+1 c CE%sT 1943 N 6 -+3 R MSK/MSD 1990 Jul 1 2 - 2 1 EEST 1991 S 29 3 --2 W EE%sT 1995 --2 O EE%sT -+2 e EE%sT 1995 -+2 E EE%sT - Z Europe/Uzhgorod 1:29:12 - LMT 1890 O - 1 - CET 1940 --1 ( CE%sT 1944 O -+1 c CE%sT 1944 O - 1 1 CEST 1944 O 26 - 1 - CET 1945 Jun 29 --3 M MSK/MSD 1990 -+3 R MSK/MSD 1990 - 3 - MSK 1990 Jul 1 2 - 1 - CET 1991 Mar 31 3 - 2 - EET 1992 --2 W EE%sT 1995 --2 O EE%sT -+2 e EE%sT 1995 -+2 E EE%sT - Z Europe/Zaporozhye 2:20:40 - LMT 1880 - 2:20 - +0220 1924 May 2 - 2 - EET 1930 Jun 21 - 3 - MSK 1941 Au 25 --1 ( CE%sT 1943 O 25 --3 M MSK/MSD 1991 Mar 31 2 --2 W EE%sT 1995 --2 O EE%sT --R AF 1918 1919 - Mar lastSun 2 1 D --R AF 1918 1919 - O lastSun 2 0 S --R AF 1942 o - F 9 2 1 W --R AF 1945 o - Au 14 23u 1 P --R AF 1945 o - S lastSun 2 0 S --R AF 1967 2006 - O lastSun 2 0 S --R AF 1967 1973 - Ap lastSun 2 1 D --R AF 1974 o - Ja 6 2 1 D --R AF 1975 o - F 23 2 1 D --R AF 1976 1986 - Ap lastSun 2 1 D --R AF 1987 2006 - Ap Sun>=1 2 1 D --R AF 2007 ma - Mar Sun>=8 2 1 D --R AF 2007 ma - N Sun>=1 2 0 S -+1 c CE%sT 1943 O 25 -+3 R MSK/MSD 1991 Mar 31 2 -+2 e EE%sT 1995 -+2 E EE%sT -+R u 1918 1919 - Mar lastSun 2 1 D -+R u 1918 1919 - O lastSun 2 0 S -+R u 1942 o - F 9 2 1 W -+R u 1945 o - Au 14 23u 1 P -+R u 1945 o - S lastSun 2 0 S -+R u 1967 2006 - O lastSun 2 0 S -+R u 1967 1973 - Ap lastSun 2 1 D -+R u 1974 o - Ja 6 2 1 D -+R u 1975 o - F 23 2 1 D -+R u 1976 1986 - Ap lastSun 2 1 D -+R u 1987 2006 - Ap Sun>=1 2 1 D -+R u 2007 ma - Mar Sun>=8 2 1 D -+R u 2007 ma - N Sun>=1 2 0 S - Z EST -5 - EST - Z MST -7 - MST - Z HST -10 - HST --Z EST5EDT -5 AF E%sT --Z CST6CDT -6 AF C%sT --Z MST7MDT -7 AF M%sT --Z PST8PDT -8 AF P%sT --R AG 1920 o - Mar lastSun 2 1 D --R AG 1920 o - O lastSun 2 0 S --R AG 1921 1966 - Ap lastSun 2 1 D --R AG 1921 1954 - S lastSun 2 0 S --R AG 1955 1966 - O lastSun 2 0 S -+Z EST5EDT -5 u E%sT -+Z CST6CDT -6 u C%sT -+Z MST7MDT -7 u M%sT -+Z PST8PDT -8 u P%sT -+R NY 1920 o - Mar lastSun 2 1 D -+R NY 1920 o - O lastSun 2 0 S -+R NY 1921 1966 - Ap lastSun 2 1 D -+R NY 1921 1954 - S lastSun 2 0 S -+R NY 1955 1966 - O lastSun 2 0 S - Z America/New_York -4:56:2 - LMT 1883 N 18 12:3:58 ---5 AF E%sT 1920 ---5 AG E%sT 1942 ---5 AF E%sT 1946 ---5 AG E%sT 1967 ---5 AF E%sT --R AH 1920 o - Jun 13 2 1 D --R AH 1920 1921 - O lastSun 2 0 S --R AH 1921 o - Mar lastSun 2 1 D --R AH 1922 1966 - Ap lastSun 2 1 D --R AH 1922 1954 - S lastSun 2 0 S --R AH 1955 1966 - O lastSun 2 0 S -+-5 u E%sT 1920 -+-5 NY E%sT 1942 -+-5 u E%sT 1946 -+-5 NY E%sT 1967 -+-5 u E%sT -+R Ch 1920 o - Jun 13 2 1 D -+R Ch 1920 1921 - O lastSun 2 0 S -+R Ch 1921 o - Mar lastSun 2 1 D -+R Ch 1922 1966 - Ap lastSun 2 1 D -+R Ch 1922 1954 - S lastSun 2 0 S -+R Ch 1955 1966 - O lastSun 2 0 S - Z America/Chicago -5:50:36 - LMT 1883 N 18 12:9:24 ---6 AF C%sT 1920 ---6 AH C%sT 1936 Mar 1 2 -+-6 u C%sT 1920 -+-6 Ch C%sT 1936 Mar 1 2 - -5 - EST 1936 N 15 2 ---6 AH C%sT 1942 ---6 AF C%sT 1946 ---6 AH C%sT 1967 ---6 AF C%sT -+-6 Ch C%sT 1942 -+-6 u C%sT 1946 -+-6 Ch C%sT 1967 -+-6 u C%sT - Z America/North_Dakota/Center -6:45:12 - LMT 1883 N 18 12:14:48 ---7 AF M%sT 1992 O 25 2 ---6 AF C%sT -+-7 u M%sT 1992 O 25 2 -+-6 u C%sT - Z America/North_Dakota/New_Salem -6:45:39 - LMT 1883 N 18 12:14:21 ---7 AF M%sT 2003 O 26 2 ---6 AF C%sT -+-7 u M%sT 2003 O 26 2 -+-6 u C%sT - Z America/North_Dakota/Beulah -6:47:7 - LMT 1883 N 18 12:12:53 ---7 AF M%sT 2010 N 7 2 ---6 AF C%sT --R AI 1920 1921 - Mar lastSun 2 1 D --R AI 1920 o - O lastSun 2 0 S --R AI 1921 o - May 22 2 0 S --R AI 1965 1966 - Ap lastSun 2 1 D --R AI 1965 1966 - O lastSun 2 0 S -+-7 u M%sT 2010 N 7 2 -+-6 u C%sT -+R De 1920 1921 - Mar lastSun 2 1 D -+R De 1920 o - O lastSun 2 0 S -+R De 1921 o - May 22 2 0 S -+R De 1965 1966 - Ap lastSun 2 1 D -+R De 1965 1966 - O lastSun 2 0 S - Z America/Denver -6:59:56 - LMT 1883 N 18 12:0:4 ---7 AF M%sT 1920 ---7 AI M%sT 1942 ---7 AF M%sT 1946 ---7 AI M%sT 1967 ---7 AF M%sT --R AJ 1948 o - Mar 14 2:1 1 D --R AJ 1949 o - Ja 1 2 0 S --R AJ 1950 1966 - Ap lastSun 1 1 D --R AJ 1950 1961 - S lastSun 2 0 S --R AJ 1962 1966 - O lastSun 2 0 S -+-7 u M%sT 1920 -+-7 De M%sT 1942 -+-7 u M%sT 1946 -+-7 De M%sT 1967 -+-7 u M%sT -+R CA 1948 o - Mar 14 2:1 1 D -+R CA 1949 o - Ja 1 2 0 S -+R CA 1950 1966 - Ap lastSun 1 1 D -+R CA 1950 1961 - S lastSun 2 0 S -+R CA 1962 1966 - O lastSun 2 0 S - Z America/Los_Angeles -7:52:58 - LMT 1883 N 18 12:7:2 ---8 AF P%sT 1946 ---8 AJ P%sT 1967 ---8 AF P%sT -+-8 u P%sT 1946 -+-8 CA P%sT 1967 -+-8 u P%sT - Z America/Juneau 15:2:19 - LMT 1867 O 19 15:33:32 - -8:57:41 - LMT 1900 Au 20 12 - -8 - PST 1942 ---8 AF P%sT 1946 -+-8 u P%sT 1946 - -8 - PST 1969 ---8 AF P%sT 1980 Ap 27 2 ---9 AF Y%sT 1980 O 26 2 ---8 AF P%sT 1983 O 30 2 ---9 AF Y%sT 1983 N 30 ---9 AF AK%sT -+-8 u P%sT 1980 Ap 27 2 -+-9 u Y%sT 1980 O 26 2 -+-8 u P%sT 1983 O 30 2 -+-9 u Y%sT 1983 N 30 -+-9 u AK%sT - Z America/Sitka 14:58:47 - LMT 1867 O 19 15:30 - -9:1:13 - LMT 1900 Au 20 12 - -8 - PST 1942 ---8 AF P%sT 1946 -+-8 u P%sT 1946 - -8 - PST 1969 ---8 AF P%sT 1983 O 30 2 ---9 AF Y%sT 1983 N 30 ---9 AF AK%sT -+-8 u P%sT 1983 O 30 2 -+-9 u Y%sT 1983 N 30 -+-9 u AK%sT - Z America/Metlakatla 15:13:42 - LMT 1867 O 19 15:44:55 - -8:46:18 - LMT 1900 Au 20 12 - -8 - PST 1942 ---8 AF P%sT 1946 -+-8 u P%sT 1946 - -8 - PST 1969 ---8 AF P%sT 1983 O 30 2 -+-8 u P%sT 1983 O 30 2 - -8 - PST 2015 N 1 2 ---9 AF AK%sT -+-9 u AK%sT - Z America/Yakutat 14:41:5 - LMT 1867 O 19 15:12:18 - -9:18:55 - LMT 1900 Au 20 12 - -9 - YST 1942 ---9 AF Y%sT 1946 -+-9 u Y%sT 1946 - -9 - YST 1969 ---9 AF Y%sT 1983 N 30 ---9 AF AK%sT -+-9 u Y%sT 1983 N 30 -+-9 u AK%sT - Z America/Anchorage 14:0:24 - LMT 1867 O 19 14:31:37 - -9:59:36 - LMT 1900 Au 20 12 - -10 - AST 1942 ---10 AF A%sT 1967 Ap -+-10 u A%sT 1967 Ap - -10 - AHST 1969 ---10 AF AH%sT 1983 O 30 2 ---9 AF Y%sT 1983 N 30 ---9 AF AK%sT -+-10 u AH%sT 1983 O 30 2 -+-9 u Y%sT 1983 N 30 -+-9 u AK%sT - Z America/Nome 12:58:22 - LMT 1867 O 19 13:29:35 - -11:1:38 - LMT 1900 Au 20 12 - -11 - NST 1942 ---11 AF N%sT 1946 -+-11 u N%sT 1946 - -11 - NST 1967 Ap - -11 - BST 1969 ---11 AF B%sT 1983 O 30 2 ---9 AF Y%sT 1983 N 30 ---9 AF AK%sT -+-11 u B%sT 1983 O 30 2 -+-9 u Y%sT 1983 N 30 -+-9 u AK%sT - Z America/Adak 12:13:22 - LMT 1867 O 19 12:44:35 - -11:46:38 - LMT 1900 Au 20 12 - -11 - NST 1942 ---11 AF N%sT 1946 -+-11 u N%sT 1946 - -11 - NST 1967 Ap - -11 - BST 1969 ---11 AF B%sT 1983 O 30 2 ---10 AF AH%sT 1983 N 30 ---10 AF H%sT -+-11 u B%sT 1983 O 30 2 -+-10 u AH%sT 1983 N 30 -+-10 u H%sT - Z Pacific/Honolulu -10:31:26 - LMT 1896 Ja 13 12 - -10:30 - HST 1933 Ap 30 2 - -10:30 1 HDT 1933 May 21 12 -@@ -2683,531 +2700,531 @@ Z Pacific/Honolulu -10:31:26 - LMT 1896 Ja 13 12 - -10:30 - HST 1947 Jun 8 2 - -10 - HST - Z America/Phoenix -7:28:18 - LMT 1883 N 18 11:31:42 ---7 AF M%sT 1944 Ja 1 0:1 -+-7 u M%sT 1944 Ja 1 0:1 - -7 - MST 1944 Ap 1 0:1 ---7 AF M%sT 1944 O 1 0:1 -+-7 u M%sT 1944 O 1 0:1 - -7 - MST 1967 ---7 AF M%sT 1968 Mar 21 -+-7 u M%sT 1968 Mar 21 - -7 - MST - Z America/Boise -7:44:49 - LMT 1883 N 18 12:15:11 ---8 AF P%sT 1923 May 13 2 ---7 AF M%sT 1974 -+-8 u P%sT 1923 May 13 2 -+-7 u M%sT 1974 - -7 - MST 1974 F 3 2 ---7 AF M%sT --R AK 1941 o - Jun 22 2 1 D --R AK 1941 1954 - S lastSun 2 0 S --R AK 1946 1954 - Ap lastSun 2 1 D -+-7 u M%sT -+R In 1941 o - Jun 22 2 1 D -+R In 1941 1954 - S lastSun 2 0 S -+R In 1946 1954 - Ap lastSun 2 1 D - Z America/Indiana/Indianapolis -5:44:38 - LMT 1883 N 18 12:15:22 ---6 AF C%sT 1920 ---6 AK C%sT 1942 ---6 AF C%sT 1946 ---6 AK C%sT 1955 Ap 24 2 -+-6 u C%sT 1920 -+-6 In C%sT 1942 -+-6 u C%sT 1946 -+-6 In C%sT 1955 Ap 24 2 - -5 - EST 1957 S 29 2 - -6 - CST 1958 Ap 27 2 - -5 - EST 1969 ---5 AF E%sT 1971 -+-5 u E%sT 1971 - -5 - EST 2006 ---5 AF E%sT --R AL 1951 o - Ap lastSun 2 1 D --R AL 1951 o - S lastSun 2 0 S --R AL 1954 1960 - Ap lastSun 2 1 D --R AL 1954 1960 - S lastSun 2 0 S -+-5 u E%sT -+R Ma 1951 o - Ap lastSun 2 1 D -+R Ma 1951 o - S lastSun 2 0 S -+R Ma 1954 1960 - Ap lastSun 2 1 D -+R Ma 1954 1960 - S lastSun 2 0 S - Z America/Indiana/Marengo -5:45:23 - LMT 1883 N 18 12:14:37 ---6 AF C%sT 1951 ---6 AL C%sT 1961 Ap 30 2 -+-6 u C%sT 1951 -+-6 Ma C%sT 1961 Ap 30 2 - -5 - EST 1969 ---5 AF E%sT 1974 Ja 6 2 -+-5 u E%sT 1974 Ja 6 2 - -6 1 CDT 1974 O 27 2 ---5 AF E%sT 1976 -+-5 u E%sT 1976 - -5 - EST 2006 ---5 AF E%sT --R AM 1946 o - Ap lastSun 2 1 D --R AM 1946 o - S lastSun 2 0 S --R AM 1953 1954 - Ap lastSun 2 1 D --R AM 1953 1959 - S lastSun 2 0 S --R AM 1955 o - May 1 0 1 D --R AM 1956 1963 - Ap lastSun 2 1 D --R AM 1960 o - O lastSun 2 0 S --R AM 1961 o - S lastSun 2 0 S --R AM 1962 1963 - O lastSun 2 0 S -+-5 u E%sT -+R V 1946 o - Ap lastSun 2 1 D -+R V 1946 o - S lastSun 2 0 S -+R V 1953 1954 - Ap lastSun 2 1 D -+R V 1953 1959 - S lastSun 2 0 S -+R V 1955 o - May 1 0 1 D -+R V 1956 1963 - Ap lastSun 2 1 D -+R V 1960 o - O lastSun 2 0 S -+R V 1961 o - S lastSun 2 0 S -+R V 1962 1963 - O lastSun 2 0 S - Z America/Indiana/Vincennes -5:50:7 - LMT 1883 N 18 12:9:53 ---6 AF C%sT 1946 ---6 AM C%sT 1964 Ap 26 2 -+-6 u C%sT 1946 -+-6 V C%sT 1964 Ap 26 2 - -5 - EST 1969 ---5 AF E%sT 1971 -+-5 u E%sT 1971 - -5 - EST 2006 Ap 2 2 ---6 AF C%sT 2007 N 4 2 ---5 AF E%sT --R AN 1946 o - Ap lastSun 2 1 D --R AN 1946 o - S lastSun 2 0 S --R AN 1953 1954 - Ap lastSun 2 1 D --R AN 1953 1959 - S lastSun 2 0 S --R AN 1955 o - May 1 0 1 D --R AN 1956 1963 - Ap lastSun 2 1 D --R AN 1960 o - O lastSun 2 0 S --R AN 1961 o - S lastSun 2 0 S --R AN 1962 1963 - O lastSun 2 0 S -+-6 u C%sT 2007 N 4 2 -+-5 u E%sT -+R Pe 1946 o - Ap lastSun 2 1 D -+R Pe 1946 o - S lastSun 2 0 S -+R Pe 1953 1954 - Ap lastSun 2 1 D -+R Pe 1953 1959 - S lastSun 2 0 S -+R Pe 1955 o - May 1 0 1 D -+R Pe 1956 1963 - Ap lastSun 2 1 D -+R Pe 1960 o - O lastSun 2 0 S -+R Pe 1961 o - S lastSun 2 0 S -+R Pe 1962 1963 - O lastSun 2 0 S - Z America/Indiana/Tell_City -5:47:3 - LMT 1883 N 18 12:12:57 ---6 AF C%sT 1946 ---6 AN C%sT 1964 Ap 26 2 -+-6 u C%sT 1946 -+-6 Pe C%sT 1964 Ap 26 2 - -5 - EST 1969 ---5 AF E%sT 1971 -+-5 u E%sT 1971 - -5 - EST 2006 Ap 2 2 ---6 AF C%sT --R AO 1955 o - May 1 0 1 D --R AO 1955 1960 - S lastSun 2 0 S --R AO 1956 1964 - Ap lastSun 2 1 D --R AO 1961 1964 - O lastSun 2 0 S -+-6 u C%sT -+R Pi 1955 o - May 1 0 1 D -+R Pi 1955 1960 - S lastSun 2 0 S -+R Pi 1956 1964 - Ap lastSun 2 1 D -+R Pi 1961 1964 - O lastSun 2 0 S - Z America/Indiana/Petersburg -5:49:7 - LMT 1883 N 18 12:10:53 ---6 AF C%sT 1955 ---6 AO C%sT 1965 Ap 25 2 -+-6 u C%sT 1955 -+-6 Pi C%sT 1965 Ap 25 2 - -5 - EST 1966 O 30 2 ---6 AF C%sT 1977 O 30 2 -+-6 u C%sT 1977 O 30 2 - -5 - EST 2006 Ap 2 2 ---6 AF C%sT 2007 N 4 2 ---5 AF E%sT --R AP 1947 1961 - Ap lastSun 2 1 D --R AP 1947 1954 - S lastSun 2 0 S --R AP 1955 1956 - O lastSun 2 0 S --R AP 1957 1958 - S lastSun 2 0 S --R AP 1959 1961 - O lastSun 2 0 S -+-6 u C%sT 2007 N 4 2 -+-5 u E%sT -+R St 1947 1961 - Ap lastSun 2 1 D -+R St 1947 1954 - S lastSun 2 0 S -+R St 1955 1956 - O lastSun 2 0 S -+R St 1957 1958 - S lastSun 2 0 S -+R St 1959 1961 - O lastSun 2 0 S - Z America/Indiana/Knox -5:46:30 - LMT 1883 N 18 12:13:30 ---6 AF C%sT 1947 ---6 AP C%sT 1962 Ap 29 2 -+-6 u C%sT 1947 -+-6 St C%sT 1962 Ap 29 2 - -5 - EST 1963 O 27 2 ---6 AF C%sT 1991 O 27 2 -+-6 u C%sT 1991 O 27 2 - -5 - EST 2006 Ap 2 2 ---6 AF C%sT --R AQ 1946 1960 - Ap lastSun 2 1 D --R AQ 1946 1954 - S lastSun 2 0 S --R AQ 1955 1956 - O lastSun 2 0 S --R AQ 1957 1960 - S lastSun 2 0 S -+-6 u C%sT -+R Pu 1946 1960 - Ap lastSun 2 1 D -+R Pu 1946 1954 - S lastSun 2 0 S -+R Pu 1955 1956 - O lastSun 2 0 S -+R Pu 1957 1960 - S lastSun 2 0 S - Z America/Indiana/Winamac -5:46:25 - LMT 1883 N 18 12:13:35 ---6 AF C%sT 1946 ---6 AQ C%sT 1961 Ap 30 2 -+-6 u C%sT 1946 -+-6 Pu C%sT 1961 Ap 30 2 - -5 - EST 1969 ---5 AF E%sT 1971 -+-5 u E%sT 1971 - -5 - EST 2006 Ap 2 2 ---6 AF C%sT 2007 Mar 11 2 ---5 AF E%sT -+-6 u C%sT 2007 Mar 11 2 -+-5 u E%sT - Z America/Indiana/Vevay -5:40:16 - LMT 1883 N 18 12:19:44 ---6 AF C%sT 1954 Ap 25 2 -+-6 u C%sT 1954 Ap 25 2 - -5 - EST 1969 ---5 AF E%sT 1973 -+-5 u E%sT 1973 - -5 - EST 2006 ---5 AF E%sT --R AR 1921 o - May 1 2 1 D --R AR 1921 o - S 1 2 0 S --R AR 1941 1961 - Ap lastSun 2 1 D --R AR 1941 o - S lastSun 2 0 S --R AR 1946 o - Jun 2 2 0 S --R AR 1950 1955 - S lastSun 2 0 S --R AR 1956 1960 - O lastSun 2 0 S -+-5 u E%sT -+R v 1921 o - May 1 2 1 D -+R v 1921 o - S 1 2 0 S -+R v 1941 1961 - Ap lastSun 2 1 D -+R v 1941 o - S lastSun 2 0 S -+R v 1946 o - Jun 2 2 0 S -+R v 1950 1955 - S lastSun 2 0 S -+R v 1956 1960 - O lastSun 2 0 S - Z America/Kentucky/Louisville -5:43:2 - LMT 1883 N 18 12:16:58 ---6 AF C%sT 1921 ---6 AR C%sT 1942 ---6 AF C%sT 1946 ---6 AR C%sT 1961 Jul 23 2 -+-6 u C%sT 1921 -+-6 v C%sT 1942 -+-6 u C%sT 1946 -+-6 v C%sT 1961 Jul 23 2 - -5 - EST 1968 ---5 AF E%sT 1974 Ja 6 2 -+-5 u E%sT 1974 Ja 6 2 - -6 1 CDT 1974 O 27 2 ---5 AF E%sT -+-5 u E%sT - Z America/Kentucky/Monticello -5:39:24 - LMT 1883 N 18 12:20:36 ---6 AF C%sT 1946 -+-6 u C%sT 1946 - -6 - CST 1968 ---6 AF C%sT 2000 O 29 2 ---5 AF E%sT --R AS 1948 o - Ap lastSun 2 1 D --R AS 1948 o - S lastSun 2 0 S -+-6 u C%sT 2000 O 29 2 -+-5 u E%sT -+R Dt 1948 o - Ap lastSun 2 1 D -+R Dt 1948 o - S lastSun 2 0 S - Z America/Detroit -5:32:11 - LMT 1905 - -6 - CST 1915 May 15 2 - -5 - EST 1942 ---5 AF E%sT 1946 ---5 AS E%sT 1973 ---5 AF E%sT 1975 -+-5 u E%sT 1946 -+-5 Dt E%sT 1973 -+-5 u E%sT 1975 - -5 - EST 1975 Ap 27 2 ---5 AF E%sT --R AT 1946 o - Ap lastSun 2 1 D --R AT 1946 o - S lastSun 2 0 S --R AT 1966 o - Ap lastSun 2 1 D --R AT 1966 o - O lastSun 2 0 S -+-5 u E%sT -+R Me 1946 o - Ap lastSun 2 1 D -+R Me 1946 o - S lastSun 2 0 S -+R Me 1966 o - Ap lastSun 2 1 D -+R Me 1966 o - O lastSun 2 0 S - Z America/Menominee -5:50:27 - LMT 1885 S 18 12 ---6 AF C%sT 1946 ---6 AT C%sT 1969 Ap 27 2 -+-6 u C%sT 1946 -+-6 Me C%sT 1969 Ap 27 2 - -5 - EST 1973 Ap 29 2 ---6 AF C%sT --R AU 1918 o - Ap 14 2 1 D --R AU 1918 o - O 27 2 0 S --R AU 1942 o - F 9 2 1 W --R AU 1945 o - Au 14 23u 1 P --R AU 1945 o - S 30 2 0 S --R AU 1974 1986 - Ap lastSun 2 1 D --R AU 1974 2006 - O lastSun 2 0 S --R AU 1987 2006 - Ap Sun>=1 2 1 D --R AU 2007 ma - Mar Sun>=8 2 1 D --R AU 2007 ma - N Sun>=1 2 0 S --R AV 1917 o - Ap 8 2 1 D --R AV 1917 o - S 17 2 0 S --R AV 1919 o - May 5 23 1 D --R AV 1919 o - Au 12 23 0 S --R AV 1920 1935 - May Sun>=1 23 1 D --R AV 1920 1935 - O lastSun 23 0 S --R AV 1936 1941 - May M>=9 0 1 D --R AV 1936 1941 - O M>=2 0 0 S --R AV 1946 1950 - May Sun>=8 2 1 D --R AV 1946 1950 - O Sun>=2 2 0 S --R AV 1951 1986 - Ap lastSun 2 1 D --R AV 1951 1959 - S lastSun 2 0 S --R AV 1960 1986 - O lastSun 2 0 S --R AV 1987 o - Ap Sun>=1 0:1 1 D --R AV 1987 2006 - O lastSun 0:1 0 S --R AV 1988 o - Ap Sun>=1 0:1 2 DD --R AV 1989 2006 - Ap Sun>=1 0:1 1 D --R AV 2007 2011 - Mar Sun>=8 0:1 1 D --R AV 2007 2010 - N Sun>=1 0:1 0 S -+-6 u C%sT -+R C 1918 o - Ap 14 2 1 D -+R C 1918 o - O 27 2 0 S -+R C 1942 o - F 9 2 1 W -+R C 1945 o - Au 14 23u 1 P -+R C 1945 o - S 30 2 0 S -+R C 1974 1986 - Ap lastSun 2 1 D -+R C 1974 2006 - O lastSun 2 0 S -+R C 1987 2006 - Ap Sun>=1 2 1 D -+R C 2007 ma - Mar Sun>=8 2 1 D -+R C 2007 ma - N Sun>=1 2 0 S -+R j 1917 o - Ap 8 2 1 D -+R j 1917 o - S 17 2 0 S -+R j 1919 o - May 5 23 1 D -+R j 1919 o - Au 12 23 0 S -+R j 1920 1935 - May Sun>=1 23 1 D -+R j 1920 1935 - O lastSun 23 0 S -+R j 1936 1941 - May M>=9 0 1 D -+R j 1936 1941 - O M>=2 0 0 S -+R j 1946 1950 - May Sun>=8 2 1 D -+R j 1946 1950 - O Sun>=2 2 0 S -+R j 1951 1986 - Ap lastSun 2 1 D -+R j 1951 1959 - S lastSun 2 0 S -+R j 1960 1986 - O lastSun 2 0 S -+R j 1987 o - Ap Sun>=1 0:1 1 D -+R j 1987 2006 - O lastSun 0:1 0 S -+R j 1988 o - Ap Sun>=1 0:1 2 DD -+R j 1989 2006 - Ap Sun>=1 0:1 1 D -+R j 2007 2011 - Mar Sun>=8 0:1 1 D -+R j 2007 2010 - N Sun>=1 0:1 0 S - Z America/St_Johns -3:30:52 - LMT 1884 ---3:30:52 AV N%sT 1918 ---3:30:52 AU N%sT 1919 ---3:30:52 AV N%sT 1935 Mar 30 ---3:30 AV N%sT 1942 May 11 ---3:30 AU N%sT 1946 ---3:30 AV N%sT 2011 N ---3:30 AU N%sT -+-3:30:52 j N%sT 1918 -+-3:30:52 C N%sT 1919 -+-3:30:52 j N%sT 1935 Mar 30 -+-3:30 j N%sT 1942 May 11 -+-3:30 C N%sT 1946 -+-3:30 j N%sT 2011 N -+-3:30 C N%sT - Z America/Goose_Bay -4:1:40 - LMT 1884 - -3:30:52 - NST 1918 ---3:30:52 AU N%sT 1919 -+-3:30:52 C N%sT 1919 - -3:30:52 - NST 1935 Mar 30 - -3:30 - NST 1936 ---3:30 AV N%sT 1942 May 11 ---3:30 AU N%sT 1946 ---3:30 AV N%sT 1966 Mar 15 2 ---4 AV A%sT 2011 N ---4 AU A%sT --R AW 1916 o - Ap 1 0 1 D --R AW 1916 o - O 1 0 0 S --R AW 1920 o - May 9 0 1 D --R AW 1920 o - Au 29 0 0 S --R AW 1921 o - May 6 0 1 D --R AW 1921 1922 - S 5 0 0 S --R AW 1922 o - Ap 30 0 1 D --R AW 1923 1925 - May Sun>=1 0 1 D --R AW 1923 o - S 4 0 0 S --R AW 1924 o - S 15 0 0 S --R AW 1925 o - S 28 0 0 S --R AW 1926 o - May 16 0 1 D --R AW 1926 o - S 13 0 0 S --R AW 1927 o - May 1 0 1 D --R AW 1927 o - S 26 0 0 S --R AW 1928 1931 - May Sun>=8 0 1 D --R AW 1928 o - S 9 0 0 S --R AW 1929 o - S 3 0 0 S --R AW 1930 o - S 15 0 0 S --R AW 1931 1932 - S M>=24 0 0 S --R AW 1932 o - May 1 0 1 D --R AW 1933 o - Ap 30 0 1 D --R AW 1933 o - O 2 0 0 S --R AW 1934 o - May 20 0 1 D --R AW 1934 o - S 16 0 0 S --R AW 1935 o - Jun 2 0 1 D --R AW 1935 o - S 30 0 0 S --R AW 1936 o - Jun 1 0 1 D --R AW 1936 o - S 14 0 0 S --R AW 1937 1938 - May Sun>=1 0 1 D --R AW 1937 1941 - S M>=24 0 0 S --R AW 1939 o - May 28 0 1 D --R AW 1940 1941 - May Sun>=1 0 1 D --R AW 1946 1949 - Ap lastSun 2 1 D --R AW 1946 1949 - S lastSun 2 0 S --R AW 1951 1954 - Ap lastSun 2 1 D --R AW 1951 1954 - S lastSun 2 0 S --R AW 1956 1959 - Ap lastSun 2 1 D --R AW 1956 1959 - S lastSun 2 0 S --R AW 1962 1973 - Ap lastSun 2 1 D --R AW 1962 1973 - O lastSun 2 0 S -+-3:30 j N%sT 1942 May 11 -+-3:30 C N%sT 1946 -+-3:30 j N%sT 1966 Mar 15 2 -+-4 j A%sT 2011 N -+-4 C A%sT -+R H 1916 o - Ap 1 0 1 D -+R H 1916 o - O 1 0 0 S -+R H 1920 o - May 9 0 1 D -+R H 1920 o - Au 29 0 0 S -+R H 1921 o - May 6 0 1 D -+R H 1921 1922 - S 5 0 0 S -+R H 1922 o - Ap 30 0 1 D -+R H 1923 1925 - May Sun>=1 0 1 D -+R H 1923 o - S 4 0 0 S -+R H 1924 o - S 15 0 0 S -+R H 1925 o - S 28 0 0 S -+R H 1926 o - May 16 0 1 D -+R H 1926 o - S 13 0 0 S -+R H 1927 o - May 1 0 1 D -+R H 1927 o - S 26 0 0 S -+R H 1928 1931 - May Sun>=8 0 1 D -+R H 1928 o - S 9 0 0 S -+R H 1929 o - S 3 0 0 S -+R H 1930 o - S 15 0 0 S -+R H 1931 1932 - S M>=24 0 0 S -+R H 1932 o - May 1 0 1 D -+R H 1933 o - Ap 30 0 1 D -+R H 1933 o - O 2 0 0 S -+R H 1934 o - May 20 0 1 D -+R H 1934 o - S 16 0 0 S -+R H 1935 o - Jun 2 0 1 D -+R H 1935 o - S 30 0 0 S -+R H 1936 o - Jun 1 0 1 D -+R H 1936 o - S 14 0 0 S -+R H 1937 1938 - May Sun>=1 0 1 D -+R H 1937 1941 - S M>=24 0 0 S -+R H 1939 o - May 28 0 1 D -+R H 1940 1941 - May Sun>=1 0 1 D -+R H 1946 1949 - Ap lastSun 2 1 D -+R H 1946 1949 - S lastSun 2 0 S -+R H 1951 1954 - Ap lastSun 2 1 D -+R H 1951 1954 - S lastSun 2 0 S -+R H 1956 1959 - Ap lastSun 2 1 D -+R H 1956 1959 - S lastSun 2 0 S -+R H 1962 1973 - Ap lastSun 2 1 D -+R H 1962 1973 - O lastSun 2 0 S - Z America/Halifax -4:14:24 - LMT 1902 Jun 15 ---4 AW A%sT 1918 ---4 AU A%sT 1919 ---4 AW A%sT 1942 F 9 2s ---4 AU A%sT 1946 ---4 AW A%sT 1974 ---4 AU A%sT -+-4 H A%sT 1918 -+-4 C A%sT 1919 -+-4 H A%sT 1942 F 9 2s -+-4 C A%sT 1946 -+-4 H A%sT 1974 -+-4 C A%sT - Z America/Glace_Bay -3:59:48 - LMT 1902 Jun 15 ---4 AU A%sT 1953 ---4 AW A%sT 1954 -+-4 C A%sT 1953 -+-4 H A%sT 1954 - -4 - AST 1972 ---4 AW A%sT 1974 ---4 AU A%sT --R AX 1933 1935 - Jun Sun>=8 1 1 D --R AX 1933 1935 - S Sun>=8 1 0 S --R AX 1936 1938 - Jun Sun>=1 1 1 D --R AX 1936 1938 - S Sun>=1 1 0 S --R AX 1939 o - May 27 1 1 D --R AX 1939 1941 - S Sat>=21 1 0 S --R AX 1940 o - May 19 1 1 D --R AX 1941 o - May 4 1 1 D --R AX 1946 1972 - Ap lastSun 2 1 D --R AX 1946 1956 - S lastSun 2 0 S --R AX 1957 1972 - O lastSun 2 0 S --R AX 1993 2006 - Ap Sun>=1 0:1 1 D --R AX 1993 2006 - O lastSun 0:1 0 S -+-4 H A%sT 1974 -+-4 C A%sT -+R o 1933 1935 - Jun Sun>=8 1 1 D -+R o 1933 1935 - S Sun>=8 1 0 S -+R o 1936 1938 - Jun Sun>=1 1 1 D -+R o 1936 1938 - S Sun>=1 1 0 S -+R o 1939 o - May 27 1 1 D -+R o 1939 1941 - S Sat>=21 1 0 S -+R o 1940 o - May 19 1 1 D -+R o 1941 o - May 4 1 1 D -+R o 1946 1972 - Ap lastSun 2 1 D -+R o 1946 1956 - S lastSun 2 0 S -+R o 1957 1972 - O lastSun 2 0 S -+R o 1993 2006 - Ap Sun>=1 0:1 1 D -+R o 1993 2006 - O lastSun 0:1 0 S - Z America/Moncton -4:19:8 - LMT 1883 D 9 - -5 - EST 1902 Jun 15 ---4 AU A%sT 1933 ---4 AX A%sT 1942 ---4 AU A%sT 1946 ---4 AX A%sT 1973 ---4 AU A%sT 1993 ---4 AX A%sT 2007 ---4 AU A%sT -+-4 C A%sT 1933 -+-4 o A%sT 1942 -+-4 C A%sT 1946 -+-4 o A%sT 1973 -+-4 C A%sT 1993 -+-4 o A%sT 2007 -+-4 C A%sT - Z America/Blanc-Sablon -3:48:28 - LMT 1884 ---4 AU A%sT 1970 -+-4 C A%sT 1970 - -4 - AST --R AY 1919 o - Mar 30 23:30 1 D --R AY 1919 o - O 26 0 0 S --R AY 1920 o - May 2 2 1 D --R AY 1920 o - S 26 0 0 S --R AY 1921 o - May 15 2 1 D --R AY 1921 o - S 15 2 0 S --R AY 1922 1923 - May Sun>=8 2 1 D --R AY 1922 1926 - S Sun>=15 2 0 S --R AY 1924 1927 - May Sun>=1 2 1 D --R AY 1927 1932 - S lastSun 2 0 S --R AY 1928 1931 - Ap lastSun 2 1 D --R AY 1932 o - May 1 2 1 D --R AY 1933 1940 - Ap lastSun 2 1 D --R AY 1933 o - O 1 2 0 S --R AY 1934 1939 - S lastSun 2 0 S --R AY 1945 1946 - S lastSun 2 0 S --R AY 1946 o - Ap lastSun 2 1 D --R AY 1947 1949 - Ap lastSun 0 1 D --R AY 1947 1948 - S lastSun 0 0 S --R AY 1949 o - N lastSun 0 0 S --R AY 1950 1973 - Ap lastSun 2 1 D --R AY 1950 o - N lastSun 2 0 S --R AY 1951 1956 - S lastSun 2 0 S --R AY 1957 1973 - O lastSun 2 0 S -+R t 1919 o - Mar 30 23:30 1 D -+R t 1919 o - O 26 0 0 S -+R t 1920 o - May 2 2 1 D -+R t 1920 o - S 26 0 0 S -+R t 1921 o - May 15 2 1 D -+R t 1921 o - S 15 2 0 S -+R t 1922 1923 - May Sun>=8 2 1 D -+R t 1922 1926 - S Sun>=15 2 0 S -+R t 1924 1927 - May Sun>=1 2 1 D -+R t 1927 1932 - S lastSun 2 0 S -+R t 1928 1931 - Ap lastSun 2 1 D -+R t 1932 o - May 1 2 1 D -+R t 1933 1940 - Ap lastSun 2 1 D -+R t 1933 o - O 1 2 0 S -+R t 1934 1939 - S lastSun 2 0 S -+R t 1945 1946 - S lastSun 2 0 S -+R t 1946 o - Ap lastSun 2 1 D -+R t 1947 1949 - Ap lastSun 0 1 D -+R t 1947 1948 - S lastSun 0 0 S -+R t 1949 o - N lastSun 0 0 S -+R t 1950 1973 - Ap lastSun 2 1 D -+R t 1950 o - N lastSun 2 0 S -+R t 1951 1956 - S lastSun 2 0 S -+R t 1957 1973 - O lastSun 2 0 S - Z America/Toronto -5:17:32 - LMT 1895 ---5 AU E%sT 1919 ---5 AY E%sT 1942 F 9 2s ---5 AU E%sT 1946 ---5 AY E%sT 1974 ---5 AU E%sT -+-5 C E%sT 1919 -+-5 t E%sT 1942 F 9 2s -+-5 C E%sT 1946 -+-5 t E%sT 1974 -+-5 C E%sT - Z America/Thunder_Bay -5:57 - LMT 1895 - -6 - CST 1910 - -5 - EST 1942 ---5 AU E%sT 1970 ---5 AY E%sT 1973 -+-5 C E%sT 1970 -+-5 t E%sT 1973 - -5 - EST 1974 ---5 AU E%sT -+-5 C E%sT - Z America/Nipigon -5:53:4 - LMT 1895 ---5 AU E%sT 1940 S 29 -+-5 C E%sT 1940 S 29 - -5 1 EDT 1942 F 9 2s ---5 AU E%sT -+-5 C E%sT - Z America/Rainy_River -6:18:16 - LMT 1895 ---6 AU C%sT 1940 S 29 -+-6 C C%sT 1940 S 29 - -6 1 CDT 1942 F 9 2s ---6 AU C%sT -+-6 C C%sT - Z America/Atikokan -6:6:28 - LMT 1895 ---6 AU C%sT 1940 S 29 -+-6 C C%sT 1940 S 29 - -6 1 CDT 1942 F 9 2s ---6 AU C%sT 1945 S 30 2 -+-6 C C%sT 1945 S 30 2 - -5 - EST --R AZ 1916 o - Ap 23 0 1 D --R AZ 1916 o - S 17 0 0 S --R AZ 1918 o - Ap 14 2 1 D --R AZ 1918 o - O 27 2 0 S --R AZ 1937 o - May 16 2 1 D --R AZ 1937 o - S 26 2 0 S --R AZ 1942 o - F 9 2 1 W --R AZ 1945 o - Au 14 23u 1 P --R AZ 1945 o - S lastSun 2 0 S --R AZ 1946 o - May 12 2 1 D --R AZ 1946 o - O 13 2 0 S --R AZ 1947 1949 - Ap lastSun 2 1 D --R AZ 1947 1949 - S lastSun 2 0 S --R AZ 1950 o - May 1 2 1 D --R AZ 1950 o - S 30 2 0 S --R AZ 1951 1960 - Ap lastSun 2 1 D --R AZ 1951 1958 - S lastSun 2 0 S --R AZ 1959 o - O lastSun 2 0 S --R AZ 1960 o - S lastSun 2 0 S --R AZ 1963 o - Ap lastSun 2 1 D --R AZ 1963 o - S 22 2 0 S --R AZ 1966 1986 - Ap lastSun 2s 1 D --R AZ 1966 2005 - O lastSun 2s 0 S --R AZ 1987 2005 - Ap Sun>=1 2s 1 D -+R W 1916 o - Ap 23 0 1 D -+R W 1916 o - S 17 0 0 S -+R W 1918 o - Ap 14 2 1 D -+R W 1918 o - O 27 2 0 S -+R W 1937 o - May 16 2 1 D -+R W 1937 o - S 26 2 0 S -+R W 1942 o - F 9 2 1 W -+R W 1945 o - Au 14 23u 1 P -+R W 1945 o - S lastSun 2 0 S -+R W 1946 o - May 12 2 1 D -+R W 1946 o - O 13 2 0 S -+R W 1947 1949 - Ap lastSun 2 1 D -+R W 1947 1949 - S lastSun 2 0 S -+R W 1950 o - May 1 2 1 D -+R W 1950 o - S 30 2 0 S -+R W 1951 1960 - Ap lastSun 2 1 D -+R W 1951 1958 - S lastSun 2 0 S -+R W 1959 o - O lastSun 2 0 S -+R W 1960 o - S lastSun 2 0 S -+R W 1963 o - Ap lastSun 2 1 D -+R W 1963 o - S 22 2 0 S -+R W 1966 1986 - Ap lastSun 2s 1 D -+R W 1966 2005 - O lastSun 2s 0 S -+R W 1987 2005 - Ap Sun>=1 2s 1 D - Z America/Winnipeg -6:28:36 - LMT 1887 Jul 16 ---6 AZ C%sT 2006 ---6 AU C%sT --R Aa 1918 o - Ap 14 2 1 D --R Aa 1918 o - O 27 2 0 S --R Aa 1930 1934 - May Sun>=1 0 1 D --R Aa 1930 1934 - O Sun>=1 0 0 S --R Aa 1937 1941 - Ap Sun>=8 0 1 D --R Aa 1937 o - O Sun>=8 0 0 S --R Aa 1938 o - O Sun>=1 0 0 S --R Aa 1939 1941 - O Sun>=8 0 0 S --R Aa 1942 o - F 9 2 1 W --R Aa 1945 o - Au 14 23u 1 P --R Aa 1945 o - S lastSun 2 0 S --R Aa 1946 o - Ap Sun>=8 2 1 D --R Aa 1946 o - O Sun>=8 2 0 S --R Aa 1947 1957 - Ap lastSun 2 1 D --R Aa 1947 1957 - S lastSun 2 0 S --R Aa 1959 o - Ap lastSun 2 1 D --R Aa 1959 o - O lastSun 2 0 S --R Ab 1957 o - Ap lastSun 2 1 D --R Ab 1957 o - O lastSun 2 0 S --R Ab 1959 1961 - Ap lastSun 2 1 D --R Ab 1959 o - O lastSun 2 0 S --R Ab 1960 1961 - S lastSun 2 0 S -+-6 W C%sT 2006 -+-6 C C%sT -+R r 1918 o - Ap 14 2 1 D -+R r 1918 o - O 27 2 0 S -+R r 1930 1934 - May Sun>=1 0 1 D -+R r 1930 1934 - O Sun>=1 0 0 S -+R r 1937 1941 - Ap Sun>=8 0 1 D -+R r 1937 o - O Sun>=8 0 0 S -+R r 1938 o - O Sun>=1 0 0 S -+R r 1939 1941 - O Sun>=8 0 0 S -+R r 1942 o - F 9 2 1 W -+R r 1945 o - Au 14 23u 1 P -+R r 1945 o - S lastSun 2 0 S -+R r 1946 o - Ap Sun>=8 2 1 D -+R r 1946 o - O Sun>=8 2 0 S -+R r 1947 1957 - Ap lastSun 2 1 D -+R r 1947 1957 - S lastSun 2 0 S -+R r 1959 o - Ap lastSun 2 1 D -+R r 1959 o - O lastSun 2 0 S -+R Sw 1957 o - Ap lastSun 2 1 D -+R Sw 1957 o - O lastSun 2 0 S -+R Sw 1959 1961 - Ap lastSun 2 1 D -+R Sw 1959 o - O lastSun 2 0 S -+R Sw 1960 1961 - S lastSun 2 0 S - Z America/Regina -6:58:36 - LMT 1905 S ---7 Aa M%sT 1960 Ap lastSun 2 -+-7 r M%sT 1960 Ap lastSun 2 - -6 - CST - Z America/Swift_Current -7:11:20 - LMT 1905 S ---7 AU M%sT 1946 Ap lastSun 2 ---7 Aa M%sT 1950 ---7 Ab M%sT 1972 Ap lastSun 2 -+-7 C M%sT 1946 Ap lastSun 2 -+-7 r M%sT 1950 -+-7 Sw M%sT 1972 Ap lastSun 2 - -6 - CST --R Ac 1918 1919 - Ap Sun>=8 2 1 D --R Ac 1918 o - O 27 2 0 S --R Ac 1919 o - May 27 2 0 S --R Ac 1920 1923 - Ap lastSun 2 1 D --R Ac 1920 o - O lastSun 2 0 S --R Ac 1921 1923 - S lastSun 2 0 S --R Ac 1942 o - F 9 2 1 W --R Ac 1945 o - Au 14 23u 1 P --R Ac 1945 o - S lastSun 2 0 S --R Ac 1947 o - Ap lastSun 2 1 D --R Ac 1947 o - S lastSun 2 0 S --R Ac 1967 o - Ap lastSun 2 1 D --R Ac 1967 o - O lastSun 2 0 S --R Ac 1969 o - Ap lastSun 2 1 D --R Ac 1969 o - O lastSun 2 0 S --R Ac 1972 1986 - Ap lastSun 2 1 D --R Ac 1972 2006 - O lastSun 2 0 S -+R Ed 1918 1919 - Ap Sun>=8 2 1 D -+R Ed 1918 o - O 27 2 0 S -+R Ed 1919 o - May 27 2 0 S -+R Ed 1920 1923 - Ap lastSun 2 1 D -+R Ed 1920 o - O lastSun 2 0 S -+R Ed 1921 1923 - S lastSun 2 0 S -+R Ed 1942 o - F 9 2 1 W -+R Ed 1945 o - Au 14 23u 1 P -+R Ed 1945 o - S lastSun 2 0 S -+R Ed 1947 o - Ap lastSun 2 1 D -+R Ed 1947 o - S lastSun 2 0 S -+R Ed 1967 o - Ap lastSun 2 1 D -+R Ed 1967 o - O lastSun 2 0 S -+R Ed 1969 o - Ap lastSun 2 1 D -+R Ed 1969 o - O lastSun 2 0 S -+R Ed 1972 1986 - Ap lastSun 2 1 D -+R Ed 1972 2006 - O lastSun 2 0 S - Z America/Edmonton -7:33:52 - LMT 1906 S ---7 Ac M%sT 1987 ---7 AU M%sT --R Ad 1918 o - Ap 14 2 1 D --R Ad 1918 o - O 27 2 0 S --R Ad 1942 o - F 9 2 1 W --R Ad 1945 o - Au 14 23u 1 P --R Ad 1945 o - S 30 2 0 S --R Ad 1946 1986 - Ap lastSun 2 1 D --R Ad 1946 o - O 13 2 0 S --R Ad 1947 1961 - S lastSun 2 0 S --R Ad 1962 2006 - O lastSun 2 0 S -+-7 Ed M%sT 1987 -+-7 C M%sT -+R Va 1918 o - Ap 14 2 1 D -+R Va 1918 o - O 27 2 0 S -+R Va 1942 o - F 9 2 1 W -+R Va 1945 o - Au 14 23u 1 P -+R Va 1945 o - S 30 2 0 S -+R Va 1946 1986 - Ap lastSun 2 1 D -+R Va 1946 o - O 13 2 0 S -+R Va 1947 1961 - S lastSun 2 0 S -+R Va 1962 2006 - O lastSun 2 0 S - Z America/Vancouver -8:12:28 - LMT 1884 ---8 Ad P%sT 1987 ---8 AU P%sT -+-8 Va P%sT 1987 -+-8 C P%sT - Z America/Dawson_Creek -8:0:56 - LMT 1884 ---8 AU P%sT 1947 ---8 Ad P%sT 1972 Au 30 2 -+-8 C P%sT 1947 -+-8 Va P%sT 1972 Au 30 2 - -7 - MST - Z America/Fort_Nelson -8:10:47 - LMT 1884 ---8 Ad P%sT 1946 -+-8 Va P%sT 1946 - -8 - PST 1947 ---8 Ad P%sT 1987 ---8 AU P%sT 2015 Mar 8 2 -+-8 Va P%sT 1987 -+-8 C P%sT 2015 Mar 8 2 - -7 - MST - Z America/Creston -7:46:4 - LMT 1884 - -7 - MST 1916 O - -8 - PST 1918 Jun 2 - -7 - MST --R Ae 1918 o - Ap 14 2 1 D --R Ae 1918 o - O 27 2 0 S --R Ae 1919 o - May 25 2 1 D --R Ae 1919 o - N 1 0 0 S --R Ae 1942 o - F 9 2 1 W --R Ae 1945 o - Au 14 23u 1 P --R Ae 1945 o - S 30 2 0 S --R Ae 1965 o - Ap lastSun 0 2 DD --R Ae 1965 o - O lastSun 2 0 S --R Ae 1980 1986 - Ap lastSun 2 1 D --R Ae 1980 2006 - O lastSun 2 0 S --R Ae 1987 2006 - Ap Sun>=1 2 1 D -+R Y 1918 o - Ap 14 2 1 D -+R Y 1918 o - O 27 2 0 S -+R Y 1919 o - May 25 2 1 D -+R Y 1919 o - N 1 0 0 S -+R Y 1942 o - F 9 2 1 W -+R Y 1945 o - Au 14 23u 1 P -+R Y 1945 o - S 30 2 0 S -+R Y 1965 o - Ap lastSun 0 2 DD -+R Y 1965 o - O lastSun 2 0 S -+R Y 1980 1986 - Ap lastSun 2 1 D -+R Y 1980 2006 - O lastSun 2 0 S -+R Y 1987 2006 - Ap Sun>=1 2 1 D - Z America/Pangnirtung 0 - -00 1921 ---4 Ae A%sT 1995 Ap Sun>=1 2 ---5 AU E%sT 1999 O 31 2 ---6 AU C%sT 2000 O 29 2 ---5 AU E%sT -+-4 Y A%sT 1995 Ap Sun>=1 2 -+-5 C E%sT 1999 O 31 2 -+-6 C C%sT 2000 O 29 2 -+-5 C E%sT - Z America/Iqaluit 0 - -00 1942 Au ---5 Ae E%sT 1999 O 31 2 ---6 AU C%sT 2000 O 29 2 ---5 AU E%sT -+-5 Y E%sT 1999 O 31 2 -+-6 C C%sT 2000 O 29 2 -+-5 C E%sT - Z America/Resolute 0 - -00 1947 Au 31 ---6 Ae C%sT 2000 O 29 2 -+-6 Y C%sT 2000 O 29 2 - -5 - EST 2001 Ap 1 3 ---6 AU C%sT 2006 O 29 2 -+-6 C C%sT 2006 O 29 2 - -5 - EST 2007 Mar 11 3 ---6 AU C%sT -+-6 C C%sT - Z America/Rankin_Inlet 0 - -00 1957 ---6 Ae C%sT 2000 O 29 2 -+-6 Y C%sT 2000 O 29 2 - -5 - EST 2001 Ap 1 3 ---6 AU C%sT -+-6 C C%sT - Z America/Cambridge_Bay 0 - -00 1920 ---7 Ae M%sT 1999 O 31 2 ---6 AU C%sT 2000 O 29 2 -+-7 Y M%sT 1999 O 31 2 -+-6 C C%sT 2000 O 29 2 - -5 - EST 2000 N 5 - -6 - CST 2001 Ap 1 3 ---7 AU M%sT -+-7 C M%sT - Z America/Yellowknife 0 - -00 1935 ---7 Ae M%sT 1980 ---7 AU M%sT -+-7 Y M%sT 1980 -+-7 C M%sT - Z America/Inuvik 0 - -00 1953 ---8 Ae P%sT 1979 Ap lastSun 2 ---7 Ae M%sT 1980 ---7 AU M%sT -+-8 Y P%sT 1979 Ap lastSun 2 -+-7 Y M%sT 1980 -+-7 C M%sT - Z America/Whitehorse -9:0:12 - LMT 1900 Au 20 ---9 Ae Y%sT 1967 May 28 ---8 Ae P%sT 1980 ---8 AU P%sT -+-9 Y Y%sT 1967 May 28 -+-8 Y P%sT 1980 -+-8 C P%sT - Z America/Dawson -9:17:40 - LMT 1900 Au 20 ---9 Ae Y%sT 1973 O 28 ---8 Ae P%sT 1980 ---8 AU P%sT --R Af 1939 o - F 5 0 1 D --R Af 1939 o - Jun 25 0 0 S --R Af 1940 o - D 9 0 1 D --R Af 1941 o - Ap 1 0 0 S --R Af 1943 o - D 16 0 1 W --R Af 1944 o - May 1 0 0 S --R Af 1950 o - F 12 0 1 D --R Af 1950 o - Jul 30 0 0 S --R Af 1996 2000 - Ap Sun>=1 2 1 D --R Af 1996 2000 - O lastSun 2 0 S --R Af 2001 o - May Sun>=1 2 1 D --R Af 2001 o - S lastSun 2 0 S --R Af 2002 ma - Ap Sun>=1 2 1 D --R Af 2002 ma - O lastSun 2 0 S -+-9 Y Y%sT 1973 O 28 -+-8 Y P%sT 1980 -+-8 C P%sT -+R m 1939 o - F 5 0 1 D -+R m 1939 o - Jun 25 0 0 S -+R m 1940 o - D 9 0 1 D -+R m 1941 o - Ap 1 0 0 S -+R m 1943 o - D 16 0 1 W -+R m 1944 o - May 1 0 0 S -+R m 1950 o - F 12 0 1 D -+R m 1950 o - Jul 30 0 0 S -+R m 1996 2000 - Ap Sun>=1 2 1 D -+R m 1996 2000 - O lastSun 2 0 S -+R m 2001 o - May Sun>=1 2 1 D -+R m 2001 o - S lastSun 2 0 S -+R m 2002 ma - Ap Sun>=1 2 1 D -+R m 2002 ma - O lastSun 2 0 S - Z America/Cancun -5:47:4 - LMT 1922 Ja 1 0:12:56 - -6 - CST 1981 D 23 ---5 Af E%sT 1998 Au 2 2 ---6 Af C%sT 2015 F 1 2 -+-5 m E%sT 1998 Au 2 2 -+-6 m C%sT 2015 F 1 2 - -5 - EST - Z America/Merida -5:58:28 - LMT 1922 Ja 1 0:1:32 - -6 - CST 1981 D 23 - -5 - EST 1982 D 2 ---6 Af C%sT -+-6 m C%sT - Z America/Matamoros -6:40 - LMT 1921 D 31 23:20 - -6 - CST 1988 ---6 AF C%sT 1989 ---6 Af C%sT 2010 ---6 AF C%sT -+-6 u C%sT 1989 -+-6 m C%sT 2010 -+-6 u C%sT - Z America/Monterrey -6:41:16 - LMT 1921 D 31 23:18:44 - -6 - CST 1988 ---6 AF C%sT 1989 ---6 Af C%sT -+-6 u C%sT 1989 -+-6 m C%sT - Z America/Mexico_City -6:36:36 - LMT 1922 Ja 1 0:23:24 - -7 - MST 1927 Jun 10 23 - -6 - CST 1930 N 15 - -7 - MST 1931 May 1 23 - -6 - CST 1931 O - -7 - MST 1932 Ap ---6 Af C%sT 2001 S 30 2 -+-6 m C%sT 2001 S 30 2 - -6 - CST 2002 F 20 ---6 Af C%sT -+-6 m C%sT - Z America/Ojinaga -6:57:40 - LMT 1922 Ja 1 0:2:20 - -7 - MST 1927 Jun 10 23 - -6 - CST 1930 N 15 -@@ -3215,10 +3232,10 @@ Z America/Ojinaga -6:57:40 - LMT 1922 Ja 1 0:2:20 - -6 - CST 1931 O - -7 - MST 1932 Ap - -6 - CST 1996 ---6 Af C%sT 1998 -+-6 m C%sT 1998 - -6 - CST 1998 Ap Sun>=1 3 ---7 Af M%sT 2010 ---7 AF M%sT -+-7 m M%sT 2010 -+-7 u M%sT - Z America/Chihuahua -7:4:20 - LMT 1921 D 31 23:55:40 - -7 - MST 1927 Jun 10 23 - -6 - CST 1930 N 15 -@@ -3226,9 +3243,9 @@ Z America/Chihuahua -7:4:20 - LMT 1921 D 31 23:55:40 - -6 - CST 1931 O - -7 - MST 1932 Ap - -6 - CST 1996 ---6 Af C%sT 1998 -+-6 m C%sT 1998 - -6 - CST 1998 Ap Sun>=1 3 ---7 Af M%sT -+-7 m M%sT - Z America/Hermosillo -7:23:52 - LMT 1921 D 31 23:36:8 - -7 - MST 1927 Jun 10 23 - -6 - CST 1930 N 15 -@@ -3238,7 +3255,7 @@ Z America/Hermosillo -7:23:52 - LMT 1921 D 31 23:36:8 - -6 - CST 1942 Ap 24 - -7 - MST 1949 Ja 14 - -8 - PST 1970 ---7 Af M%sT 1999 -+-7 m M%sT 1999 - -7 - MST - Z America/Mazatlan -7:5:40 - LMT 1921 D 31 23:54:20 - -7 - MST 1927 Jun 10 23 -@@ -3249,7 +3266,7 @@ Z America/Mazatlan -7:5:40 - LMT 1921 D 31 23:54:20 - -6 - CST 1942 Ap 24 - -7 - MST 1949 Ja 14 - -8 - PST 1970 ---7 Af M%sT -+-7 m M%sT - Z America/Bahia_Banderas -7:1 - LMT 1921 D 31 23:59 - -7 - MST 1927 Jun 10 23 - -6 - CST 1930 N 15 -@@ -3259,8 +3276,8 @@ Z America/Bahia_Banderas -7:1 - LMT 1921 D 31 23:59 - -6 - CST 1942 Ap 24 - -7 - MST 1949 Ja 14 - -8 - PST 1970 ---7 Af M%sT 2010 Ap 4 2 ---6 Af C%sT -+-7 m M%sT 2010 Ap 4 2 -+-6 m C%sT - Z America/Tijuana -7:48:4 - LMT 1922 Ja 1 0:11:56 - -7 - MST 1924 - -8 - PST 1927 Jun 10 23 -@@ -3273,315 +3290,315 @@ Z America/Tijuana -7:48:4 - LMT 1922 Ja 1 0:11:56 - -8 - PST 1948 Ap 5 - -8 1 PDT 1949 Ja 14 - -8 - PST 1954 ---8 AJ P%sT 1961 -+-8 CA P%sT 1961 - -8 - PST 1976 ---8 AF P%sT 1996 ---8 Af P%sT 2001 ---8 AF P%sT 2002 F 20 ---8 Af P%sT 2010 ---8 AF P%sT --R Ag 1964 1975 - O lastSun 2 0 S --R Ag 1964 1975 - Ap lastSun 2 1 D -+-8 u P%sT 1996 -+-8 m P%sT 2001 -+-8 u P%sT 2002 F 20 -+-8 m P%sT 2010 -+-8 u P%sT -+R BS 1964 1975 - O lastSun 2 0 S -+R BS 1964 1975 - Ap lastSun 2 1 D - Z America/Nassau -5:9:30 - LMT 1912 Mar 2 ---5 Ag E%sT 1976 ---5 AF E%sT --R Ah 1977 o - Jun 12 2 1 D --R Ah 1977 1978 - O Sun>=1 2 0 S --R Ah 1978 1980 - Ap Sun>=15 2 1 D --R Ah 1979 o - S 30 2 0 S --R Ah 1980 o - S 25 2 0 S -+-5 BS E%sT 1976 -+-5 u E%sT -+R BB 1977 o - Jun 12 2 1 D -+R BB 1977 1978 - O Sun>=1 2 0 S -+R BB 1978 1980 - Ap Sun>=15 2 1 D -+R BB 1979 o - S 30 2 0 S -+R BB 1980 o - S 25 2 0 S - Z America/Barbados -3:58:29 - LMT 1924 - -3:58:29 - BMT 1932 ---4 Ah A%sT --R Ai 1918 1942 - O Sun>=2 0 0:30 -0530 --R Ai 1919 1943 - F Sun>=9 0 0 CST --R Ai 1973 o - D 5 0 1 CDT --R Ai 1974 o - F 9 0 0 CST --R Ai 1982 o - D 18 0 1 CDT --R Ai 1983 o - F 12 0 0 CST -+-4 BB A%sT -+R BZ 1918 1942 - O Sun>=2 0 0:30 -0530 -+R BZ 1919 1943 - F Sun>=9 0 0 CST -+R BZ 1973 o - D 5 0 1 CDT -+R BZ 1974 o - F 9 0 0 CST -+R BZ 1982 o - D 18 0 1 CDT -+R BZ 1983 o - F 12 0 0 CST - Z America/Belize -5:52:48 - LMT 1912 Ap ---6 Ai %s -+-6 BZ %s - Z Atlantic/Bermuda -4:19:18 - LMT 1930 Ja 1 2 - -4 - AST 1974 Ap 28 2 ---4 AU A%sT 1976 ---4 AF A%sT --R Aj 1979 1980 - F lastSun 0 1 D --R Aj 1979 1980 - Jun Sun>=1 0 0 S --R Aj 1991 1992 - Ja Sat>=15 0 1 D --R Aj 1991 o - Jul 1 0 0 S --R Aj 1992 o - Mar 15 0 0 S -+-4 C A%sT 1976 -+-4 u A%sT -+R CR 1979 1980 - F lastSun 0 1 D -+R CR 1979 1980 - Jun Sun>=1 0 0 S -+R CR 1991 1992 - Ja Sat>=15 0 1 D -+R CR 1991 o - Jul 1 0 0 S -+R CR 1992 o - Mar 15 0 0 S - Z America/Costa_Rica -5:36:13 - LMT 1890 - -5:36:13 - SJMT 1921 Ja 15 ---6 Aj C%sT --R Ak 1928 o - Jun 10 0 1 D --R Ak 1928 o - O 10 0 0 S --R Ak 1940 1942 - Jun Sun>=1 0 1 D --R Ak 1940 1942 - S Sun>=1 0 0 S --R Ak 1945 1946 - Jun Sun>=1 0 1 D --R Ak 1945 1946 - S Sun>=1 0 0 S --R Ak 1965 o - Jun 1 0 1 D --R Ak 1965 o - S 30 0 0 S --R Ak 1966 o - May 29 0 1 D --R Ak 1966 o - O 2 0 0 S --R Ak 1967 o - Ap 8 0 1 D --R Ak 1967 1968 - S Sun>=8 0 0 S --R Ak 1968 o - Ap 14 0 1 D --R Ak 1969 1977 - Ap lastSun 0 1 D --R Ak 1969 1971 - O lastSun 0 0 S --R Ak 1972 1974 - O 8 0 0 S --R Ak 1975 1977 - O lastSun 0 0 S --R Ak 1978 o - May 7 0 1 D --R Ak 1978 1990 - O Sun>=8 0 0 S --R Ak 1979 1980 - Mar Sun>=15 0 1 D --R Ak 1981 1985 - May Sun>=5 0 1 D --R Ak 1986 1989 - Mar Sun>=14 0 1 D --R Ak 1990 1997 - Ap Sun>=1 0 1 D --R Ak 1991 1995 - O Sun>=8 0s 0 S --R Ak 1996 o - O 6 0s 0 S --R Ak 1997 o - O 12 0s 0 S --R Ak 1998 1999 - Mar lastSun 0s 1 D --R Ak 1998 2003 - O lastSun 0s 0 S --R Ak 2000 2003 - Ap Sun>=1 0s 1 D --R Ak 2004 o - Mar lastSun 0s 1 D --R Ak 2006 2010 - O lastSun 0s 0 S --R Ak 2007 o - Mar Sun>=8 0s 1 D --R Ak 2008 o - Mar Sun>=15 0s 1 D --R Ak 2009 2010 - Mar Sun>=8 0s 1 D --R Ak 2011 o - Mar Sun>=15 0s 1 D --R Ak 2011 o - N 13 0s 0 S --R Ak 2012 o - Ap 1 0s 1 D --R Ak 2012 ma - N Sun>=1 0s 0 S --R Ak 2013 ma - Mar Sun>=8 0s 1 D -+-6 CR C%sT -+R Q 1928 o - Jun 10 0 1 D -+R Q 1928 o - O 10 0 0 S -+R Q 1940 1942 - Jun Sun>=1 0 1 D -+R Q 1940 1942 - S Sun>=1 0 0 S -+R Q 1945 1946 - Jun Sun>=1 0 1 D -+R Q 1945 1946 - S Sun>=1 0 0 S -+R Q 1965 o - Jun 1 0 1 D -+R Q 1965 o - S 30 0 0 S -+R Q 1966 o - May 29 0 1 D -+R Q 1966 o - O 2 0 0 S -+R Q 1967 o - Ap 8 0 1 D -+R Q 1967 1968 - S Sun>=8 0 0 S -+R Q 1968 o - Ap 14 0 1 D -+R Q 1969 1977 - Ap lastSun 0 1 D -+R Q 1969 1971 - O lastSun 0 0 S -+R Q 1972 1974 - O 8 0 0 S -+R Q 1975 1977 - O lastSun 0 0 S -+R Q 1978 o - May 7 0 1 D -+R Q 1978 1990 - O Sun>=8 0 0 S -+R Q 1979 1980 - Mar Sun>=15 0 1 D -+R Q 1981 1985 - May Sun>=5 0 1 D -+R Q 1986 1989 - Mar Sun>=14 0 1 D -+R Q 1990 1997 - Ap Sun>=1 0 1 D -+R Q 1991 1995 - O Sun>=8 0s 0 S -+R Q 1996 o - O 6 0s 0 S -+R Q 1997 o - O 12 0s 0 S -+R Q 1998 1999 - Mar lastSun 0s 1 D -+R Q 1998 2003 - O lastSun 0s 0 S -+R Q 2000 2003 - Ap Sun>=1 0s 1 D -+R Q 2004 o - Mar lastSun 0s 1 D -+R Q 2006 2010 - O lastSun 0s 0 S -+R Q 2007 o - Mar Sun>=8 0s 1 D -+R Q 2008 o - Mar Sun>=15 0s 1 D -+R Q 2009 2010 - Mar Sun>=8 0s 1 D -+R Q 2011 o - Mar Sun>=15 0s 1 D -+R Q 2011 o - N 13 0s 0 S -+R Q 2012 o - Ap 1 0s 1 D -+R Q 2012 ma - N Sun>=1 0s 0 S -+R Q 2013 ma - Mar Sun>=8 0s 1 D - Z America/Havana -5:29:28 - LMT 1890 - -5:29:36 - HMT 1925 Jul 19 12 ---5 Ak C%sT --R Al 1966 o - O 30 0 1 EDT --R Al 1967 o - F 28 0 0 EST --R Al 1969 1973 - O lastSun 0 0:30 -0430 --R Al 1970 o - F 21 0 0 EST --R Al 1971 o - Ja 20 0 0 EST --R Al 1972 1974 - Ja 21 0 0 EST -+-5 Q C%sT -+R DO 1966 o - O 30 0 1 EDT -+R DO 1967 o - F 28 0 0 EST -+R DO 1969 1973 - O lastSun 0 0:30 -0430 -+R DO 1970 o - F 21 0 0 EST -+R DO 1971 o - Ja 20 0 0 EST -+R DO 1972 1974 - Ja 21 0 0 EST - Z America/Santo_Domingo -4:39:36 - LMT 1890 - -4:40 - SDMT 1933 Ap 1 12 ---5 Al %s 1974 O 27 -+-5 DO %s 1974 O 27 - -4 - AST 2000 O 29 2 ---5 AF E%sT 2000 D 3 1 -+-5 u E%sT 2000 D 3 1 - -4 - AST --R Am 1987 1988 - May Sun>=1 0 1 D --R Am 1987 1988 - S lastSun 0 0 S -+R SV 1987 1988 - May Sun>=1 0 1 D -+R SV 1987 1988 - S lastSun 0 0 S - Z America/El_Salvador -5:56:48 - LMT 1921 ---6 Am C%sT --R An 1973 o - N 25 0 1 D --R An 1974 o - F 24 0 0 S --R An 1983 o - May 21 0 1 D --R An 1983 o - S 22 0 0 S --R An 1991 o - Mar 23 0 1 D --R An 1991 o - S 7 0 0 S --R An 2006 o - Ap 30 0 1 D --R An 2006 o - O 1 0 0 S -+-6 SV C%sT -+R GT 1973 o - N 25 0 1 D -+R GT 1974 o - F 24 0 0 S -+R GT 1983 o - May 21 0 1 D -+R GT 1983 o - S 22 0 0 S -+R GT 1991 o - Mar 23 0 1 D -+R GT 1991 o - S 7 0 0 S -+R GT 2006 o - Ap 30 0 1 D -+R GT 2006 o - O 1 0 0 S - Z America/Guatemala -6:2:4 - LMT 1918 O 5 ---6 An C%sT --R Ao 1983 o - May 8 0 1 D --R Ao 1984 1987 - Ap lastSun 0 1 D --R Ao 1983 1987 - O lastSun 0 0 S --R Ao 1988 1997 - Ap Sun>=1 1s 1 D --R Ao 1988 1997 - O lastSun 1s 0 S --R Ao 2005 2006 - Ap Sun>=1 0 1 D --R Ao 2005 2006 - O lastSun 0 0 S --R Ao 2012 2015 - Mar Sun>=8 2 1 D --R Ao 2012 2015 - N Sun>=1 2 0 S --R Ao 2017 ma - Mar Sun>=8 2 1 D --R Ao 2017 ma - N Sun>=1 2 0 S -+-6 GT C%sT -+R HT 1983 o - May 8 0 1 D -+R HT 1984 1987 - Ap lastSun 0 1 D -+R HT 1983 1987 - O lastSun 0 0 S -+R HT 1988 1997 - Ap Sun>=1 1s 1 D -+R HT 1988 1997 - O lastSun 1s 0 S -+R HT 2005 2006 - Ap Sun>=1 0 1 D -+R HT 2005 2006 - O lastSun 0 0 S -+R HT 2012 2015 - Mar Sun>=8 2 1 D -+R HT 2012 2015 - N Sun>=1 2 0 S -+R HT 2017 ma - Mar Sun>=8 2 1 D -+R HT 2017 ma - N Sun>=1 2 0 S - Z America/Port-au-Prince -4:49:20 - LMT 1890 - -4:49 - PPMT 1917 Ja 24 12 ---5 Ao E%sT --R Ap 1987 1988 - May Sun>=1 0 1 D --R Ap 1987 1988 - S lastSun 0 0 S --R Ap 2006 o - May Sun>=1 0 1 D --R Ap 2006 o - Au M>=1 0 0 S -+-5 HT E%sT -+R HN 1987 1988 - May Sun>=1 0 1 D -+R HN 1987 1988 - S lastSun 0 0 S -+R HN 2006 o - May Sun>=1 0 1 D -+R HN 2006 o - Au M>=1 0 0 S - Z America/Tegucigalpa -5:48:52 - LMT 1921 Ap ---6 Ap C%sT -+-6 HN C%sT - Z America/Jamaica -5:7:10 - LMT 1890 - -5:7:10 - KMT 1912 F - -5 - EST 1974 ---5 AF E%sT 1984 -+-5 u E%sT 1984 - -5 - EST - Z America/Martinique -4:4:20 - LMT 1890 - -4:4:20 - FFMT 1911 May - -4 - AST 1980 Ap 6 - -4 1 ADT 1980 S 28 - -4 - AST --R Aq 1979 1980 - Mar Sun>=16 0 1 D --R Aq 1979 1980 - Jun M>=23 0 0 S --R Aq 2005 o - Ap 10 0 1 D --R Aq 2005 o - O Sun>=1 0 0 S --R Aq 2006 o - Ap 30 2 1 D --R Aq 2006 o - O Sun>=1 1 0 S -+R NI 1979 1980 - Mar Sun>=16 0 1 D -+R NI 1979 1980 - Jun M>=23 0 0 S -+R NI 2005 o - Ap 10 0 1 D -+R NI 2005 o - O Sun>=1 0 0 S -+R NI 2006 o - Ap 30 2 1 D -+R NI 2006 o - O Sun>=1 1 0 S - Z America/Managua -5:45:8 - LMT 1890 - -5:45:12 - MMT 1934 Jun 23 - -6 - CST 1973 May - -5 - EST 1975 F 16 ---6 Aq C%sT 1992 Ja 1 4 -+-6 NI C%sT 1992 Ja 1 4 - -5 - EST 1992 S 24 - -6 - CST 1993 - -5 - EST 1997 ---6 Aq C%sT -+-6 NI C%sT - Z America/Panama -5:18:8 - LMT 1890 - -5:19:36 - CMT 1908 Ap 22 - -5 - EST - Li America/Panama America/Cayman - Z America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12 - -4 - AST 1942 May 3 ---4 AF A%sT 1946 -+-4 u A%sT 1946 - -4 - AST - Z America/Miquelon -3:44:40 - LMT 1911 May 15 - -4 - AST 1980 May - -3 - -03 1987 ---3 AU -03/-02 -+-3 C -03/-02 - Z America/Grand_Turk -4:44:32 - LMT 1890 - -5:7:10 - KMT 1912 F - -5 - EST 1979 ---5 AF E%sT 2015 N Sun>=1 2 -+-5 u E%sT 2015 N Sun>=1 2 - -4 - AST 2018 Mar 11 3 ---5 AF E%sT --R Ar 1930 o - D 1 0 1 - --R Ar 1931 o - Ap 1 0 0 - --R Ar 1931 o - O 15 0 1 - --R Ar 1932 1940 - Mar 1 0 0 - --R Ar 1932 1939 - N 1 0 1 - --R Ar 1940 o - Jul 1 0 1 - --R Ar 1941 o - Jun 15 0 0 - --R Ar 1941 o - O 15 0 1 - --R Ar 1943 o - Au 1 0 0 - --R Ar 1943 o - O 15 0 1 - --R Ar 1946 o - Mar 1 0 0 - --R Ar 1946 o - O 1 0 1 - --R Ar 1963 o - O 1 0 0 - --R Ar 1963 o - D 15 0 1 - --R Ar 1964 1966 - Mar 1 0 0 - --R Ar 1964 1966 - O 15 0 1 - --R Ar 1967 o - Ap 2 0 0 - --R Ar 1967 1968 - O Sun>=1 0 1 - --R Ar 1968 1969 - Ap Sun>=1 0 0 - --R Ar 1974 o - Ja 23 0 1 - --R Ar 1974 o - May 1 0 0 - --R Ar 1988 o - D 1 0 1 - --R Ar 1989 1993 - Mar Sun>=1 0 0 - --R Ar 1989 1992 - O Sun>=15 0 1 - --R Ar 1999 o - O Sun>=1 0 1 - --R Ar 2000 o - Mar 3 0 0 - --R Ar 2007 o - D 30 0 1 - --R Ar 2008 2009 - Mar Sun>=15 0 0 - --R Ar 2008 o - O Sun>=15 0 1 - -+-5 u E%sT -+R A 1930 o - D 1 0 1 - -+R A 1931 o - Ap 1 0 0 - -+R A 1931 o - O 15 0 1 - -+R A 1932 1940 - Mar 1 0 0 - -+R A 1932 1939 - N 1 0 1 - -+R A 1940 o - Jul 1 0 1 - -+R A 1941 o - Jun 15 0 0 - -+R A 1941 o - O 15 0 1 - -+R A 1943 o - Au 1 0 0 - -+R A 1943 o - O 15 0 1 - -+R A 1946 o - Mar 1 0 0 - -+R A 1946 o - O 1 0 1 - -+R A 1963 o - O 1 0 0 - -+R A 1963 o - D 15 0 1 - -+R A 1964 1966 - Mar 1 0 0 - -+R A 1964 1966 - O 15 0 1 - -+R A 1967 o - Ap 2 0 0 - -+R A 1967 1968 - O Sun>=1 0 1 - -+R A 1968 1969 - Ap Sun>=1 0 0 - -+R A 1974 o - Ja 23 0 1 - -+R A 1974 o - May 1 0 0 - -+R A 1988 o - D 1 0 1 - -+R A 1989 1993 - Mar Sun>=1 0 0 - -+R A 1989 1992 - O Sun>=15 0 1 - -+R A 1999 o - O Sun>=1 0 1 - -+R A 2000 o - Mar 3 0 0 - -+R A 2007 o - D 30 0 1 - -+R A 2008 2009 - Mar Sun>=15 0 0 - -+R A 2008 o - O Sun>=15 0 1 - - Z America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 ---3 Ar -03/-02 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 -+-3 A -03/-02 - Z America/Argentina/Cordoba -4:16:48 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1991 Mar 3 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1991 Mar 3 - -4 - -04 1991 O 20 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 ---3 Ar -03/-02 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 -+-3 A -03/-02 - Z America/Argentina/Salta -4:21:40 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1991 Mar 3 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1991 Mar 3 - -4 - -04 1991 O 20 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 -+-3 A -03/-02 2008 O 18 - -3 - -03 - Z America/Argentina/Tucuman -4:20:52 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1991 Mar 3 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1991 Mar 3 - -4 - -04 1991 O 20 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 - -3 - -03 2004 Jun - -4 - -04 2004 Jun 13 ---3 Ar -03/-02 -+-3 A -03/-02 - Z America/Argentina/La_Rioja -4:27:24 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1991 Mar -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1991 Mar - -4 - -04 1991 May 7 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 - -3 - -03 2004 Jun - -4 - -04 2004 Jun 20 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 2008 O 18 - -3 - -03 - Z America/Argentina/San_Juan -4:34:4 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1991 Mar -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1991 Mar - -4 - -04 1991 May 7 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 - -3 - -03 2004 May 31 - -4 - -04 2004 Jul 25 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 2008 O 18 - -3 - -03 - Z America/Argentina/Jujuy -4:21:12 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1990 Mar 4 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1990 Mar 4 - -4 - -04 1990 O 28 - -4 1 -03 1991 Mar 17 - -4 - -04 1991 O 6 - -3 1 -02 1992 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 -+-3 A -03/-02 2008 O 18 - -3 - -03 - Z America/Argentina/Catamarca -4:23:8 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1991 Mar 3 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1991 Mar 3 - -4 - -04 1991 O 20 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 - -3 - -03 2004 Jun - -4 - -04 2004 Jun 20 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 2008 O 18 - -3 - -03 - Z America/Argentina/Mendoza -4:35:16 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1990 Mar 4 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1990 Mar 4 - -4 - -04 1990 O 15 - -4 1 -03 1991 Mar - -4 - -04 1991 O 15 - -4 1 -03 1992 Mar - -4 - -04 1992 O 18 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 - -3 - -03 2004 May 23 - -4 - -04 2004 S 26 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 2008 O 18 - -3 - -03 --R As 2008 2009 - Mar Sun>=8 0 0 - --R As 2007 2008 - O Sun>=8 0 1 - -+R Sa 2008 2009 - Mar Sun>=8 0 0 - -+R Sa 2007 2008 - O Sun>=8 0 1 - - Z America/Argentina/San_Luis -4:25:24 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1990 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1990 - -3 1 -02 1990 Mar 14 - -4 - -04 1990 O 15 - -4 1 -03 1991 Mar -@@ -3590,286 +3607,288 @@ Z America/Argentina/San_Luis -4:25:24 - LMT 1894 O 31 - -4 1 -03 2000 Mar 3 - -3 - -03 2004 May 31 - -4 - -04 2004 Jul 25 ---3 Ar -03/-02 2008 Ja 21 ---4 As -04/-03 2009 O 11 -+-3 A -03/-02 2008 Ja 21 -+-4 Sa -04/-03 2009 O 11 - -3 - -03 - Z America/Argentina/Rio_Gallegos -4:36:52 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 - -3 - -03 2004 Jun - -4 - -04 2004 Jun 20 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 2008 O 18 - -3 - -03 - Z America/Argentina/Ushuaia -4:33:12 - LMT 1894 O 31 - -4:16:48 - CMT 1920 May - -4 - -04 1930 D ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1999 O 3 ---4 Ar -04/-03 2000 Mar 3 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1999 O 3 -+-4 A -04/-03 2000 Mar 3 - -3 - -03 2004 May 30 - -4 - -04 2004 Jun 20 ---3 Ar -03/-02 2008 O 18 -+-3 A -03/-02 2008 O 18 - -3 - -03 - Li America/Curacao America/Aruba - Z America/La_Paz -4:32:36 - LMT 1890 - -4:32:36 - CMT 1931 O 15 - -4:32:36 1 BST 1932 Mar 21 - -4 - -04 --R At 1931 o - O 3 11 1 - --R At 1932 1933 - Ap 1 0 0 - --R At 1932 o - O 3 0 1 - --R At 1949 1952 - D 1 0 1 - --R At 1950 o - Ap 16 1 0 - --R At 1951 1952 - Ap 1 0 0 - --R At 1953 o - Mar 1 0 0 - --R At 1963 o - D 9 0 1 - --R At 1964 o - Mar 1 0 0 - --R At 1965 o - Ja 31 0 1 - --R At 1965 o - Mar 31 0 0 - --R At 1965 o - D 1 0 1 - --R At 1966 1968 - Mar 1 0 0 - --R At 1966 1967 - N 1 0 1 - --R At 1985 o - N 2 0 1 - --R At 1986 o - Mar 15 0 0 - --R At 1986 o - O 25 0 1 - --R At 1987 o - F 14 0 0 - --R At 1987 o - O 25 0 1 - --R At 1988 o - F 7 0 0 - --R At 1988 o - O 16 0 1 - --R At 1989 o - Ja 29 0 0 - --R At 1989 o - O 15 0 1 - --R At 1990 o - F 11 0 0 - --R At 1990 o - O 21 0 1 - --R At 1991 o - F 17 0 0 - --R At 1991 o - O 20 0 1 - --R At 1992 o - F 9 0 0 - --R At 1992 o - O 25 0 1 - --R At 1993 o - Ja 31 0 0 - --R At 1993 1995 - O Sun>=11 0 1 - --R At 1994 1995 - F Sun>=15 0 0 - --R At 1996 o - F 11 0 0 - --R At 1996 o - O 6 0 1 - --R At 1997 o - F 16 0 0 - --R At 1997 o - O 6 0 1 - --R At 1998 o - Mar 1 0 0 - --R At 1998 o - O 11 0 1 - --R At 1999 o - F 21 0 0 - --R At 1999 o - O 3 0 1 - --R At 2000 o - F 27 0 0 - --R At 2000 2001 - O Sun>=8 0 1 - --R At 2001 2006 - F Sun>=15 0 0 - --R At 2002 o - N 3 0 1 - --R At 2003 o - O 19 0 1 - --R At 2004 o - N 2 0 1 - --R At 2005 o - O 16 0 1 - --R At 2006 o - N 5 0 1 - --R At 2007 o - F 25 0 0 - --R At 2007 o - O Sun>=8 0 1 - --R At 2008 2017 - O Sun>=15 0 1 - --R At 2008 2011 - F Sun>=15 0 0 - --R At 2012 o - F Sun>=22 0 0 - --R At 2013 2014 - F Sun>=15 0 0 - --R At 2015 o - F Sun>=22 0 0 - --R At 2016 2022 - F Sun>=15 0 0 - --R At 2018 ma - N Sun>=1 0 1 - --R At 2023 o - F Sun>=22 0 0 - --R At 2024 2025 - F Sun>=15 0 0 - --R At 2026 o - F Sun>=22 0 0 - --R At 2027 2033 - F Sun>=15 0 0 - --R At 2034 o - F Sun>=22 0 0 - --R At 2035 2036 - F Sun>=15 0 0 - --R At 2037 o - F Sun>=22 0 0 - --R At 2038 ma - F Sun>=15 0 0 - -+R B 1931 o - O 3 11 1 - -+R B 1932 1933 - Ap 1 0 0 - -+R B 1932 o - O 3 0 1 - -+R B 1949 1952 - D 1 0 1 - -+R B 1950 o - Ap 16 1 0 - -+R B 1951 1952 - Ap 1 0 0 - -+R B 1953 o - Mar 1 0 0 - -+R B 1963 o - D 9 0 1 - -+R B 1964 o - Mar 1 0 0 - -+R B 1965 o - Ja 31 0 1 - -+R B 1965 o - Mar 31 0 0 - -+R B 1965 o - D 1 0 1 - -+R B 1966 1968 - Mar 1 0 0 - -+R B 1966 1967 - N 1 0 1 - -+R B 1985 o - N 2 0 1 - -+R B 1986 o - Mar 15 0 0 - -+R B 1986 o - O 25 0 1 - -+R B 1987 o - F 14 0 0 - -+R B 1987 o - O 25 0 1 - -+R B 1988 o - F 7 0 0 - -+R B 1988 o - O 16 0 1 - -+R B 1989 o - Ja 29 0 0 - -+R B 1989 o - O 15 0 1 - -+R B 1990 o - F 11 0 0 - -+R B 1990 o - O 21 0 1 - -+R B 1991 o - F 17 0 0 - -+R B 1991 o - O 20 0 1 - -+R B 1992 o - F 9 0 0 - -+R B 1992 o - O 25 0 1 - -+R B 1993 o - Ja 31 0 0 - -+R B 1993 1995 - O Sun>=11 0 1 - -+R B 1994 1995 - F Sun>=15 0 0 - -+R B 1996 o - F 11 0 0 - -+R B 1996 o - O 6 0 1 - -+R B 1997 o - F 16 0 0 - -+R B 1997 o - O 6 0 1 - -+R B 1998 o - Mar 1 0 0 - -+R B 1998 o - O 11 0 1 - -+R B 1999 o - F 21 0 0 - -+R B 1999 o - O 3 0 1 - -+R B 2000 o - F 27 0 0 - -+R B 2000 2001 - O Sun>=8 0 1 - -+R B 2001 2006 - F Sun>=15 0 0 - -+R B 2002 o - N 3 0 1 - -+R B 2003 o - O 19 0 1 - -+R B 2004 o - N 2 0 1 - -+R B 2005 o - O 16 0 1 - -+R B 2006 o - N 5 0 1 - -+R B 2007 o - F 25 0 0 - -+R B 2007 o - O Sun>=8 0 1 - -+R B 2008 2017 - O Sun>=15 0 1 - -+R B 2008 2011 - F Sun>=15 0 0 - -+R B 2012 o - F Sun>=22 0 0 - -+R B 2013 2014 - F Sun>=15 0 0 - -+R B 2015 o - F Sun>=22 0 0 - -+R B 2016 2022 - F Sun>=15 0 0 - -+R B 2018 ma - N Sun>=1 0 1 - -+R B 2023 o - F Sun>=22 0 0 - -+R B 2024 2025 - F Sun>=15 0 0 - -+R B 2026 o - F Sun>=22 0 0 - -+R B 2027 2033 - F Sun>=15 0 0 - -+R B 2034 o - F Sun>=22 0 0 - -+R B 2035 2036 - F Sun>=15 0 0 - -+R B 2037 o - F Sun>=22 0 0 - -+R B 2038 ma - F Sun>=15 0 0 - - Z America/Noronha -2:9:40 - LMT 1914 ---2 At -02/-01 1990 S 17 -+-2 B -02/-01 1990 S 17 - -2 - -02 1999 S 30 ---2 At -02/-01 2000 O 15 -+-2 B -02/-01 2000 O 15 - -2 - -02 2001 S 13 ---2 At -02/-01 2002 O -+-2 B -02/-01 2002 O - -2 - -02 - Z America/Belem -3:13:56 - LMT 1914 ---3 At -03/-02 1988 S 12 -+-3 B -03/-02 1988 S 12 - -3 - -03 - Z America/Santarem -3:38:48 - LMT 1914 ---4 At -04/-03 1988 S 12 -+-4 B -04/-03 1988 S 12 - -4 - -04 2008 Jun 24 - -3 - -03 - Z America/Fortaleza -2:34 - LMT 1914 ---3 At -03/-02 1990 S 17 -+-3 B -03/-02 1990 S 17 - -3 - -03 1999 S 30 ---3 At -03/-02 2000 O 22 -+-3 B -03/-02 2000 O 22 - -3 - -03 2001 S 13 ---3 At -03/-02 2002 O -+-3 B -03/-02 2002 O - -3 - -03 - Z America/Recife -2:19:36 - LMT 1914 ---3 At -03/-02 1990 S 17 -+-3 B -03/-02 1990 S 17 - -3 - -03 1999 S 30 ---3 At -03/-02 2000 O 15 -+-3 B -03/-02 2000 O 15 - -3 - -03 2001 S 13 ---3 At -03/-02 2002 O -+-3 B -03/-02 2002 O - -3 - -03 - Z America/Araguaina -3:12:48 - LMT 1914 ---3 At -03/-02 1990 S 17 -+-3 B -03/-02 1990 S 17 - -3 - -03 1995 S 14 ---3 At -03/-02 2003 S 24 -+-3 B -03/-02 2003 S 24 - -3 - -03 2012 O 21 ---3 At -03/-02 2013 S -+-3 B -03/-02 2013 S - -3 - -03 - Z America/Maceio -2:22:52 - LMT 1914 ---3 At -03/-02 1990 S 17 -+-3 B -03/-02 1990 S 17 - -3 - -03 1995 O 13 ---3 At -03/-02 1996 S 4 -+-3 B -03/-02 1996 S 4 - -3 - -03 1999 S 30 ---3 At -03/-02 2000 O 22 -+-3 B -03/-02 2000 O 22 - -3 - -03 2001 S 13 ---3 At -03/-02 2002 O -+-3 B -03/-02 2002 O - -3 - -03 - Z America/Bahia -2:34:4 - LMT 1914 ---3 At -03/-02 2003 S 24 -+-3 B -03/-02 2003 S 24 - -3 - -03 2011 O 16 ---3 At -03/-02 2012 O 21 -+-3 B -03/-02 2012 O 21 - -3 - -03 - Z America/Sao_Paulo -3:6:28 - LMT 1914 ---3 At -03/-02 1963 O 23 -+-3 B -03/-02 1963 O 23 - -3 1 -02 1964 ---3 At -03/-02 -+-3 B -03/-02 - Z America/Campo_Grande -3:38:28 - LMT 1914 ---4 At -04/-03 -+-4 B -04/-03 - Z America/Cuiaba -3:44:20 - LMT 1914 ---4 At -04/-03 2003 S 24 -+-4 B -04/-03 2003 S 24 - -4 - -04 2004 O ---4 At -04/-03 -+-4 B -04/-03 - Z America/Porto_Velho -4:15:36 - LMT 1914 ---4 At -04/-03 1988 S 12 -+-4 B -04/-03 1988 S 12 - -4 - -04 - Z America/Boa_Vista -4:2:40 - LMT 1914 ---4 At -04/-03 1988 S 12 -+-4 B -04/-03 1988 S 12 - -4 - -04 1999 S 30 ---4 At -04/-03 2000 O 15 -+-4 B -04/-03 2000 O 15 - -4 - -04 - Z America/Manaus -4:0:4 - LMT 1914 ---4 At -04/-03 1988 S 12 -+-4 B -04/-03 1988 S 12 - -4 - -04 1993 S 28 ---4 At -04/-03 1994 S 22 -+-4 B -04/-03 1994 S 22 - -4 - -04 - Z America/Eirunepe -4:39:28 - LMT 1914 ---5 At -05/-04 1988 S 12 -+-5 B -05/-04 1988 S 12 - -5 - -05 1993 S 28 ---5 At -05/-04 1994 S 22 -+-5 B -05/-04 1994 S 22 - -5 - -05 2008 Jun 24 - -4 - -04 2013 N 10 - -5 - -05 - Z America/Rio_Branco -4:31:12 - LMT 1914 ---5 At -05/-04 1988 S 12 -+-5 B -05/-04 1988 S 12 - -5 - -05 2008 Jun 24 - -4 - -04 2013 N 10 - -5 - -05 --R Au 1927 1931 - S 1 0 1 - --R Au 1928 1932 - Ap 1 0 0 - --R Au 1968 o - N 3 4u 1 - --R Au 1969 o - Mar 30 3u 0 - --R Au 1969 o - N 23 4u 1 - --R Au 1970 o - Mar 29 3u 0 - --R Au 1971 o - Mar 14 3u 0 - --R Au 1970 1972 - O Sun>=9 4u 1 - --R Au 1972 1986 - Mar Sun>=9 3u 0 - --R Au 1973 o - S 30 4u 1 - --R Au 1974 1987 - O Sun>=9 4u 1 - --R Au 1987 o - Ap 12 3u 0 - --R Au 1988 1990 - Mar Sun>=9 3u 0 - --R Au 1988 1989 - O Sun>=9 4u 1 - --R Au 1990 o - S 16 4u 1 - --R Au 1991 1996 - Mar Sun>=9 3u 0 - --R Au 1991 1997 - O Sun>=9 4u 1 - --R Au 1997 o - Mar 30 3u 0 - --R Au 1998 o - Mar Sun>=9 3u 0 - --R Au 1998 o - S 27 4u 1 - --R Au 1999 o - Ap 4 3u 0 - --R Au 1999 2010 - O Sun>=9 4u 1 - --R Au 2000 2007 - Mar Sun>=9 3u 0 - --R Au 2008 o - Mar 30 3u 0 - --R Au 2009 o - Mar Sun>=9 3u 0 - --R Au 2010 o - Ap Sun>=1 3u 0 - --R Au 2011 o - May Sun>=2 3u 0 - --R Au 2011 o - Au Sun>=16 4u 1 - --R Au 2012 2014 - Ap Sun>=23 3u 0 - --R Au 2012 2014 - S Sun>=2 4u 1 - --R Au 2016 ma - May Sun>=9 3u 0 - --R Au 2016 ma - Au Sun>=9 4u 1 - -+R x 1927 1931 - S 1 0 1 - -+R x 1928 1932 - Ap 1 0 0 - -+R x 1968 o - N 3 4u 1 - -+R x 1969 o - Mar 30 3u 0 - -+R x 1969 o - N 23 4u 1 - -+R x 1970 o - Mar 29 3u 0 - -+R x 1971 o - Mar 14 3u 0 - -+R x 1970 1972 - O Sun>=9 4u 1 - -+R x 1972 1986 - Mar Sun>=9 3u 0 - -+R x 1973 o - S 30 4u 1 - -+R x 1974 1987 - O Sun>=9 4u 1 - -+R x 1987 o - Ap 12 3u 0 - -+R x 1988 1990 - Mar Sun>=9 3u 0 - -+R x 1988 1989 - O Sun>=9 4u 1 - -+R x 1990 o - S 16 4u 1 - -+R x 1991 1996 - Mar Sun>=9 3u 0 - -+R x 1991 1997 - O Sun>=9 4u 1 - -+R x 1997 o - Mar 30 3u 0 - -+R x 1998 o - Mar Sun>=9 3u 0 - -+R x 1998 o - S 27 4u 1 - -+R x 1999 o - Ap 4 3u 0 - -+R x 1999 2010 - O Sun>=9 4u 1 - -+R x 2000 2007 - Mar Sun>=9 3u 0 - -+R x 2008 o - Mar 30 3u 0 - -+R x 2009 o - Mar Sun>=9 3u 0 - -+R x 2010 o - Ap Sun>=1 3u 0 - -+R x 2011 o - May Sun>=2 3u 0 - -+R x 2011 o - Au Sun>=16 4u 1 - -+R x 2012 2014 - Ap Sun>=23 3u 0 - -+R x 2012 2014 - S Sun>=2 4u 1 - -+R x 2016 2018 - May Sun>=9 3u 0 - -+R x 2016 2018 - Au Sun>=9 4u 1 - -+R x 2019 ma - Ap Sun>=2 3u 0 - -+R x 2019 ma - S Sun>=2 4u 1 - - Z America/Santiago -4:42:46 - LMT 1890 - -4:42:46 - SMT 1910 Ja 10 - -5 - -05 1916 Jul - -4:42:46 - SMT 1918 S 10 - -4 - -04 1919 Jul - -4:42:46 - SMT 1927 S ---5 Au -05/-04 1932 S -+-5 x -05/-04 1932 S - -4 - -04 1942 Jun - -5 - -05 1942 Au - -4 - -04 1946 Jul 15 - -4 1 -03 1946 S - -4 - -04 1947 Ap - -5 - -05 1947 May 21 23 ---4 Au -04/-03 -+-4 x -04/-03 - Z America/Punta_Arenas -4:43:40 - LMT 1890 - -4:42:46 - SMT 1910 Ja 10 - -5 - -05 1916 Jul - -4:42:46 - SMT 1918 S 10 - -4 - -04 1919 Jul - -4:42:46 - SMT 1927 S ---5 Au -05/-04 1932 S -+-5 x -05/-04 1932 S - -4 - -04 1942 Jun - -5 - -05 1942 Au - -4 - -04 1947 Ap - -5 - -05 1947 May 21 23 ---4 Au -04/-03 2016 D 4 -+-4 x -04/-03 2016 D 4 - -3 - -03 - Z Pacific/Easter -7:17:28 - LMT 1890 - -7:17:28 - EMT 1932 S ---7 Au -07/-06 1982 Mar 14 3u ---6 Au -06/-05 -+-7 x -07/-06 1982 Mar 14 3u -+-6 x -06/-05 - Z Antarctica/Palmer 0 - -00 1965 ---4 Ar -04/-03 1969 O 5 ---3 Ar -03/-02 1982 May ---4 Au -04/-03 2016 D 4 -+-4 A -04/-03 1969 O 5 -+-3 A -03/-02 1982 May -+-4 x -04/-03 2016 D 4 - -3 - -03 --R Av 1992 o - May 3 0 1 - --R Av 1993 o - Ap 4 0 0 - -+R CO 1992 o - May 3 0 1 - -+R CO 1993 o - Ap 4 0 0 - - Z America/Bogota -4:56:16 - LMT 1884 Mar 13 - -4:56:16 - BMT 1914 N 23 ---5 Av -05/-04 -+-5 CO -05/-04 - Z America/Curacao -4:35:47 - LMT 1912 F 12 - -4:30 - -0430 1965 - -4 - AST - Li America/Curacao America/Lower_Princes - Li America/Curacao America/Kralendijk --R Aw 1992 o - N 28 0 1 - --R Aw 1993 o - F 5 0 0 - -+R EC 1992 o - N 28 0 1 - -+R EC 1993 o - F 5 0 0 - - Z America/Guayaquil -5:19:20 - LMT 1890 - -5:14 - QMT 1931 ---5 Aw -05/-04 -+-5 EC -05/-04 - Z Pacific/Galapagos -5:58:24 - LMT 1931 - -5 - -05 1986 ---6 Aw -06/-05 --R Ax 1937 1938 - S lastSun 0 1 - --R Ax 1938 1942 - Mar Sun>=19 0 0 - --R Ax 1939 o - O 1 0 1 - --R Ax 1940 1942 - S lastSun 0 1 - --R Ax 1943 o - Ja 1 0 0 - --R Ax 1983 o - S lastSun 0 1 - --R Ax 1984 1985 - Ap lastSun 0 0 - --R Ax 1984 o - S 16 0 1 - --R Ax 1985 2000 - S Sun>=9 0 1 - --R Ax 1986 2000 - Ap Sun>=16 0 0 - --R Ax 2001 2010 - Ap Sun>=15 2 0 - --R Ax 2001 2010 - S Sun>=1 2 1 - -+-6 EC -06/-05 -+R FK 1937 1938 - S lastSun 0 1 - -+R FK 1938 1942 - Mar Sun>=19 0 0 - -+R FK 1939 o - O 1 0 1 - -+R FK 1940 1942 - S lastSun 0 1 - -+R FK 1943 o - Ja 1 0 0 - -+R FK 1983 o - S lastSun 0 1 - -+R FK 1984 1985 - Ap lastSun 0 0 - -+R FK 1984 o - S 16 0 1 - -+R FK 1985 2000 - S Sun>=9 0 1 - -+R FK 1986 2000 - Ap Sun>=16 0 0 - -+R FK 2001 2010 - Ap Sun>=15 2 0 - -+R FK 2001 2010 - S Sun>=1 2 1 - - Z Atlantic/Stanley -3:51:24 - LMT 1890 - -3:51:24 - SMT 1912 Mar 12 ---4 Ax -04/-03 1983 May ---3 Ax -03/-02 1985 S 15 ---4 Ax -04/-03 2010 S 5 2 -+-4 FK -04/-03 1983 May -+-3 FK -03/-02 1985 S 15 -+-4 FK -04/-03 2010 S 5 2 - -3 - -03 - Z America/Cayenne -3:29:20 - LMT 1911 Jul - -4 - -04 1967 O -@@ -3878,46 +3897,46 @@ Z America/Guyana -3:52:40 - LMT 1915 Mar - -3:45 - -0345 1975 Jul 31 - -3 - -03 1991 - -4 - -04 --R Ay 1975 1988 - O 1 0 1 - --R Ay 1975 1978 - Mar 1 0 0 - --R Ay 1979 1991 - Ap 1 0 0 - --R Ay 1989 o - O 22 0 1 - --R Ay 1990 o - O 1 0 1 - --R Ay 1991 o - O 6 0 1 - --R Ay 1992 o - Mar 1 0 0 - --R Ay 1992 o - O 5 0 1 - --R Ay 1993 o - Mar 31 0 0 - --R Ay 1993 1995 - O 1 0 1 - --R Ay 1994 1995 - F lastSun 0 0 - --R Ay 1996 o - Mar 1 0 0 - --R Ay 1996 2001 - O Sun>=1 0 1 - --R Ay 1997 o - F lastSun 0 0 - --R Ay 1998 2001 - Mar Sun>=1 0 0 - --R Ay 2002 2004 - Ap Sun>=1 0 0 - --R Ay 2002 2003 - S Sun>=1 0 1 - --R Ay 2004 2009 - O Sun>=15 0 1 - --R Ay 2005 2009 - Mar Sun>=8 0 0 - --R Ay 2010 ma - O Sun>=1 0 1 - --R Ay 2010 2012 - Ap Sun>=8 0 0 - --R Ay 2013 ma - Mar Sun>=22 0 0 - -+R y 1975 1988 - O 1 0 1 - -+R y 1975 1978 - Mar 1 0 0 - -+R y 1979 1991 - Ap 1 0 0 - -+R y 1989 o - O 22 0 1 - -+R y 1990 o - O 1 0 1 - -+R y 1991 o - O 6 0 1 - -+R y 1992 o - Mar 1 0 0 - -+R y 1992 o - O 5 0 1 - -+R y 1993 o - Mar 31 0 0 - -+R y 1993 1995 - O 1 0 1 - -+R y 1994 1995 - F lastSun 0 0 - -+R y 1996 o - Mar 1 0 0 - -+R y 1996 2001 - O Sun>=1 0 1 - -+R y 1997 o - F lastSun 0 0 - -+R y 1998 2001 - Mar Sun>=1 0 0 - -+R y 2002 2004 - Ap Sun>=1 0 0 - -+R y 2002 2003 - S Sun>=1 0 1 - -+R y 2004 2009 - O Sun>=15 0 1 - -+R y 2005 2009 - Mar Sun>=8 0 0 - -+R y 2010 ma - O Sun>=1 0 1 - -+R y 2010 2012 - Ap Sun>=8 0 0 - -+R y 2013 ma - Mar Sun>=22 0 0 - - Z America/Asuncion -3:50:40 - LMT 1890 - -3:50:40 - AMT 1931 O 10 - -4 - -04 1972 O - -3 - -03 1974 Ap ---4 Ay -04/-03 --R Az 1938 o - Ja 1 0 1 - --R Az 1938 o - Ap 1 0 0 - --R Az 1938 1939 - S lastSun 0 1 - --R Az 1939 1940 - Mar Sun>=24 0 0 - --R Az 1986 1987 - Ja 1 0 1 - --R Az 1986 1987 - Ap 1 0 0 - --R Az 1990 o - Ja 1 0 1 - --R Az 1990 o - Ap 1 0 0 - --R Az 1994 o - Ja 1 0 1 - --R Az 1994 o - Ap 1 0 0 - -+-4 y -04/-03 -+R PE 1938 o - Ja 1 0 1 - -+R PE 1938 o - Ap 1 0 0 - -+R PE 1938 1939 - S lastSun 0 1 - -+R PE 1939 1940 - Mar Sun>=24 0 0 - -+R PE 1986 1987 - Ja 1 0 1 - -+R PE 1986 1987 - Ap 1 0 0 - -+R PE 1990 o - Ja 1 0 1 - -+R PE 1990 o - Ap 1 0 0 - -+R PE 1994 o - Ja 1 0 1 - -+R PE 1994 o - Ap 1 0 0 - - Z America/Lima -5:8:12 - LMT 1890 - -5:8:36 - LMT 1908 Jul 28 ---5 Az -05/-04 -+-5 PE -05/-04 - Z Atlantic/South_Georgia -2:26:8 - LMT 1890 - -2 - -02 - Z America/Paramaribo -3:40:40 - LMT 1911 -@@ -3940,65 +3959,65 @@ Li America/Port_of_Spain America/St_Lucia - Li America/Port_of_Spain America/St_Thomas - Li America/Port_of_Spain America/St_Vincent - Li America/Port_of_Spain America/Tortola --R A! 1923 1925 - O 1 0 0:30 - --R A! 1924 1926 - Ap 1 0 0 - --R A! 1933 1938 - O lastSun 0 0:30 - --R A! 1934 1941 - Mar lastSat 24 0 - --R A! 1939 o - O 1 0 0:30 - --R A! 1940 o - O 27 0 0:30 - --R A! 1941 o - Au 1 0 0:30 - --R A! 1942 o - D 14 0 0:30 - --R A! 1943 o - Mar 14 0 0 - --R A! 1959 o - May 24 0 0:30 - --R A! 1959 o - N 15 0 0 - --R A! 1960 o - Ja 17 0 1 - --R A! 1960 o - Mar 6 0 0 - --R A! 1965 o - Ap 4 0 1 - --R A! 1965 o - S 26 0 0 - --R A! 1968 o - May 27 0 0:30 - --R A! 1968 o - D 1 0 0 - --R A! 1970 o - Ap 25 0 1 - --R A! 1970 o - Jun 14 0 0 - --R A! 1972 o - Ap 23 0 1 - --R A! 1972 o - Jul 16 0 0 - --R A! 1974 o - Ja 13 0 1:30 - --R A! 1974 o - Mar 10 0 0:30 - --R A! 1974 o - S 1 0 0 - --R A! 1974 o - D 22 0 1 - --R A! 1975 o - Mar 30 0 0 - --R A! 1976 o - D 19 0 1 - --R A! 1977 o - Mar 6 0 0 - --R A! 1977 o - D 4 0 1 - --R A! 1978 1979 - Mar Sun>=1 0 0 - --R A! 1978 o - D 17 0 1 - --R A! 1979 o - Ap 29 0 1 - --R A! 1980 o - Mar 16 0 0 - --R A! 1987 o - D 14 0 1 - --R A! 1988 o - F 28 0 0 - --R A! 1988 o - D 11 0 1 - --R A! 1989 o - Mar 5 0 0 - --R A! 1989 o - O 29 0 1 - --R A! 1990 o - F 25 0 0 - --R A! 1990 1991 - O Sun>=21 0 1 - --R A! 1991 1992 - Mar Sun>=1 0 0 - --R A! 1992 o - O 18 0 1 - --R A! 1993 o - F 28 0 0 - --R A! 2004 o - S 19 0 1 - --R A! 2005 o - Mar 27 2 0 - --R A! 2005 o - O 9 2 1 - --R A! 2006 2015 - Mar Sun>=8 2 0 - --R A! 2006 2014 - O Sun>=1 2 1 - -+R U 1923 1925 - O 1 0 0:30 - -+R U 1924 1926 - Ap 1 0 0 - -+R U 1933 1938 - O lastSun 0 0:30 - -+R U 1934 1941 - Mar lastSat 24 0 - -+R U 1939 o - O 1 0 0:30 - -+R U 1940 o - O 27 0 0:30 - -+R U 1941 o - Au 1 0 0:30 - -+R U 1942 o - D 14 0 0:30 - -+R U 1943 o - Mar 14 0 0 - -+R U 1959 o - May 24 0 0:30 - -+R U 1959 o - N 15 0 0 - -+R U 1960 o - Ja 17 0 1 - -+R U 1960 o - Mar 6 0 0 - -+R U 1965 o - Ap 4 0 1 - -+R U 1965 o - S 26 0 0 - -+R U 1968 o - May 27 0 0:30 - -+R U 1968 o - D 1 0 0 - -+R U 1970 o - Ap 25 0 1 - -+R U 1970 o - Jun 14 0 0 - -+R U 1972 o - Ap 23 0 1 - -+R U 1972 o - Jul 16 0 0 - -+R U 1974 o - Ja 13 0 1:30 - -+R U 1974 o - Mar 10 0 0:30 - -+R U 1974 o - S 1 0 0 - -+R U 1974 o - D 22 0 1 - -+R U 1975 o - Mar 30 0 0 - -+R U 1976 o - D 19 0 1 - -+R U 1977 o - Mar 6 0 0 - -+R U 1977 o - D 4 0 1 - -+R U 1978 1979 - Mar Sun>=1 0 0 - -+R U 1978 o - D 17 0 1 - -+R U 1979 o - Ap 29 0 1 - -+R U 1980 o - Mar 16 0 0 - -+R U 1987 o - D 14 0 1 - -+R U 1988 o - F 28 0 0 - -+R U 1988 o - D 11 0 1 - -+R U 1989 o - Mar 5 0 0 - -+R U 1989 o - O 29 0 1 - -+R U 1990 o - F 25 0 0 - -+R U 1990 1991 - O Sun>=21 0 1 - -+R U 1991 1992 - Mar Sun>=1 0 0 - -+R U 1992 o - O 18 0 1 - -+R U 1993 o - F 28 0 0 - -+R U 2004 o - S 19 0 1 - -+R U 2005 o - Mar 27 2 0 - -+R U 2005 o - O 9 2 1 - -+R U 2006 2015 - Mar Sun>=8 2 0 - -+R U 2006 2014 - O Sun>=1 2 1 - - Z America/Montevideo -3:44:51 - LMT 1908 Jun 10 - -3:44:51 - MMT 1920 May - -4 - -04 1923 O ---3:30 A! -0330/-03 1942 D 14 ---3 A! -03/-0230 1960 ---3 A! -03/-02 1968 ---3 A! -03/-0230 1970 ---3 A! -03/-02 1974 ---3 A! -03/-0130 1974 Mar 10 ---3 A! -03/-0230 1974 D 22 ---3 A! -03/-02 -+-3:30 U -0330/-03 1942 D 14 -+-3 U -03/-0230 1960 -+-3 U -03/-02 1968 -+-3 U -03/-0230 1970 -+-3 U -03/-02 1974 -+-3 U -03/-0130 1974 Mar 10 -+-3 U -03/-0230 1974 D 22 -+-3 U -03/-02 - Z America/Caracas -4:27:44 - LMT 1890 - -4:27:40 - CMT 1912 F 12 - -4:30 - -0430 1965 -diff --git a/src/timezone/known_abbrevs.txt b/src/timezone/known_abbrevs.txt -index 67d2f0b..2ae443a 100644 ---- a/src/timezone/known_abbrevs.txt -+++ b/src/timezone/known_abbrevs.txt -@@ -92,6 +92,7 @@ NZST 43200 - PDT -25200 D - PKT 18000 - PST -28800 -+PST 28800 - SAST 7200 - SST -39600 - UCT 0 -diff --git a/src/timezone/tznames/America.txt b/src/timezone/tznames/America.txt -index 1c5eb1f..2594c37 100644 ---- a/src/timezone/tznames/America.txt -+++ b/src/timezone/tznames/America.txt -@@ -237,6 +237,9 @@ PDT -25200 D # Pacific Daylight Time - PET -18000 # Peru Time (obsolete) - PMDT -7200 D # Pierre & Miquelon Daylight Time (obsolete) - PMST -10800 # Pierre & Miquelon Standard Time (obsolete) -+# CONFLICT! PST is not unique -+# Other timezones: -+# - PST: Philippine Standard Time - PST -28800 # Pacific Standard Time - # (America/Dawson) - # (America/Los_Angeles) -diff --git a/src/timezone/tznames/Asia.txt b/src/timezone/tznames/Asia.txt -index e1fa931..1133339 100644 ---- a/src/timezone/tznames/Asia.txt -+++ b/src/timezone/tznames/Asia.txt -@@ -158,6 +158,10 @@ PKT 18000 # Pakistan Time - # (Asia/Karachi) - PKST 21600 D # Pakistan Summer Time - # (Asia/Karachi) -+# CONFLICT! PST is not unique -+# Other timezones: -+# - PST: Pacific Standard Time (America) -+PST 28800 # Philippine Standard Time - QYZT 21600 # Kizilorda Time (obsolete) - SAKST Asia/Sakhalin # Sakhalin Summer Time (obsolete) - SAKT Asia/Sakhalin # Sakhalin Time (obsolete) -diff --git a/src/timezone/tznames/Default b/src/timezone/tznames/Default -index 3826096..1532413 100644 ---- a/src/timezone/tznames/Default -+++ b/src/timezone/tznames/Default -@@ -181,6 +181,9 @@ PDT -25200 D # Pacific Daylight Time - # (America/Whitehorse) - PMDT -7200 D # Pierre & Miquelon Daylight Time (obsolete) - PMST -10800 # Pierre & Miquelon Standard Time (obsolete) -+# CONFLICT! PST is not unique -+# Other timezones: -+# - PST: Philippine Standard Time - PST -28800 # Pacific Standard Time - # (America/Dawson) - # (America/Los_Angeles) -diff --git a/src/timezone/tznames/Pacific.txt b/src/timezone/tznames/Pacific.txt -index c86248b..c30008c 100644 ---- a/src/timezone/tznames/Pacific.txt -+++ b/src/timezone/tznames/Pacific.txt -@@ -52,6 +52,9 @@ NZST 43200 # New Zealand Standard Time - PGT 36000 # Papua New Guinea Time (obsolete) - PHOT Pacific/Enderbury # Phoenix Islands Time (Kiribati) (obsolete) - PONT 39600 # Ponape Time (Micronesia) (obsolete) -+# CONFLICT! PST is not unique -+# Other timezones: -+# - PST: Philippine Standard Time - PST -28800 # Pacific Standard Time - # (America/Dawson) - # (America/Los_Angeles) --- -2.7.4 - diff --git a/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch b/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch index 971510943d9..22b62d9ded7 100644 --- a/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch +++ b/meta-oe/recipes-dbs/postgresql/files/not-check-libperl.patch @@ -1,4 +1,7 @@ -[PATCH] not check libperl under cross compiling +From 7e2af4de19be58bc9d551c41ce2750396d357f34 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Tue, 27 Nov 2018 13:25:15 +0800 +Subject: [PATCH] PATCH] not check libperl under cross compiling Upstream-Status: Inappropriate [configuration] @@ -6,23 +9,29 @@ libperl ldflags returned by PGAC_CHECK_PERL_EMBED_LDFLAGS are native, can not be used to check target library. postpresql has the dependency on perl, so not need to check libperl -again, like in postgresql-9.2.4 +again, like in postgresql-9.2.4 Signed-off-by: Roy Li + +update patch to version 11.1 +Signed-off-by: Changqing Li --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -Index: postgresql-9.4.15/configure.in -=================================================================== ---- postgresql-9.4.15.orig/configure.in -+++ postgresql-9.4.15/configure.in -@@ -1879,7 +1879,7 @@ if test "$with_tcl" = yes; then +diff --git a/configure.in b/configure.in +index b98b9bb..8584677 100644 +--- a/configure.in ++++ b/configure.in +@@ -2211,7 +2211,7 @@ Use --without-tcl to disable building PL/Tcl.]) fi # check for -if test "$with_perl" = yes; then +if test "$with_perl" = yes && test "$cross_compiling" = no; then ac_save_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -I$perl_archlibexp/CORE" + CPPFLAGS="$CPPFLAGS $perl_includespec" AC_CHECK_HEADER(perl.h, [], [AC_MSG_ERROR([header file is required for Perl])], +-- +2.7.4 + diff --git a/meta-oe/recipes-dbs/postgresql/postgresql_10.5.bb b/meta-oe/recipes-dbs/postgresql/postgresql_10.5.bb deleted file mode 100644 index 1a02f154c5a..00000000000 --- a/meta-oe/recipes-dbs/postgresql/postgresql_10.5.bb +++ /dev/null @@ -1,12 +0,0 @@ -require postgresql.inc - -LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=6dc95e63aa4d72502ff8193dfe2ddd38" - -SRC_URI += "\ - file://not-check-libperl.patch \ - file://0001-Update-time-zone-data-files-to-tzdata-release-2018f.patch \ - file://0001-Sync-our-copy-of-the-timezone-library-with-IANA-rele.patch \ -" - -SRC_URI[md5sum] = "a5fe5fdff2d6c28f65601398be0950df" -SRC_URI[sha256sum] = "6c8e616c91a45142b85c0aeb1f29ebba4a361309e86469e0fb4617b6a73c4011" diff --git a/meta-oe/recipes-dbs/postgresql/postgresql_11.1.bb b/meta-oe/recipes-dbs/postgresql/postgresql_11.1.bb new file mode 100644 index 00000000000..9713cb83b2c --- /dev/null +++ b/meta-oe/recipes-dbs/postgresql/postgresql_11.1.bb @@ -0,0 +1,10 @@ +require postgresql.inc + +LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=6dc95e63aa4d72502ff8193dfe2ddd38" + +SRC_URI += "\ + file://not-check-libperl.patch \ +" + +SRC_URI[md5sum] = "5e45f6d5b859cc76b5d62f1e328e9711" +SRC_URI[sha256sum] = "90815e812874831e9a4bf6e1136bf73bc2c5a0464ef142e2dfea40cda206db08" diff --git a/meta-oe/recipes-extended/libzip/files/LICENSE b/meta-oe/recipes-extended/libzip/files/LICENSE new file mode 100644 index 00000000000..e93454e8835 --- /dev/null +++ b/meta-oe/recipes-extended/libzip/files/LICENSE @@ -0,0 +1,31 @@ +Copyright (C) 1999-2017 Dieter Baron and Thomas Klausner + +The authors can be contacted at + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/meta-oe/recipes-extended/libzip/libzip_0.9.bb b/meta-oe/recipes-extended/libzip/libzip_0.9.bb new file mode 100644 index 00000000000..d1d7b89bd02 --- /dev/null +++ b/meta-oe/recipes-extended/libzip/libzip_0.9.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "C library for reading, creating, and modifying zip archives" +SECTION = "libs" +HOMEPAGE = "http://www.nih.at/libzip" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file:///LICENSE;md5=01f8b1b8da6403739094396e15b1e722" +DEPENDS = "zlib" +PR = "r1" + +inherit autotools + +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI = "http://www.nih.at/${PN}/${PN}-${PV}.tar.bz2" + +SRC_URI[md5sum] = "56b9f11c1eee5eed189a20183d7e06b0" +SRC_URI[sha256sum] = "23a8c3624122a3777bb4ac3be4a867fd0bed7f3aacb8f1d0b68fc459cfb035fc" diff --git a/meta-oe/recipes-extended/mozjs/mozjs_52.9.1.bb b/meta-oe/recipes-extended/mozjs/mozjs_52.9.1.bb index 0dfe2f84840..440a25b74e0 100644 --- a/meta-oe/recipes-extended/mozjs/mozjs_52.9.1.bb +++ b/meta-oe/recipes-extended/mozjs/mozjs_52.9.1.bb @@ -49,7 +49,7 @@ EXTRA_OECONF = " \ " PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}" -PACKAGECONFIG[x11] = "--x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR},,virtual/libx11" +PACKAGECONFIG[x11] = "--x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR},--x-includes=no --x-libraries=no,virtual/libx11" EXTRA_OEMAKE_task-compile += "OS_LDFLAGS='-Wl,-latomic ${LDFLAGS}'" EXTRA_OEMAKE_task-install += "STATIC_LIBRARY_NAME=js_static" diff --git a/meta-oe/recipes-graphics/pango/pangomm_2.40.1.bb b/meta-oe/recipes-graphics/pango/pangomm_2.42.0.bb similarity index 83% rename from meta-oe/recipes-graphics/pango/pangomm_2.40.1.bb rename to meta-oe/recipes-graphics/pango/pangomm_2.42.0.bb index e0f72cd58a0..8a85db47544 100644 --- a/meta-oe/recipes-graphics/pango/pangomm_2.40.1.bb +++ b/meta-oe/recipes-graphics/pango/pangomm_2.42.0.bb @@ -9,8 +9,8 @@ DEPENDS = "mm-common cairomm glibmm pango" SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}" SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/pangomm/${SHRT_VER}/pangomm-${PV}.tar.xz" -SRC_URI[md5sum] = "874eadd9434613dbacf0272c82c3ac23" -SRC_URI[sha256sum] = "9762ee2a2d5781be6797448d4dd2383ce14907159b30bc12bf6b08e7227be3af" +SRC_URI[md5sum] = "6cffedf2225c4e72645a7d757fb5b832" +SRC_URI[sha256sum] = "ca6da067ff93a6445780c0b4b226eb84f484ab104b8391fb744a45cbc7edbf56" inherit distro_features_check autotools pkgconfig diff --git a/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch b/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch deleted file mode 100644 index 1d983e978f6..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Wed, 11 Apr 2018 15:14:13 +0200 -Subject: [PATCH] multipath-tools: add RDAC SUN/ArrayStorage to hwtable - -Already in scsi_dh: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/scsi/scsi_dh.c#n70 - -Cc: NetApp RDAC team -Cc: Christophe Varoqui -Cc: DM ML -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - libmultipath/hwtable.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 88b4700..827e899 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -890,6 +890,18 @@ static struct hwentry default_hw[] = { - .no_path_retry = 30, - }, - { -+ .vendor = "SUN", -+ .product = "ArrayStorage", -+ .bl_product = "Universal Xport", -+ .pgpolicy = GROUP_BY_PRIO, -+ .checker_name = RDAC, -+ .features = "2 pg_init_retries 50", -+ .hwhandler = "1 rdac", -+ .prio_name = PRIO_RDAC, -+ .pgfailback = -FAILBACK_IMMEDIATE, -+ .no_path_retry = 30, -+ }, -+ { - /* ZFS Storage Appliances */ - .vendor = "SUN", - .product = "(Sun Storage|ZFS Storage|COMSTAR)", --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch b/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch deleted file mode 100644 index 73f000aca29..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Tue, 24 Apr 2018 15:03:40 +0200 -Subject: [PATCH] multipath-tools: remove "c" from __cpluscplus, misspelled - -found by cppcheck(http://cppcheck.sf.net/): -[libmpathcmd/mpath_cmd.h:24]: (error) Invalid number of character '{' when these macros are defined: '__cpluscplus'. - -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM ML -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - libmpathcmd/mpath_cmd.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmpathcmd/mpath_cmd.h b/libmpathcmd/mpath_cmd.h -index aaa8da9..df9d938 100644 ---- a/libmpathcmd/mpath_cmd.h -+++ b/libmpathcmd/mpath_cmd.h -@@ -20,7 +20,7 @@ - #ifndef LIB_MPATH_CMD_H - #define LIB_MPATH_CMD_H - --#ifdef __cpluscplus -+#ifdef __cplusplus - extern "C" { - #endif - --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch b/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch deleted file mode 100644 index 7358e1ae971..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Thu, 12 Apr 2018 18:17:13 +0200 -Subject: [PATCH] multipath-tools: remove emacs autoconfig of kpartx/gpt.h - -Cc: Christophe Varoqui -Cc: DM ML -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - kpartx/gpt.h | 19 ------------------- - 1 file changed, 19 deletions(-) - -diff --git a/kpartx/gpt.h b/kpartx/gpt.h -index 66ce8f1..7bb54b7 100644 ---- a/kpartx/gpt.h -+++ b/kpartx/gpt.h -@@ -109,22 +109,3 @@ int read_gpt_pt (int fd, struct slice all, struct slice *sp, int ns); - - - #endif -- --/* -- * Overrides for Emacs so that we follow Linus's tabbing style. -- * Emacs will notice this stuff at the end of the file and automatically -- * adjust the settings for this buffer only. This must remain at the end -- * of the file. -- * --------------------------------------------------------------------------- -- * Local variables: -- * c-indent-level: 4 -- * c-brace-imaginary-offset: 0 -- * c-brace-offset: -4 -- * c-argdecl-indent: 4 -- * c-label-offset: -4 -- * c-continued-statement-offset: 4 -- * c-continued-brace-offset: 0 -- * indent-tabs-mode: nil -- * tab-width: 8 -- * End: -- */ --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch b/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch deleted file mode 100644 index 13f18b57611..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch +++ /dev/null @@ -1,191 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Fri, 11 May 2018 15:42:43 +0200 -Subject: [PATCH] multipath-tools: replace FSF address with a www pointer - -Less prone to future modifications, new FSF licences -point exactly to this url: . -And sending a smail to FSF is outdated. - -First clean up was done in 5619a39c433ac3d10a88079593cec1aa6472cbeb - -Cc: Martin Wilck -Cc: Benjamin Marzinski -Cc: Christophe Varoqui -Cc: DM ML -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - libmultipath/dm-generic.c | 4 +--- - libmultipath/dm-generic.h | 4 +--- - libmultipath/foreign.c | 4 +--- - libmultipath/foreign.h | 4 +--- - libmultipath/foreign/nvme.c | 4 +--- - libmultipath/generic.c | 4 +--- - libmultipath/generic.h | 4 +--- - tests/dmevents.c | 2 +- - tests/parser.c | 2 +- - tests/uevent.c | 2 +- - tests/util.c | 2 +- - 11 files changed, 11 insertions(+), 25 deletions(-) - -diff --git a/libmultipath/dm-generic.c b/libmultipath/dm-generic.c -index bdc9ca0..d752991 100644 ---- a/libmultipath/dm-generic.c -+++ b/libmultipath/dm-generic.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see . - */ - - #include -diff --git a/libmultipath/dm-generic.h b/libmultipath/dm-generic.h -index 5d59724..986429f 100644 ---- a/libmultipath/dm-generic.h -+++ b/libmultipath/dm-generic.h -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see . - */ - #ifndef _DM_GENERIC_H - #define _DM_GENERIC_H -diff --git a/libmultipath/foreign.c b/libmultipath/foreign.c -index 7217184..80b399b 100644 ---- a/libmultipath/foreign.c -+++ b/libmultipath/foreign.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see . - */ - - #include -diff --git a/libmultipath/foreign.h b/libmultipath/foreign.h -index 973f368..697f12f 100644 ---- a/libmultipath/foreign.h -+++ b/libmultipath/foreign.h -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see . - */ - #ifndef _FOREIGN_H - #define _FOREIGN_H -diff --git a/libmultipath/foreign/nvme.c b/libmultipath/foreign/nvme.c -index 235f75d..280b6bd 100644 ---- a/libmultipath/foreign/nvme.c -+++ b/libmultipath/foreign/nvme.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see . - */ - - #include -diff --git a/libmultipath/generic.c b/libmultipath/generic.c -index 6f7a2cd..0d1e632 100644 ---- a/libmultipath/generic.c -+++ b/libmultipath/generic.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see . - */ - - -diff --git a/libmultipath/generic.h b/libmultipath/generic.h -index 7f7fe66..6346ffe 100644 ---- a/libmultipath/generic.h -+++ b/libmultipath/generic.h -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see . - */ - #ifndef _GENERIC_H - #define _GENERIC_H -diff --git a/tests/dmevents.c b/tests/dmevents.c -index bba51dc..3399c81 100644 ---- a/tests/dmevents.c -+++ b/tests/dmevents.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see . - * - */ - -diff --git a/tests/parser.c b/tests/parser.c -index a7e7598..29859da 100644 ---- a/tests/parser.c -+++ b/tests/parser.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see . - * - */ - -diff --git a/tests/uevent.c b/tests/uevent.c -index acfcb14..b0d0bfd 100644 ---- a/tests/uevent.c -+++ b/tests/uevent.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see . - * - */ - -diff --git a/tests/util.c b/tests/util.c -index 113b134..839effd 100644 ---- a/tests/util.c -+++ b/tests/util.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see . - * - */ - --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch b/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch deleted file mode 100644 index 953e739efac..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch +++ /dev/null @@ -1,156 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Fri, 11 May 2018 15:43:11 +0200 -Subject: [PATCH] multipath-tools: Remove trailing/leading whitespaces and - reformat code - -Cc: Christophe Varoqui -Cc: device-mapper development -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - Makefile.inc | 23 +++++++++++------------ - kpartx/mac.h | 2 +- - kpartx/test-kpartx | 2 +- - libmpathcmd/Makefile | 2 +- - libmultipath/hwtable.c | 14 +++++++------- - libmultipath/print.h | 2 +- - multipathd/main.h | 6 +++--- - 7 files changed, 25 insertions(+), 26 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 57a1835..af2f5ba 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -103,21 +103,20 @@ LDFLAGS = -Wl,-z,relro -Wl,-z,now - BIN_LDFLAGS = -pie - - # Check whether a function with name $1 has been declared in header file $2. --check_func = \ -- $(shell \ -+check_func = $(shell \ - if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ -- found=1; \ -- status="yes"; \ -- else \ -- found=0; \ -- status="no"; \ -- fi; \ -- echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -- echo "$$found" \ -- ) -+ found=1; \ -+ status="yes"; \ -+ else \ -+ found=0; \ -+ status="no"; \ -+ fi; \ -+ echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -+ echo "$$found" \ -+ ) - - # Checker whether a file with name $1 exists --check_file = $(shell \ -+check_file = $(shell \ - if [ -f "$1" ]; then \ - found=1; \ - status="yes"; \ -diff --git a/kpartx/mac.h b/kpartx/mac.h -index a44cf38..55c3ec9 100644 ---- a/kpartx/mac.h -+++ b/kpartx/mac.h -@@ -24,7 +24,7 @@ struct mac_driver_desc { - uint16_t signature; /* expected to be MAC_DRIVER_MAGIC */ - uint16_t block_size; - uint32_t block_count; -- /* ... more stuff */ -+ /* ... more stuff */ - }; - - #endif -diff --git a/kpartx/test-kpartx b/kpartx/test-kpartx -index 9cee20f..d2001dc 100755 ---- a/kpartx/test-kpartx -+++ b/kpartx/test-kpartx -@@ -131,7 +131,7 @@ step "create DM devices (spans)" - # They also serve as DM devices to test partition removal on those. - - TABLE="\ --0 $((SIZE/SECTSIZ-OFFS)) linear $DEV1 $OFFS -+0 $((SIZE/SECTSIZ-OFFS)) linear $DEV1 $OFFS - $((SIZE/SECTSIZ-OFFS)) $((SIZE/SECTSIZ-OFFS)) linear $DEV2 $OFFS" - - SPAN1=kpt -diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile -index 53c0899..0f6b816 100644 ---- a/libmpathcmd/Makefile -+++ b/libmpathcmd/Makefile -@@ -27,7 +27,7 @@ uninstall: - $(RM) $(DESTDIR)$(includedir)/mpath_cmd.h - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.gz -+ $(RM) core *.a *.o *.so *.so.* *.gz - - include $(wildcard $(OBJS:.o=.d)) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 827e899..2ca6888 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -78,13 +78,13 @@ - #endif - - static struct hwentry default_hw[] = { -- /* -- * Generic NVMe -- * -- * Due to the parsing logic in find_hwe(), generic entries -- * have to be put on top of this list, and more specific ones -- * below. -- */ -+ /* -+ * Generic NVMe devices -+ * -+ * Due to the parsing logic in find_hwe(), generic entries -+ * have to be put on top of this list, and more specific ones -+ * below. -+ */ - { - .vendor = "NVME", - .product = ".*", -diff --git a/libmultipath/print.h b/libmultipath/print.h -index 7ba6438..9b5a23a 100644 ---- a/libmultipath/print.h -+++ b/libmultipath/print.h -@@ -113,7 +113,7 @@ int _snprint_multipath (const struct gen_multipath *, char *, int, - const char *, int); - #define snprint_multipath(buf, len, fmt, mp, v) \ - _snprint_multipath(dm_multipath_to_gen(mp), buf, len, fmt, v) --int _snprint_multipath_topology (const struct gen_multipath *, char *, int, -+int _snprint_multipath_topology (const struct gen_multipath *, char *, int, - int verbosity); - #define snprint_multipath_topology(buf, len, mpp, v) \ - _snprint_multipath_topology (dm_multipath_to_gen(mpp), buf, len, v) -diff --git a/multipathd/main.h b/multipathd/main.h -index af39558..8fd426b 100644 ---- a/multipathd/main.h -+++ b/multipathd/main.h -@@ -29,11 +29,11 @@ int ev_remove_map (char *, char *, int, struct vectors *); - int set_config_state(enum daemon_status); - void * mpath_alloc_prin_response(int prin_sa); - int prin_do_scsi_ioctl(char *, int rq_servact, struct prin_resp * resp, -- int noisy); -+ int noisy); - void dumpHex(const char * , int len, int no_ascii); - int prout_do_scsi_ioctl(char * , int rq_servact, int rq_scope, -- unsigned int rq_type, struct prout_param_descriptor *param, -- int noisy); -+ unsigned int rq_type, -+ struct prout_param_descriptor *param, int noisy); - int mpath_pr_event_handle(struct path *pp); - void * mpath_pr_event_handler_fn (void * ); - int update_map_pr(struct multipath *mpp); --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch b/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch deleted file mode 100644 index c6fd5b4cfb5..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Fri, 11 May 2018 18:39:44 +0200 -Subject: [PATCH] multipath-tools: fix compilation with musl libc -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In file included from alias.c:15: -file.h:9:47: error: unknown type name ‘mode_t’; did you mean ‘time_t’? - int ensure_directories_exist(const char *str, mode_t dir_mode); - ^~~~~~ - time_t - -sysfs.c: In function ‘sysfs_is_multipathed’: -sysfs.c:304:15: error: ‘PATH_MAX’ undeclared (first use in this function); did you mean ‘PATH_UP’? - char pathbuf[PATH_MAX]; - ^~~~~~~~ - PATH_UP - -Cc: Martin Wilck -Cc: Christophe Varoqui -Cc: DM ML -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - libmultipath/file.h | 2 ++ - libmultipath/sysfs.c | 1 + - 2 files changed, 3 insertions(+) - -diff --git a/libmultipath/file.h b/libmultipath/file.h -index 29520c7..3c75c90 100644 ---- a/libmultipath/file.h -+++ b/libmultipath/file.h -@@ -5,6 +5,8 @@ - #ifndef _FILE_H - #define _FILE_H - -+#include -+ - #define FILE_TIMEOUT 30 - int ensure_directories_exist(const char *str, mode_t dir_mode); - int open_file(const char *file, int *can_write, const char *header); -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index ee72e6a..16e0a73 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -28,6 +28,7 @@ - #include - #include - #include -+#include - - #include "checkers.h" - #include "vector.h" --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch b/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch deleted file mode 100644 index 9e608e16ff2..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Sun, 13 May 2018 00:39:41 +0200 -Subject: [PATCH] multipath-tools: add +x to doc-preclean.pl and split-man.pl - -It is not strictly necessary, but it helps identify bin files. - -Cc: Christophe Varoqui -Cc: DM ML -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - libdmmp/docs/doc-preclean.pl | 0 - libdmmp/docs/split-man.pl | 0 - 2 files changed, 0 insertions(+), 0 deletions(-) - mode change 100644 => 100755 libdmmp/docs/doc-preclean.pl - mode change 100644 => 100755 libdmmp/docs/split-man.pl - -diff --git a/libdmmp/docs/doc-preclean.pl b/libdmmp/docs/doc-preclean.pl -old mode 100644 -new mode 100755 -diff --git a/libdmmp/docs/split-man.pl b/libdmmp/docs/split-man.pl -old mode 100644 -new mode 100755 --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch b/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch deleted file mode 100644 index 37521587043..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch +++ /dev/null @@ -1,784 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Sun, 13 May 2018 00:39:42 +0200 -Subject: [PATCH] multipath-tools: refresh kernel-doc from kernel sources - -Cc: Gris Ge -Cc: Christophe Varoqui -Cc: device-mapper development -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - libdmmp/docs/kernel-doc | 671 ++++++++++++++++++++++++++---------------------- - 1 file changed, 368 insertions(+), 303 deletions(-) - -diff --git a/libdmmp/docs/kernel-doc b/libdmmp/docs/kernel-doc -index fee8952..0057d8e 100755 ---- a/libdmmp/docs/kernel-doc -+++ b/libdmmp/docs/kernel-doc -@@ -1,4 +1,5 @@ - #!/usr/bin/env perl -+# SPDX-License-Identifier: GPL-2.0 - - use warnings; - use strict; -@@ -328,13 +329,15 @@ my $lineprefix=""; - use constant { - STATE_NORMAL => 0, # normal code - STATE_NAME => 1, # looking for function name -- STATE_FIELD => 2, # scanning field start -- STATE_PROTO => 3, # scanning prototype -- STATE_DOCBLOCK => 4, # documentation block -- STATE_INLINE => 5, # gathering documentation outside main block -+ STATE_BODY_MAYBE => 2, # body - or maybe more description -+ STATE_BODY => 3, # the body of the comment -+ STATE_PROTO => 4, # scanning prototype -+ STATE_DOCBLOCK => 5, # documentation block -+ STATE_INLINE => 6, # gathering documentation outside main block - }; - my $state; - my $in_doc_sect; -+my $leading_space; - - # Inline documentation state - use constant { -@@ -363,7 +366,7 @@ my $doc_sect = $doc_com . - my $doc_content = $doc_com_body . '(.*)'; - my $doc_block = $doc_com . 'DOC:\s*(.*)?'; - my $doc_inline_start = '^\s*/\*\*\s*$'; --my $doc_inline_sect = '\s*\*\s*(@[\w\s]+):(.*)'; -+my $doc_inline_sect = '\s*\*\s*(@\s*[\w][\w\.]*\s*):(.*)'; - my $doc_inline_end = '^\s*\*/\s*$'; - my $doc_inline_oneline = '^\s*/\*\*\s*(@[\w\s]+):\s*(.*)\s*\*/\s*$'; - my $export_symbol = '^\s*EXPORT_SYMBOL(_GPL)?\s*\(\s*(\w+)\s*\)\s*;'; -@@ -553,10 +556,9 @@ sub output_highlight { - } - if ($line eq ""){ - if (! $output_preformatted) { -- print $lineprefix, local_unescape($blankline); -+ print $lineprefix, $blankline; - } - } else { -- $line =~ s/\\\\\\/\&/g; - if ($output_mode eq "man" && substr($line, 0, 1) eq ".") { - print "\\&$line"; - } else { -@@ -747,17 +749,73 @@ sub output_blockhead_rst(%) { - } - } - --sub output_highlight_rst { -- my $contents = join "\n",@_; -- my $line; -- -- # undo the evil effects of xml_escape() earlier -- $contents = xml_unescape($contents); -- -+# -+# Apply the RST highlights to a sub-block of text. -+# -+sub highlight_block($) { -+ # The dohighlight kludge requires the text be called $contents -+ my $contents = shift; - eval $dohighlight; - die $@ if $@; -+ return $contents; -+} - -- foreach $line (split "\n", $contents) { -+# -+# Regexes used only here. -+# -+my $sphinx_literal = '^[^.].*::$'; -+my $sphinx_cblock = '^\.\.\ +code-block::'; -+ -+sub output_highlight_rst { -+ my $input = join "\n",@_; -+ my $output = ""; -+ my $line; -+ my $in_literal = 0; -+ my $litprefix; -+ my $block = ""; -+ -+ foreach $line (split "\n",$input) { -+ # -+ # If we're in a literal block, see if we should drop out -+ # of it. Otherwise pass the line straight through unmunged. -+ # -+ if ($in_literal) { -+ if (! ($line =~ /^\s*$/)) { -+ # -+ # If this is the first non-blank line in a literal -+ # block we need to figure out what the proper indent is. -+ # -+ if ($litprefix eq "") { -+ $line =~ /^(\s*)/; -+ $litprefix = '^' . $1; -+ $output .= $line . "\n"; -+ } elsif (! ($line =~ /$litprefix/)) { -+ $in_literal = 0; -+ } else { -+ $output .= $line . "\n"; -+ } -+ } else { -+ $output .= $line . "\n"; -+ } -+ } -+ # -+ # Not in a literal block (or just dropped out) -+ # -+ if (! $in_literal) { -+ $block .= $line . "\n"; -+ if (($line =~ /$sphinx_literal/) || ($line =~ /$sphinx_cblock/)) { -+ $in_literal = 1; -+ $litprefix = ""; -+ $output .= highlight_block($block); -+ $block = "" -+ } -+ } -+ } -+ -+ if ($block) { -+ $output .= highlight_block($block); -+ } -+ foreach $line (split "\n", $output) { - print $lineprefix . $line . "\n"; - } - } -@@ -1062,7 +1120,7 @@ sub dump_struct($$) { - # Handle bitmaps - $arg =~ s/:\s*\d+\s*//g; - # Handle arrays -- $arg =~ s/\[\S+\]//g; -+ $arg =~ s/\[.*\]//g; - # The type may have multiple words, - # and multiple IDs can be defined, like: - # const struct foo, *bar, foobar -@@ -1422,8 +1480,6 @@ sub push_parameter($$$$) { - } - } - -- $param = xml_escape($param); -- - # strip spaces from $param so that it is one continuous string - # on @parameterlist; - # this fixes a problem where check_sections() cannot find -@@ -1522,6 +1578,7 @@ sub dump_function($$) { - $prototype =~ s/__meminit +//; - $prototype =~ s/__must_check +//; - $prototype =~ s/__weak +//; -+ $prototype =~ s/__sched +//; - my $define = $prototype =~ s/^#\s*define\s+//; #ak added - $prototype =~ s/__attribute__\s*\(\( - (?: -@@ -1748,47 +1805,6 @@ sub process_proto_type($$) { - } - } - --# xml_escape: replace <, >, and & in the text stream; --# --# however, formatting controls that are generated internally/locally in the --# kernel-doc script are not escaped here; instead, they begin life like --# $blankline_html (4 of '\' followed by a mnemonic + ':'), then these strings --# are converted to their mnemonic-expected output, without the 4 * '\' & ':', --# just before actual output; (this is done by local_unescape()) --sub xml_escape($) { -- my $text = shift; -- if ($output_mode eq "man") { -- return $text; -- } -- $text =~ s/\&/\\\\\\amp;/g; -- $text =~ s/\/\\\\\\gt;/g; -- return $text; --} -- --# xml_unescape: reverse the effects of xml_escape --sub xml_unescape($) { -- my $text = shift; -- if ($output_mode eq "man") { -- return $text; -- } -- $text =~ s/\\\\\\amp;/\&/g; -- $text =~ s/\\\\\\lt;//g; -- return $text; --} -- --# convert local escape strings to html --# local escape strings look like: '\\\\menmonic:' (that's 4 backslashes) --sub local_unescape($) { -- my $text = shift; -- if ($output_mode eq "man") { -- return $text; -- } -- $text =~ s/\\\\\\\\lt://g; -- return $text; --} - - sub map_filename($) { - my $file; -@@ -1826,15 +1842,291 @@ sub process_export_file($) { - close(IN); - } - --sub process_file($) { -- my $file; -+# -+# Parsers for the various processing states. -+# -+# STATE_NORMAL: looking for the /** to begin everything. -+# -+sub process_normal() { -+ if (/$doc_start/o) { -+ $state = STATE_NAME; # next line is always the function name -+ $in_doc_sect = 0; -+ $declaration_start_line = $. + 1; -+ } -+} -+ -+# -+# STATE_NAME: Looking for the "name - description" line -+# -+sub process_name($$) { -+ my $file = shift; - my $identifier; -- my $func; - my $descr; -- my $in_purpose = 0; -+ -+ if (/$doc_block/o) { -+ $state = STATE_DOCBLOCK; -+ $contents = ""; -+ $new_start_line = $. + 1; -+ -+ if ( $1 eq "" ) { -+ $section = $section_intro; -+ } else { -+ $section = $1; -+ } -+ } -+ elsif (/$doc_decl/o) { -+ $identifier = $1; -+ if (/\s*([\w\s]+?)(\(\))?\s*-/) { -+ $identifier = $1; -+ } -+ -+ $state = STATE_BODY; -+ # if there's no @param blocks need to set up default section -+ # here -+ $contents = ""; -+ $section = $section_default; -+ $new_start_line = $. + 1; -+ if (/-(.*)/) { -+ # strip leading/trailing/multiple spaces -+ $descr= $1; -+ $descr =~ s/^\s*//; -+ $descr =~ s/\s*$//; -+ $descr =~ s/\s+/ /g; -+ $declaration_purpose = $descr; -+ $state = STATE_BODY_MAYBE; -+ } else { -+ $declaration_purpose = ""; -+ } -+ -+ if (($declaration_purpose eq "") && $verbose) { -+ print STDERR "${file}:$.: warning: missing initial short description on line:\n"; -+ print STDERR $_; -+ ++$warnings; -+ } -+ -+ if ($identifier =~ m/^struct/) { -+ $decl_type = 'struct'; -+ } elsif ($identifier =~ m/^union/) { -+ $decl_type = 'union'; -+ } elsif ($identifier =~ m/^enum/) { -+ $decl_type = 'enum'; -+ } elsif ($identifier =~ m/^typedef/) { -+ $decl_type = 'typedef'; -+ } else { -+ $decl_type = 'function'; -+ } -+ -+ if ($verbose) { -+ print STDERR "${file}:$.: info: Scanning doc for $identifier\n"; -+ } -+ } else { -+ print STDERR "${file}:$.: warning: Cannot understand $_ on line $.", -+ " - I thought it was a doc line\n"; -+ ++$warnings; -+ $state = STATE_NORMAL; -+ } -+} -+ -+ -+# -+# STATE_BODY and STATE_BODY_MAYBE: the bulk of a kerneldoc comment. -+# -+sub process_body($$) { -+ my $file = shift; -+ -+ if (/$doc_sect/i) { # case insensitive for supported section names -+ $newsection = $1; -+ $newcontents = $2; -+ -+ # map the supported section names to the canonical names -+ if ($newsection =~ m/^description$/i) { -+ $newsection = $section_default; -+ } elsif ($newsection =~ m/^context$/i) { -+ $newsection = $section_context; -+ } elsif ($newsection =~ m/^returns?$/i) { -+ $newsection = $section_return; -+ } elsif ($newsection =~ m/^\@return$/) { -+ # special: @return is a section, not a param description -+ $newsection = $section_return; -+ } -+ -+ if (($contents ne "") && ($contents ne "\n")) { -+ if (!$in_doc_sect && $verbose) { -+ print STDERR "${file}:$.: warning: contents before sections\n"; -+ ++$warnings; -+ } -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ } -+ -+ $in_doc_sect = 1; -+ $state = STATE_BODY; -+ $contents = $newcontents; -+ $new_start_line = $.; -+ while (substr($contents, 0, 1) eq " ") { -+ $contents = substr($contents, 1); -+ } -+ if ($contents ne "") { -+ $contents .= "\n"; -+ } -+ $section = $newsection; -+ $leading_space = undef; -+ } elsif (/$doc_end/) { -+ if (($contents ne "") && ($contents ne "\n")) { -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ } -+ # look for doc_com + + doc_end: -+ if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') { -+ print STDERR "${file}:$.: warning: suspicious ending line: $_"; -+ ++$warnings; -+ } -+ -+ $prototype = ""; -+ $state = STATE_PROTO; -+ $brcount = 0; -+ } elsif (/$doc_content/) { -+ # miguel-style comment kludge, look for blank lines after -+ # @parameter line to signify start of description -+ if ($1 eq "") { -+ if ($section =~ m/^@/ || $section eq $section_context) { -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ $new_start_line = $.; -+ } else { -+ $contents .= "\n"; -+ } -+ $state = STATE_BODY; -+ } elsif ($state == STATE_BODY_MAYBE) { -+ # Continued declaration purpose -+ chomp($declaration_purpose); -+ $declaration_purpose .= " " . $1; -+ $declaration_purpose =~ s/\s+/ /g; -+ } else { -+ my $cont = $1; -+ if ($section =~ m/^@/ || $section eq $section_context) { -+ if (!defined $leading_space) { -+ if ($cont =~ m/^(\s+)/) { -+ $leading_space = $1; -+ } else { -+ $leading_space = ""; -+ } -+ } -+ $cont =~ s/^$leading_space//; -+ } -+ $contents .= $cont . "\n"; -+ } -+ } else { -+ # i dont know - bad line? ignore. -+ print STDERR "${file}:$.: warning: bad line: $_"; -+ ++$warnings; -+ } -+} -+ -+ -+# -+# STATE_PROTO: reading a function/whatever prototype. -+# -+sub process_proto($$) { -+ my $file = shift; -+ -+ if (/$doc_inline_oneline/) { -+ $section = $1; -+ $contents = $2; -+ if ($contents ne "") { -+ $contents .= "\n"; -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ } -+ } elsif (/$doc_inline_start/) { -+ $state = STATE_INLINE; -+ $inline_doc_state = STATE_INLINE_NAME; -+ } elsif ($decl_type eq 'function') { -+ process_proto_function($_, $file); -+ } else { -+ process_proto_type($_, $file); -+ } -+} -+ -+# -+# STATE_DOCBLOCK: within a DOC: block. -+# -+sub process_docblock($$) { -+ my $file = shift; -+ -+ if (/$doc_end/) { -+ dump_doc_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ $function = ""; -+ %parameterdescs = (); -+ %parametertypes = (); -+ @parameterlist = (); -+ %sections = (); -+ @sectionlist = (); -+ $prototype = ""; -+ $state = STATE_NORMAL; -+ } elsif (/$doc_content/) { -+ if ( $1 eq "" ) { -+ $contents .= $blankline; -+ } else { -+ $contents .= $1 . "\n"; -+ } -+ } -+} -+ -+# -+# STATE_INLINE: docbook comments within a prototype. -+# -+sub process_inline($$) { -+ my $file = shift; -+ -+ # First line (state 1) needs to be a @parameter -+ if ($inline_doc_state == STATE_INLINE_NAME && /$doc_inline_sect/o) { -+ $section = $1; -+ $contents = $2; -+ $new_start_line = $.; -+ if ($contents ne "") { -+ while (substr($contents, 0, 1) eq " ") { -+ $contents = substr($contents, 1); -+ } -+ $contents .= "\n"; -+ } -+ $inline_doc_state = STATE_INLINE_TEXT; -+ # Documentation block end */ -+ } elsif (/$doc_inline_end/) { -+ if (($contents ne "") && ($contents ne "\n")) { -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ } -+ $state = STATE_PROTO; -+ $inline_doc_state = STATE_INLINE_NA; -+ # Regular text -+ } elsif (/$doc_content/) { -+ if ($inline_doc_state == STATE_INLINE_TEXT) { -+ $contents .= $1 . "\n"; -+ # nuke leading blank lines -+ if ($contents =~ /^\s*$/) { -+ $contents = ""; -+ } -+ } elsif ($inline_doc_state == STATE_INLINE_NAME) { -+ $inline_doc_state = STATE_INLINE_ERROR; -+ print STDERR "${file}:$.: warning: "; -+ print STDERR "Incorrect use of kernel-doc format: $_"; -+ ++$warnings; -+ } -+ } -+} -+ -+ -+sub process_file($) { -+ my $file; - my $initial_section_counter = $section_counter; - my ($orig_file) = @_; -- my $leading_space; - - $file = map_filename($orig_file); - -@@ -1853,250 +2145,23 @@ sub process_file($) { - } - # Replace tabs by spaces - while ($_ =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {}; -+ # Hand this line to the appropriate state handler - if ($state == STATE_NORMAL) { -- if (/$doc_start/o) { -- $state = STATE_NAME; # next line is always the function name -- $in_doc_sect = 0; -- $declaration_start_line = $. + 1; -- } -- } elsif ($state == STATE_NAME) {# this line is the function name (always) -- if (/$doc_block/o) { -- $state = STATE_DOCBLOCK; -- $contents = ""; -- $new_start_line = $. + 1; -- -- if ( $1 eq "" ) { -- $section = $section_intro; -- } else { -- $section = $1; -- } -- } -- elsif (/$doc_decl/o) { -- $identifier = $1; -- if (/\s*([\w\s]+?)\s*-/) { -- $identifier = $1; -- } -- -- $state = STATE_FIELD; -- # if there's no @param blocks need to set up default section -- # here -- $contents = ""; -- $section = $section_default; -- $new_start_line = $. + 1; -- if (/-(.*)/) { -- # strip leading/trailing/multiple spaces -- $descr= $1; -- $descr =~ s/^\s*//; -- $descr =~ s/\s*$//; -- $descr =~ s/\s+/ /g; -- $declaration_purpose = xml_escape($descr); -- $in_purpose = 1; -- } else { -- $declaration_purpose = ""; -- } -- -- if (($declaration_purpose eq "") && $verbose) { -- print STDERR "${file}:$.: warning: missing initial short description on line:\n"; -- print STDERR $_; -- ++$warnings; -- } -- -- if ($identifier =~ m/^struct/) { -- $decl_type = 'struct'; -- } elsif ($identifier =~ m/^union/) { -- $decl_type = 'union'; -- } elsif ($identifier =~ m/^enum/) { -- $decl_type = 'enum'; -- } elsif ($identifier =~ m/^typedef/) { -- $decl_type = 'typedef'; -- } else { -- $decl_type = 'function'; -- } -- -- if ($verbose) { -- print STDERR "${file}:$.: info: Scanning doc for $identifier\n"; -- } -- } else { -- print STDERR "${file}:$.: warning: Cannot understand $_ on line $.", -- " - I thought it was a doc line\n"; -- ++$warnings; -- $state = STATE_NORMAL; -- } -- } elsif ($state == STATE_FIELD) { # look for head: lines, and include content -- if (/$doc_sect/i) { # case insensitive for supported section names -- $newsection = $1; -- $newcontents = $2; -- -- # map the supported section names to the canonical names -- if ($newsection =~ m/^description$/i) { -- $newsection = $section_default; -- } elsif ($newsection =~ m/^context$/i) { -- $newsection = $section_context; -- } elsif ($newsection =~ m/^returns?$/i) { -- $newsection = $section_return; -- } elsif ($newsection =~ m/^\@return$/) { -- # special: @return is a section, not a param description -- $newsection = $section_return; -- } -- -- if (($contents ne "") && ($contents ne "\n")) { -- if (!$in_doc_sect && $verbose) { -- print STDERR "${file}:$.: warning: contents before sections\n"; -- ++$warnings; -- } -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- } -- -- $in_doc_sect = 1; -- $in_purpose = 0; -- $contents = $newcontents; -- $new_start_line = $.; -- while (substr($contents, 0, 1) eq " ") { -- $contents = substr($contents, 1); -- } -- if ($contents ne "") { -- $contents .= "\n"; -- } -- $section = $newsection; -- $leading_space = undef; -- } elsif (/$doc_end/) { -- if (($contents ne "") && ($contents ne "\n")) { -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- } -- # look for doc_com + + doc_end: -- if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') { -- print STDERR "${file}:$.: warning: suspicious ending line: $_"; -- ++$warnings; -- } -- -- $prototype = ""; -- $state = STATE_PROTO; -- $brcount = 0; --# print STDERR "end of doc comment, looking for prototype\n"; -- } elsif (/$doc_content/) { -- # miguel-style comment kludge, look for blank lines after -- # @parameter line to signify start of description -- if ($1 eq "") { -- if ($section =~ m/^@/ || $section eq $section_context) { -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- $new_start_line = $.; -- } else { -- $contents .= "\n"; -- } -- $in_purpose = 0; -- } elsif ($in_purpose == 1) { -- # Continued declaration purpose -- chomp($declaration_purpose); -- $declaration_purpose .= " " . xml_escape($1); -- $declaration_purpose =~ s/\s+/ /g; -- } else { -- my $cont = $1; -- if ($section =~ m/^@/ || $section eq $section_context) { -- if (!defined $leading_space) { -- if ($cont =~ m/^(\s+)/) { -- $leading_space = $1; -- } else { -- $leading_space = ""; -- } -- } -- -- $cont =~ s/^$leading_space//; -- } -- $contents .= $cont . "\n"; -- } -- } else { -- # i dont know - bad line? ignore. -- print STDERR "${file}:$.: warning: bad line: $_"; -- ++$warnings; -- } -+ process_normal(); -+ } elsif ($state == STATE_NAME) { -+ process_name($file, $_); -+ } elsif ($state == STATE_BODY || $state == STATE_BODY_MAYBE) { -+ process_body($file, $_); - } elsif ($state == STATE_INLINE) { # scanning for inline parameters -- # First line (state 1) needs to be a @parameter -- if ($inline_doc_state == STATE_INLINE_NAME && /$doc_inline_sect/o) { -- $section = $1; -- $contents = $2; -- $new_start_line = $.; -- if ($contents ne "") { -- while (substr($contents, 0, 1) eq " ") { -- $contents = substr($contents, 1); -- } -- $contents .= "\n"; -- } -- $inline_doc_state = STATE_INLINE_TEXT; -- # Documentation block end */ -- } elsif (/$doc_inline_end/) { -- if (($contents ne "") && ($contents ne "\n")) { -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- } -- $state = STATE_PROTO; -- $inline_doc_state = STATE_INLINE_NA; -- # Regular text -- } elsif (/$doc_content/) { -- if ($inline_doc_state == STATE_INLINE_TEXT) { -- $contents .= $1 . "\n"; -- # nuke leading blank lines -- if ($contents =~ /^\s*$/) { -- $contents = ""; -- } -- } elsif ($inline_doc_state == STATE_INLINE_NAME) { -- $inline_doc_state = STATE_INLINE_ERROR; -- print STDERR "${file}:$.: warning: "; -- print STDERR "Incorrect use of kernel-doc format: $_"; -- ++$warnings; -- } -- } -- } elsif ($state == STATE_PROTO) { # scanning for function '{' (end of prototype) -- if (/$doc_inline_oneline/) { -- $section = $1; -- $contents = $2; -- if ($contents ne "") { -- $contents .= "\n"; -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- } -- } elsif (/$doc_inline_start/) { -- $state = STATE_INLINE; -- $inline_doc_state = STATE_INLINE_NAME; -- } elsif ($decl_type eq 'function') { -- process_proto_function($_, $file); -- } else { -- process_proto_type($_, $file); -- } -+ process_inline($file, $_); -+ } elsif ($state == STATE_PROTO) { -+ process_proto($file, $_); - } elsif ($state == STATE_DOCBLOCK) { -- if (/$doc_end/) -- { -- dump_doc_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- $function = ""; -- %parameterdescs = (); -- %parametertypes = (); -- @parameterlist = (); -- %sections = (); -- @sectionlist = (); -- $prototype = ""; -- $state = STATE_NORMAL; -- } -- elsif (/$doc_content/) -- { -- if ( $1 eq "" ) -- { -- $contents .= $blankline; -- } -- else -- { -- $contents .= $1 . "\n"; -- } -- } -+ process_docblock($file, $_); - } - } -+ -+ # Make sure we got something interesting. - if ($initial_section_counter == $section_counter) { - if ($output_mode ne "none") { - print STDERR "${file}:1: warning: no structured comments found\n"; --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch b/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch deleted file mode 100644 index 2cae0750bad..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez -Date: Mon, 14 May 2018 17:30:17 +0200 -Subject: [PATCH] multipath-tools: configure hitachi ams2000 and hus100 as full - active arrays - -AMS2000 and HUS100 families are active/active arrays. - -Based on https://support.hitachivantara.com/download/epcra/df818913.pdf -and internal hitachi docs. - -Cc: Matthias Rudolph -Cc: Christophe Varoqui -Cc: DM-DEV ML -Signed-off-by: Xose Vazquez Perez -Signed-off-by: Benjamin Marzinski ---- - libmultipath/hwtable.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 2ca6888..148f0ba 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -398,13 +398,13 @@ static struct hwentry default_hw[] = { - * Mail : matthias.rudolph@hds.com - */ - { -- /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families */ -+ /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HP XP */ - .vendor = "(HITACHI|HP)", - .product = "^OPEN-", - .pgpolicy = MULTIBUS, - }, - { -- /* AMS 2000 and HUS 100 families */ -+ /* AMS other than AMS 2000 */ - .vendor = "HITACHI", - .product = "^DF", - .no_path_retry = NO_PATH_RETRY_QUEUE, -@@ -412,6 +412,12 @@ static struct hwentry default_hw[] = { - .pgfailback = -FAILBACK_IMMEDIATE, - .prio_name = PRIO_HDS, - }, -+ { -+ /* AMS 2000 and HUS 100 families */ -+ .vendor = "HITACHI", -+ .product = "^DF600F", -+ .pgpolicy = MULTIBUS, -+ }, - /* - * IBM - * --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch b/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch deleted file mode 100644 index 2dda2edae5e..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Wed, 21 Mar 2018 10:34:18 +0100 -Subject: [PATCH] libmultipath: don't reject maps with undefined prio - -libmultipath's prio routines can deal with pp->priority == PRIO_UNDEF -just fine. PRIO_UNDEF is just a very low priority. So there's -no reason to reject setting up a multipath map because paths have -undefined priority. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/configure.c | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/libmultipath/configure.c b/libmultipath/configure.c -index 5796683..5c54f9b 100644 ---- a/libmultipath/configure.c -+++ b/libmultipath/configure.c -@@ -1063,9 +1063,6 @@ int coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid, - continue; - } - -- if (pp1->priority == PRIO_UNDEF) -- mpp->action = ACT_REJECT; -- - if (!mpp->paths) { - condlog(0, "%s: skip coalesce (no paths)", mpp->alias); - remove_map(mpp, vecs, 0); -@@ -1091,8 +1088,6 @@ int coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid, - mpp->size); - mpp->action = ACT_REJECT; - } -- if (pp2->priority == PRIO_UNDEF) -- mpp->action = ACT_REJECT; - } - verify_paths(mpp, vecs); - --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch b/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch deleted file mode 100644 index 96a814ff8ba..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Wed, 21 Mar 2018 10:34:19 +0100 -Subject: [PATCH] multipathd: handle errors in uxlsnr as fatal - -The ppoll() calls of the uxlsnr thread are vital for proper functioning of -multipathd. If the uxlsnr thread can't open the socket or fails to call ppoll() -for other reasons, quit the daemon. If we don't do that, multipathd may -hang in a state where it can't be terminated any more, because the uxlsnr -thread is responsible for handling all signals. This happens e.g. if -systemd's multipathd.socket is running in and multipathd is started from -outside systemd. - -24f2844 "multipathd: fix signal blocking logic" has made this problem more -severe. Before that patch, the signals weren't actually blocked in any thread. -That's not to say 24f2844 was wrong. I still think it's correct, we just -need this one on top. - -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - multipathd/uxlsnr.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c -index cdafd82..6f66666 100644 ---- a/multipathd/uxlsnr.c -+++ b/multipathd/uxlsnr.c -@@ -178,7 +178,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) - - if (ux_sock == -1) { - condlog(1, "could not create uxsock: %d", errno); -- return NULL; -+ exit_daemon(); - } - - pthread_cleanup_push(uxsock_cleanup, (void *)ux_sock); -@@ -187,7 +187,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) - polls = (struct pollfd *)MALLOC((MIN_POLLS + 1) * sizeof(struct pollfd)); - if (!polls) { - condlog(0, "uxsock: failed to allocate poll fds"); -- return NULL; -+ exit_daemon(); - } - sigfillset(&mask); - sigdelset(&mask, SIGINT); -@@ -249,6 +249,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) - - /* something went badly wrong! */ - condlog(0, "uxsock: poll failed with %d", errno); -+ exit_daemon(); - break; - } - --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch b/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch deleted file mode 100644 index 8ce2431d60b..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck -Date: Tue, 15 May 2018 14:32:44 +0200 -Subject: [PATCH] libmultipath: fix error parsing "find_multipaths strict" - -If "find_multipaths strict" is set in multipath.conf, the error message -"illegal value for find_multipaths: strict" is printed. This causes no -functional problem, as "strict" happens to be the default, fallback -value. It should be fixed nonetheless. FIND_MULTIPATHS_STRICT, having -the highest numeric value, must be last in the enum. - -Fixes: c36f2f42 "libmultipath: change find_multipaths option to multi-value" -Signed-off-by: Martin Wilck -Signed-off-by: Benjamin Marzinski ---- - libmultipath/structs.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmultipath/structs.h b/libmultipath/structs.h -index eb6a178..e424b15 100644 ---- a/libmultipath/structs.h -+++ b/libmultipath/structs.h -@@ -122,9 +122,9 @@ enum find_multipaths_states { - FIND_MULTIPATHS_UNDEF = YNU_UNDEF, - FIND_MULTIPATHS_OFF = YNU_NO, - FIND_MULTIPATHS_ON = _FIND_MULTIPATHS_F, -- FIND_MULTIPATHS_STRICT = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_N, - FIND_MULTIPATHS_GREEDY = _FIND_MULTIPATHS_I, - FIND_MULTIPATHS_SMART = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_I, -+ FIND_MULTIPATHS_STRICT = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_N, - __FIND_MULTIPATHS_LAST, - }; - --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch b/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch deleted file mode 100644 index c767804d1a2..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Mon, 7 May 2018 17:16:05 -0500 -Subject: [PATCH] libmultipath: print correct default for delay_*_checks - -These options default to "no", so they should display that when the -config is printed. - -Signed-off-by: Benjamin Marzinski ---- - libmultipath/dict.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 4040611..3e7c5d6 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -1115,7 +1115,8 @@ print_off_int_undef(char * buff, int len, long v) - } - - declare_def_handler(delay_watch_checks, set_off_int_undef) --declare_def_snprint(delay_watch_checks, print_off_int_undef) -+declare_def_snprint_defint(delay_watch_checks, print_off_int_undef, -+ DEFAULT_DELAY_CHECKS) - declare_ovr_handler(delay_watch_checks, set_off_int_undef) - declare_ovr_snprint(delay_watch_checks, print_off_int_undef) - declare_hw_handler(delay_watch_checks, set_off_int_undef) -@@ -1123,7 +1124,8 @@ declare_hw_snprint(delay_watch_checks, print_off_int_undef) - declare_mp_handler(delay_watch_checks, set_off_int_undef) - declare_mp_snprint(delay_watch_checks, print_off_int_undef) - declare_def_handler(delay_wait_checks, set_off_int_undef) --declare_def_snprint(delay_wait_checks, print_off_int_undef) -+declare_def_snprint_defint(delay_wait_checks, print_off_int_undef, -+ DEFAULT_DELAY_CHECKS) - declare_ovr_handler(delay_wait_checks, set_off_int_undef) - declare_ovr_snprint(delay_wait_checks, print_off_int_undef) - declare_hw_handler(delay_wait_checks, set_off_int_undef) --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch b/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch deleted file mode 100644 index 0ab4e067334..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 9 May 2018 14:32:59 -0500 -Subject: [PATCH] multipath.conf.5: clarify property whitelist handling - -Signed-off-by: Benjamin Marzinski ---- - multipath/multipath.conf.5 | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index f689795..96d1b66 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -1181,10 +1181,9 @@ and - keywords. For a full description of these keywords please see the \fIdevices\fR - section description. - .LP --The \fIproperty\fR blacklist and whitelist handling is different from the usual --handling in the sense that the whitelist \fIhas\fR to be set, otherwise the --device will be blacklisted. In these cases the message \fIblacklisted, udev --property missing\fR will be displayed. -+The \fIproperty\fR whitelist handling is different from the usual -+handling in the sense that the device \fIhas\fR to have a udev property that -+matches the whitelist, otherwise the device will be blacklisted. In these cases the message \fIblacklisted, udev property missing\fR will be displayed. - . - . - .\" ---------------------------------------------------------------------------- --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch b/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch deleted file mode 100644 index be2681d70ea..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch +++ /dev/null @@ -1,317 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 31 May 2018 17:47:11 -0500 -Subject: [PATCH] mpathpersist: add all_tg_pt option - -Some arrays, such as the EMC VNX, don't follow the scsi persistent -reservations spec in making key registrations per I_T NEXUS. Instead, -the registration is shared by all target ports connected to a given -host. This causes mpathpersist to fail whenever it tries to register a -key, since it will receive a registration conflict on some of the paths. - -To deal with this, mpathpersist needs to track the hosts that it has -done a registration on, and only register once per host. The new -"all_tg_pt" multipath.conf option is used to set which arrays need this -feature. I currently don't know if all EMC VNX arrays handle persistent -reservations like this, or if it is configurable. A future patch will -update the VNX built-in config, if this is indeed their default (or -only) setting. - -Multipathd doesn't need to worry about this. It is often the case that -when a path device comes back, it will still have the keys registered to -it. Because of this, multipathd uses register-and-ignore, which means -that it won't cause an error if the registration has already happened -down a different target port. - -Signed-off-by: Benjamin Marzinski ---- - libmpathpersist/mpath_persist.c | 28 ++++++++++++++++++++++------ - libmultipath/config.c | 2 ++ - libmultipath/config.h | 2 ++ - libmultipath/defaults.h | 1 + - libmultipath/dict.c | 10 ++++++++++ - libmultipath/propsel.c | 15 +++++++++++++++ - libmultipath/propsel.h | 1 + - libmultipath/structs.h | 7 +++++++ - multipath/multipath.conf.5 | 11 +++++++++++ - 9 files changed, 71 insertions(+), 6 deletions(-) - -diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c -index 907a17c..ca91c55 100644 ---- a/libmpathpersist/mpath_persist.c -+++ b/libmpathpersist/mpath_persist.c -@@ -335,6 +335,7 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope, - - conf = get_multipath_config(); - select_reservation_key(conf, mpp); -+ select_all_tg_pt(conf, mpp); - put_multipath_config(conf); - - memcpy(&prkey, paramp->sa_key, 8); -@@ -456,7 +457,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - unsigned int rq_type, struct prout_param_descriptor * paramp, int noisy) - { - -- int i, j; -+ int i, j, k; - struct pathgroup *pgp = NULL; - struct path *pp = NULL; - int rollback = 0; -@@ -481,11 +482,13 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - } - - struct threadinfo thread[active_pathcount]; -+ int hosts[active_pathcount]; - - memset(thread, 0, sizeof(thread)); - - /* init thread parameter */ - for (i =0; i< active_pathcount; i++){ -+ hosts[i] = -1; - thread[i].param.rq_servact = rq_servact; - thread[i].param.rq_scope = rq_scope; - thread[i].param.rq_type = rq_type; -@@ -514,6 +517,17 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - condlog (1, "%s: %s path not up. Skip.", mpp->wwid, pp->dev); - continue; - } -+ if (mpp->all_tg_pt == ALL_TG_PT_ON && -+ pp->sg_id.host_no != -1) { -+ for (k = 0; k < count; k++) { -+ if (pp->sg_id.host_no == hosts[k]) { -+ condlog(3, "%s: %s host %d matches skip.", pp->wwid, pp->dev, pp->sg_id.host_no); -+ break; -+ } -+ } -+ if (k < count) -+ continue; -+ } - strncpy(thread[count].param.dev, pp->dev, - FILE_NAME_SIZE - 1); - -@@ -531,10 +545,12 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - condlog (0, "%s: failed to create thread %d", mpp->wwid, rc); - thread[count].param.status = MPATH_PR_THREAD_ERROR; - } -+ else -+ hosts[count] = pp->sg_id.host_no; - count = count + 1; - } - } -- for( i=0; i < active_pathcount ; i++){ -+ for( i=0; i < count ; i++){ - if (thread[i].param.status != MPATH_PR_THREAD_ERROR) { - rc = pthread_join(thread[i].id, NULL); - if (rc){ -@@ -557,7 +573,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - } - if (rollback && ((rq_servact == MPATH_PROUT_REG_SA) && sa_key != 0 )){ - condlog (3, "%s: ERROR: initiating pr out rollback", mpp->wwid); -- for( i=0 ; i < active_pathcount ; i++){ -+ for( i=0 ; i < count ; i++){ - if(thread[i].param.status == MPATH_PR_SUCCESS) { - memcpy(&thread[i].param.paramp->key, &thread[i].param.paramp->sa_key, 8); - memset(&thread[i].param.paramp->sa_key, 0, 8); -@@ -571,7 +587,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - } else - thread[i].param.status = MPATH_PR_SKIP; - } -- for(i=0; i < active_pathcount ; i++){ -+ for(i=0; i < count ; i++){ - if (thread[i].param.status != MPATH_PR_SKIP && - thread[i].param.status != MPATH_PR_THREAD_ERROR) { - rc = pthread_join(thread[i].id, NULL); -@@ -720,7 +736,7 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope, - } - } - pthread_attr_destroy (&attr); -- for (i = 0; i < active_pathcount; i++){ -+ for (i = 0; i < count; i++){ - if (thread[i].param.status != MPATH_PR_THREAD_ERROR) { - rc = pthread_join (thread[i].id, NULL); - if (rc){ -@@ -729,7 +745,7 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope, - } - } - -- for (i = 0; i < active_pathcount; i++){ -+ for (i = 0; i < count; i++){ - /* check thread status here and return the status */ - - if (thread[i].param.status == MPATH_PR_RESERV_CONFLICT) -diff --git a/libmultipath/config.c b/libmultipath/config.c -index 085a3e1..5872927 100644 ---- a/libmultipath/config.c -+++ b/libmultipath/config.c -@@ -352,6 +352,7 @@ merge_hwe (struct hwentry * dst, struct hwentry * src) - merge_num(skip_kpartx); - merge_num(max_sectors_kb); - merge_num(ghost_delay); -+ merge_num(all_tg_pt); - - snprintf(id, sizeof(id), "%s/%s", dst->vendor, dst->product); - reconcile_features_with_options(id, &dst->features, -@@ -622,6 +623,7 @@ load_config (char * file) - conf->disable_changed_wwids = DEFAULT_DISABLE_CHANGED_WWIDS; - conf->remove_retries = 0; - conf->ghost_delay = DEFAULT_GHOST_DELAY; -+ conf->all_tg_pt = DEFAULT_ALL_TG_PT; - - /* - * preload default hwtable -diff --git a/libmultipath/config.h b/libmultipath/config.h -index 6e69a37..1bf708a 100644 ---- a/libmultipath/config.h -+++ b/libmultipath/config.h -@@ -82,6 +82,7 @@ struct hwentry { - int skip_kpartx; - int max_sectors_kb; - int ghost_delay; -+ int all_tg_pt; - char * bl_product; - }; - -@@ -194,6 +195,7 @@ struct config { - char * partition_delim; - char * config_dir; - int prkey_source; -+ int all_tg_pt; - struct be64 reservation_key; - - vector keywords; -diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h -index d7b87b4..f076b4b 100644 ---- a/libmultipath/defaults.h -+++ b/libmultipath/defaults.h -@@ -43,6 +43,7 @@ - #define DEFAULT_GHOST_DELAY GHOST_DELAY_OFF - #define DEFAULT_FIND_MULTIPATHS_TIMEOUT -10 - #define DEFAULT_UNKNOWN_FIND_MULTIPATHS_TIMEOUT 1 -+#define DEFAULT_ALL_TG_PT ALL_TG_PT_OFF - - #define DEFAULT_CHECKINT 5 - #define MAX_CHECKINT(a) (a << 2) -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 3e7c5d6..2557b8a 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -1178,6 +1178,13 @@ declare_hw_snprint(ghost_delay, print_off_int_undef) - declare_mp_handler(ghost_delay, set_off_int_undef) - declare_mp_snprint(ghost_delay, print_off_int_undef) - -+declare_def_handler(all_tg_pt, set_yes_no_undef) -+declare_def_snprint_defint(all_tg_pt, print_yes_no_undef, DEFAULT_ALL_TG_PT) -+declare_ovr_handler(all_tg_pt, set_yes_no_undef) -+declare_ovr_snprint(all_tg_pt, print_yes_no_undef) -+declare_hw_handler(all_tg_pt, set_yes_no_undef) -+declare_hw_snprint(all_tg_pt, print_yes_no_undef) -+ - - static int - def_uxsock_timeout_handler(struct config *conf, vector strvec) -@@ -1509,6 +1516,7 @@ init_keywords(vector keywords) - install_keyword("prkeys_file", &def_prkeys_file_handler, &snprint_def_prkeys_file); - install_keyword("log_checker_err", &def_log_checker_err_handler, &snprint_def_log_checker_err); - install_keyword("reservation_key", &def_reservation_key_handler, &snprint_def_reservation_key); -+ install_keyword("all_tg_pt", &def_all_tg_pt_handler, &snprint_def_all_tg_pt); - install_keyword("retain_attached_hw_handler", &def_retain_hwhandler_handler, &snprint_def_retain_hwhandler); - install_keyword("detect_prio", &def_detect_prio_handler, &snprint_def_detect_prio); - install_keyword("detect_checker", &def_detect_checker_handler, &snprint_def_detect_checker); -@@ -1618,6 +1626,7 @@ init_keywords(vector keywords) - install_keyword("skip_kpartx", &hw_skip_kpartx_handler, &snprint_hw_skip_kpartx); - install_keyword("max_sectors_kb", &hw_max_sectors_kb_handler, &snprint_hw_max_sectors_kb); - install_keyword("ghost_delay", &hw_ghost_delay_handler, &snprint_hw_ghost_delay); -+ install_keyword("all_tg_pt", &hw_all_tg_pt_handler, &snprint_hw_all_tg_pt); - install_sublevel_end(); - - install_keyword_root("overrides", &overrides_handler); -@@ -1654,6 +1663,7 @@ init_keywords(vector keywords) - install_keyword("skip_kpartx", &ovr_skip_kpartx_handler, &snprint_ovr_skip_kpartx); - install_keyword("max_sectors_kb", &ovr_max_sectors_kb_handler, &snprint_ovr_max_sectors_kb); - install_keyword("ghost_delay", &ovr_ghost_delay_handler, &snprint_ovr_ghost_delay); -+ install_keyword("all_tg_pt", &ovr_all_tg_pt_handler, &snprint_ovr_all_tg_pt); - - install_keyword_root("multipaths", &multipaths_handler); - install_keyword_multi("multipath", &multipath_handler, NULL); -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index 627d366..9ca1355 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -978,3 +978,18 @@ out: - pp->dev, pp->find_multipaths_timeout, origin); - return 0; - } -+ -+int select_all_tg_pt (struct config *conf, struct multipath * mp) -+{ -+ const char *origin; -+ -+ mp_set_ovr(all_tg_pt); -+ mp_set_hwe(all_tg_pt); -+ mp_set_conf(all_tg_pt); -+ mp_set_default(all_tg_pt, DEFAULT_ALL_TG_PT); -+out: -+ condlog(3, "%s: all_tg_pt = %s %s", mp->alias, -+ (mp->all_tg_pt == ALL_TG_PT_ON)? "yes" : "no", -+ origin); -+ return 0; -+} -diff --git a/libmultipath/propsel.h b/libmultipath/propsel.h -index a022bee..ae99b92 100644 ---- a/libmultipath/propsel.h -+++ b/libmultipath/propsel.h -@@ -34,3 +34,4 @@ int select_ghost_delay(struct config *conf, struct multipath * mp); - void reconcile_features_with_options(const char *id, char **features, - int* no_path_retry, - int *retain_hwhandler); -+int select_all_tg_pt (struct config *conf, struct multipath * mp); -diff --git a/libmultipath/structs.h b/libmultipath/structs.h -index e424b15..0194b1e 100644 ---- a/libmultipath/structs.h -+++ b/libmultipath/structs.h -@@ -217,6 +217,12 @@ enum prkey_sources { - PRKEY_SOURCE_FILE, - }; - -+enum all_tg_pt_states { -+ ALL_TG_PT_UNDEF = YNU_UNDEF, -+ ALL_TG_PT_OFF = YNU_NO, -+ ALL_TG_PT_ON = YNU_YES, -+}; -+ - struct sg_id { - int host_no; - int channel; -@@ -362,6 +368,7 @@ struct multipath { - int prkey_source; - struct be64 reservation_key; - unsigned char prflag; -+ int all_tg_pt; - struct gen_multipath generic_mp; - }; - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 96d1b66..0c1f174 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -743,6 +743,17 @@ The default is: \fB\fR - . - . - .TP -+.B all_tg_pt -+This must be set to \fByes\fR to successfully use mpathpersist on arrays that -+automatically set and clear registration keys on all target ports from a -+host, instead of per target port per host. -+.RS -+.TP -+The default is: \fBno\fR -+.RE -+. -+. -+.TP - .B retain_attached_hw_handler - (Obsolete for kernels >= 4.3) If set to - .I yes --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch b/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch deleted file mode 100644 index 8d1954725cf..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch +++ /dev/null @@ -1,1093 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Fri, 1 Jun 2018 16:30:44 -0500 -Subject: [PATCH] libmultipath: remove rbd code - -The Ceph tean has asked to drop support for multipathed rbd, since it -was running into data corruption issues. There was never an upstream -Ceph release based on it, and because of the corruption, there should be -no users of this code. This patch simply reverts all the rbd code from -multipath. - -Cc: Michael Christie -Cc: Jason Dillaman -Signed-off-by: Benjamin Marzinski ---- - libmultipath/checkers.c | 22 -- - libmultipath/checkers.h | 6 - - libmultipath/checkers/Makefile | 7 - - libmultipath/checkers/cciss_tur.c | 5 - - libmultipath/checkers/directio.c | 5 - - libmultipath/checkers/emc_clariion.c | 5 - - libmultipath/checkers/hp_sw.c | 5 - - libmultipath/checkers/rbd.c | 653 ----------------------------------- - libmultipath/checkers/rdac.c | 5 - - libmultipath/checkers/readsector0.c | 5 - - libmultipath/checkers/tur.c | 5 - - libmultipath/discovery.c | 70 ---- - libmultipath/hwtable.c | 12 - - multipath/multipath.conf.5 | 3 - - multipathd/main.c | 11 - - 15 files changed, 819 deletions(-) - delete mode 100644 libmultipath/checkers/rbd.c - -diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c -index 08cdfc3..0bacc86 100644 ---- a/libmultipath/checkers.c -+++ b/libmultipath/checkers.c -@@ -141,13 +141,6 @@ struct checker * add_checker (char *multipath_dir, char * name) - if (!c->free) - goto out; - -- c->repair = (void (*)(struct checker *)) dlsym(c->handle, -- "libcheck_repair"); -- errstr = dlerror(); -- if (errstr != NULL) -- condlog(0, "A dynamic linking error occurred: (%s)", errstr); -- if (!c->repair) -- goto out; - done: - c->fd = -1; - c->sync = 1; -@@ -222,20 +215,6 @@ void checker_put (struct checker * dst) - free_checker(src); - } - --void checker_repair (struct checker * c) --{ -- if (!checker_selected(c)) -- return; -- -- c->message[0] = '\0'; -- if (c->disable) { -- MSG(c, "checker disabled"); -- return; -- } -- if (c->repair) -- c->repair(c); --} -- - int checker_check (struct checker * c, int path_state) - { - int r; -@@ -310,7 +289,6 @@ void checker_get (char *multipath_dir, struct checker * dst, char * name) - dst->sync = src->sync; - strncpy(dst->name, src->name, CHECKER_NAME_LEN); - strncpy(dst->message, src->message, CHECKER_MSG_LEN); -- dst->repair = src->repair; - dst->check = src->check; - dst->init = src->init; - dst->free = src->free; -diff --git a/libmultipath/checkers.h b/libmultipath/checkers.h -index 52154ca..7b18a1a 100644 ---- a/libmultipath/checkers.h -+++ b/libmultipath/checkers.h -@@ -86,7 +86,6 @@ enum path_check_state { - #define READSECTOR0 "readsector0" - #define CCISS_TUR "cciss_tur" - #define NONE "none" --#define RBD "rbd" - - #define ASYNC_TIMEOUT_SEC 30 - -@@ -113,9 +112,6 @@ struct checker { - multipath-wide. Use MALLOC if - you want to stuff data in. */ - int (*check)(struct checker *); -- void (*repair)(struct checker *); /* called if check returns -- PATH_DOWN to bring path into -- usable state */ - int (*init)(struct checker *); /* to allocate the context */ - void (*free)(struct checker *); /* to free the context */ - }; -@@ -136,7 +132,6 @@ void checker_set_async (struct checker *); - void checker_set_fd (struct checker *, int); - void checker_enable (struct checker *); - void checker_disable (struct checker *); --void checker_repair (struct checker *); - int checker_check (struct checker *, int); - int checker_selected (struct checker *); - char * checker_name (struct checker *); -@@ -148,6 +143,5 @@ void checker_get (char *, struct checker *, char *); - int libcheck_check(struct checker *); - int libcheck_init(struct checker *); - void libcheck_free(struct checker *); --void libcheck_repair(struct checker *); - - #endif /* _CHECKERS_H */ -diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile -index 87c15bd..02caea6 100644 ---- a/libmultipath/checkers/Makefile -+++ b/libmultipath/checkers/Makefile -@@ -15,15 +15,8 @@ LIBS= \ - libcheckhp_sw.so \ - libcheckrdac.so - --ifneq ($(call check_file,/usr/include/rados/librados.h),0) --LIBS += libcheckrbd.so --endif -- - all: $(LIBS) - --libcheckrbd.so: rbd.o -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -lrados -ludev -- - libcheckdirectio.so: libsg.o directio.o - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -laio - -diff --git a/libmultipath/checkers/cciss_tur.c b/libmultipath/checkers/cciss_tur.c -index 436470c..1cab201 100644 ---- a/libmultipath/checkers/cciss_tur.c -+++ b/libmultipath/checkers/cciss_tur.c -@@ -59,11 +59,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - int libcheck_check(struct checker * c) - { - int rc; -diff --git a/libmultipath/checkers/directio.c b/libmultipath/checkers/directio.c -index ce60e4c..a80848d 100644 ---- a/libmultipath/checkers/directio.c -+++ b/libmultipath/checkers/directio.c -@@ -118,11 +118,6 @@ void libcheck_free (struct checker * c) - free(ct); - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - static int - check_state(int fd, struct directio_context *ct, int sync, int timeout_secs) - { -diff --git a/libmultipath/checkers/emc_clariion.c b/libmultipath/checkers/emc_clariion.c -index 9c1ffed..9115b1b 100644 ---- a/libmultipath/checkers/emc_clariion.c -+++ b/libmultipath/checkers/emc_clariion.c -@@ -90,11 +90,6 @@ void libcheck_free (struct checker * c) - free(c->context); - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - int libcheck_check (struct checker * c) - { - unsigned char sense_buffer[128] = { 0, }; -diff --git a/libmultipath/checkers/hp_sw.c b/libmultipath/checkers/hp_sw.c -index cee9aab..0ad34a6 100644 ---- a/libmultipath/checkers/hp_sw.c -+++ b/libmultipath/checkers/hp_sw.c -@@ -45,11 +45,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - static int - do_inq(int sg_fd, int cmddt, int evpd, unsigned int pg_op, - void *resp, int mx_resp_len, int noisy, unsigned int timeout) -diff --git a/libmultipath/checkers/rbd.c b/libmultipath/checkers/rbd.c -deleted file mode 100644 -index 4ff54f4..0000000 ---- a/libmultipath/checkers/rbd.c -+++ /dev/null -@@ -1,653 +0,0 @@ --/* -- * Copyright (c) 2016 Red Hat -- * Copyright (c) 2004 Christophe Varoqui -- * -- * Code based off of tur.c and ceph's krbd.cc -- */ --#define _GNU_SOURCE --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include --#include -- --#include "rados/librados.h" -- --#include "structs.h" --#include "checkers.h" -- --#include "../libmultipath/debug.h" --#include "../libmultipath/util.h" --#include "../libmultipath/time-util.h" --#include "../libmultipath/util.h" -- --struct rbd_checker_context; --typedef int (thread_fn)(struct rbd_checker_context *ct, char *msg); -- --#define RBD_MSG(msg, fmt, args...) snprintf(msg, CHECKER_MSG_LEN, fmt, ##args); -- --#define RBD_FEATURE_EXCLUSIVE_LOCK (1 << 2) -- --struct rbd_checker_context { -- int rbd_bus_id; -- char *client_addr; -- char *config_info; -- char *snap; -- char *pool; -- char *image; -- char *username; -- int remapped; -- int blacklisted; -- unsigned lock_on_read:1; -- -- rados_t cluster; -- -- int state; -- int running; -- time_t time; -- thread_fn *fn; -- pthread_t thread; -- pthread_mutex_t lock; -- pthread_cond_t active; -- pthread_spinlock_t hldr_lock; -- int holders; -- char message[CHECKER_MSG_LEN]; --}; -- --int libcheck_init(struct checker * c) --{ -- struct rbd_checker_context *ct; -- struct udev_device *block_dev; -- struct udev_device *bus_dev; -- struct udev *udev; -- struct stat sb; -- const char *block_name, *addr, *config_info, *features_str; -- const char *image, *pool, *snap, *username; -- uint64_t features = 0; -- char sysfs_path[PATH_SIZE]; -- int ret; -- -- ct = malloc(sizeof(struct rbd_checker_context)); -- if (!ct) -- return 1; -- memset(ct, 0, sizeof(struct rbd_checker_context)); -- ct->holders = 1; -- pthread_cond_init_mono(&ct->active); -- pthread_mutex_init(&ct->lock, NULL); -- pthread_spin_init(&ct->hldr_lock, PTHREAD_PROCESS_PRIVATE); -- c->context = ct; -- -- /* -- * The rbd block layer sysfs device is not linked to the rbd bus -- * device that we interact with, so figure that out now. -- */ -- if (fstat(c->fd, &sb) != 0) -- goto free_ct; -- -- udev = udev_new(); -- if (!udev) -- goto free_ct; -- -- block_dev = udev_device_new_from_devnum(udev, 'b', sb.st_rdev); -- if (!block_dev) -- goto free_udev; -- -- block_name = udev_device_get_sysname(block_dev); -- ret = sscanf(block_name, "rbd%d", &ct->rbd_bus_id); -- -- udev_device_unref(block_dev); -- if (ret != 1) -- goto free_udev; -- -- snprintf(sysfs_path, sizeof(sysfs_path), "/sys/bus/rbd/devices/%d", -- ct->rbd_bus_id); -- bus_dev = udev_device_new_from_syspath(udev, sysfs_path); -- if (!bus_dev) -- goto free_udev; -- -- addr = udev_device_get_sysattr_value(bus_dev, "client_addr"); -- if (!addr) { -- condlog(0, "rbd%d: Could not find client_addr in rbd sysfs. " -- "Try updating kernel", ct->rbd_bus_id); -- goto free_dev; -- } -- -- ct->client_addr = strdup(addr); -- if (!ct->client_addr) -- goto free_dev; -- -- features_str = udev_device_get_sysattr_value(bus_dev, "features"); -- if (!features_str) -- goto free_addr; -- features = strtoll(features_str, NULL, 16); -- if (!(features & RBD_FEATURE_EXCLUSIVE_LOCK)) { -- condlog(3, "rbd%d: Exclusive lock not set.", ct->rbd_bus_id); -- goto free_addr; -- } -- -- config_info = udev_device_get_sysattr_value(bus_dev, "config_info"); -- if (!config_info) -- goto free_addr; -- -- if (!strstr(config_info, "noshare")) { -- condlog(3, "rbd%d: Only nonshared clients supported.", -- ct->rbd_bus_id); -- goto free_addr; -- } -- -- if (strstr(config_info, "lock_on_read")) -- ct->lock_on_read = 1; -- -- ct->config_info = strdup(config_info); -- if (!ct->config_info) -- goto free_addr; -- -- username = strstr(config_info, "name="); -- if (username) { -- char *end; -- int len; -- -- username += 5; -- end = strchr(username, ','); -- if (!end) -- goto free_info; -- len = end - username; -- -- ct->username = malloc(len + 1); -- if (!ct->username) -- goto free_info; -- strncpy(ct->username, username, len); -- ct->username[len] = '\0'; -- } -- -- image = udev_device_get_sysattr_value(bus_dev, "name"); -- if (!image) -- goto free_username; -- -- ct->image = strdup(image); -- if (!ct->image) -- goto free_username; -- -- pool = udev_device_get_sysattr_value(bus_dev, "pool"); -- if (!pool) -- goto free_image; -- -- ct->pool = strdup(pool); -- if (!ct->pool) -- goto free_image; -- -- snap = udev_device_get_sysattr_value(bus_dev, "current_snap"); -- if (!snap) -- goto free_pool; -- -- if (strcmp("-", snap)) { -- ct->snap = strdup(snap); -- if (!ct->snap) -- goto free_pool; -- } -- -- if (rados_create(&ct->cluster, NULL) < 0) { -- condlog(0, "rbd%d: Could not create rados cluster", -- ct->rbd_bus_id); -- goto free_snap; -- } -- -- if (rados_conf_read_file(ct->cluster, NULL) < 0) { -- condlog(0, "rbd%d: Could not read rados conf", ct->rbd_bus_id); -- goto shutdown_rados; -- } -- -- ret = rados_connect(ct->cluster); -- if (ret < 0) { -- condlog(0, "rbd%d: Could not connect to rados cluster", -- ct->rbd_bus_id); -- goto shutdown_rados; -- } -- -- udev_device_unref(bus_dev); -- udev_unref(udev); -- -- condlog(3, "rbd%d checker init %s %s/%s@%s %s", ct->rbd_bus_id, -- ct->client_addr, ct->pool, ct->image, ct->snap ? ct->snap : "-", -- ct->username ? ct->username : "none"); -- return 0; -- --shutdown_rados: -- rados_shutdown(ct->cluster); --free_snap: -- if (ct->snap) -- free(ct->snap); --free_pool: -- free(ct->pool); --free_image: -- free(ct->image); --free_username: -- if (ct->username) -- free(ct->username); --free_info: -- free(ct->config_info); --free_addr: -- free(ct->client_addr); --free_dev: -- udev_device_unref(bus_dev); --free_udev: -- udev_unref(udev); --free_ct: -- free(ct); -- return 1; --} -- --static void cleanup_context(struct rbd_checker_context *ct) --{ -- pthread_mutex_destroy(&ct->lock); -- pthread_cond_destroy(&ct->active); -- pthread_spin_destroy(&ct->hldr_lock); -- -- rados_shutdown(ct->cluster); -- -- if (ct->username) -- free(ct->username); -- if (ct->snap) -- free(ct->snap); -- free(ct->pool); -- free(ct->image); -- free(ct->config_info); -- free(ct->client_addr); -- free(ct); --} -- --void libcheck_free(struct checker * c) --{ -- if (c->context) { -- struct rbd_checker_context *ct = c->context; -- int holders; -- pthread_t thread; -- -- pthread_spin_lock(&ct->hldr_lock); -- ct->holders--; -- holders = ct->holders; -- thread = ct->thread; -- pthread_spin_unlock(&ct->hldr_lock); -- if (holders) -- pthread_cancel(thread); -- else -- cleanup_context(ct); -- c->context = NULL; -- } --} -- --static int rbd_is_blacklisted(struct rbd_checker_context *ct, char *msg) --{ -- char *addr_tok, *start, *save; -- const char *cmd[2]; -- char *blklist, *stat; -- size_t blklist_len, stat_len; -- int ret; -- char *end; -- -- cmd[0] = "{\"prefix\": \"osd blacklist ls\"}"; -- cmd[1] = NULL; -- -- ret = rados_mon_command(ct->cluster, (const char **)cmd, 1, "", 0, -- &blklist, &blklist_len, &stat, &stat_len); -- if (ret < 0) { -- RBD_MSG(msg, "checker failed: mon command failed %d", ret); -- return ret; -- } -- -- if (!blklist || !blklist_len) -- goto free_bufs; -- -- /* -- * parse list of addrs with the format -- * ipv4:port/nonce date time\n -- * or -- * [ipv6]:port/nonce date time\n -- */ -- ret = 0; -- for (start = blklist; ; start = NULL) { -- addr_tok = strtok_r(start, "\n", &save); -- if (!addr_tok || !strlen(addr_tok)) -- break; -- -- end = strchr(addr_tok, ' '); -- if (!end) { -- RBD_MSG(msg, "checker failed: invalid blacklist %s", -- addr_tok); -- break; -- } -- *end = '\0'; -- -- if (!strcmp(addr_tok, ct->client_addr)) { -- ct->blacklisted = 1; -- RBD_MSG(msg, "%s is blacklisted", ct->client_addr); -- ret = 1; -- break; -- } -- } -- --free_bufs: -- rados_buffer_free(blklist); -- rados_buffer_free(stat); -- return ret; --} -- --static int rbd_check(struct rbd_checker_context *ct, char *msg) --{ -- if (ct->blacklisted || rbd_is_blacklisted(ct, msg) == 1) -- return PATH_DOWN; -- -- RBD_MSG(msg, "checker reports path is up"); -- /* -- * Path may have issues, but the ceph cluster is at least -- * accepting IO, so we can attempt to do IO. -- * -- * TODO: in future versions, we can run other tests to -- * verify OSDs and networks. -- */ -- return PATH_UP; --} -- --static int sysfs_write_rbd_bus(const char *which, const char *buf, -- size_t buf_len) --{ -- char sysfs_path[PATH_SIZE]; -- int fd; -- int r; -- -- /* we require newer kernels so single_major should always be there */ -- snprintf(sysfs_path, sizeof(sysfs_path), -- "/sys/bus/rbd/%s_single_major", which); -- fd = open(sysfs_path, O_WRONLY); -- if (fd < 0) -- return -errno; -- -- r = safe_write(fd, buf, buf_len); -- close(fd); -- return r; --} -- --static int rbd_remap(struct rbd_checker_context *ct) --{ -- char *argv[11]; -- pid_t pid; -- int ret = 0, i = 0; -- int status; -- -- pid = fork(); -- switch (pid) { -- case 0: -- argv[i++] = "rbd"; -- argv[i++] = "map"; -- if (ct->lock_on_read) -- argv[i++] = "-o noshare,lock_on_read"; -- else -- argv[i++] = "-o noshare"; -- if (ct->username) { -- argv[i++] = "--id"; -- argv[i++] = ct->username; -- } -- argv[i++] = "--pool"; -- argv[i++] = ct->pool; -- if (ct->snap) { -- argv[i++] = "--snap"; -- argv[i++] = ct->snap; -- } -- argv[i++] = ct->image; -- argv[i] = NULL; -- -- ret = execvp(argv[0], argv); -- condlog(0, "rbd%d: Error executing rbd: %s", ct->rbd_bus_id, -- strerror(errno)); -- exit(-1); -- case -1: -- condlog(0, "rbd%d: fork failed: %s", ct->rbd_bus_id, -- strerror(errno)); -- return -1; -- default: -- ret = -1; -- wait(&status); -- if (WIFEXITED(status)) { -- status = WEXITSTATUS(status); -- if (status == 0) -- ret = 0; -- else -- condlog(0, "rbd%d: failed with %d", -- ct->rbd_bus_id, status); -- } -- } -- -- return ret; --} -- --static int sysfs_write_rbd_remove(const char *buf, int buf_len) --{ -- return sysfs_write_rbd_bus("remove", buf, buf_len); --} -- --static int rbd_rm_blacklist(struct rbd_checker_context *ct) --{ -- const char *cmd[2]; -- char *stat, *cmd_str; -- size_t stat_len; -- int ret; -- -- ret = asprintf(&cmd_str, "{\"prefix\": \"osd blacklist\", \"blacklistop\": \"rm\", \"addr\": \"%s\"}", -- ct->client_addr); -- if (ret == -1) -- return -ENOMEM; -- -- cmd[0] = cmd_str; -- cmd[1] = NULL; -- -- ret = rados_mon_command(ct->cluster, (const char **)cmd, 1, "", 0, -- NULL, NULL, &stat, &stat_len); -- if (ret < 0) { -- condlog(1, "rbd%d: repair failed to remove blacklist for %s %d", -- ct->rbd_bus_id, ct->client_addr, ret); -- goto free_cmd; -- } -- -- condlog(1, "rbd%d: repair rm blacklist for %s", -- ct->rbd_bus_id, ct->client_addr); -- free(stat); --free_cmd: -- free(cmd_str); -- return ret; --} -- --static int rbd_repair(struct rbd_checker_context *ct, char *msg) --{ -- char del[17]; -- int ret; -- -- if (!ct->blacklisted) -- return PATH_UP; -- -- if (!ct->remapped) { -- ret = rbd_remap(ct); -- if (ret) { -- RBD_MSG(msg, "repair failed to remap. Err %d", ret); -- return PATH_DOWN; -- } -- } -- ct->remapped = 1; -- -- snprintf(del, sizeof(del), "%d force", ct->rbd_bus_id); -- ret = sysfs_write_rbd_remove(del, strlen(del) + 1); -- if (ret) { -- RBD_MSG(msg, "repair failed to clean up. Err %d", ret); -- return PATH_DOWN; -- } -- -- ret = rbd_rm_blacklist(ct); -- if (ret) { -- RBD_MSG(msg, "repair could not remove blacklist entry. Err %d", -- ret); -- return PATH_DOWN; -- } -- -- ct->remapped = 0; -- ct->blacklisted = 0; -- -- RBD_MSG(msg, "has been repaired"); -- return PATH_UP; --} -- --#define rbd_thread_cleanup_push(ct) pthread_cleanup_push(cleanup_func, ct) --#define rbd_thread_cleanup_pop(ct) pthread_cleanup_pop(1) -- --static void cleanup_func(void *data) --{ -- int holders; -- struct rbd_checker_context *ct = data; -- pthread_spin_lock(&ct->hldr_lock); -- ct->holders--; -- holders = ct->holders; -- ct->thread = 0; -- pthread_spin_unlock(&ct->hldr_lock); -- if (!holders) -- cleanup_context(ct); -- rcu_unregister_thread(); --} -- --static void *rbd_thread(void *ctx) --{ -- struct rbd_checker_context *ct = ctx; -- int state; -- -- /* This thread can be canceled, so setup clean up */ -- rbd_thread_cleanup_push(ct) -- rcu_register_thread(); -- condlog(3, "rbd%d: thread starting up", ct->rbd_bus_id); -- -- ct->message[0] = '\0'; -- -- /* checker start up */ -- pthread_mutex_lock(&ct->lock); -- ct->state = PATH_PENDING; -- pthread_mutex_unlock(&ct->lock); -- -- state = ct->fn(ct, ct->message); -- -- /* checker done */ -- pthread_mutex_lock(&ct->lock); -- ct->state = state; -- pthread_cond_signal(&ct->active); -- pthread_mutex_unlock(&ct->lock); -- -- condlog(3, "rbd%d: thead finished, state %s", ct->rbd_bus_id, -- checker_state_name(state)); -- rbd_thread_cleanup_pop(ct); -- return ((void *)0); --} -- --static void rbd_timeout(struct timespec *tsp) --{ -- clock_gettime(CLOCK_MONOTONIC, tsp); -- tsp->tv_nsec += 1000 * 1000; /* 1 millisecond */ -- normalize_timespec(tsp); --} -- --static int rbd_exec_fn(struct checker *c, thread_fn *fn) --{ -- struct rbd_checker_context *ct = c->context; -- struct timespec tsp; -- pthread_attr_t attr; -- int rbd_status, r; -- -- if (c->sync) -- return fn(ct, c->message); -- /* -- * Async mode -- */ -- r = pthread_mutex_lock(&ct->lock); -- if (r != 0) { -- condlog(2, "rbd%d: mutex lock failed with %d", ct->rbd_bus_id, -- r); -- MSG(c, "rbd%d: thread failed to initialize", ct->rbd_bus_id); -- return PATH_WILD; -- } -- -- if (ct->running) { -- /* Check if checker is still running */ -- if (ct->thread) { -- condlog(3, "rbd%d: thread not finished", -- ct->rbd_bus_id); -- rbd_status = PATH_PENDING; -- } else { -- /* checker done */ -- ct->running = 0; -- rbd_status = ct->state; -- strncpy(c->message, ct->message, CHECKER_MSG_LEN); -- c->message[CHECKER_MSG_LEN - 1] = '\0'; -- } -- pthread_mutex_unlock(&ct->lock); -- } else { -- /* Start new checker */ -- ct->state = PATH_UNCHECKED; -- ct->fn = fn; -- pthread_spin_lock(&ct->hldr_lock); -- ct->holders++; -- pthread_spin_unlock(&ct->hldr_lock); -- setup_thread_attr(&attr, 32 * 1024, 1); -- r = pthread_create(&ct->thread, &attr, rbd_thread, ct); -- if (r) { -- pthread_mutex_unlock(&ct->lock); -- ct->thread = 0; -- ct->holders--; -- condlog(3, "rbd%d failed to start rbd thread, using sync mode", -- ct->rbd_bus_id); -- return fn(ct, c->message); -- } -- pthread_attr_destroy(&attr); -- rbd_timeout(&tsp); -- r = pthread_cond_timedwait(&ct->active, &ct->lock, &tsp); -- rbd_status = ct->state; -- strncpy(c->message, ct->message,CHECKER_MSG_LEN); -- c->message[CHECKER_MSG_LEN -1] = '\0'; -- pthread_mutex_unlock(&ct->lock); -- -- if (ct->thread && -- (rbd_status == PATH_PENDING || rbd_status == PATH_UNCHECKED)) { -- condlog(3, "rbd%d: thread still running", -- ct->rbd_bus_id); -- ct->running = 1; -- rbd_status = PATH_PENDING; -- } -- } -- -- return rbd_status; --} -- --void libcheck_repair(struct checker * c) --{ -- struct rbd_checker_context *ct = c->context; -- -- if (!ct || !ct->blacklisted) -- return; -- rbd_exec_fn(c, rbd_repair); --} -- --int libcheck_check(struct checker * c) --{ -- struct rbd_checker_context *ct = c->context; -- -- if (!ct) -- return PATH_UNCHECKED; -- -- if (ct->blacklisted) -- return PATH_DOWN; -- -- return rbd_exec_fn(c, rbd_check); --} -diff --git a/libmultipath/checkers/rdac.c b/libmultipath/checkers/rdac.c -index a643a4a..5104e4e 100644 ---- a/libmultipath/checkers/rdac.c -+++ b/libmultipath/checkers/rdac.c -@@ -139,11 +139,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - static int - do_inq(int sg_fd, unsigned int pg_op, void *resp, int mx_resp_len, - unsigned int timeout) -diff --git a/libmultipath/checkers/readsector0.c b/libmultipath/checkers/readsector0.c -index 8fccb46..1c2a868 100644 ---- a/libmultipath/checkers/readsector0.c -+++ b/libmultipath/checkers/readsector0.c -@@ -23,11 +23,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - int libcheck_check (struct checker * c) - { - unsigned char buf[4096]; -diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c -index eb3348d..bf8486d 100644 ---- a/libmultipath/checkers/tur.c -+++ b/libmultipath/checkers/tur.c -@@ -112,11 +112,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - #define TUR_MSG(fmt, args...) \ - do { \ - char msg[CHECKER_MSG_LEN]; \ -diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index 1ef1dfa..18ad0e2 100644 ---- a/libmultipath/discovery.c -+++ b/libmultipath/discovery.c -@@ -1246,21 +1246,6 @@ nvme_sysfs_pathinfo (struct path * pp, vector hwtable) - } - - static int --rbd_sysfs_pathinfo (struct path * pp, vector hwtable) --{ -- sprintf(pp->vendor_id, "Ceph"); -- sprintf(pp->product_id, "RBD"); -- -- condlog(3, "%s: vendor = %s product = %s", pp->dev, pp->vendor_id, -- pp->product_id); -- /* -- * set the hwe configlet pointer -- */ -- pp->hwe = find_hwe(hwtable, pp->vendor_id, pp->product_id, NULL); -- return 0; --} -- --static int - ccw_sysfs_pathinfo (struct path * pp, vector hwtable) - { - struct udev_device *parent; -@@ -1486,8 +1471,6 @@ sysfs_pathinfo(struct path * pp, vector hwtable) - pp->bus = SYSFS_BUS_CCW; - if (!strncmp(pp->dev,"sd", 2)) - pp->bus = SYSFS_BUS_SCSI; -- if (!strncmp(pp->dev,"rbd", 3)) -- pp->bus = SYSFS_BUS_RBD; - if (!strncmp(pp->dev,"nvme", 4)) - pp->bus = SYSFS_BUS_NVME; - -@@ -1502,9 +1485,6 @@ sysfs_pathinfo(struct path * pp, vector hwtable) - } else if (pp->bus == SYSFS_BUS_CCISS) { - if (cciss_sysfs_pathinfo(pp, hwtable)) - return 1; -- } else if (pp->bus == SYSFS_BUS_RBD) { -- if (rbd_sysfs_pathinfo(pp, hwtable)) -- return 1; - } else if (pp->bus == SYSFS_BUS_NVME) { - if (nvme_sysfs_pathinfo(pp, hwtable)) - return 1; -@@ -1753,53 +1733,6 @@ get_udev_uid(struct path * pp, char *uid_attribute, struct udev_device *udev) - } - - static int --get_rbd_uid(struct path * pp) --{ -- struct udev_device *rbd_bus_dev; -- int ret, rbd_bus_id; -- const char *pool, *image, *snap; -- char sysfs_path[PATH_SIZE]; -- uint64_t snap_id, max_snap_id = -3; -- -- ret = sscanf(pp->dev, "rbd%d", &rbd_bus_id); -- if (ret != 1) -- return -EINVAL; -- -- snprintf(sysfs_path, sizeof(sysfs_path), "/sys/bus/rbd/devices/%d", -- rbd_bus_id); -- rbd_bus_dev = udev_device_new_from_syspath(udev, sysfs_path); -- if (!rbd_bus_dev) -- return -ENODEV; -- -- ret = -EINVAL; -- pool = udev_device_get_sysattr_value(rbd_bus_dev, "pool_id"); -- if (!pool) -- goto free_dev; -- -- image = udev_device_get_sysattr_value(rbd_bus_dev, "image_id"); -- if (!image) -- goto free_dev; -- -- snap = udev_device_get_sysattr_value(rbd_bus_dev, "snap_id"); -- if (!snap) -- goto free_dev; -- snap_id = strtoull(snap, NULL, 19); -- if (snap_id >= max_snap_id) -- ret = snprintf(pp->wwid, WWID_SIZE, "%s-%s", pool, image); -- else -- ret = snprintf(pp->wwid, WWID_SIZE, "%s-%s-%s", pool, -- image, snap); -- if (ret >= WWID_SIZE) { -- condlog(0, "%s: wwid overflow", pp->dev); -- ret = -EOVERFLOW; -- } -- --free_dev: -- udev_device_unref(rbd_bus_dev); -- return ret; --} -- --static int - get_vpd_uid(struct path * pp) - { - struct udev_device *parent = pp->udev; -@@ -1876,9 +1809,6 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev) - } else - len = strlen(pp->wwid); - origin = "callout"; -- } else if (pp->bus == SYSFS_BUS_RBD) { -- len = get_rbd_uid(pp); -- origin = "sysfs"; - } else { - - if (udev && pp->uid_attribute) { -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 148f0ba..d529bae 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -1000,18 +1000,6 @@ static struct hwentry default_hw[] = { - .prio_name = PRIO_ALUA, - }, - /* -- * Red Hat -- * -- * Maintainer: Mike Christie -- * Mail: mchristi@redhat.com -- */ -- { -- .vendor = "Ceph", -- .product = "RBD", -- .checker_name = RBD, -- .deferred_remove = DEFERRED_REMOVE_ON, -- }, -- /* - * Kove - */ - { -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 0c1f174..31f4585 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -482,9 +482,6 @@ Check the path state for HP/COMPAQ Smart Array(CCISS) controllers. - .I none - Do not check the device, fallback to use the values retrieved from sysfs - .TP --.I rbd --Check if the path is in the Ceph blacklist and remap the path if it is. --.TP - The default is: \fBtur\fR - .RE - . -diff --git a/multipathd/main.c b/multipathd/main.c -index 0db88ee..d40c416 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -1783,15 +1783,6 @@ int update_path_groups(struct multipath *mpp, struct vectors *vecs, int refresh) - return 0; - } - --void repair_path(struct path * pp) --{ -- if (pp->state != PATH_DOWN) -- return; -- -- checker_repair(&pp->checker); -- LOG_MSG(1, checker_message(&pp->checker)); --} -- - /* - * Returns '1' if the path has been checked, '-1' if it was blacklisted - * and '0' otherwise -@@ -1972,7 +1963,6 @@ check_path (struct vectors * vecs, struct path * pp, int ticks) - pp->mpp->failback_tick = 0; - - pp->mpp->stat_path_failures++; -- repair_path(pp); - return 1; - } - -@@ -2071,7 +2061,6 @@ check_path (struct vectors * vecs, struct path * pp, int ticks) - } - - pp->state = newstate; -- repair_path(pp); - - if (pp->mpp->wait_for_udev) - return 1; --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch b/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch deleted file mode 100644 index b98d310a137..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch +++ /dev/null @@ -1,543 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Mon, 4 Jun 2018 22:04:44 -0500 -Subject: [PATCH] mpathpersist: fix aptpl support - -The "Active Persist Through Power Loss" flag must be set whenever a key -is registered. However, there is no way for multipathd to know if this -was set by mpathpersist. The result is that if a path goes down and -comes back up (or if it wasn't up when mpathpersist was first run) -multipathd will clear the aptpl flag when it reregisters the key on it. - -To fix this, multipath.conf now accepts an optional ":aptpl" appended -on the reservation_key value. If this is added to the reservation_key -multipathd will set the aptpl flag when it reregisters the key. If -reservation_key is set to "file", this will automatically be tracked -in the /etc/multipath/prkeys file. - -To track this flag in the prkeys file, without changing the format -I've made "0x" stand for non-aptpl keys, and "0X" stand -for aptpl keys. Since previously, all keys used a lower-case x, this -will default to the current behavior for existing keys. Obviously, the -next time mpathpersist is run, this will be changed if --param-aptpl -is used. Since there are no more flags that are in sg_persist that -multipathd needs to care about in mpathpersist, there shouldn't need -to be any more flags added to the prkeys file. - -Signed-off-by: Benjamin Marzinski ---- - libmpathpersist/mpath_persist.c | 3 ++- - libmpathpersist/mpath_updatepr.c | 11 +++++++---- - libmpathpersist/mpathpr.h | 3 ++- - libmultipath/Makefile | 2 +- - libmultipath/config.h | 2 ++ - libmultipath/dict.c | 23 +++++++++++++++++++---- - libmultipath/dict.h | 3 ++- - libmultipath/prkey.c | 27 ++++++++++++++++++++++++--- - libmultipath/prkey.h | 6 ++++-- - libmultipath/propsel.c | 6 ++++-- - libmultipath/structs.h | 1 + - libmultipath/util.c | 16 ++++++++++++++++ - libmultipath/util.h | 1 + - multipath/multipath.conf.5 | 7 +++++-- - multipathd/cli_handlers.c | 15 ++++++++++----- - multipathd/main.c | 1 + - 16 files changed, 101 insertions(+), 26 deletions(-) - -diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c -index ca91c55..6e9e67f 100644 ---- a/libmpathpersist/mpath_persist.c -+++ b/libmpathpersist/mpath_persist.c -@@ -344,7 +344,8 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope, - rq_servact == MPATH_PROUT_REG_SA) || - rq_servact == MPATH_PROUT_REG_IGN_SA)) { - memcpy(&mpp->reservation_key, paramp->sa_key, 8); -- if (update_prkey(alias, get_be64(mpp->reservation_key))) { -+ if (update_prkey_flags(alias, get_be64(mpp->reservation_key), -+ paramp->sa_flags)) { - condlog(0, "%s: failed to set prkey for multipathd.", - alias); - ret = MPATH_PR_DMMP_ERROR; -diff --git a/libmpathpersist/mpath_updatepr.c b/libmpathpersist/mpath_updatepr.c -index 8063e90..0aca28e 100644 ---- a/libmpathpersist/mpath_updatepr.c -+++ b/libmpathpersist/mpath_updatepr.c -@@ -1,7 +1,5 @@ - #include - #include --#include -- - #include - #include - #include -@@ -11,6 +9,8 @@ - #include - #include - #include -+#include -+#include - #include "debug.h" - #include "mpath_cmd.h" - #include "uxsock.h" -@@ -59,11 +59,14 @@ int update_prflag(char *mapname, int set) { - return do_update_pr(mapname, (set)? "setprstatus" : "unsetprstatus"); - } - --int update_prkey(char *mapname, uint64_t prkey) { -+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags) { - char str[256]; -+ char *flagstr = ""; - -+ if (sa_flags & MPATH_F_APTPL_MASK) -+ flagstr = ":aptpl"; - if (prkey) -- sprintf(str, "setprkey key %" PRIx64, prkey); -+ sprintf(str, "setprkey key %" PRIx64 "%s", prkey, flagstr); - else - sprintf(str, "unsetprkey"); - return do_update_pr(mapname, str); -diff --git a/libmpathpersist/mpathpr.h b/libmpathpersist/mpathpr.h -index 72feb60..5ea8cd6 100644 ---- a/libmpathpersist/mpathpr.h -+++ b/libmpathpersist/mpathpr.h -@@ -46,7 +46,8 @@ int send_prout_activepath(char * dev, int rq_servact, int rq_scope, - unsigned int rq_type, struct prout_param_descriptor * paramp, int noisy); - - int update_prflag(char *mapname, int set); --int update_prkey(char *mapname, uint64_t prkey); -+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags); -+#define update_prkey(mapname, prkey) update_prkey_flags(mapname, prkey, 0) - void * mpath_alloc_prin_response(int prin_sa); - int update_map_pr(struct multipath *mpp); - -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index f51786d..33f5269 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -7,7 +7,7 @@ SONAME = 0 - DEVLIB = libmultipath.so - LIBS = $(DEVLIB).$(SONAME) - --CFLAGS += $(LIB_CFLAGS) -I$(mpathcmddir) -+CFLAGS += $(LIB_CFLAGS) -I$(mpathcmddir) -I$(mpathpersistdir) - - LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathcmddir) -lmpathcmd -lurcu -laio - -diff --git a/libmultipath/config.h b/libmultipath/config.h -index 1bf708a..fcbe3fc 100644 ---- a/libmultipath/config.h -+++ b/libmultipath/config.h -@@ -98,6 +98,7 @@ struct mpentry { - char * prio_args; - int prkey_source; - struct be64 reservation_key; -+ uint8_t sa_flags; - int pgpolicy; - int pgfailback; - int rr_weight; -@@ -197,6 +198,7 @@ struct config { - int prkey_source; - int all_tg_pt; - struct be64 reservation_key; -+ uint8_t sa_flags; - - vector keywords; - vector mptable; -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 2557b8a..7ad0f5a 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -22,6 +22,8 @@ - #include "util.h" - #include - #include -+#include -+#include - #include "mpath_cmd.h" - #include "dict.h" - -@@ -1012,10 +1014,12 @@ snprint_def_log_checker_err (struct config *conf, char * buff, int len, - } - - static int --set_reservation_key(vector strvec, struct be64 *be64_ptr, int *source_ptr) -+set_reservation_key(vector strvec, struct be64 *be64_ptr, uint8_t *flags_ptr, -+ int *source_ptr) - { - char *buff; - uint64_t prkey; -+ uint8_t sa_flags; - - buff = set_value(strvec); - if (!buff) -@@ -1023,35 +1027,43 @@ set_reservation_key(vector strvec, struct be64 *be64_ptr, int *source_ptr) - - if (strcmp(buff, "file") == 0) { - *source_ptr = PRKEY_SOURCE_FILE; -+ *flags_ptr = 0; - put_be64(*be64_ptr, 0); - FREE(buff); - return 0; - } - -- if (parse_prkey(buff, &prkey) != 0) { -+ if (parse_prkey_flags(buff, &prkey, &sa_flags) != 0) { - FREE(buff); - return 1; - } - *source_ptr = PRKEY_SOURCE_CONF; -+ *flags_ptr = sa_flags; - put_be64(*be64_ptr, prkey); - FREE(buff); - return 0; - } - - int --print_reservation_key(char * buff, int len, struct be64 key, int source) -+print_reservation_key(char * buff, int len, struct be64 key, uint8_t flags, -+ int source) - { -+ char *flagstr = ""; - if (source == PRKEY_SOURCE_NONE) - return 0; - if (source == PRKEY_SOURCE_FILE) - return snprintf(buff, len, "file"); -- return snprintf(buff, len, "0x%" PRIx64, get_be64(key)); -+ if (flags & MPATH_F_APTPL_MASK) -+ flagstr = ":aptpl"; -+ return snprintf(buff, len, "0x%" PRIx64 "%s", get_be64(key), -+ flagstr); - } - - static int - def_reservation_key_handler(struct config *conf, vector strvec) - { - return set_reservation_key(strvec, &conf->reservation_key, -+ &conf->sa_flags, - &conf->prkey_source); - } - -@@ -1060,6 +1072,7 @@ snprint_def_reservation_key (struct config *conf, char * buff, int len, - const void * data) - { - return print_reservation_key(buff, len, conf->reservation_key, -+ conf->sa_flags, - conf->prkey_source); - } - -@@ -1070,6 +1083,7 @@ mp_reservation_key_handler(struct config *conf, vector strvec) - if (!mpe) - return 1; - return set_reservation_key(strvec, &mpe->reservation_key, -+ &mpe->sa_flags, - &mpe->prkey_source); - } - -@@ -1079,6 +1093,7 @@ snprint_mp_reservation_key (struct config *conf, char * buff, int len, - { - const struct mpentry * mpe = (const struct mpentry *)data; - return print_reservation_key(buff, len, mpe->reservation_key, -+ mpe->sa_flags, - mpe->prkey_source); - } - -diff --git a/libmultipath/dict.h b/libmultipath/dict.h -index 7564892..a40ac66 100644 ---- a/libmultipath/dict.h -+++ b/libmultipath/dict.h -@@ -15,6 +15,7 @@ int print_pgpolicy(char *buff, int len, long v); - int print_no_path_retry(char *buff, int len, long v); - int print_fast_io_fail(char *buff, int len, long v); - int print_dev_loss(char *buff, int len, unsigned long v); --int print_reservation_key(char * buff, int len, struct be64 key, int source); -+int print_reservation_key(char * buff, int len, struct be64 key, uint8_t -+ flags, int source); - int print_off_int_undef(char *buff, int len, long v); - #endif /* _DICT_H */ -diff --git a/libmultipath/prkey.c b/libmultipath/prkey.c -index 89b90ed..d645f81 100644 ---- a/libmultipath/prkey.c -+++ b/libmultipath/prkey.c -@@ -11,6 +11,8 @@ - #include - #include - #include -+#include -+#include - - #define PRKEY_READ 0 - #define PRKEY_WRITE 1 -@@ -108,7 +110,8 @@ static int do_prkey(int fd, char *wwid, char *keystr, int cmd) - return 0; - } - --int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey) -+int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey, -+ uint8_t *sa_flags) - { - int fd; - int unused; -@@ -124,6 +127,9 @@ int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey) - ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_READ); - if (ret) - goto out_file; -+ *sa_flags = 0; -+ if (strchr(keystr, 'X')) -+ *sa_flags = MPATH_F_APTPL_MASK; - ret = !!parse_prkey(keystr, prkey); - out_file: - close(fd); -@@ -131,7 +137,8 @@ out: - return ret; - } - --int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey) -+int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey, -+ uint8_t sa_flags) - { - int fd; - int can_write = 1; -@@ -141,6 +148,12 @@ int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey) - if (!strlen(mpp->wwid)) - goto out; - -+ if (sa_flags & ~MPATH_F_APTPL_MASK) { -+ condlog(0, "unsupported pr flags, 0x%x", -+ sa_flags & ~MPATH_F_APTPL_MASK); -+ sa_flags &= MPATH_F_APTPL_MASK; -+ } -+ - fd = open_file(conf->prkeys_file, &can_write, PRKEYS_FILE_HEADER); - if (fd < 0) - goto out; -@@ -149,7 +162,15 @@ int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey) - goto out_file; - } - if (prkey) { -- snprintf(keystr, PRKEY_SIZE, "0x%016" PRIx64, prkey); -+ /* using the capitalization of the 'x' is a hack, but -+ * it's unlikely that mpath_persist will support more options -+ * since sg_persist doesn't, and this lets us keep the -+ * same file format as before instead of needing to change -+ * the format of the prkeys file */ -+ if (sa_flags) -+ snprintf(keystr, PRKEY_SIZE, "0X%016" PRIx64, prkey); -+ else -+ snprintf(keystr, PRKEY_SIZE, "0x%016" PRIx64, prkey); - keystr[PRKEY_SIZE - 1] = '\0'; - ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_WRITE); - } -diff --git a/libmultipath/prkey.h b/libmultipath/prkey.h -index 4028e70..6739191 100644 ---- a/libmultipath/prkey.h -+++ b/libmultipath/prkey.h -@@ -13,7 +13,9 @@ - "# prkey wwid\n" \ - "#\n" - --int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey); --int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey); -+int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey, -+ uint8_t sa_flags); -+int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey, -+ uint8_t *sa_flags); - - #endif /* _PRKEY_H */ -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index 9ca1355..62a6893 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -106,6 +106,7 @@ do { \ - if (src && src->prkey_source != PRKEY_SOURCE_NONE) { \ - mp->prkey_source = src->prkey_source; \ - mp->reservation_key = src->reservation_key; \ -+ mp->sa_flags = src->sa_flags; \ - origin = msg; \ - goto out; \ - } \ -@@ -703,18 +704,19 @@ int select_reservation_key(struct config *conf, struct multipath *mp) - do_prkey_set(mp->mpe, multipaths_origin); - do_prkey_set(conf, conf_origin); - put_be64(mp->reservation_key, 0); -+ mp->sa_flags = 0; - mp->prkey_source = PRKEY_SOURCE_NONE; - return 0; - out: - if (mp->prkey_source == PRKEY_SOURCE_FILE) { - from_file = " (from prkeys file)"; -- if (get_prkey(conf, mp, &prkey) != 0) -+ if (get_prkey(conf, mp, &prkey, &mp->sa_flags) != 0) - put_be64(mp->reservation_key, 0); - else - put_be64(mp->reservation_key, prkey); - } - print_reservation_key(buff, PRKEY_SIZE, mp->reservation_key, -- mp->prkey_source); -+ mp->sa_flags, mp->prkey_source); - condlog(3, "%s: reservation_key = %s %s%s", mp->alias, buff, origin, - from_file); - return 0; -diff --git a/libmultipath/structs.h b/libmultipath/structs.h -index 0194b1e..987479f 100644 ---- a/libmultipath/structs.h -+++ b/libmultipath/structs.h -@@ -367,6 +367,7 @@ struct multipath { - /* persistent management data*/ - int prkey_source; - struct be64 reservation_key; -+ uint8_t sa_flags; - unsigned char prflag; - int all_tg_pt; - struct gen_multipath generic_mp; -diff --git a/libmultipath/util.c b/libmultipath/util.c -index 7251ad0..8d8fcc8 100644 ---- a/libmultipath/util.c -+++ b/libmultipath/util.c -@@ -10,6 +10,8 @@ - #include - #include - #include -+#include -+#include - - #include "util.h" - #include "debug.h" -@@ -435,6 +437,20 @@ int parse_prkey(char *ptr, uint64_t *prkey) - return 0; - } - -+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags) -+{ -+ char *flagstr; -+ -+ flagstr = strchr(ptr, ':'); -+ *flags = 0; -+ if (flagstr) { -+ *flagstr++ = '\0'; -+ if (strlen(flagstr) == 5 && strcmp(flagstr, "aptpl") == 0) -+ *flags = MPATH_F_APTPL_MASK; -+ } -+ return parse_prkey(ptr, prkey); -+} -+ - int safe_write(int fd, const void *buf, size_t count) - { - while (count > 0) { -diff --git a/libmultipath/util.h b/libmultipath/util.h -index a3ab894..56cec76 100644 ---- a/libmultipath/util.h -+++ b/libmultipath/util.h -@@ -19,6 +19,7 @@ void setup_thread_attr(pthread_attr_t *attr, size_t stacksize, int detached); - int systemd_service_enabled(const char *dev); - int get_linux_version_code(void); - int parse_prkey(char *ptr, uint64_t *prkey); -+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags); - int safe_write(int fd, const void *buf, size_t count); - - #define KERNEL_VERSION(maj, min, ptc) ((((maj) * 256) + (min)) * 256 + (ptc)) -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 31f4585..30d8598 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -726,14 +726,17 @@ This is the service action reservation key used by mpathpersist. It must be - set for all multipath devices using persistent reservations, and it must be - the same as the RESERVATION KEY field of the PERSISTENT RESERVE OUT parameter - list which contains an 8-byte value provided by the application client to the --device server to identify the I_T nexus. -+device server to identify the I_T nexus. If the \fI--param-aptpl\fR option is -+used when registering the key with mpathpersist, \fB:aptpl\fR must be appended -+to the end of the reservation key. - .RS - .PP - Alternatively, this can be set to \fBfile\fR, which will store the RESERVATION - KEY registered by mpathpersist in the \fIprkeys_file\fR. multipathd will then - use this key to register additional paths as they appear. When the - registration is removed, the RESERVATION KEY is removed from the --\fIprkeys_file\fR. -+\fIprkeys_file\fR. The prkeys file will automatically keep track of whether -+the key was registered with \fI--param-aptpl\fR. - .TP - The default is: \fB\fR - .RE -diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c -index ba50fb8..6452796 100644 ---- a/multipathd/cli_handlers.c -+++ b/multipathd/cli_handlers.c -@@ -21,6 +21,7 @@ - #include "sysfs.h" - #include - #include -+#include - #include "util.h" - #include "prkey.h" - #include "propsel.h" -@@ -1463,6 +1464,7 @@ cli_getprkey(void * v, char ** reply, int * len, void * data) - struct multipath * mpp; - struct vectors * vecs = (struct vectors *)data; - char *mapname = get_keyparam(v, MAP); -+ char *flagstr = ""; - - mapname = convert_dev(mapname, 0); - condlog(3, "%s: get persistent reservation key (operator)", mapname); -@@ -1478,8 +1480,10 @@ cli_getprkey(void * v, char ** reply, int * len, void * data) - *len = strlen(*reply) + 1; - return 0; - } -- snprintf(*reply, 20, "0x%" PRIx64 "\n", -- get_be64(mpp->reservation_key)); -+ if (mpp->sa_flags & MPATH_F_APTPL_MASK) -+ flagstr = ":aptpl"; -+ snprintf(*reply, 20, "0x%" PRIx64 "%s\n", -+ get_be64(mpp->reservation_key), flagstr); - (*reply)[19] = '\0'; - *len = strlen(*reply) + 1; - return 0; -@@ -1503,7 +1507,7 @@ cli_unsetprkey(void * v, char ** reply, int * len, void * data) - - conf = get_multipath_config(); - pthread_cleanup_push(put_multipath_config, conf); -- ret = set_prkey(conf, mpp, 0); -+ ret = set_prkey(conf, mpp, 0, 0); - pthread_cleanup_pop(1); - - return ret; -@@ -1517,6 +1521,7 @@ cli_setprkey(void * v, char ** reply, int * len, void * data) - char *mapname = get_keyparam(v, MAP); - char *keyparam = get_keyparam(v, KEY); - uint64_t prkey; -+ uint8_t flags; - int ret; - struct config *conf; - -@@ -1527,14 +1532,14 @@ cli_setprkey(void * v, char ** reply, int * len, void * data) - if (!mpp) - return 1; - -- if (parse_prkey(keyparam, &prkey) != 0) { -+ if (parse_prkey_flags(keyparam, &prkey, &flags) != 0) { - condlog(0, "%s: invalid prkey : '%s'", mapname, keyparam); - return 1; - } - - conf = get_multipath_config(); - pthread_cleanup_push(put_multipath_config, conf); -- ret = set_prkey(conf, mpp, prkey); -+ ret = set_prkey(conf, mpp, prkey, flags); - pthread_cleanup_pop(1); - - return ret; -diff --git a/multipathd/main.c b/multipathd/main.c -index d40c416..6b1e782 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -3089,6 +3089,7 @@ void * mpath_pr_event_handler_fn (void * pathp ) - - param= malloc(sizeof(struct prout_param_descriptor)); - memset(param, 0 , sizeof(struct prout_param_descriptor)); -+ param->sa_flags = mpp->sa_flags; - memcpy(param->sa_key, &mpp->reservation_key, 8); - param->num_transportid = 0; - --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch b/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch deleted file mode 100644 index 5a3fd8374ba..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Tue, 5 Jun 2018 15:31:55 -0500 -Subject: [PATCH] multipath: don't check timestamps without a path - -If a path was blacklisted, pathvec could exist but have no path in it. -print_cmd_valid wasn't checking this before calling -find_multipaths_check_timeout(). This was causing it to dereference a -NULL pointer in these cases. - -Signed-off-by: Benjamin Marzinski ---- - multipath/main.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/multipath/main.c b/multipath/main.c -index c69e996..3f0a6aa 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -482,10 +482,8 @@ static int print_cmd_valid(int k, const vector pathvec, - pp, pp->find_multipaths_timeout, &until); - if (wait != FIND_MULTIPATHS_WAITING) - k = 1; -- } else if (pathvec != NULL) { -- pp = VECTOR_SLOT(pathvec, 0); -+ } else if (pathvec != NULL && (pp = VECTOR_SLOT(pathvec, 0))) - wait = find_multipaths_check_timeout(pp, 0, &until); -- } - if (wait == FIND_MULTIPATHS_WAITING) - printf("FIND_MULTIPATHS_WAIT_UNTIL=\"%ld.%06ld\"\n", - until.tv_sec, until.tv_nsec/1000); --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch b/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch deleted file mode 100644 index 23908fa5852..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Fri, 8 Jun 2018 17:12:37 -0500 -Subject: [PATCH] libmultipath: fix detect alua corner case - -If retain_attach_hw_handler = no, then the paths tpgs state will never -be checked, and the multipath device will always select the alua -handler, if no other handler is selected. the paths tpgs state -should be checked, regardless of the retain_hwhandler value. - -Signed-off-by: Benjamin Marzinski ---- - libmultipath/propsel.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index 62a6893..f626c74 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -403,9 +403,11 @@ int select_hwhandler(struct config *conf, struct multipath *mp) - bool all_tpgs = true; - - dh_state = &handler[2]; -+ -+ vector_foreach_slot(mp->paths, pp, i) -+ all_tpgs = all_tpgs && (pp->tpgs > 0); - if (mp->retain_hwhandler != RETAIN_HWHANDLER_OFF) { - vector_foreach_slot(mp->paths, pp, i) { -- all_tpgs = all_tpgs && (pp->tpgs > 0); - if (get_dh_state(pp, dh_state, sizeof(handler) - 2) > 0 - && strcmp(dh_state, "detached")) { - memcpy(handler, "1 ", 2); --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch b/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch deleted file mode 100644 index 624f45efd8e..00000000000 --- a/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Fri, 8 Jun 2018 17:23:07 -0500 -Subject: [PATCH] multipath: fix setting conf->version - -Commit d3b71498 stopped multipath from setting conf->version. Instead, -it was always being set to 0.0.0. Multipathd was still setting this -correctly. - -Fixes: d3b71498 "multipath: fix rcu thread cancellation hang" -Signed-off-by: Benjamin Marzinski ---- - libmultipath/devmapper.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c -index f2befad..8136d15 100644 ---- a/libmultipath/devmapper.c -+++ b/libmultipath/devmapper.c -@@ -245,13 +245,13 @@ void libmp_dm_init(void) - int verbosity; - unsigned int version[3]; - -+ if (dm_prereq(version)) -+ exit(1); - conf = get_multipath_config(); - verbosity = conf->verbosity; -- memcpy(version, conf->version, sizeof(version)); -+ memcpy(conf->version, version, sizeof(version)); - put_multipath_config(conf); - dm_init(verbosity); -- if (dm_prereq(version)) -- exit(1); - dm_udev_set_sync_support(libmp_dm_udev_sync); - } - --- -2.7.4 - diff --git a/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch b/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch index 451c524c9ab..a5c2b5e6c8d 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch @@ -1,7 +1,10 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 2 Jul 2014 12:49:53 -0500 -Subject: [PATCH] RH: Remove the property blacklist exception builtin +From 1fede9514566a21cdf3da99e22ddf5a7b2c856c6 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Fri, 23 Nov 2018 16:47:31 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski Date: Wed, 2 Jul + 2014 12:49:53 -0500 Subject: [PATCH] RH: Remove the property blacklist + exception builtin Multipath set the default property blacklist exceptions to (ID_SCSI_VPD|ID_WWN). This has the effect of blacklisting some internal @@ -12,76 +15,46 @@ blacklist_exception is given, then devices aren't failed for not matching it. Signed-off-by: Benjamin Marzinski + +Upsteam-Status: Pending + +update this patch to new version +Signed-off-by: Changqing Li --- - libmultipath/blacklist.c | 15 ++++++--------- - multipath/multipath.conf.5 | 14 ++++++++------ - 2 files changed, 14 insertions(+), 15 deletions(-) + libmultipath/blacklist.c | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c -index ee396e2..19d4697 100644 +index 318ec03..145fed3 100644 --- a/libmultipath/blacklist.c +++ b/libmultipath/blacklist.c -@@ -181,12 +181,6 @@ setup_default_blist (struct config * conf) - if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT)) - return 1; +@@ -192,12 +192,6 @@ setup_default_blist (struct config * conf) + char * str; + int i; -- str = STRDUP("(SCSI_IDENT_|ID_WWN)"); +- str = STRDUP("^(ram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]"); - if (!str) - return 1; -- if (store_ble(conf->elist_property, str, ORIGIN_DEFAULT)) +- if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT)) - return 1; - - vector_foreach_slot (conf->hwtable, hwe, i) { - if (hwe->bl_product) { - if (_blacklist_device(conf->blist_device, hwe->vendor, -@@ -390,9 +384,12 @@ filter_property(struct config * conf, struct udev_device * udev) - * This is the inverse of the 'normal' matching; - * the environment variable _has_ to match. - */ -- log_filter(devname, NULL, NULL, NULL, NULL, -- MATCH_PROPERTY_BLIST_MISSING); -- return MATCH_PROPERTY_BLIST_MISSING; + str = STRDUP("^(td|hd|vd)[a-z]"); + if (!str) + return 1; +@@ -415,8 +409,11 @@ filter_property(struct config * conf, struct udev_device * udev) + } + } + +- log_filter(devname, NULL, NULL, NULL, env, NULL, r); +- return r; + if (VECTOR_SIZE(conf->elist_property)) { -+ log_filter(devname, NULL, NULL, NULL, NULL, -+ MATCH_PROPERTY_BLIST_MISSING); -+ return MATCH_PROPERTY_BLIST_MISSING; ++ log_filter(devname, NULL, NULL, NULL, env, NULL, r); ++ return r; + } + return 0; } - void -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 30d8598..c45da9f 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -1179,10 +1179,6 @@ The \fIWorld Wide Identification\fR of a device. - .TP - .B property - Regular expression of the udev property to be whitelisted. --.RS --.TP --The default is: \fB(SCSI_IDENT_|ID_WWN)\fR --.RE - .TP - .B device - Subsection for the device description. This subsection recognizes the -@@ -1193,8 +1189,14 @@ keywords. For a full description of these keywords please see the \fIdevices\fR - section description. - .LP - The \fIproperty\fR whitelist handling is different from the usual --handling in the sense that the device \fIhas\fR to have a udev property that --matches the whitelist, otherwise the device will be blacklisted. In these cases the message \fIblacklisted, udev property missing\fR will be displayed. -+handling in the sense that if the propery whitelist is set, the device -+\fIhas\fR to have a udev property that matches the whitelist, otherwise the -+device will be blacklisted. In these cases the message \fIblacklisted, udev -+property missing\fR will be displayed. For example settting the -+property blacklist_exception to \fB(SCSI_IDENT_|ID_WWN)\fR will blacklist -+all devices that have no udev property whose name regex matches either -+\fBSCSI_IDENT_\fR or \fBID_WWN\fR. This works to exclude most -+non-multipathable devices. - . - . - .\" ---------------------------------------------------------------------------- + static void free_ble(struct blentry *ble) -- 2.7.4 diff --git a/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch b/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch index 886f1c86f19..ea6137f878a 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch @@ -1,7 +1,10 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 15 Oct 2014 10:39:30 -0500 -Subject: [PATCH] RH: don't start without a config file +From 0bf8ff8dab26201b268b419809844c07e168f17d Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Fri, 23 Nov 2018 17:25:15 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski Date: Wed, 15 + Oct 2014 10:39:30 -0500 Subject: [PATCH] RH: don't start without a config + file If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist all devices when running multipath. A completely blank configuration file @@ -11,16 +14,21 @@ simple way to disable multipath. Simply removing or renaming /etc/multipath.conf will keep multipath from doing anything. Signed-off-by: Benjamin Marzinski + +Upstream-Status: Pending + +update this patch to new version +Signed-off-by: Changqing Li --- - libmultipath/config.c | 15 +++++++++++++++ + libmultipath/config.c | 18 ++++++++++++++++++ libmultipath/config.h | 1 + multipath/multipath.rules | 1 + multipathd/multipathd.8 | 2 ++ multipathd/multipathd.service | 1 + - 5 files changed, 20 insertions(+) + 5 files changed, 23 insertions(+) diff --git a/libmultipath/config.c b/libmultipath/config.c -index 5872927..0607403 100644 +index 5af7af5..e4233f1 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c @@ -26,6 +26,7 @@ @@ -30,30 +38,33 @@ index 5872927..0607403 100644 +#include "version.h" static int - hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2) -@@ -658,6 +659,20 @@ load_config (char * file) - factorize_hwtable(conf->hwtable, builtin_hwtable_size); + hwe_strmatch (const struct hwentry *hwe1, const struct hwentry *hwe2) +@@ -743,6 +745,23 @@ load_config (char * file) + goto out; } - + factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); + } else { + condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices."); + if (conf->blist_devnode == NULL) { + conf->blist_devnode = vector_alloc(); + if (!conf->blist_devnode) { -+ condlog(0, "cannot allocate blacklist\n"); ++ conf->blist_devnode = vector_alloc(); ++ if (!conf->blist_devnode) { ++ condlog(0, "cannot allocate blacklist\n"); ++ goto out; ++ } ++ } ++ if (store_ble(conf->blist_devnode, strdup(".*"), ++ ORIGIN_NO_CONFIG)) { ++ condlog(0, "cannot store default no-config blacklist\n"); + goto out; + } -+ } -+ if (store_ble(conf->blist_devnode, strdup(".*"), -+ ORIGIN_NO_CONFIG)) { -+ condlog(0, "cannot store default no-config blacklist\n"); -+ goto out; + } } conf->processed_main_config = 1; diff --git a/libmultipath/config.h b/libmultipath/config.h -index fcbe3fc..3a42435 100644 +index 7d0cd9a..d7fb8e2 100644 --- a/libmultipath/config.h +++ b/libmultipath/config.h @@ -9,6 +9,7 @@ @@ -65,7 +76,7 @@ index fcbe3fc..3a42435 100644 /* * In kernel, fast_io_fail == 0 means immediate failure on rport delete. diff --git a/multipath/multipath.rules b/multipath/multipath.rules -index d658073..b3f54d7 100644 +index 9df11a9..0486bf7 100644 --- a/multipath/multipath.rules +++ b/multipath/multipath.rules @@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath" @@ -77,7 +88,7 @@ index d658073..b3f54d7 100644 ENV{DEVTYPE}!="partition", GOTO="test_dev" IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH" diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8 -index e78ac9e..09cdead 100644 +index 94c3f97..ed13efd 100644 --- a/multipathd/multipathd.8 +++ b/multipathd/multipathd.8 @@ -38,6 +38,8 @@ map regains its maximum performance and redundancy. diff --git a/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch b/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch index 9330bf07018..77dd96fee6c 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch @@ -1,49 +1,58 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Wed, 19 Apr 2017 06:10:01 -0500 -Subject: [PATCH] RH: use rpm optflags if present +From 436f7594485e35523269e662c4b5dc3a2c10ff9b Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Mon, 26 Nov 2018 09:19:17 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski Date: Wed, 19 + Apr 2017 06:10:01 -0500 Subject: [PATCH] RH: use rpm optflags if present Use the passed in optflags when compiling as an RPM, and keep the default flags as close as possible to the current fedora flags, while still being generic. Signed-off-by: Benjamin Marzinski + +Upstream-Status: Pending + +update this patch to new version + +Signed-off-by: Changqing Li --- - Makefile.inc | 24 ++++++++++++++++-------- - 1 file changed, 16 insertions(+), 8 deletions(-) + Makefile.inc | 25 ++++++++++++++++--------- + 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 0b271ea..5ff69a3 100644 +index b86cba6..295afb9 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -85,14 +85,22 @@ TEST_CC_OPTION = $(shell \ +@@ -85,15 +85,22 @@ TEST_CC_OPTION = $(shell \ echo "$(2)"; \ fi) -STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector) +-ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,) - -OPTFLAGS = -O2 -g -pipe -Wall -Wextra -Wformat=2 -Werror=implicit-int \ - -Werror=implicit-function-declaration -Werror=format-security \ - -Wno-sign-compare -Wno-unused-parameter -Wno-clobbered \ -- -Werror=cast-qual -Werror=discarded-qualifiers \ +- -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) \ - -Wp,-D_FORTIFY_SOURCE=2 $(STACKPROT) \ - --param=ssp-buffer-size=4 +ifndef RPM_OPT_FLAGS -+ STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector) -+ OPTFLAGS = -O2 -g -pipe -Wall -Werror=format-security \ -+ -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \ -+ $(STACKPROT) --param=ssp-buffer-size=4 \ -+ -grecord-gcc-switches -+ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1) -+ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -+ endif ++ STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector) ++ OPTFLAGS = -O2 -g -pipe -Wall -Werror=format-security \ ++ -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \ ++ $(STACKPROT) --param=ssp-buffer-size=4 \ ++ -grecord-gcc-switches ++ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1) ++ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 ++ endif +else -+ OPTFLAGS = $(RPM_OPT_FLAGS) ++ OPTFLAGS = $(RPM_OPT_FLAGS) +endif -+OPTFLAGS += -Wextra -Wstrict-prototypes -Wformat=2 -Werror=implicit-int \ -+ -Werror=implicit-function-declaration -Wno-sign-compare \ -+ -Wno-unused-parameter -Werror=cast-qual \ -+ -Werror=discarded-qualifiers ++OPTFLAGS += -Wextra -Wstrict-prototypes -Wformat=2 -Werror=implicit-int \ ++ -Werror=implicit-function-declaration -Wno-sign-compare \ ++ -Wno-unused-parameter -Werror=cast-qual \ ++ -Werror=discarded-qualifiers CFLAGS := $(OPTFLAGS) -DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \ -MMD -MP $(CFLAGS) diff --git a/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch b/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch index 5cad22b2b2b..a1407718d55 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch @@ -1,7 +1,9 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 16 Oct 2014 15:49:01 -0500 -Subject: [PATCH] RH: add mpathconf +From eb5a36e6e0caedf06008e48eb77b7bf7c6534ee5 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Mon, 26 Nov 2018 09:55:12 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski Date: Thu, 16 + Oct 2014 15:49:01 -0500 Subject: [PATCH] RH: add mpathconf mpathconf is a program (largely based on lvmcomf) to help users configure /etc/multipath.conf and enable or disable multipathing. It @@ -11,6 +13,12 @@ with the OS defaults, and to enable and disable multipathing via a single command. Signed-off-by: Benjamin Marzinski + +Upstream-Status: Pending + +update this patch to new version + +Signed-off-by: Changqing Li --- libmultipath/config.c | 1 + multipath/Makefile | 5 + @@ -21,11 +29,11 @@ Signed-off-by: Benjamin Marzinski create mode 100644 multipath/mpathconf.8 diff --git a/libmultipath/config.c b/libmultipath/config.c -index 0607403..5c98e48 100644 +index e4233f1..b779505 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c -@@ -661,6 +661,7 @@ load_config (char * file) - +@@ -747,6 +747,7 @@ load_config (char * file) + factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); } else { condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices."); + condlog(0, "You can run /sbin/mpathconf to create or modify /etc/multipath.conf"); diff --git a/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch index ddf022f7627..912832a084b 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch @@ -1,7 +1,10 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Fri, 17 Oct 2014 11:20:34 -0500 -Subject: [PATCH] RH: add wwids from kernel cmdline mpath.wwids with -A +From 694a2a6c7e4b523603b30a109b6efb1c30a7cec3 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Mon, 26 Nov 2018 10:17:58 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski Date: Fri, 17 + Oct 2014 11:20:34 -0500 Subject: [PATCH] RH: add wwids from kernel cmdline + mpath.wwids with -A This patch adds another option to multipath, "-A", which reads /proc/cmdline for mpath.wwid= options, and adds any wwids it finds @@ -13,16 +16,22 @@ patch also execs "/sbin/multipath -A" before running multipathd in multipathd.service Signed-off-by: Benjamin Marzinski + +Upstream-Status: Pending + +Update this patch to new version + +Signed-off-by: Changqing Li --- libmultipath/wwids.c | 44 +++++++++++++++++++++++++++++++++++++++++++ libmultipath/wwids.h | 1 + multipath/main.c | 10 ++++++++-- - multipath/multipath.8 | 5 ++++- + multipath/multipath.8 | 3 +++ multipathd/multipathd.service | 1 + - 5 files changed, 58 insertions(+), 3 deletions(-) + 5 files changed, 57 insertions(+), 2 deletions(-) diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c -index 53e7951..39e08cd 100644 +index 53e7951..9ba9b62 100644 --- a/libmultipath/wwids.c +++ b/libmultipath/wwids.c @@ -443,3 +443,47 @@ int op ## _wwid(const char *wwid) \ @@ -32,46 +41,46 @@ index 53e7951..39e08cd 100644 + +int remember_cmdline_wwid(void) +{ -+ FILE *f = NULL; -+ char buf[LINE_MAX], *next, *ptr; -+ int ret = 0; ++ FILE *f = NULL; ++ char buf[LINE_MAX], *next, *ptr; ++ int ret = 0; + -+ f = fopen("/proc/cmdline", "re"); -+ if (!f) { -+ condlog(0, "can't open /proc/cmdline : %s", strerror(errno)); -+ return -1; -+ } ++ f = fopen("/proc/cmdline", "re"); ++ if (!f) { ++ condlog(0, "can't open /proc/cmdline : %s", strerror(errno)); ++ return -1; ++ } + -+ if (!fgets(buf, sizeof(buf), f)) { -+ if (ferror(f)) -+ condlog(0, "read of /proc/cmdline failed : %s", -+ strerror(errno)); -+ else -+ condlog(0, "couldn't read /proc/cmdline"); -+ fclose(f); -+ return -1; -+ } -+ fclose(f); -+ next = buf; -+ while((ptr = strstr(next, "mpath.wwid="))) { -+ ptr += 11; -+ next = strpbrk(ptr, " \t\n"); -+ if (next) { -+ *next = '\0'; -+ next++; -+ } -+ if (strlen(ptr)) { -+ if (remember_wwid(ptr) != 0) -+ ret = -1; -+ } -+ else { -+ condlog(0, "empty mpath.wwid kernel command line option"); -+ ret = -1; -+ } -+ if (!next) -+ break; -+ } -+ return ret; ++ if (!fgets(buf, sizeof(buf), f)) { ++ if (ferror(f)) ++ condlog(0, "read of /proc/cmdline failed : %s", ++ strerror(errno)); ++ else ++ condlog(0, "couldn't read /proc/cmdline"); ++ fclose(f); ++ return -1; ++ } ++ fclose(f); ++ next = buf; ++ while((ptr = strstr(next, "mpath.wwid="))) { ++ ptr += 11; ++ next = strpbrk(ptr, " \t\n"); ++ if (next) { ++ *next = '\0'; ++ next++; ++ } ++ if (strlen(ptr)) { ++ if (remember_wwid(ptr) != 0) ++ ret = -1; ++ } ++ else { ++ condlog(0, "empty mpath.wwid kernel command line option"); ++ ret = -1; ++ } ++ if (!next) ++ break; ++ } ++ return ret; +} diff --git a/libmultipath/wwids.h b/libmultipath/wwids.h index 0c6ee54..e32a0b0 100644 @@ -86,10 +95,10 @@ index 0c6ee54..e32a0b0 100644 enum { WWID_IS_NOT_FAILED = 0, diff --git a/multipath/main.c b/multipath/main.c -index 6fdde03..7bac232 100644 +index ffa5b22..bcf8885 100644 --- a/multipath/main.c +++ b/multipath/main.c -@@ -109,7 +109,7 @@ usage (char * progname) +@@ -120,7 +120,7 @@ usage (char * progname) { fprintf (stderr, VERSION_STRING); fprintf (stderr, "Usage:\n"); @@ -97,8 +106,8 @@ index 6fdde03..7bac232 100644 + fprintf (stderr, " %s [-a|-A|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname); fprintf (stderr, " %s -l|-ll|-f [-v lvl] [-b fil] [-R num] [dev]\n", progname); fprintf (stderr, " %s -F [-v lvl] [-R num]\n", progname); - fprintf (stderr, " %s -t\n", progname); -@@ -123,6 +123,8 @@ usage (char * progname) + fprintf (stderr, " %s [-t|-T]\n", progname); +@@ -134,6 +134,8 @@ usage (char * progname) " -f flush a multipath device map\n" " -F flush all multipath device maps\n" " -a add a device wwid to the wwids file\n" @@ -107,40 +116,31 @@ index 6fdde03..7bac232 100644 " -c check if a device should be a path in a multipath device\n" " -C check if a multipath device has usable paths\n" " -q allow queue_if_no_path when multipathd is not running\n" -@@ -907,7 +909,7 @@ main (int argc, char *argv[]) +@@ -868,7 +870,7 @@ main (int argc, char *argv[]) exit(1); multipath_conf = conf; conf->retrigger_tries = 0; -- while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) { +- while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itTquUwW")) != EOF ) { + while ((arg = getopt(argc, argv, ":aAdcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) { switch(arg) { case 1: printf("optarg : %s\n",optarg); break; -@@ -974,6 +976,10 @@ main (int argc, char *argv[]) +@@ -935,6 +937,10 @@ main (int argc, char *argv[]) case 't': - r = dump_config(conf); + r = dump_config(conf, NULL, NULL); goto out_free_config; + case 'A': + if (remember_cmdline_wwid() != 0) + exit(1); + exit(0); - case 'h': - usage(argv[0]); - exit(0); + case 'T': + cmd = CMD_DUMP_CONFIG; + break; diff --git a/multipath/multipath.8 b/multipath/multipath.8 -index 914a8cb..8c6a4c1 100644 +index 9cdd05a..1e120f3 100644 --- a/multipath/multipath.8 +++ b/multipath/multipath.8 -@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig. - .RB [\| \-b\ \c - .IR bindings_file \|] - .RB [\| \-d \|] --.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-u | \-U | \-w | \-W \|] -+.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-A | \-u | \-U | \-w | \-W \|] - .RB [\| \-p\ \c - .IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|] - .RB [\| \-R\ \c -@@ -135,6 +135,9 @@ Add the WWID for the specified device to the WWIDs file. +@@ -167,6 +167,9 @@ itself doesn't attempt to do I/O on the device. Check if the device specified in the program environment should be a path in a multipath device. . diff --git a/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch b/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch index a23e1673934..57d04d02bbc 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch @@ -1,7 +1,10 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Mon, 6 Nov 2017 21:39:28 -0600 -Subject: [PATCH] RH: warn on invalid regex instead of failing +From d16de70b76919269561b4e404825f78286ea9a40 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Mon, 26 Nov 2018 10:31:30 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski Date: Mon, 6 Nov + 2017 21:39:28 -0600 Subject: [PATCH] RH: warn on invalid regex instead of + failing multipath.conf used to allow "*" as a match everything regular expression, instead of requiring ".*". Instead of erroring when the old style @@ -9,48 +12,56 @@ regular expressions are used, it should print a warning and convert them. Signed-off-by: Benjamin Marzinski + +Upstream-Status: Pending + +update this patch to new version + +Signed-off-by: Changqing Li --- - libmultipath/dict.c | 27 +++++++++++++++++++++------ + libmultipath/dict.c | 29 ++++++++++++++++++++++------- libmultipath/parser.c | 13 +++++++++++++ - libmultipath/parser.h | 1 + - 3 files changed, 35 insertions(+), 6 deletions(-) + libmultipath/parser.h | 2 +- + 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 7ad0f5a..ab808d6 100644 +index a81c051..0689763 100644 --- a/libmultipath/dict.c +++ b/libmultipath/dict.c -@@ -55,6 +55,21 @@ set_str(vector strvec, void *ptr) +@@ -59,6 +59,21 @@ set_str(vector strvec, void *ptr) } static int +set_regex(vector strvec, void *ptr) +{ -+ char **str_ptr = (char **)ptr; ++ char **str_ptr = (char **)ptr; + -+ if (*str_ptr) -+ FREE(*str_ptr); -+ *str_ptr = set_regex_value(strvec); ++ if (*str_ptr) ++ FREE(*str_ptr); ++ *str_ptr = set_regex_value(strvec); + -+ if (!*str_ptr) -+ return 1; ++ if (!*str_ptr) ++ return 1; + -+ return 0; ++ return 0; +} + +static int set_yes_no(vector strvec, void *ptr) { char * buff; -@@ -1271,7 +1286,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \ +@@ -1346,8 +1361,8 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \ + \ if (!conf->option) \ return 1; \ - \ +- \ - buff = set_value(strvec); \ ++ \ + buff = set_regex_value(strvec); \ if (!buff) \ return 1; \ \ -@@ -1287,7 +1302,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \ +@@ -1363,7 +1378,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \ if (!conf->option) \ return 1; \ \ @@ -59,7 +70,7 @@ index 7ad0f5a..ab808d6 100644 if (!buff) \ return 1; \ \ -@@ -1388,16 +1403,16 @@ device_handler(struct config *conf, vector strvec) +@@ -1466,16 +1481,16 @@ device_handler(struct config *conf, vector strvec) return 0; } @@ -81,37 +92,38 @@ index 7ad0f5a..ab808d6 100644 declare_hw_handler(hwhandler, set_str) diff --git a/libmultipath/parser.c b/libmultipath/parser.c -index b8b7e0d..34b4ad2 100644 +index 92ef7cf..0e2cf49 100644 --- a/libmultipath/parser.c +++ b/libmultipath/parser.c -@@ -380,6 +380,19 @@ set_value(vector strvec) +@@ -384,6 +384,19 @@ set_value(vector strvec) return alloc; } +void * +set_regex_value(vector strvec) +{ -+ char *buff = set_value(strvec); ++ char *buff = set_value(strvec); + -+ if (buff && strcmp("*", buff) == 0) { -+ condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\""); -+ FREE(buff); -+ return strdup(".*"); -+ } -+ return buff; ++ if (buff && strcmp("*", buff) == 0) { ++ condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\""); ++ FREE(buff); ++ return strdup(".*"); ++ } ++ return buff; +} + /* non-recursive configuration stream handler */ static int kw_level = 0; diff --git a/libmultipath/parser.h b/libmultipath/parser.h -index 62906e9..b791705 100644 +index 62906e9..b6899fc 100644 --- a/libmultipath/parser.h +++ b/libmultipath/parser.h -@@ -77,6 +77,7 @@ extern void dump_keywords(vector keydump, int level); +@@ -76,7 +76,7 @@ extern int _install_keyword(vector keywords, char *string, + extern void dump_keywords(vector keydump, int level); extern void free_keywords(vector keywords); extern vector alloc_strvec(char *string); - extern void *set_value(vector strvec); +-extern void *set_value(vector strvec); +extern void *set_regex_value(vector strvec); extern int process_file(struct config *conf, char *conf_file); extern struct keyword * find_keyword(vector keywords, vector v, char * name); diff --git a/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch b/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch index 05e686492e7..ad03b8acc42 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch @@ -1,18 +1,27 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski -Date: Thu, 7 Jun 2018 17:43:52 -0500 -Subject: [PATCH] RH: reset default find_mutipaths value to off +From 16900150e02e5b367a8b33621b393975ad011130 Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Mon, 26 Nov 2018 11:12:01 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski Date: Thu, 7 Jun + 2018 17:43:52 -0500 Subject: [PATCH] RH: reset default find_mutipaths value + to off Upstream has changed to default find_multipaths to "strict". For now Redhat will retain the previous default of "off". Signed-off-by: Benjamin Marzinski + +Upstream-Status: Pending + +Update this patch to new version + +Signed-off-by: Changqing Li --- libmultipath/defaults.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h -index f076b4b..70ba98a 100644 +index 6576939..a2404b2 100644 --- a/libmultipath/defaults.h +++ b/libmultipath/defaults.h @@ -17,7 +17,7 @@ @@ -20,7 +29,7 @@ index f076b4b..70ba98a 100644 #define DEFAULT_VERBOSITY 2 #define DEFAULT_REASSIGN_MAPS 0 -#define DEFAULT_FIND_MULTIPATHS FIND_MULTIPATHS_STRICT -+#define DEFAULT_FIND_MULTIPATHS FIND_MULTIPATHS_OFF ++#define DEFAULT_FIND_MULTIPATHS FIND_MULTIPATHS_OFF #define DEFAULT_FAST_IO_FAIL 5 #define DEFAULT_DEV_LOSS_TMO 600 #define DEFAULT_RETAIN_HWHANDLER RETAIN_HWHANDLER_ON diff --git a/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch b/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch index 45cd32ac2e9..4fa7960b174 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch @@ -1,7 +1,10 @@ -From 8bdd4481d822b6625d8bf719431ca74ed1b5e021 Mon Sep 17 00:00:00 2001 +From a805b601fcf4bb9e269566a8d25e48d9e60915c0 Mon Sep 17 00:00:00 2001 From: Changqing Li -Date: Mon, 16 Jul 2018 15:56:37 +0800 -Subject: [PATCH] multipath-tools: modify Makefile.inc for cross-compilation +Date: Mon, 26 Nov 2018 11:14:24 +0800 +Subject: [PATCH] From 8bdd4481d822b6625d8bf719431ca74ed1b5e021 Mon Sep 17 + 00:00:00 2001 From: Changqing Li Date: Mon, 16 + Jul 2018 15:56:37 +0800 Subject: [PATCH] multipath-tools: modify Makefile.inc + for cross-compilation Do not look for systemd info on the host, and allow us to pass in CFLAGS using the OPTFLAGS variable. @@ -22,13 +25,16 @@ update for version 0.7.7 remove change about CFLAGS part, since patch 0024 already have similar function. +Signed-off-by: Changqing Li + +update for version 0.7.9 Signed-off-by: Changqing Li --- - Makefile.inc | 8 ++------ - 1 file changed, 2 insertions(+), 6 deletions(-) + Makefile.inc | 6 ------ + 1 file changed, 6 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 57a1835..0c403c7 100644 +index 295afb9..7136db3 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -38,12 +38,6 @@ ifndef RUN diff --git a/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch b/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch index 12811804a39..3e88b410041 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch @@ -1,7 +1,7 @@ -From d929a1ea5e42ecbe30c990644ed4ada2817c6439 Mon Sep 17 00:00:00 2001 +From e4acb46b10484d1da6f093257e34f269832e6a37 Mon Sep 17 00:00:00 2001 From: Changqing Li -Date: Mon, 16 Jul 2018 16:00:14 +0800 -Subject: [PATCH] Always use devmapper +Date: Mon, 26 Nov 2018 11:17:41 +0800 +Subject: [PATCH] Subject: [PATCH] Always use devmapper Do not try to compute several _API_ make variables from host information when cross-compiling. @@ -17,13 +17,16 @@ Signed-off-by: Hongxu Jia Rebase to 0.7.7 +Signed-off-by: Changqing Li + +Rebase to 0.7.9 Signed-off-by: Changqing Li --- libmultipath/Makefile | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index f51786d..3ad9c48 100644 +index 33f5269..adf6f4a 100644 --- a/libmultipath/Makefile +++ b/libmultipath/Makefile @@ -20,21 +20,10 @@ ifdef SYSTEMD diff --git a/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch b/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch index 88a758dcb7f..418c0200f4c 100644 --- a/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch +++ b/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch @@ -1,7 +1,7 @@ -From 145f2b829e5362cda975bebafd7fe4d00ff56d1c Mon Sep 17 00:00:00 2001 +From 1fe937835311a2d0afbc85ce4a4dbd3c9e0c912f Mon Sep 17 00:00:00 2001 From: Changqing Li -Date: Mon, 16 Jul 2018 16:02:07 +0800 -Subject: [PATCH] Always use devmapper for kpartx +Date: Mon, 26 Nov 2018 11:19:45 +0800 +Subject: [PATCH] Subject: [PATCH] Always use devmapper for kpartx Do not try to compute the LIBDM_API_COOKIE make variable from host information when cross-compiling. @@ -16,6 +16,9 @@ Signed-off-by: Hongxu Jia Rebase to 0.7.7 Signed-off-by: Changqing Li + +Rebase to 0.7.9 +Signed-off-by: Changqing Li --- kpartx/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.7.bb b/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.9.bb similarity index 72% rename from meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.7.bb rename to meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.9.bb index 5cc1546045e..9cf104efa93 100644 --- a/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.7.bb +++ b/meta-oe/recipes-support/multipath-tools/multipath-tools_0.7.9.bb @@ -31,26 +31,6 @@ LICENSE = "GPLv2" SRC_URI = "git://git.opensvc.com/multipath-tools/.git;protocol=http \ file://multipathd.oe \ file://multipath.conf.example \ - file://0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch \ - file://0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch \ - file://0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch \ - file://0004-multipath-tools-replace-FSF-address-with-a-www-point.patch \ - file://0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch \ - file://0006-multipath-tools-fix-compilation-with-musl-libc.patch \ - file://0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch \ - file://0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch \ - file://0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch \ - file://0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch \ - file://0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch \ - file://0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch \ - file://0013-libmultipath-print-correct-default-for-delay_-_check.patch \ - file://0014-multipath.conf.5-clarify-property-whitelist-handling.patch \ - file://0015-mpathpersist-add-all_tg_pt-option.patch \ - file://0016-libmultipath-remove-rbd-code.patch \ - file://0017-mpathpersist-fix-aptpl-support.patch \ - file://0018-multipath-don-t-check-timestamps-without-a-path.patch \ - file://0019-libmultipath-fix-detect-alua-corner-case.patch \ - file://0020-multipath-fix-setting-conf-version.patch \ file://0021-RH-fixup-udev-rules-for-redhat.patch \ file://0022-RH-Remove-the-property-blacklist-exception-builtin.patch \ file://0023-RH-don-t-start-without-a-config-file.patch \ @@ -66,7 +46,7 @@ SRC_URI = "git://git.opensvc.com/multipath-tools/.git;protocol=http \ LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2" -SRCREV = "386d288b5595fc2c01dffe698b6eb306c6674908" +SRCREV = "5c67a8b5944dd13542e6b44fa2ae9803e0cc4282" S = "${WORKDIR}/git" diff --git a/meta-oe/recipes-support/satyr/satyr_0.26.bb b/meta-oe/recipes-support/satyr/satyr_0.27.bb similarity index 94% rename from meta-oe/recipes-support/satyr/satyr_0.26.bb rename to meta-oe/recipes-support/satyr/satyr_0.27.bb index a09bea23d4e..10dfc2bade6 100644 --- a/meta-oe/recipes-support/satyr/satyr_0.26.bb +++ b/meta-oe/recipes-support/satyr/satyr_0.27.bb @@ -10,7 +10,7 @@ inherit autotools-brokensep python3native pkgconfig SRC_URI = "git://github.com/abrt/satyr.git \ file://0002-fix-compile-failure-against-musl-C-library.patch \ " -SRCREV = "4baa0c765071054314d1e7e78547ce6b7c133fbc" +SRCREV = "dff1b877d42bf2153f8f090905d9cc8fb333bf1e" S = "${WORKDIR}/git" LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe" diff --git a/meta-oe/recipes-support/sg3-utils/sg3-utils/glibc-2.28.patch b/meta-oe/recipes-support/sg3-utils/sg3-utils/glibc-2.28.patch deleted file mode 100644 index fbad4135df2..00000000000 --- a/meta-oe/recipes-support/sg3-utils/sg3-utils/glibc-2.28.patch +++ /dev/null @@ -1,24 +0,0 @@ -Fixes: -http://errors.yoctoproject.org/Errors/Details/185896/ - -TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: sg_map26.o: in function `nd_match_scandir_select': -/usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:359: undefined reference to `major' -TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: /usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:361: undefined reference to `minor' -TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: sg_map26.o: in function `nt_typ_from_filename': -/usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:218: undefined reference to `major' -TOPDIR/tmp-glibc/work/core2-64-oe-linux/sg3-utils/1.42-r0/recipe-sysroot-native/usr/bin/x86_64-oe-linux/../../libexec/x86_64-oe-linux/gcc/x86_64-oe-linux/8.2.0/ld: /usr/src/debug/sg3-utils/1.42-r0/sg3_utils-1.42/src/sg_map26.c:219: undefined reference to `minor' -collect2: error: ld returned 1 exit status -Makefile:806: recipe for target 'sg_map26' failed - -Upstream-Status: Pending - ---- sg3_utils-1.42.orig/src/sg_map26.c 2018-08-09 11:53:26.907493996 +0000 -+++ sg3_utils-1.42/src/sg_map26.c 2018-08-09 11:51:56.713490763 +0000 -@@ -33,6 +33,7 @@ - #include - #include - #include -+#include - #include - - #ifdef HAVE_CONFIG_H diff --git a/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb b/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb similarity index 78% rename from meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb rename to meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb index c37c5e952ea..4909035b3a2 100644 --- a/meta-oe/recipes-support/sg3-utils/sg3-utils_1.42.bb +++ b/meta-oe/recipes-support/sg3-utils/sg3-utils_1.44.bb @@ -9,14 +9,13 @@ LICENSE = "GPLv2+ & BSD" LIC_FILES_CHKSUM = "file://COPYING;md5=f90da7fc52172599dbf082d7620f18ca" SRC_URI = "http://sg.danny.cz/sg/p/sg3_utils-${PV}.tgz \ - file://glibc-2.28.patch \ " MIRRORS += "http://sg.danny.cz/sg/p https://fossies.org/linux/misc" UPSTREAM_CHECK_REGEX = "sg3_utils-(?P\d+(\.\d+)+)\.tgz" -SRC_URI[md5sum] = "28080de5bf2222f8b55a29093bec8aea" -SRC_URI[sha256sum] = "1dcb7a0309bd0ba3d4a83acb526973b80106ee26cd9f7398186cd3f0633c9ef3" +SRC_URI[md5sum] = "c11d2b3ca4cc2fd01796473e5330afed" +SRC_URI[sha256sum] = "8dae684d22e71b11353a48b16c95597af90f0cbe9bbd57f98d7f5544da5cae7b" inherit autotools-brokensep