summaryrefslogtreecommitdiff
path: root/applets/clock
diff options
context:
space:
mode:
Diffstat (limited to 'applets/clock')
-rw-r--r--applets/clock/Makefile.am205
-rw-r--r--applets/clock/Makefile.in1595
-rw-r--r--applets/clock/calendar-client.c2169
-rw-r--r--applets/clock/calendar-client.h153
-rw-r--r--applets/clock/calendar-debug.h56
-rw-r--r--applets/clock/calendar-sources.c658
-rw-r--r--applets/clock/calendar-sources.h70
-rw-r--r--applets/clock/calendar-window.c2125
-rw-r--r--applets/clock/calendar-window.h84
-rw-r--r--applets/clock/clock-face.c462
-rw-r--r--applets/clock/clock-face.h64
-rw-r--r--applets/clock/clock-location-tile.c728
-rw-r--r--applets/clock/clock-location-tile.h51
-rw-r--r--applets/clock/clock-location.c894
-rw-r--r--applets/clock/clock-location.h87
-rw-r--r--applets/clock/clock-map.c700
-rw-r--r--applets/clock/clock-map.h43
-rw-r--r--applets/clock/clock-marshallers.list3
-rw-r--r--applets/clock/clock-menu.xml8
-rw-r--r--applets/clock/clock-sunpos.c197
-rw-r--r--applets/clock/clock-sunpos.h8
-rw-r--r--applets/clock/clock-utils.c127
-rw-r--r--applets/clock/clock-utils.h57
-rw-r--r--applets/clock/clock.c3745
-rw-r--r--applets/clock/clock.h41
-rw-r--r--applets/clock/clock.schemas.in313
-rw-r--r--applets/clock/clock.ui1136
-rw-r--r--applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in18
-rw-r--r--applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in3
-rw-r--r--applets/clock/pixmaps/Makefile.am21
-rw-r--r--applets/clock/pixmaps/Makefile.in537
-rw-r--r--applets/clock/pixmaps/clock-calendar-icon.pngbin0 -> 653 bytes
-rw-r--r--applets/clock/pixmaps/clock-face-large.svg291
-rw-r--r--applets/clock/pixmaps/clock-face-small-day.svg290
-rw-r--r--applets/clock/pixmaps/clock-face-small-evening.svg290
-rw-r--r--applets/clock/pixmaps/clock-face-small-morning.svg290
-rw-r--r--applets/clock/pixmaps/clock-face-small-night.svg291
-rw-r--r--applets/clock/pixmaps/clock-face-small.svg290
-rw-r--r--applets/clock/pixmaps/clock-map-location-current.pngbin0 -> 379 bytes
-rw-r--r--applets/clock/pixmaps/clock-map-location-hilight.pngbin0 -> 346 bytes
-rw-r--r--applets/clock/pixmaps/clock-map-location-marker.pngbin0 -> 283 bytes
-rw-r--r--applets/clock/pixmaps/clock-map.pngbin0 -> 25244 bytes
-rw-r--r--applets/clock/pixmaps/clock-map.svg755
-rw-r--r--applets/clock/set-timezone.c291
-rw-r--r--applets/clock/set-timezone.h40
-rw-r--r--applets/clock/system-timezone.c1048
-rw-r--r--applets/clock/system-timezone.h87
-rw-r--r--applets/clock/test-system-timezone.c122
48 files changed, 20443 insertions, 0 deletions
diff --git a/applets/clock/Makefile.am b/applets/clock/Makefile.am
new file mode 100644
index 00000000..afda6eb2
--- /dev/null
+++ b/applets/clock/Makefile.am
@@ -0,0 +1,205 @@
+SUBDIRS = pixmaps
+
+noinst_LTLIBRARIES = libsystem-timezone.la
+noinst_PROGRAMS = test-system-timezone
+
+AM_CPPFLAGS = \
+ $(TZ_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+
+libsystem_timezone_la_SOURCES = \
+ system-timezone.c \
+ system-timezone.h
+libsystem_timezone_la_LIBADD = $(TZ_LIBS)
+
+if HAVE_LIBECAL
+CALENDAR_SOURCES = \
+ calendar-client.c \
+ calendar-client.h \
+ calendar-sources.c \
+ calendar-sources.h \
+ calendar-debug.h
+endif
+
+CLOCK_SOURCES = \
+ calendar-window.c \
+ calendar-window.h \
+ clock.c \
+ clock.h \
+ clock-face.c \
+ clock-face.h \
+ clock-location.c \
+ clock-location.h \
+ clock-location-tile.c \
+ clock-location-tile.h \
+ clock-map.c \
+ clock-map.h \
+ clock-sunpos.c \
+ clock-sunpos.h \
+ clock-utils.c \
+ clock-utils.h \
+ set-timezone.c \
+ set-timezone.h \
+ $(BUILT_SOURCES) \
+ $(CALENDAR_SOURCES)
+
+CLOCK_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ $(CLOCK_CFLAGS) \
+ -I$(srcdir)/../../libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DBUILDERDIR=\""$(uidir)"\" \
+ -DCLOCK_MENU_UI_DIR=\""$(xmluidir)"\" \
+ -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \
+ -DCLOCK_EDS_ICONDIR="\"$(CLOCK_EDS_ICONDIR)\"" \
+ -DMATEWEATHER_I_KNOW_THIS_IS_UNSTABLE
+
+CLOCK_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(CLOCK_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS) \
+ libsystem-timezone.la \
+ -lm
+
+test_system_timezone_SOURCES = \
+ test-system-timezone.c
+test_system_timezone_LDADD = libsystem-timezone.la
+
+if CLOCK_INPROCESS
+APPLET_IN_PROCESS = true
+APPLET_LOCATION = $(pkglibdir)/libclock-applet.so
+
+clock_appletlibdir = $(pkglibdir)
+clock_appletlib_LTLIBRARIES = libclock-applet.la
+libclock_applet_la_SOURCES = $(CLOCK_SOURCES)
+libclock_applet_la_CPPFLAGS = $(CLOCK_CPPFLAGS)
+libclock_applet_la_LIBADD = $(CLOCK_LDADD)
+libclock_applet_la_LDFLAGS = -module -avoid-version
+libclock_applet_la_CFLAGS = $(AM_CFLAGS)
+$(libclock_applet_la_OBJECTS): $(BUILT_SOURCES)
+else
+APPLET_IN_PROCESS = false
+APPLET_LOCATION = $(libexecdir)/clock-applet
+
+libexec_PROGRAMS = clock-applet
+clock_applet_SOURCES = $(CLOCK_SOURCES)
+clock_applet_CPPFLAGS = $(CLOCK_CPPFLAGS)
+clock_applet_LDADD = $(CLOCK_LDADD)
+clock_applet_CFLAGS = $(AM_CFLAGS)
+$(clock_applet_OBJECTS): $(BUILT_SOURCES)
+endif
+
+clock-marshallers.c: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --body --internal $< > $@
+
+clock-marshallers.h: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --internal $< > $@
+
+clock_enum_headers = \
+ $(top_srcdir)/applets/clock/clock-utils.h
+
+clock-typebuiltins.c: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"clock-typebuiltins.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@filename@\" */" \
+ --fprod "\n#include \"@filename@\"\n" \
+ --vhead "static const GEnumValue _@enum_name@_values[] = {" \
+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_enum_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(clock_enum_headers) > $@
+
+clock-typebuiltins.h: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#ifndef __CLOCK_TYPEBUILTINS_H__\n" \
+ --fhead "#define __CLOCK_TYPEBUILTINS_H__ 1\n\n" \
+ --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \
+ --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \
+ --ftail "#endif /* __CLOCK_TYPEBUILTINS_H__ */\n" \
+ --fprod "\n/* --- @filename@ --- */" \
+ --eprod "#define CLOCK_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
+ --eprod "GType @enum_name@_get_type (void);\n" \
+ $(clock_enum_headers) > $@
+
+BUILT_SOURCES = \
+ clock-marshallers.c \
+ clock-marshallers.h \
+ clock-typebuiltins.c \
+ clock-typebuiltins.h
+
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.ClockApplet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+if !CLOCK_INPROCESS
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.mate.panel.applet.ClockAppletFactory.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+org.mate.panel.applet.ClockAppletFactory.service: $(service_in_files)
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ $< > $@
+endif
+
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = clock.ui
+
+xmluidir = $(datadir)/mate-panel/ui
+xmlui_DATA = clock-menu.xml
+
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = clock.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+
+@INTLTOOL_SCHEMAS_RULE@
+
+if MATECONF_SCHEMAS_INSTALL
+install-data-local:
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schemas_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/clock/$$p ; \
+ done \
+ fi
+uninstall-local:
+ for p in $(schema_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/clock/$$p ; \
+ done
+endif
+
+EXTRA_DIST = \
+ org.mate.panel.ClockApplet.mate-panel-applet.in.in \
+ $(schemas_in_files) \
+ $(xmlui_DATA) \
+ $(ui_DATA) \
+ clock-marshallers.list \
+ $(service_in_files)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(applet_DATA) \
+ $(applet_DATA).in \
+ $(service_DATA) \
+ $(schemas_DATA) \
+ $(polkit_DATA) \
+ $(dbus_services_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/clock/Makefile.in b/applets/clock/Makefile.in
new file mode 100644
index 00000000..e51ce949
--- /dev/null
+++ b/applets/clock/Makefile.in
@@ -0,0 +1,1595 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = test-system-timezone$(EXEEXT)
+@CLOCK_INPROCESS_FALSE@libexec_PROGRAMS = clock-applet$(EXEEXT)
+subdir = applets/clock
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(clock_appletlibdir)" \
+ "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" \
+ "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" \
+ "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)"
+LTLIBRARIES = $(clock_appletlib_LTLIBRARIES) $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ libsystem-timezone.la
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_DEPENDENCIES = \
+@CLOCK_INPROCESS_TRUE@ $(am__DEPENDENCIES_2)
+am__libclock_applet_la_SOURCES_DIST = calendar-window.c \
+ calendar-window.h clock.c clock.h clock-face.c clock-face.h \
+ clock-location.c clock-location.h clock-location-tile.c \
+ clock-location-tile.h clock-map.c clock-map.h clock-sunpos.c \
+ clock-sunpos.h clock-utils.c clock-utils.h set-timezone.c \
+ set-timezone.h clock-marshallers.c clock-marshallers.h \
+ clock-typebuiltins.c clock-typebuiltins.h calendar-client.c \
+ calendar-client.h calendar-sources.c calendar-sources.h \
+ calendar-debug.h
+am__objects_1 = libclock_applet_la-clock-marshallers.lo \
+ libclock_applet_la-clock-typebuiltins.lo
+@HAVE_LIBECAL_TRUE@am__objects_2 = \
+@HAVE_LIBECAL_TRUE@ libclock_applet_la-calendar-client.lo \
+@HAVE_LIBECAL_TRUE@ libclock_applet_la-calendar-sources.lo
+am__objects_3 = libclock_applet_la-calendar-window.lo \
+ libclock_applet_la-clock.lo libclock_applet_la-clock-face.lo \
+ libclock_applet_la-clock-location.lo \
+ libclock_applet_la-clock-location-tile.lo \
+ libclock_applet_la-clock-map.lo \
+ libclock_applet_la-clock-sunpos.lo \
+ libclock_applet_la-clock-utils.lo \
+ libclock_applet_la-set-timezone.lo $(am__objects_1) \
+ $(am__objects_2)
+@CLOCK_INPROCESS_TRUE@am_libclock_applet_la_OBJECTS = \
+@CLOCK_INPROCESS_TRUE@ $(am__objects_3)
+libclock_applet_la_OBJECTS = $(am_libclock_applet_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+libclock_applet_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(libclock_applet_la_CFLAGS) $(CFLAGS) \
+ $(libclock_applet_la_LDFLAGS) $(LDFLAGS) -o $@
+@CLOCK_INPROCESS_TRUE@am_libclock_applet_la_rpath = -rpath \
+@CLOCK_INPROCESS_TRUE@ $(clock_appletlibdir)
+libsystem_timezone_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libsystem_timezone_la_OBJECTS = system-timezone.lo
+libsystem_timezone_la_OBJECTS = $(am_libsystem_timezone_la_OBJECTS)
+PROGRAMS = $(libexec_PROGRAMS) $(noinst_PROGRAMS)
+am__clock_applet_SOURCES_DIST = calendar-window.c calendar-window.h \
+ clock.c clock.h clock-face.c clock-face.h clock-location.c \
+ clock-location.h clock-location-tile.c clock-location-tile.h \
+ clock-map.c clock-map.h clock-sunpos.c clock-sunpos.h \
+ clock-utils.c clock-utils.h set-timezone.c set-timezone.h \
+ clock-marshallers.c clock-marshallers.h clock-typebuiltins.c \
+ clock-typebuiltins.h calendar-client.c calendar-client.h \
+ calendar-sources.c calendar-sources.h calendar-debug.h
+am__objects_4 = clock_applet-clock-marshallers.$(OBJEXT) \
+ clock_applet-clock-typebuiltins.$(OBJEXT)
+@HAVE_LIBECAL_TRUE@am__objects_5 = \
+@HAVE_LIBECAL_TRUE@ clock_applet-calendar-client.$(OBJEXT) \
+@HAVE_LIBECAL_TRUE@ clock_applet-calendar-sources.$(OBJEXT)
+am__objects_6 = clock_applet-calendar-window.$(OBJEXT) \
+ clock_applet-clock.$(OBJEXT) clock_applet-clock-face.$(OBJEXT) \
+ clock_applet-clock-location.$(OBJEXT) \
+ clock_applet-clock-location-tile.$(OBJEXT) \
+ clock_applet-clock-map.$(OBJEXT) \
+ clock_applet-clock-sunpos.$(OBJEXT) \
+ clock_applet-clock-utils.$(OBJEXT) \
+ clock_applet-set-timezone.$(OBJEXT) $(am__objects_4) \
+ $(am__objects_5)
+@CLOCK_INPROCESS_FALSE@am_clock_applet_OBJECTS = $(am__objects_6)
+clock_applet_OBJECTS = $(am_clock_applet_OBJECTS)
+@CLOCK_INPROCESS_FALSE@clock_applet_DEPENDENCIES = \
+@CLOCK_INPROCESS_FALSE@ $(am__DEPENDENCIES_2)
+clock_applet_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(clock_applet_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_test_system_timezone_OBJECTS = test-system-timezone.$(OBJEXT)
+test_system_timezone_OBJECTS = $(am_test_system_timezone_OBJECTS)
+test_system_timezone_DEPENDENCIES = libsystem-timezone.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libclock_applet_la_SOURCES) \
+ $(libsystem_timezone_la_SOURCES) $(clock_applet_SOURCES) \
+ $(test_system_timezone_SOURCES)
+DIST_SOURCES = $(am__libclock_applet_la_SOURCES_DIST) \
+ $(libsystem_timezone_la_SOURCES) \
+ $(am__clock_applet_SOURCES_DIST) \
+ $(test_system_timezone_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+DATA = $(applet_DATA) $(schemas_DATA) $(service_DATA) $(ui_DATA) \
+ $(xmlui_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+ distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_CFLAGS = @CLOCK_CFLAGS@
+CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@
+CLOCK_LIBS = @CLOCK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@
+EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FISH_CFLAGS = @FISH_CFLAGS@
+FISH_LIBS = @FISH_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_QUERYMODULES = @GIO_QUERYMODULES@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@
+LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@
+MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@
+MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@
+MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MATECORBA_IDL = @MATECORBA_IDL@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
+NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@
+NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANEL_CFLAGS = @PANEL_CFLAGS@
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+PANEL_LIBS = @PANEL_LIBS@
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@
+PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+REBUILD = @REBUILD@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TZ_CFLAGS = @TZ_CFLAGS@
+TZ_LIBS = @TZ_LIBS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WNCKLET_CFLAGS = @WNCKLET_CFLAGS@
+WNCKLET_LIBS = @WNCKLET_LIBS@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XRANDR_CFLAGS = @XRANDR_CFLAGS@
+XRANDR_LIBS = @XRANDR_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appletsdir = @appletsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+modulesdir = @modulesdir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = pixmaps
+noinst_LTLIBRARIES = libsystem-timezone.la
+AM_CPPFLAGS = \
+ $(TZ_CFLAGS) \
+ $(DISABLE_DEPRECATED_CFLAGS)
+
+AM_CFLAGS = $(WARN_CFLAGS)
+libsystem_timezone_la_SOURCES = \
+ system-timezone.c \
+ system-timezone.h
+
+libsystem_timezone_la_LIBADD = $(TZ_LIBS)
+@HAVE_LIBECAL_TRUE@CALENDAR_SOURCES = \
+@HAVE_LIBECAL_TRUE@ calendar-client.c \
+@HAVE_LIBECAL_TRUE@ calendar-client.h \
+@HAVE_LIBECAL_TRUE@ calendar-sources.c \
+@HAVE_LIBECAL_TRUE@ calendar-sources.h \
+@HAVE_LIBECAL_TRUE@ calendar-debug.h
+
+CLOCK_SOURCES = \
+ calendar-window.c \
+ calendar-window.h \
+ clock.c \
+ clock.h \
+ clock-face.c \
+ clock-face.h \
+ clock-location.c \
+ clock-location.h \
+ clock-location-tile.c \
+ clock-location-tile.h \
+ clock-map.c \
+ clock-map.h \
+ clock-sunpos.c \
+ clock-sunpos.h \
+ clock-utils.c \
+ clock-utils.h \
+ set-timezone.c \
+ set-timezone.h \
+ $(BUILT_SOURCES) \
+ $(CALENDAR_SOURCES)
+
+CLOCK_CPPFLAGS = \
+ $(AM_CPPFLAGS) \
+ $(LIBMATE_PANEL_APPLET_CFLAGS) \
+ $(CLOCK_CFLAGS) \
+ -I$(srcdir)/../../libmate-panel-applet \
+ -I$(top_builddir)/libmate-panel-applet \
+ -DMATELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DBUILDERDIR=\""$(uidir)"\" \
+ -DCLOCK_MENU_UI_DIR=\""$(xmluidir)"\" \
+ -DICONDIR=\""$(datadir)/mate-panel/pixmaps"\" \
+ -DCLOCK_EDS_ICONDIR="\"$(CLOCK_EDS_ICONDIR)\"" \
+ -DMATEWEATHER_I_KNOW_THIS_IS_UNSTABLE
+
+CLOCK_LDADD = \
+ ../../libmate-panel-applet/libmate-panel-applet-3.la \
+ $(CLOCK_LIBS) \
+ $(LIBMATE_PANEL_APPLET_LIBS) \
+ libsystem-timezone.la \
+ -lm
+
+test_system_timezone_SOURCES = \
+ test-system-timezone.c
+
+test_system_timezone_LDADD = libsystem-timezone.la
+@CLOCK_INPROCESS_FALSE@APPLET_IN_PROCESS = false
+@CLOCK_INPROCESS_TRUE@APPLET_IN_PROCESS = true
+@CLOCK_INPROCESS_FALSE@APPLET_LOCATION = $(libexecdir)/clock-applet
+@CLOCK_INPROCESS_TRUE@APPLET_LOCATION = $(pkglibdir)/libclock-applet.so
+@CLOCK_INPROCESS_TRUE@clock_appletlibdir = $(pkglibdir)
+@CLOCK_INPROCESS_TRUE@clock_appletlib_LTLIBRARIES = libclock-applet.la
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_SOURCES = $(CLOCK_SOURCES)
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_CPPFLAGS = $(CLOCK_CPPFLAGS)
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_LIBADD = $(CLOCK_LDADD)
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_LDFLAGS = -module -avoid-version
+@CLOCK_INPROCESS_TRUE@libclock_applet_la_CFLAGS = $(AM_CFLAGS)
+@CLOCK_INPROCESS_FALSE@clock_applet_SOURCES = $(CLOCK_SOURCES)
+@CLOCK_INPROCESS_FALSE@clock_applet_CPPFLAGS = $(CLOCK_CPPFLAGS)
+@CLOCK_INPROCESS_FALSE@clock_applet_LDADD = $(CLOCK_LDADD)
+@CLOCK_INPROCESS_FALSE@clock_applet_CFLAGS = $(AM_CFLAGS)
+clock_enum_headers = \
+ $(top_srcdir)/applets/clock/clock-utils.h
+
+BUILT_SOURCES = \
+ clock-marshallers.c \
+ clock-marshallers.h \
+ clock-typebuiltins.c \
+ clock-typebuiltins.h
+
+appletdir = $(datadir)/mate-panel/applets
+applet_in_files = org.mate.panel.ClockApplet.mate-panel-applet.in
+applet_DATA = $(applet_in_files:.mate-panel-applet.in=.mate-panel-applet)
+@CLOCK_INPROCESS_FALSE@servicedir = $(datadir)/dbus-1/services
+@CLOCK_INPROCESS_FALSE@service_in_files = org.mate.panel.applet.ClockAppletFactory.service.in
+@CLOCK_INPROCESS_FALSE@service_DATA = $(service_in_files:.service.in=.service)
+uidir = $(datadir)/mate-panel/ui
+ui_DATA = clock.ui
+xmluidir = $(datadir)/mate-panel/ui
+xmlui_DATA = clock-menu.xml
+schemasdir = $(MATECONF_SCHEMA_FILE_DIR)
+schemas_in_files = clock.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+EXTRA_DIST = \
+ org.mate.panel.ClockApplet.mate-panel-applet.in.in \
+ $(schemas_in_files) \
+ $(xmlui_DATA) \
+ $(ui_DATA) \
+ clock-marshallers.list \
+ $(service_in_files)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ $(applet_DATA) \
+ $(applet_DATA).in \
+ $(service_DATA) \
+ $(schemas_DATA) \
+ $(polkit_DATA) \
+ $(dbus_services_DATA)
+
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/clock/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applets/clock/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-clock_appletlibLTLIBRARIES: $(clock_appletlib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(clock_appletlibdir)" || $(MKDIR_P) "$(DESTDIR)$(clock_appletlibdir)"
+ @list='$(clock_appletlib_LTLIBRARIES)'; test -n "$(clock_appletlibdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(clock_appletlibdir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(clock_appletlibdir)"; \
+ }
+
+uninstall-clock_appletlibLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(clock_appletlib_LTLIBRARIES)'; test -n "$(clock_appletlibdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(clock_appletlibdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(clock_appletlibdir)/$$f"; \
+ done
+
+clean-clock_appletlibLTLIBRARIES:
+ -test -z "$(clock_appletlib_LTLIBRARIES)" || rm -f $(clock_appletlib_LTLIBRARIES)
+ @list='$(clock_appletlib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libclock-applet.la: $(libclock_applet_la_OBJECTS) $(libclock_applet_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libclock_applet_la_LINK) $(am_libclock_applet_la_rpath) $(libclock_applet_la_OBJECTS) $(libclock_applet_la_LIBADD) $(LIBS)
+libsystem-timezone.la: $(libsystem_timezone_la_OBJECTS) $(libsystem_timezone_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(LINK) $(libsystem_timezone_la_OBJECTS) $(libsystem_timezone_la_LIBADD) $(LIBS)
+install-libexecPROGRAMS: $(libexec_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(libexecdir)" || $(MKDIR_P) "$(DESTDIR)$(libexecdir)"
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p || test -f $$p1; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-libexecPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(libexecdir)" && rm -f $$files
+
+clean-libexecPROGRAMS:
+ @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+clock-applet$(EXEEXT): $(clock_applet_OBJECTS) $(clock_applet_DEPENDENCIES)
+ @rm -f clock-applet$(EXEEXT)
+ $(AM_V_CCLD)$(clock_applet_LINK) $(clock_applet_OBJECTS) $(clock_applet_LDADD) $(LIBS)
+test-system-timezone$(EXEEXT): $(test_system_timezone_OBJECTS) $(test_system_timezone_DEPENDENCIES)
+ @rm -f test-system-timezone$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_system_timezone_OBJECTS) $(test_system_timezone_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-client.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-sources.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-calendar-window.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-face.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-location-tile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-location.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-map.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-marshallers.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-sunpos.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-typebuiltins.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock-utils.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-clock.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clock_applet-set-timezone.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-client.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-sources.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-calendar-window.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-face.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-location-tile.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-location.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-map.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-marshallers.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-sunpos.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-typebuiltins.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock-utils.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-clock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libclock_applet_la-set-timezone.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system-timezone.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-system-timezone.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+libclock_applet_la-calendar-window.lo: calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-window.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-window.Tpo -c -o libclock_applet_la-calendar-window.lo `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-window.Tpo $(DEPDIR)/libclock_applet_la-calendar-window.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='libclock_applet_la-calendar-window.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-window.lo `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+
+libclock_applet_la-clock.lo: clock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock.Tpo -c -o libclock_applet_la-clock.lo `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock.Tpo $(DEPDIR)/libclock_applet_la-clock.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='libclock_applet_la-clock.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock.lo `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+
+libclock_applet_la-clock-face.lo: clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-face.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-face.Tpo -c -o libclock_applet_la-clock-face.lo `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-face.Tpo $(DEPDIR)/libclock_applet_la-clock-face.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='libclock_applet_la-clock-face.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-face.lo `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+
+libclock_applet_la-clock-location.lo: clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-location.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-location.Tpo -c -o libclock_applet_la-clock-location.lo `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-location.Tpo $(DEPDIR)/libclock_applet_la-clock-location.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='libclock_applet_la-clock-location.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-location.lo `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+
+libclock_applet_la-clock-location-tile.lo: clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-location-tile.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-location-tile.Tpo -c -o libclock_applet_la-clock-location-tile.lo `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-location-tile.Tpo $(DEPDIR)/libclock_applet_la-clock-location-tile.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='libclock_applet_la-clock-location-tile.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-location-tile.lo `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+
+libclock_applet_la-clock-map.lo: clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-map.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-map.Tpo -c -o libclock_applet_la-clock-map.lo `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-map.Tpo $(DEPDIR)/libclock_applet_la-clock-map.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='libclock_applet_la-clock-map.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-map.lo `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+
+libclock_applet_la-clock-sunpos.lo: clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-sunpos.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-sunpos.Tpo -c -o libclock_applet_la-clock-sunpos.lo `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-sunpos.Tpo $(DEPDIR)/libclock_applet_la-clock-sunpos.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='libclock_applet_la-clock-sunpos.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-sunpos.lo `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+
+libclock_applet_la-clock-utils.lo: clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-utils.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-utils.Tpo -c -o libclock_applet_la-clock-utils.lo `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-utils.Tpo $(DEPDIR)/libclock_applet_la-clock-utils.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='libclock_applet_la-clock-utils.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-utils.lo `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+
+libclock_applet_la-set-timezone.lo: set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-set-timezone.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-set-timezone.Tpo -c -o libclock_applet_la-set-timezone.lo `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-set-timezone.Tpo $(DEPDIR)/libclock_applet_la-set-timezone.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='libclock_applet_la-set-timezone.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-set-timezone.lo `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+
+libclock_applet_la-clock-marshallers.lo: clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-marshallers.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-marshallers.Tpo -c -o libclock_applet_la-clock-marshallers.lo `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-marshallers.Tpo $(DEPDIR)/libclock_applet_la-clock-marshallers.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='libclock_applet_la-clock-marshallers.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-marshallers.lo `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+
+libclock_applet_la-clock-typebuiltins.lo: clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-clock-typebuiltins.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Tpo -c -o libclock_applet_la-clock-typebuiltins.lo `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Tpo $(DEPDIR)/libclock_applet_la-clock-typebuiltins.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='libclock_applet_la-clock-typebuiltins.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-clock-typebuiltins.lo `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+
+libclock_applet_la-calendar-client.lo: calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-client.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-client.Tpo -c -o libclock_applet_la-calendar-client.lo `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-client.Tpo $(DEPDIR)/libclock_applet_la-calendar-client.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='libclock_applet_la-calendar-client.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-client.lo `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+
+libclock_applet_la-calendar-sources.lo: calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -MT libclock_applet_la-calendar-sources.lo -MD -MP -MF $(DEPDIR)/libclock_applet_la-calendar-sources.Tpo -c -o libclock_applet_la-calendar-sources.lo `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libclock_applet_la-calendar-sources.Tpo $(DEPDIR)/libclock_applet_la-calendar-sources.Plo
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='libclock_applet_la-calendar-sources.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libclock_applet_la_CPPFLAGS) $(CPPFLAGS) $(libclock_applet_la_CFLAGS) $(CFLAGS) -c -o libclock_applet_la-calendar-sources.lo `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+
+clock_applet-calendar-window.o: calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-window.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-window.Tpo -c -o clock_applet-calendar-window.o `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-window.Tpo $(DEPDIR)/clock_applet-calendar-window.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='clock_applet-calendar-window.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-window.o `test -f 'calendar-window.c' || echo '$(srcdir)/'`calendar-window.c
+
+clock_applet-calendar-window.obj: calendar-window.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-window.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-window.Tpo -c -o clock_applet-calendar-window.obj `if test -f 'calendar-window.c'; then $(CYGPATH_W) 'calendar-window.c'; else $(CYGPATH_W) '$(srcdir)/calendar-window.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-window.Tpo $(DEPDIR)/clock_applet-calendar-window.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-window.c' object='clock_applet-calendar-window.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-window.obj `if test -f 'calendar-window.c'; then $(CYGPATH_W) 'calendar-window.c'; else $(CYGPATH_W) '$(srcdir)/calendar-window.c'; fi`
+
+clock_applet-clock.o: clock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock.o -MD -MP -MF $(DEPDIR)/clock_applet-clock.Tpo -c -o clock_applet-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock.Tpo $(DEPDIR)/clock_applet-clock.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='clock_applet-clock.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c
+
+clock_applet-clock.obj: clock.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock.Tpo -c -o clock_applet-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock.Tpo $(DEPDIR)/clock_applet-clock.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock.c' object='clock_applet-clock.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi`
+
+clock_applet-clock-face.o: clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-face.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-face.Tpo -c -o clock_applet-clock-face.o `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-face.Tpo $(DEPDIR)/clock_applet-clock-face.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='clock_applet-clock-face.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-face.o `test -f 'clock-face.c' || echo '$(srcdir)/'`clock-face.c
+
+clock_applet-clock-face.obj: clock-face.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-face.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-face.Tpo -c -o clock_applet-clock-face.obj `if test -f 'clock-face.c'; then $(CYGPATH_W) 'clock-face.c'; else $(CYGPATH_W) '$(srcdir)/clock-face.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-face.Tpo $(DEPDIR)/clock_applet-clock-face.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-face.c' object='clock_applet-clock-face.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-face.obj `if test -f 'clock-face.c'; then $(CYGPATH_W) 'clock-face.c'; else $(CYGPATH_W) '$(srcdir)/clock-face.c'; fi`
+
+clock_applet-clock-location.o: clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-location.Tpo -c -o clock_applet-clock-location.o `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location.Tpo $(DEPDIR)/clock_applet-clock-location.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='clock_applet-clock-location.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location.o `test -f 'clock-location.c' || echo '$(srcdir)/'`clock-location.c
+
+clock_applet-clock-location.obj: clock-location.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-location.Tpo -c -o clock_applet-clock-location.obj `if test -f 'clock-location.c'; then $(CYGPATH_W) 'clock-location.c'; else $(CYGPATH_W) '$(srcdir)/clock-location.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location.Tpo $(DEPDIR)/clock_applet-clock-location.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location.c' object='clock_applet-clock-location.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location.obj `if test -f 'clock-location.c'; then $(CYGPATH_W) 'clock-location.c'; else $(CYGPATH_W) '$(srcdir)/clock-location.c'; fi`
+
+clock_applet-clock-location-tile.o: clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location-tile.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-location-tile.Tpo -c -o clock_applet-clock-location-tile.o `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location-tile.Tpo $(DEPDIR)/clock_applet-clock-location-tile.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='clock_applet-clock-location-tile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location-tile.o `test -f 'clock-location-tile.c' || echo '$(srcdir)/'`clock-location-tile.c
+
+clock_applet-clock-location-tile.obj: clock-location-tile.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-location-tile.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-location-tile.Tpo -c -o clock_applet-clock-location-tile.obj `if test -f 'clock-location-tile.c'; then $(CYGPATH_W) 'clock-location-tile.c'; else $(CYGPATH_W) '$(srcdir)/clock-location-tile.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-location-tile.Tpo $(DEPDIR)/clock_applet-clock-location-tile.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-location-tile.c' object='clock_applet-clock-location-tile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-location-tile.obj `if test -f 'clock-location-tile.c'; then $(CYGPATH_W) 'clock-location-tile.c'; else $(CYGPATH_W) '$(srcdir)/clock-location-tile.c'; fi`
+
+clock_applet-clock-map.o: clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-map.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-map.Tpo -c -o clock_applet-clock-map.o `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-map.Tpo $(DEPDIR)/clock_applet-clock-map.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='clock_applet-clock-map.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-map.o `test -f 'clock-map.c' || echo '$(srcdir)/'`clock-map.c
+
+clock_applet-clock-map.obj: clock-map.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-map.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-map.Tpo -c -o clock_applet-clock-map.obj `if test -f 'clock-map.c'; then $(CYGPATH_W) 'clock-map.c'; else $(CYGPATH_W) '$(srcdir)/clock-map.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-map.Tpo $(DEPDIR)/clock_applet-clock-map.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-map.c' object='clock_applet-clock-map.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-map.obj `if test -f 'clock-map.c'; then $(CYGPATH_W) 'clock-map.c'; else $(CYGPATH_W) '$(srcdir)/clock-map.c'; fi`
+
+clock_applet-clock-sunpos.o: clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-sunpos.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-sunpos.Tpo -c -o clock_applet-clock-sunpos.o `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-sunpos.Tpo $(DEPDIR)/clock_applet-clock-sunpos.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='clock_applet-clock-sunpos.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-sunpos.o `test -f 'clock-sunpos.c' || echo '$(srcdir)/'`clock-sunpos.c
+
+clock_applet-clock-sunpos.obj: clock-sunpos.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-sunpos.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-sunpos.Tpo -c -o clock_applet-clock-sunpos.obj `if test -f 'clock-sunpos.c'; then $(CYGPATH_W) 'clock-sunpos.c'; else $(CYGPATH_W) '$(srcdir)/clock-sunpos.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-sunpos.Tpo $(DEPDIR)/clock_applet-clock-sunpos.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-sunpos.c' object='clock_applet-clock-sunpos.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-sunpos.obj `if test -f 'clock-sunpos.c'; then $(CYGPATH_W) 'clock-sunpos.c'; else $(CYGPATH_W) '$(srcdir)/clock-sunpos.c'; fi`
+
+clock_applet-clock-utils.o: clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-utils.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-utils.Tpo -c -o clock_applet-clock-utils.o `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-utils.Tpo $(DEPDIR)/clock_applet-clock-utils.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='clock_applet-clock-utils.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-utils.o `test -f 'clock-utils.c' || echo '$(srcdir)/'`clock-utils.c
+
+clock_applet-clock-utils.obj: clock-utils.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-utils.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-utils.Tpo -c -o clock_applet-clock-utils.obj `if test -f 'clock-utils.c'; then $(CYGPATH_W) 'clock-utils.c'; else $(CYGPATH_W) '$(srcdir)/clock-utils.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-utils.Tpo $(DEPDIR)/clock_applet-clock-utils.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-utils.c' object='clock_applet-clock-utils.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-utils.obj `if test -f 'clock-utils.c'; then $(CYGPATH_W) 'clock-utils.c'; else $(CYGPATH_W) '$(srcdir)/clock-utils.c'; fi`
+
+clock_applet-set-timezone.o: set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-set-timezone.o -MD -MP -MF $(DEPDIR)/clock_applet-set-timezone.Tpo -c -o clock_applet-set-timezone.o `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-set-timezone.Tpo $(DEPDIR)/clock_applet-set-timezone.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='clock_applet-set-timezone.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-set-timezone.o `test -f 'set-timezone.c' || echo '$(srcdir)/'`set-timezone.c
+
+clock_applet-set-timezone.obj: set-timezone.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-set-timezone.obj -MD -MP -MF $(DEPDIR)/clock_applet-set-timezone.Tpo -c -o clock_applet-set-timezone.obj `if test -f 'set-timezone.c'; then $(CYGPATH_W) 'set-timezone.c'; else $(CYGPATH_W) '$(srcdir)/set-timezone.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-set-timezone.Tpo $(DEPDIR)/clock_applet-set-timezone.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='set-timezone.c' object='clock_applet-set-timezone.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-set-timezone.obj `if test -f 'set-timezone.c'; then $(CYGPATH_W) 'set-timezone.c'; else $(CYGPATH_W) '$(srcdir)/set-timezone.c'; fi`
+
+clock_applet-clock-marshallers.o: clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-marshallers.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-marshallers.Tpo -c -o clock_applet-clock-marshallers.o `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-marshallers.Tpo $(DEPDIR)/clock_applet-clock-marshallers.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='clock_applet-clock-marshallers.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-marshallers.o `test -f 'clock-marshallers.c' || echo '$(srcdir)/'`clock-marshallers.c
+
+clock_applet-clock-marshallers.obj: clock-marshallers.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-marshallers.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-marshallers.Tpo -c -o clock_applet-clock-marshallers.obj `if test -f 'clock-marshallers.c'; then $(CYGPATH_W) 'clock-marshallers.c'; else $(CYGPATH_W) '$(srcdir)/clock-marshallers.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-marshallers.Tpo $(DEPDIR)/clock_applet-clock-marshallers.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-marshallers.c' object='clock_applet-clock-marshallers.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-marshallers.obj `if test -f 'clock-marshallers.c'; then $(CYGPATH_W) 'clock-marshallers.c'; else $(CYGPATH_W) '$(srcdir)/clock-marshallers.c'; fi`
+
+clock_applet-clock-typebuiltins.o: clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-typebuiltins.o -MD -MP -MF $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo -c -o clock_applet-clock-typebuiltins.o `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo $(DEPDIR)/clock_applet-clock-typebuiltins.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='clock_applet-clock-typebuiltins.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-typebuiltins.o `test -f 'clock-typebuiltins.c' || echo '$(srcdir)/'`clock-typebuiltins.c
+
+clock_applet-clock-typebuiltins.obj: clock-typebuiltins.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-clock-typebuiltins.obj -MD -MP -MF $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo -c -o clock_applet-clock-typebuiltins.obj `if test -f 'clock-typebuiltins.c'; then $(CYGPATH_W) 'clock-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/clock-typebuiltins.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-clock-typebuiltins.Tpo $(DEPDIR)/clock_applet-clock-typebuiltins.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='clock-typebuiltins.c' object='clock_applet-clock-typebuiltins.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-clock-typebuiltins.obj `if test -f 'clock-typebuiltins.c'; then $(CYGPATH_W) 'clock-typebuiltins.c'; else $(CYGPATH_W) '$(srcdir)/clock-typebuiltins.c'; fi`
+
+clock_applet-calendar-client.o: calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-client.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-client.Tpo -c -o clock_applet-calendar-client.o `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-client.Tpo $(DEPDIR)/clock_applet-calendar-client.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='clock_applet-calendar-client.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-client.o `test -f 'calendar-client.c' || echo '$(srcdir)/'`calendar-client.c
+
+clock_applet-calendar-client.obj: calendar-client.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-client.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-client.Tpo -c -o clock_applet-calendar-client.obj `if test -f 'calendar-client.c'; then $(CYGPATH_W) 'calendar-client.c'; else $(CYGPATH_W) '$(srcdir)/calendar-client.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-client.Tpo $(DEPDIR)/clock_applet-calendar-client.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-client.c' object='clock_applet-calendar-client.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-client.obj `if test -f 'calendar-client.c'; then $(CYGPATH_W) 'calendar-client.c'; else $(CYGPATH_W) '$(srcdir)/calendar-client.c'; fi`
+
+clock_applet-calendar-sources.o: calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-sources.o -MD -MP -MF $(DEPDIR)/clock_applet-calendar-sources.Tpo -c -o clock_applet-calendar-sources.o `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-sources.Tpo $(DEPDIR)/clock_applet-calendar-sources.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='clock_applet-calendar-sources.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-sources.o `test -f 'calendar-sources.c' || echo '$(srcdir)/'`calendar-sources.c
+
+clock_applet-calendar-sources.obj: calendar-sources.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -MT clock_applet-calendar-sources.obj -MD -MP -MF $(DEPDIR)/clock_applet-calendar-sources.Tpo -c -o clock_applet-calendar-sources.obj `if test -f 'calendar-sources.c'; then $(CYGPATH_W) 'calendar-sources.c'; else $(CYGPATH_W) '$(srcdir)/calendar-sources.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/clock_applet-calendar-sources.Tpo $(DEPDIR)/clock_applet-calendar-sources.Po
+@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='calendar-sources.c' object='clock_applet-calendar-sources.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(clock_applet_CPPFLAGS) $(CPPFLAGS) $(clock_applet_CFLAGS) $(CFLAGS) -c -o clock_applet-calendar-sources.obj `if test -f 'calendar-sources.c'; then $(CYGPATH_W) 'calendar-sources.c'; else $(CYGPATH_W) '$(srcdir)/calendar-sources.c'; fi`
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-appletDATA: $(applet_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(appletdir)" || $(MKDIR_P) "$(DESTDIR)$(appletdir)"
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appletdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(appletdir)" || exit $$?; \
+ done
+
+uninstall-appletDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(applet_DATA)'; test -n "$(appletdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(appletdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(appletdir)" && rm -f $$files
+install-schemasDATA: $(schemas_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(schemasdir)" || $(MKDIR_P) "$(DESTDIR)$(schemasdir)"
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(schemasdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(schemasdir)" || exit $$?; \
+ done
+
+uninstall-schemasDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(schemas_DATA)'; test -n "$(schemasdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(schemasdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(schemasdir)" && rm -f $$files
+install-serviceDATA: $(service_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(servicedir)" || $(MKDIR_P) "$(DESTDIR)$(servicedir)"
+ @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(servicedir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(servicedir)" || exit $$?; \
+ done
+
+uninstall-serviceDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(service_DATA)'; test -n "$(servicedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(servicedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(servicedir)" && rm -f $$files
+install-uiDATA: $(ui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(uidir)" || $(MKDIR_P) "$(DESTDIR)$(uidir)"
+ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(uidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(uidir)" || exit $$?; \
+ done
+
+uninstall-uiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(ui_DATA)'; test -n "$(uidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(uidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(uidir)" && rm -f $$files
+install-xmluiDATA: $(xmlui_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(xmluidir)" || $(MKDIR_P) "$(DESTDIR)$(xmluidir)"
+ @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(xmluidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(xmluidir)" || exit $$?; \
+ done
+
+uninstall-xmluiDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(xmlui_DATA)'; test -n "$(xmluidir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(xmluidir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(xmluidir)" && rm -f $$files
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+ @fail= failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
+ dot_seen=no; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ rev=''; for subdir in $$list; do \
+ if test "$$subdir" = "."; then :; else \
+ rev="$$subdir $$rev"; \
+ fi; \
+ done; \
+ rev="$$rev ."; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+ctags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(clock_appletlibdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(appletdir)" "$(DESTDIR)$(schemasdir)" "$(DESTDIR)$(servicedir)" "$(DESTDIR)$(uidir)" "$(DESTDIR)$(xmluidir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+@MATECONF_SCHEMAS_INSTALL_FALSE@uninstall-local:
+@MATECONF_SCHEMAS_INSTALL_FALSE@install-data-local:
+clean: clean-recursive
+
+clean-am: clean-clock_appletlibLTLIBRARIES clean-generic \
+ clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \
+ clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-appletDATA install-clock_appletlibLTLIBRARIES \
+ install-data-local install-schemasDATA install-serviceDATA \
+ install-uiDATA install-xmluiDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libexecPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-appletDATA \
+ uninstall-clock_appletlibLTLIBRARIES uninstall-libexecPROGRAMS \
+ uninstall-local uninstall-schemasDATA uninstall-serviceDATA \
+ uninstall-uiDATA uninstall-xmluiDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+ ctags-recursive install install-am install-strip \
+ tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+ all all-am check check-am clean \
+ clean-clock_appletlibLTLIBRARIES clean-generic \
+ clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \
+ clean-noinstPROGRAMS ctags ctags-recursive distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-appletDATA \
+ install-clock_appletlibLTLIBRARIES install-data \
+ install-data-am install-data-local install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-libexecPROGRAMS \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-schemasDATA install-serviceDATA \
+ install-strip install-uiDATA install-xmluiDATA installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-recursive uninstall uninstall-am \
+ uninstall-appletDATA uninstall-clock_appletlibLTLIBRARIES \
+ uninstall-libexecPROGRAMS uninstall-local \
+ uninstall-schemasDATA uninstall-serviceDATA uninstall-uiDATA \
+ uninstall-xmluiDATA
+
+@CLOCK_INPROCESS_TRUE@$(libclock_applet_la_OBJECTS): $(BUILT_SOURCES)
+@CLOCK_INPROCESS_FALSE@$(clock_applet_OBJECTS): $(BUILT_SOURCES)
+
+clock-marshallers.c: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --body --internal $< > $@
+
+clock-marshallers.h: clock-marshallers.list
+ $(AM_V_GEN)glib-genmarshal --prefix _clock_marshal --header --internal $< > $@
+
+clock-typebuiltins.c: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"clock-typebuiltins.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@filename@\" */" \
+ --fprod "\n#include \"@filename@\"\n" \
+ --vhead "static const GEnumValue _@enum_name@_values[] = {" \
+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_enum_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(clock_enum_headers) > $@
+
+clock-typebuiltins.h: @REBUILD@ $(clock_enum_headers)
+ $(AM_V_GEN)glib-mkenums \
+ --fhead "#ifndef __CLOCK_TYPEBUILTINS_H__\n" \
+ --fhead "#define __CLOCK_TYPEBUILTINS_H__ 1\n\n" \
+ --fhead "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n" \
+ --ftail "#ifdef __cplusplus\n}\n#endif\n\n" \
+ --ftail "#endif /* __CLOCK_TYPEBUILTINS_H__ */\n" \
+ --fprod "\n/* --- @filename@ --- */" \
+ --eprod "#define CLOCK_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
+ --eprod "GType @enum_name@_get_type (void);\n" \
+ $(clock_enum_headers) > $@
+
+$(applet_in_files): $(applet_in_files).in Makefile
+ $(AM_V_GEN)sed \
+ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+ -e "s|\@IN_PROCESS\@|$(APPLET_IN_PROCESS)|" \
+ -e "s|\@VERSION\@|$(PACKAGE_VERSION)|" \
+ $< > $@
+
+@PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+
+@CLOCK_INPROCESS_FALSE@org.mate.panel.applet.ClockAppletFactory.service: $(service_in_files)
+@CLOCK_INPROCESS_FALSE@ $(AM_V_GEN)sed \
+@CLOCK_INPROCESS_FALSE@ -e "s|\@LOCATION\@|$(APPLET_LOCATION)|" \
+@CLOCK_INPROCESS_FALSE@ $< > $@
+
+@INTLTOOL_SCHEMAS_RULE@
+
+@MATECONF_SCHEMAS_INSTALL_TRUE@install-data-local:
+@MATECONF_SCHEMAS_INSTALL_TRUE@ if test -z "$(DESTDIR)" ; then \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schemas_DATA) ; do \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/applets/clock/$$p ; \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ done \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ fi
+@MATECONF_SCHEMAS_INSTALL_TRUE@uninstall-local:
+@MATECONF_SCHEMAS_INSTALL_TRUE@ for p in $(schema_DATA) ; do \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-uninstall-rule $(top_builddir)/applets/clock/$$p ; \
+@MATECONF_SCHEMAS_INSTALL_TRUE@ done
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applets/clock/calendar-client.c b/applets/clock/calendar-client.c
new file mode 100644
index 00000000..77efa137
--- /dev/null
+++ b/applets/clock/calendar-client.c
@@ -0,0 +1,2169 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#include <config.h>
+
+#include "calendar-client.h"
+
+#include <libintl.h>
+#include <string.h>
+#define HANDLE_LIBICAL_MEMORY
+#include <libecal/e-cal.h>
+#include <libecal/e-cal-time-util.h>
+#include <libecal/e-cal-recur.h>
+
+#include "calendar-sources.h"
+
+#undef CALENDAR_ENABLE_DEBUG
+#include "calendar-debug.h"
+
+#define CALENDAR_CONFIG_PREFIX "/apps/evolution/calendar"
+#define CALENDAR_CONFIG_TIMEZONE CALENDAR_CONFIG_PREFIX "/display/timezone"
+
+#ifndef _
+#define _(x) gettext(x)
+#endif
+
+#ifndef N_
+#define N_(x) x
+#endif
+
+#define CALENDAR_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_CLIENT, CalendarClientPrivate))
+
+typedef struct _CalendarClientQuery CalendarClientQuery;
+typedef struct _CalendarClientSource CalendarClientSource;
+
+struct _CalendarClientQuery
+{
+ ECalView *view;
+ GHashTable *events;
+};
+
+struct _CalendarClientSource
+{
+ CalendarClient *client;
+ ECal *source;
+
+ CalendarClientQuery completed_query;
+ CalendarClientQuery in_progress_query;
+
+ guint changed_signal_id;
+
+ guint query_completed : 1;
+ guint query_in_progress : 1;
+};
+
+struct _CalendarClientPrivate
+{
+ CalendarSources *calendar_sources;
+
+ GSList *appointment_sources;
+ GSList *task_sources;
+
+ icaltimezone *zone;
+
+ guint zone_listener;
+ MateConfClient *mateconf_client;
+
+ guint day;
+ guint month;
+ guint year;
+};
+
+static void calendar_client_class_init (CalendarClientClass *klass);
+static void calendar_client_init (CalendarClient *client);
+static void calendar_client_finalize (GObject *object);
+static void calendar_client_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void calendar_client_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+static GSList *calendar_client_update_sources_list (CalendarClient *client,
+ GSList *sources,
+ GSList *esources,
+ guint changed_signal_id);
+static void calendar_client_appointment_sources_changed (CalendarClient *client);
+static void calendar_client_task_sources_changed (CalendarClient *client);
+
+static void calendar_client_stop_query (CalendarClient *client,
+ CalendarClientSource *source,
+ CalendarClientQuery *query);
+static void calendar_client_start_query (CalendarClient *client,
+ CalendarClientSource *source,
+ const char *query);
+
+static void calendar_client_source_finalize (CalendarClientSource *source);
+static void calendar_client_query_finalize (CalendarClientQuery *query);
+
+static void
+calendar_client_update_appointments (CalendarClient *client);
+static void
+calendar_client_update_tasks (CalendarClient *client);
+
+enum
+{
+ PROP_O,
+ PROP_DAY,
+ PROP_MONTH,
+ PROP_YEAR
+};
+
+enum
+{
+ APPOINTMENTS_CHANGED,
+ TASKS_CHANGED,
+ LAST_SIGNAL
+};
+
+static GObjectClass *parent_class = NULL;
+static guint signals [LAST_SIGNAL] = { 0, };
+
+GType
+calendar_client_get_type (void)
+{
+ static GType client_type = 0;
+
+ if (!client_type)
+ {
+ static const GTypeInfo client_info =
+ {
+ sizeof (CalendarClientClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) calendar_client_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CalendarClient),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) calendar_client_init,
+ };
+
+ client_type = g_type_register_static (G_TYPE_OBJECT,
+ "CalendarClient",
+ &client_info, 0);
+ }
+
+ return client_type;
+}
+
+static void
+calendar_client_class_init (CalendarClientClass *klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->finalize = calendar_client_finalize;
+ gobject_class->set_property = calendar_client_set_property;
+ gobject_class->get_property = calendar_client_get_property;
+
+ g_type_class_add_private (klass, sizeof (CalendarClientPrivate));
+
+ g_object_class_install_property (gobject_class,
+ PROP_DAY,
+ g_param_spec_uint ("day",
+ "Day",
+ "The currently monitored day between 1 and 31 (0 denotes unset)",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MONTH,
+ g_param_spec_uint ("month",
+ "Month",
+ "The currently monitored month between 0 and 11",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_YEAR,
+ g_param_spec_uint ("year",
+ "Year",
+ "The currently monitored year",
+ 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE));
+
+ signals [APPOINTMENTS_CHANGED] =
+ g_signal_new ("appointments-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarClientClass, tasks_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ signals [TASKS_CHANGED] =
+ g_signal_new ("tasks-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarClientClass, tasks_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+}
+
+/* Timezone code adapted from evolution/calendar/gui/calendar-config.c */
+/* The current timezone, e.g. "Europe/London". It may be NULL, in which case
+ you should assume UTC. */
+static gchar *
+calendar_client_config_get_timezone (MateConfClient *mateconf_client)
+{
+ char *location;
+
+ location = mateconf_client_get_string (mateconf_client,
+ CALENDAR_CONFIG_TIMEZONE,
+ NULL);
+
+ return location;
+}
+
+static icaltimezone *
+calendar_client_config_get_icaltimezone (MateConfClient *mateconf_client)
+{
+ char *location;
+ icaltimezone *zone = NULL;
+
+ location = calendar_client_config_get_timezone (mateconf_client);
+ if (!location)
+ return icaltimezone_get_utc_timezone ();
+
+ zone = icaltimezone_get_builtin_timezone (location);
+ g_free (location);
+
+ return zone;
+}
+
+static void
+calendar_client_set_timezone (CalendarClient *client)
+{
+ GSList *l;
+ GSList *esources;
+
+ client->priv->zone = calendar_client_config_get_icaltimezone (client->priv->mateconf_client);
+
+ esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources);
+ for (l = esources; l; l = l->next) {
+ ECal *source = l->data;
+
+ e_cal_set_default_timezone (source, client->priv->zone, NULL);
+ }
+}
+
+static void
+calendar_client_timezone_changed_cb (MateConfClient *mateconf_client,
+ guint id,
+ MateConfEntry *entry,
+ CalendarClient *client)
+{
+ calendar_client_set_timezone (client);
+}
+
+static void
+cal_opened_cb (ECal *ecal,
+ ECalendarStatus status,
+ CalendarClientSource *cl_source)
+{
+ ECalSourceType s_type;
+ CalendarClient *client = cl_source->client;
+
+ s_type = e_cal_get_source_type (ecal);
+
+ if (status == E_CALENDAR_STATUS_BUSY &&
+ e_cal_get_load_state (ecal) == E_CAL_LOAD_NOT_LOADED)
+ {
+ e_cal_open_async (ecal, FALSE);
+ return;
+ }
+
+ g_signal_handlers_disconnect_by_func (ecal, cal_opened_cb, cl_source);
+
+ if (status != E_CALENDAR_STATUS_OK)
+ {
+ if (s_type == E_CAL_SOURCE_TYPE_EVENT)
+ client->priv->appointment_sources = g_slist_remove (client->priv->appointment_sources,
+ cl_source);
+ else
+ client->priv->task_sources = g_slist_remove (client->priv->task_sources,
+ cl_source);
+
+ calendar_client_source_finalize (cl_source);
+ g_free (cl_source);
+
+ return;
+ }
+
+ if (s_type == E_CAL_SOURCE_TYPE_EVENT)
+ calendar_client_update_appointments (client);
+ else
+ calendar_client_update_tasks (client);
+}
+
+static void
+load_calendars (CalendarClient *client,
+ CalendarEventType type)
+{
+ GSList *l, *clients;
+
+ switch (type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ clients = client->priv->appointment_sources;
+ break;
+ case CALENDAR_EVENT_TASK:
+ clients = client->priv->task_sources;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ for (l = clients; l != NULL; l = l->next)
+ {
+ ECal *ecal;
+ CalendarClientSource *cl_source = l->data;
+
+ ecal = cl_source->source;
+
+ if (e_cal_get_load_state (ecal) == E_CAL_LOAD_LOADED)
+ continue;
+
+ g_signal_connect (G_OBJECT (ecal), "cal_opened",
+ G_CALLBACK (cal_opened_cb), cl_source);
+ e_cal_open_async (ecal, TRUE);
+ }
+}
+
+static void
+calendar_client_init (CalendarClient *client)
+{
+ GSList *esources;
+
+ client->priv = CALENDAR_CLIENT_GET_PRIVATE (client);
+
+ client->priv->calendar_sources = calendar_sources_get ();
+ client->priv->mateconf_client = mateconf_client_get_default ();
+
+ esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources);
+ client->priv->appointment_sources =
+ calendar_client_update_sources_list (client, NULL, esources, signals [APPOINTMENTS_CHANGED]);
+
+ esources = calendar_sources_get_task_sources (client->priv->calendar_sources);
+ client->priv->task_sources =
+ calendar_client_update_sources_list (client, NULL, esources, signals [TASKS_CHANGED]);
+
+ /* set the timezone before loading the clients */
+ calendar_client_set_timezone (client);
+ load_calendars (client, CALENDAR_EVENT_APPOINTMENT);
+ load_calendars (client, CALENDAR_EVENT_TASK);
+
+ g_signal_connect_swapped (client->priv->calendar_sources,
+ "appointment-sources-changed",
+ G_CALLBACK (calendar_client_appointment_sources_changed),
+ client);
+ g_signal_connect_swapped (client->priv->calendar_sources,
+ "task-sources-changed",
+ G_CALLBACK (calendar_client_task_sources_changed),
+ client);
+
+ mateconf_client_add_dir (client->priv->mateconf_client,
+ CALENDAR_CONFIG_PREFIX,
+ MATECONF_CLIENT_PRELOAD_NONE,
+ NULL);
+
+ client->priv->zone_listener = mateconf_client_notify_add (client->priv->mateconf_client,
+ CALENDAR_CONFIG_TIMEZONE,
+ (MateConfClientNotifyFunc) calendar_client_timezone_changed_cb,
+ client, NULL, NULL);
+
+ client->priv->day = -1;
+ client->priv->month = -1;
+ client->priv->year = -1;
+}
+
+static void
+calendar_client_finalize (GObject *object)
+{
+ CalendarClient *client = CALENDAR_CLIENT (object);
+ GSList *l;
+
+ if (client->priv->zone_listener)
+ {
+ mateconf_client_notify_remove (client->priv->mateconf_client,
+ client->priv->zone_listener);
+ client->priv->zone_listener = 0;
+ }
+
+ mateconf_client_remove_dir (client->priv->mateconf_client,
+ CALENDAR_CONFIG_PREFIX,
+ NULL);
+
+ if (client->priv->mateconf_client)
+ g_object_unref (client->priv->mateconf_client);
+ client->priv->mateconf_client = NULL;
+
+ for (l = client->priv->appointment_sources; l; l = l->next)
+ {
+ calendar_client_source_finalize (l->data);
+ g_free (l->data);
+ }
+ g_slist_free (client->priv->appointment_sources);
+ client->priv->appointment_sources = NULL;
+
+ for (l = client->priv->task_sources; l; l = l->next)
+ {
+ calendar_client_source_finalize (l->data);
+ g_free (l->data);
+ }
+ g_slist_free (client->priv->task_sources);
+ client->priv->task_sources = NULL;
+
+ if (client->priv->calendar_sources)
+ g_object_unref (client->priv->calendar_sources);
+ client->priv->calendar_sources = NULL;
+
+ if (G_OBJECT_CLASS (parent_class)->finalize)
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+calendar_client_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarClient *client = CALENDAR_CLIENT (object);
+
+ switch (prop_id)
+ {
+ case PROP_DAY:
+ calendar_client_select_day (client, g_value_get_uint (value));
+ break;
+ case PROP_MONTH:
+ calendar_client_select_month (client,
+ g_value_get_uint (value),
+ client->priv->year);
+ break;
+ case PROP_YEAR:
+ calendar_client_select_month (client,
+ client->priv->month,
+ g_value_get_uint (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+calendar_client_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarClient *client = CALENDAR_CLIENT (object);
+
+ switch (prop_id)
+ {
+ case PROP_DAY:
+ g_value_set_uint (value, client->priv->day);
+ break;
+ case PROP_MONTH:
+ g_value_set_uint (value, client->priv->month);
+ break;
+ case PROP_YEAR:
+ g_value_set_uint (value, client->priv->year);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+CalendarClient *
+calendar_client_new (void)
+{
+ return g_object_new (CALENDAR_TYPE_CLIENT, NULL);
+}
+
+/* @day and @month can happily be out of range as
+ * mktime() will normalize them correctly. From mktime(3):
+ *
+ * "If structure members are outside their legal interval,
+ * they will be normalized (so that, e.g., 40 October is
+ * changed into 9 November)."
+ *
+ * "What?", you say, "Something useful in libc?"
+ */
+static inline time_t
+make_time_for_day_begin (int day,
+ int month,
+ int year)
+{
+ struct tm localtime_tm = { 0, };
+
+ localtime_tm.tm_mday = day;
+ localtime_tm.tm_mon = month;
+ localtime_tm.tm_year = year - 1900;
+ localtime_tm.tm_isdst = -1;
+
+ return mktime (&localtime_tm);
+}
+
+static inline char *
+make_isodate_for_day_begin (int day,
+ int month,
+ int year)
+{
+ time_t utctime;
+
+ utctime = make_time_for_day_begin (day, month, year);
+
+ return utctime != -1 ? isodate_from_time_t (utctime) : NULL;
+}
+
+static time_t
+get_time_from_property (icalcomponent *ical,
+ icalproperty_kind prop_kind,
+ struct icaltimetype (* get_prop_func) (const icalproperty *prop),
+ icaltimezone *default_zone)
+{
+ icalproperty *prop;
+ struct icaltimetype ical_time;
+ icalparameter *param;
+ icaltimezone *timezone = NULL;
+
+ prop = icalcomponent_get_first_property (ical, prop_kind);
+ if (!prop)
+ return 0;
+
+ ical_time = get_prop_func (prop);
+
+ param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
+ if (param)
+ timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param));
+ else if (icaltime_is_utc (ical_time))
+ timezone = icaltimezone_get_utc_timezone ();
+ else
+ timezone = default_zone;
+
+ return icaltime_as_timet_with_zone (ical_time, timezone);
+}
+
+static char *
+get_ical_uid (icalcomponent *ical)
+{
+ return g_strdup (icalcomponent_get_uid (ical));
+}
+
+static char *
+get_ical_rid (icalcomponent *ical)
+{
+ icalproperty *prop;
+ struct icaltimetype ical_time;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_RECURRENCEID_PROPERTY);
+ if (!prop)
+ return NULL;
+
+ ical_time = icalproperty_get_recurrenceid (prop);
+
+ return icaltime_is_valid_time (ical_time) && !icaltime_is_null_time (ical_time) ?
+ g_strdup (icaltime_as_ical_string (ical_time)) : NULL;
+}
+
+static char *
+get_ical_summary (icalcomponent *ical)
+{
+ icalproperty *prop;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY);
+ if (!prop)
+ return NULL;
+
+ return g_strdup (icalproperty_get_summary (prop));
+}
+
+static char *
+get_ical_description (icalcomponent *ical)
+{
+ icalproperty *prop;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY);
+ if (!prop)
+ return NULL;
+
+ return g_strdup (icalproperty_get_description (prop));
+}
+
+static inline time_t
+get_ical_start_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_DTSTART_PROPERTY,
+ icalproperty_get_dtstart,
+ default_zone);
+}
+
+static inline time_t
+get_ical_end_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_DTEND_PROPERTY,
+ icalproperty_get_dtend,
+ default_zone);
+}
+
+static gboolean
+get_ical_is_all_day (icalcomponent *ical,
+ time_t start_time,
+ icaltimezone *default_zone)
+{
+ icalproperty *prop;
+ struct tm *start_tm;
+ time_t end_time;
+ struct icaldurationtype duration;
+ struct icaltimetype start_icaltime;
+
+ start_icaltime = icalcomponent_get_dtstart (ical);
+ if (start_icaltime.is_date)
+ return TRUE;
+
+ start_tm = gmtime (&start_time);
+ if (start_tm->tm_sec != 0 ||
+ start_tm->tm_min != 0 ||
+ start_tm->tm_hour != 0)
+ return FALSE;
+
+ if ((end_time = get_ical_end_time (ical, default_zone)))
+ return (end_time - start_time) % 86400 == 0;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY);
+ if (!prop)
+ return FALSE;
+
+ duration = icalproperty_get_duration (prop);
+
+ return icaldurationtype_as_int (duration) % 86400 == 0;
+}
+
+static inline time_t
+get_ical_due_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_DUE_PROPERTY,
+ icalproperty_get_due,
+ default_zone);
+}
+
+static guint
+get_ical_percent_complete (icalcomponent *ical)
+{
+ icalproperty *prop;
+ icalproperty_status status;
+ int percent_complete;
+
+ status = icalcomponent_get_status (ical);
+ if (status == ICAL_STATUS_COMPLETED)
+ return 100;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_COMPLETED_PROPERTY);
+ if (prop)
+ return 100;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_PERCENTCOMPLETE_PROPERTY);
+ if (!prop)
+ return 0;
+
+ percent_complete = icalproperty_get_percentcomplete (prop);
+
+ return CLAMP (percent_complete, 0, 100);
+}
+
+static inline time_t
+get_ical_completed_time (icalcomponent *ical,
+ icaltimezone *default_zone)
+{
+ return get_time_from_property (ical,
+ ICAL_COMPLETED_PROPERTY,
+ icalproperty_get_completed,
+ default_zone);
+}
+
+static int
+get_ical_priority (icalcomponent *ical)
+{
+ icalproperty *prop;
+
+ prop = icalcomponent_get_first_property (ical, ICAL_PRIORITY_PROPERTY);
+ if (!prop)
+ return -1;
+
+ return icalproperty_get_priority (prop);
+}
+
+static char *
+get_source_color (ECal *esource)
+{
+ ESource *source;
+
+ g_return_val_if_fail (E_IS_CAL (esource), NULL);
+
+ source = e_cal_get_source (esource);
+
+ return g_strdup (e_source_peek_color_spec (source));
+}
+
+static gchar *
+get_source_uri (ECal *esource)
+{
+ ESource *source;
+ gchar *string;
+ gchar **list;
+
+ g_return_val_if_fail (E_IS_CAL (esource), NULL);
+
+ source = e_cal_get_source (esource);
+ string = g_strdup (e_source_get_uri (source));
+ if (string) {
+ list = g_strsplit (string, ":", 2);
+ g_free (string);
+
+ if (list[0]) {
+ string = g_strdup (list[0]);
+ g_strfreev (list);
+ return string;
+ }
+ g_strfreev (list);
+ }
+ return NULL;
+}
+
+static inline int
+null_safe_strcmp (const char *a,
+ const char *b)
+{
+ return (!a && !b) ? 0 : (a && !b) || (!a && b) ? 1 : strcmp (a, b);
+}
+
+static inline gboolean
+calendar_appointment_equal (CalendarAppointment *a,
+ CalendarAppointment *b)
+{
+ GSList *la, *lb;
+
+ if (g_slist_length (a->occurrences) != g_slist_length (b->occurrences))
+ return FALSE;
+
+ for (la = a->occurrences, lb = b->occurrences; la && lb; la = la->next, lb = lb->next)
+ {
+ CalendarOccurrence *oa = la->data;
+ CalendarOccurrence *ob = lb->data;
+
+ if (oa->start_time != ob->start_time ||
+ oa->end_time != ob->end_time)
+ return FALSE;
+ }
+
+ return
+ null_safe_strcmp (a->uid, b->uid) == 0 &&
+ null_safe_strcmp (a->uri, b->uri) == 0 &&
+ null_safe_strcmp (a->summary, b->summary) == 0 &&
+ null_safe_strcmp (a->description, b->description) == 0 &&
+ null_safe_strcmp (a->color_string, b->color_string) == 0 &&
+ a->start_time == b->start_time &&
+ a->end_time == b->end_time &&
+ a->is_all_day == b->is_all_day;
+}
+
+static void
+calendar_appointment_copy (CalendarAppointment *appointment,
+ CalendarAppointment *appointment_copy)
+{
+ GSList *l;
+
+ g_assert (appointment != NULL);
+ g_assert (appointment_copy != NULL);
+
+ appointment_copy->occurrences = g_slist_copy (appointment->occurrences);
+ for (l = appointment_copy->occurrences; l; l = l->next)
+ {
+ CalendarOccurrence *occurrence = l->data;
+ CalendarOccurrence *occurrence_copy;
+
+ occurrence_copy = g_new0 (CalendarOccurrence, 1);
+ occurrence_copy->start_time = occurrence->start_time;
+ occurrence_copy->end_time = occurrence->end_time;
+
+ l->data = occurrence_copy;
+ }
+
+ appointment_copy->uid = g_strdup (appointment->uid);
+ appointment_copy->uri = g_strdup (appointment->uri);
+ appointment_copy->summary = g_strdup (appointment->summary);
+ appointment_copy->description = g_strdup (appointment->description);
+ appointment_copy->color_string = g_strdup (appointment->color_string);
+ appointment_copy->start_time = appointment->start_time;
+ appointment_copy->end_time = appointment->end_time;
+ appointment_copy->is_all_day = appointment->is_all_day;
+}
+
+static void
+calendar_appointment_finalize (CalendarAppointment *appointment)
+{
+ GSList *l;
+
+ for (l = appointment->occurrences; l; l = l->next)
+ g_free (l->data);
+ g_slist_free (appointment->occurrences);
+ appointment->occurrences = NULL;
+
+ g_free (appointment->uid);
+ appointment->uid = NULL;
+
+ g_free (appointment->rid);
+ appointment->rid = NULL;
+
+ g_free (appointment->uri);
+ appointment->uri = NULL;
+
+ g_free (appointment->summary);
+ appointment->summary = NULL;
+
+ g_free (appointment->description);
+ appointment->description = NULL;
+
+ g_free (appointment->color_string);
+ appointment->color_string = NULL;
+
+ appointment->start_time = 0;
+ appointment->is_all_day = FALSE;
+}
+
+static void
+calendar_appointment_init (CalendarAppointment *appointment,
+ icalcomponent *ical,
+ CalendarClientSource *source,
+ icaltimezone *default_zone)
+{
+ appointment->uid = get_ical_uid (ical);
+ appointment->rid = get_ical_rid (ical);
+ appointment->uri = get_source_uri (source->source);
+ appointment->summary = get_ical_summary (ical);
+ appointment->description = get_ical_description (ical);
+ appointment->color_string = get_source_color (source->source);
+ appointment->start_time = get_ical_start_time (ical, default_zone);
+ appointment->end_time = get_ical_end_time (ical, default_zone);
+ appointment->is_all_day = get_ical_is_all_day (ical,
+ appointment->start_time,
+ default_zone);
+}
+
+static icaltimezone *
+resolve_timezone_id (const char *tzid,
+ ECal *source)
+{
+ icaltimezone *retval;
+
+ retval = icaltimezone_get_builtin_timezone_from_tzid (tzid);
+ if (!retval)
+ {
+ e_cal_get_timezone (source, tzid, &retval, NULL);
+ }
+
+ return retval;
+}
+
+static gboolean
+calendar_appointment_collect_occurrence (ECalComponent *component,
+ time_t occurrence_start,
+ time_t occurrence_end,
+ gpointer data)
+{
+ CalendarOccurrence *occurrence;
+ GSList **collect_loc = data;
+
+ occurrence = g_new0 (CalendarOccurrence, 1);
+ occurrence->start_time = occurrence_start;
+ occurrence->end_time = occurrence_end;
+
+ *collect_loc = g_slist_prepend (*collect_loc, occurrence);
+
+ return TRUE;
+}
+
+static void
+calendar_appointment_generate_ocurrences (CalendarAppointment *appointment,
+ icalcomponent *ical,
+ ECal *source,
+ time_t start,
+ time_t end,
+ icaltimezone *default_zone)
+{
+ ECalComponent *ecal;
+
+ g_assert (appointment->occurrences == NULL);
+
+ ecal = e_cal_component_new ();
+ e_cal_component_set_icalcomponent (ecal,
+ icalcomponent_new_clone (ical));
+
+ e_cal_recur_generate_instances (ecal,
+ start,
+ end,
+ calendar_appointment_collect_occurrence,
+ &appointment->occurrences,
+ (ECalRecurResolveTimezoneFn) resolve_timezone_id,
+ source,
+ default_zone);
+
+ g_object_unref (ecal);
+
+ appointment->occurrences = g_slist_reverse (appointment->occurrences);
+}
+
+static inline gboolean
+calendar_task_equal (CalendarTask *a,
+ CalendarTask *b)
+{
+ return
+ null_safe_strcmp (a->uid, b->uid) == 0 &&
+ null_safe_strcmp (a->summary, b->summary) == 0 &&
+ null_safe_strcmp (a->description, b->description) == 0 &&
+ null_safe_strcmp (a->color_string, b->color_string) == 0 &&
+ a->start_time == b->start_time &&
+ a->due_time == b->due_time &&
+ a->percent_complete == b->percent_complete &&
+ a->completed_time == b->completed_time &&
+ a->priority == b->priority;
+}
+
+static void
+calendar_task_copy (CalendarTask *task,
+ CalendarTask *task_copy)
+{
+ g_assert (task != NULL);
+ g_assert (task_copy != NULL);
+
+ task_copy->uid = g_strdup (task->uid);
+ task_copy->summary = g_strdup (task->summary);
+ task_copy->description = g_strdup (task->description);
+ task_copy->color_string = g_strdup (task->color_string);
+ task_copy->start_time = task->start_time;
+ task_copy->due_time = task->due_time;
+ task_copy->percent_complete = task->percent_complete;
+ task_copy->completed_time = task->completed_time;
+ task_copy->priority = task->priority;
+}
+
+static void
+calendar_task_finalize (CalendarTask *task)
+{
+ g_free (task->uid);
+ task->uid = NULL;
+
+ g_free (task->summary);
+ task->summary = NULL;
+
+ g_free (task->description);
+ task->description = NULL;
+
+ g_free (task->color_string);
+ task->color_string = NULL;
+
+ task->percent_complete = 0;
+}
+
+static void
+calendar_task_init (CalendarTask *task,
+ icalcomponent *ical,
+ CalendarClientSource *source,
+ icaltimezone *default_zone)
+{
+ task->uid = get_ical_uid (ical);
+ task->summary = get_ical_summary (ical);
+ task->description = get_ical_description (ical);
+ task->color_string = get_source_color (source->source);
+ task->start_time = get_ical_start_time (ical, default_zone);
+ task->due_time = get_ical_due_time (ical, default_zone);
+ task->percent_complete = get_ical_percent_complete (ical);
+ task->completed_time = get_ical_completed_time (ical, default_zone);
+ task->priority = get_ical_priority (ical);
+}
+
+void
+calendar_event_free (CalendarEvent *event)
+{
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ calendar_appointment_finalize (CALENDAR_APPOINTMENT (event));
+ break;
+ case CALENDAR_EVENT_TASK:
+ calendar_task_finalize (CALENDAR_TASK (event));
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ g_free (event);
+}
+
+static CalendarEvent *
+calendar_event_new (icalcomponent *ical,
+ CalendarClientSource *source,
+ icaltimezone *default_zone)
+{
+ CalendarEvent *event;
+
+ event = g_new0 (CalendarEvent, 1);
+
+ switch (icalcomponent_isa (ical))
+ {
+ case ICAL_VEVENT_COMPONENT:
+ event->type = CALENDAR_EVENT_APPOINTMENT;
+ calendar_appointment_init (CALENDAR_APPOINTMENT (event),
+ ical,
+ source,
+ default_zone);
+ break;
+ case ICAL_VTODO_COMPONENT:
+ event->type = CALENDAR_EVENT_TASK;
+ calendar_task_init (CALENDAR_TASK (event),
+ ical,
+ source,
+ default_zone);
+ break;
+ default:
+ g_warning ("Unknown calendar component type: %d\n",
+ icalcomponent_isa (ical));
+ g_free (event);
+ return NULL;
+ }
+
+ return event;
+}
+
+static CalendarEvent *
+calendar_event_copy (CalendarEvent *event)
+{
+ CalendarEvent *retval;
+
+ if (!event)
+ return NULL;
+
+ retval = g_new0 (CalendarEvent, 1);
+
+ retval->type = event->type;
+
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ calendar_appointment_copy (CALENDAR_APPOINTMENT (event),
+ CALENDAR_APPOINTMENT (retval));
+ break;
+ case CALENDAR_EVENT_TASK:
+ calendar_task_copy (CALENDAR_TASK (event),
+ CALENDAR_TASK (retval));
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ return retval;
+}
+
+static char *
+calendar_event_get_uid (CalendarEvent *event)
+{
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ return g_strdup_printf ("%s%s", CALENDAR_APPOINTMENT (event)->uid, CALENDAR_APPOINTMENT (event)->rid ? CALENDAR_APPOINTMENT (event)->rid : "");
+ break;
+ case CALENDAR_EVENT_TASK:
+ return g_strdup (CALENDAR_TASK (event)->uid);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ return NULL;
+}
+
+static gboolean
+calendar_event_equal (CalendarEvent *a,
+ CalendarEvent *b)
+{
+ if (!a && !b)
+ return TRUE;
+
+ if ((a && !b) || (!a && b))
+ return FALSE;
+
+ if (a->type != b->type)
+ return FALSE;
+
+ switch (a->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ return calendar_appointment_equal (CALENDAR_APPOINTMENT (a),
+ CALENDAR_APPOINTMENT (b));
+ case CALENDAR_EVENT_TASK:
+ return calendar_task_equal (CALENDAR_TASK (a),
+ CALENDAR_TASK (b));
+ default:
+ break;
+ }
+
+ g_assert_not_reached ();
+
+ return FALSE;
+}
+
+static void
+calendar_event_generate_ocurrences (CalendarEvent *event,
+ icalcomponent *ical,
+ ECal *source,
+ time_t start,
+ time_t end,
+ icaltimezone *default_zone)
+{
+ if (event->type != CALENDAR_EVENT_APPOINTMENT)
+ return;
+
+ calendar_appointment_generate_ocurrences (CALENDAR_APPOINTMENT (event),
+ ical,
+ source,
+ start,
+ end,
+ default_zone);
+}
+
+static inline void
+calendar_event_debug_dump (CalendarEvent *event)
+{
+#ifdef CALENDAR_ENABLE_DEBUG
+ switch (event->type)
+ {
+ case CALENDAR_EVENT_APPOINTMENT:
+ {
+ char *start_str;
+ char *end_str;
+ GSList *l;
+
+ start_str = CALENDAR_APPOINTMENT (event)->start_time ?
+ isodate_from_time_t (CALENDAR_APPOINTMENT (event)->start_time) :
+ g_strdup ("(undefined)");
+ end_str = CALENDAR_APPOINTMENT (event)->end_time ?
+ isodate_from_time_t (CALENDAR_APPOINTMENT (event)->end_time) :
+ g_strdup ("(undefined)");
+
+ dprintf ("Appointment: uid '%s', summary '%s', description '%s', "
+ "start_time '%s', end_time '%s', is_all_day %s\n",
+ CALENDAR_APPOINTMENT (event)->uid,
+ CALENDAR_APPOINTMENT (event)->summary,
+ CALENDAR_APPOINTMENT (event)->description,
+ start_str,
+ end_str,
+ CALENDAR_APPOINTMENT (event)->is_all_day ? "(true)" : "(false)");
+
+ g_free (start_str);
+ g_free (end_str);
+
+ dprintf (" Occurrences:\n");
+ for (l = CALENDAR_APPOINTMENT (event)->occurrences; l; l = l->next)
+ {
+ CalendarOccurrence *occurrence = l->data;
+
+ start_str = occurrence->start_time ?
+ isodate_from_time_t (occurrence->start_time) :
+ g_strdup ("(undefined)");
+
+ end_str = occurrence->end_time ?
+ isodate_from_time_t (occurrence->end_time) :
+ g_strdup ("(undefined)");
+
+ dprintf (" start_time '%s', end_time '%s'\n",
+ start_str, end_str);
+
+ g_free (start_str);
+ g_free (end_str);
+ }
+ }
+ break;
+ case CALENDAR_EVENT_TASK:
+ {
+ char *start_str;
+ char *due_str;
+ char *completed_str;
+
+ start_str = CALENDAR_TASK (event)->start_time ?
+ isodate_from_time_t (CALENDAR_TASK (event)->start_time) :
+ g_strdup ("(undefined)");
+ due_str = CALENDAR_TASK (event)->due_time ?
+ isodate_from_time_t (CALENDAR_TASK (event)->due_time) :
+ g_strdup ("(undefined)");
+ completed_str = CALENDAR_TASK (event)->completed_time ?
+ isodate_from_time_t (CALENDAR_TASK (event)->completed_time) :
+ g_strdup ("(undefined)");
+
+ dprintf ("Task: uid '%s', summary '%s', description '%s', "
+ "start_time '%s', due_time '%s', percent_complete %d, completed_time '%s'\n",
+ CALENDAR_TASK (event)->uid,
+ CALENDAR_TASK (event)->summary,
+ CALENDAR_TASK (event)->description,
+ start_str,
+ due_str,
+ CALENDAR_TASK (event)->percent_complete,
+ completed_str);
+
+ g_free (completed_str);
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+#endif
+}
+
+static inline CalendarClientQuery *
+goddamn_this_is_crack (CalendarClientSource *source,
+ ECalView *view,
+ gboolean *emit_signal)
+{
+ g_assert (view != NULL);
+
+ if (source->completed_query.view == view)
+ {
+ if (emit_signal)
+ *emit_signal = TRUE;
+ return &source->completed_query;
+ }
+ else if (source->in_progress_query.view == view)
+ {
+ if (emit_signal)
+ *emit_signal = FALSE;
+ return &source->in_progress_query;
+ }
+
+ g_assert_not_reached ();
+
+ return NULL;
+}
+
+static void
+calendar_client_handle_query_completed (CalendarClientSource *source,
+ ECalendarStatus status,
+ ECalView *view)
+{
+ CalendarClientQuery *query;
+
+ query = goddamn_this_is_crack (source, view, NULL);
+
+ dprintf ("Query %p completed: %s\n", query, e_cal_get_error_message (status));
+
+ if (status != E_CALENDAR_STATUS_OK)
+ {
+ g_warning ("Calendar query failed: %s\n",
+ e_cal_get_error_message (status));
+ calendar_client_stop_query (source->client, source, query);
+ return;
+ }
+
+ g_assert (source->query_in_progress != FALSE);
+ g_assert (query == &source->in_progress_query);
+
+ calendar_client_query_finalize (&source->completed_query);
+
+ source->completed_query = source->in_progress_query;
+ source->query_completed = TRUE;
+
+ source->query_in_progress = FALSE;
+ source->in_progress_query.view = NULL;
+ source->in_progress_query.events = NULL;
+
+ g_signal_emit (source->client, source->changed_signal_id, 0);
+}
+
+static void
+calendar_client_handle_query_result (CalendarClientSource *source,
+ GList *objects,
+ ECalView *view)
+{
+ CalendarClientQuery *query;
+ CalendarClient *client;
+ gboolean emit_signal;
+ gboolean events_changed;
+ GList *l;
+ time_t month_begin;
+ time_t month_end;
+
+ client = source->client;
+
+ query = goddamn_this_is_crack (source, view, &emit_signal);
+
+ dprintf ("Query %p result: %d objects:\n",
+ query, g_list_length (objects));
+
+ month_begin = make_time_for_day_begin (1,
+ client->priv->month,
+ client->priv->year);
+
+ month_end = make_time_for_day_begin (1,
+ client->priv->month + 1,
+ client->priv->year);
+
+ events_changed = FALSE;
+ for (l = objects; l; l = l->next)
+ {
+ CalendarEvent *event;
+ CalendarEvent *old_event;
+ icalcomponent *ical = l->data;
+ char *uid;
+
+ event = calendar_event_new (ical, source, client->priv->zone);
+ if (!event)
+ continue;
+
+ calendar_event_generate_ocurrences (event,
+ ical,
+ source->source,
+ month_begin,
+ month_end,
+ client->priv->zone);
+
+ uid = calendar_event_get_uid (event);
+
+ old_event = g_hash_table_lookup (query->events, uid);
+
+ if (!calendar_event_equal (event, old_event))
+ {
+ dprintf ("Event %s: ", old_event ? "modified" : "added");
+
+ calendar_event_debug_dump (event);
+
+ g_hash_table_replace (query->events, uid, event);
+
+ events_changed = TRUE;
+ }
+ else
+ {
+ g_free (uid);
+ }
+ }
+
+ if (emit_signal && events_changed)
+ {
+ g_signal_emit (source->client, source->changed_signal_id, 0);
+ }
+}
+
+static gboolean
+check_object_remove (gpointer key,
+ gpointer value,
+ gpointer data)
+{
+ char *uid = data;
+ ssize_t len;
+
+ len = strlen (uid);
+
+ if (len <= strlen (key) && strncmp (uid, key, len) == 0)
+ {
+ dprintf ("Event removed: ");
+
+ calendar_event_debug_dump (value);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+calendar_client_handle_objects_removed (CalendarClientSource *source,
+ GList *ids,
+ ECalView *view)
+{
+ CalendarClientQuery *query;
+ gboolean emit_signal;
+ gboolean events_changed;
+ GList *l;
+
+ query = goddamn_this_is_crack (source, view, &emit_signal);
+
+ events_changed = FALSE;
+ for (l = ids; l; l = l->next)
+ {
+ CalendarEvent *event;
+ ECalComponentId *id = l->data;
+ char *uid = g_strdup_printf ("%s%s", id->uid, id->rid ? id->rid : "");
+
+ if (!id->rid || !(*id->rid))
+ {
+ int size = g_hash_table_size (query->events);
+
+ g_hash_table_foreach_remove (query->events, check_object_remove, id->uid);
+
+ if (size != g_hash_table_size (query->events))
+ events_changed = TRUE;
+ }
+ else if ((event = g_hash_table_lookup (query->events, uid)))
+ {
+ dprintf ("Event removed: ");
+
+ calendar_event_debug_dump (event);
+
+ g_assert (g_hash_table_remove (query->events, uid));
+
+ events_changed = TRUE;
+ }
+ g_free (uid);
+ }
+
+ if (emit_signal && events_changed)
+ {
+ g_signal_emit (source->client, source->changed_signal_id, 0);
+ }
+}
+
+static void
+calendar_client_query_finalize (CalendarClientQuery *query)
+{
+ if (query->view)
+ g_object_unref (query->view);
+ query->view = NULL;
+
+ if (query->events)
+ g_hash_table_destroy (query->events);
+ query->events = NULL;
+}
+
+static void
+calendar_client_stop_query (CalendarClient *client,
+ CalendarClientSource *source,
+ CalendarClientQuery *query)
+{
+ if (query == &source->in_progress_query)
+ {
+ dprintf ("Stopping in progress query %p\n", query);
+
+ g_assert (source->query_in_progress != FALSE);
+
+ source->query_in_progress = FALSE;
+ }
+ else if (query == &source->completed_query)
+ {
+ dprintf ("Stopping completed query %p\n", query);
+
+ g_assert (source->query_completed != FALSE);
+
+ source->query_completed = FALSE;
+ }
+ else
+ g_assert_not_reached ();
+
+ calendar_client_query_finalize (query);
+}
+
+static void
+calendar_client_start_query (CalendarClient *client,
+ CalendarClientSource *source,
+ const char *query)
+{
+ ECalView *view = NULL;
+ GError *error = NULL;
+
+ if (!e_cal_get_query (source->source, query, &view, &error))
+ {
+ g_warning ("Error preparing the query: '%s': %s\n",
+ query, error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_assert (view != NULL);
+
+ if (source->query_in_progress)
+ calendar_client_stop_query (client, source, &source->in_progress_query);
+
+ dprintf ("Starting query %p: '%s'\n", &source->in_progress_query, query);
+
+ source->query_in_progress = TRUE;
+ source->in_progress_query.view = view;
+ source->in_progress_query.events =
+ g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ (GDestroyNotify) calendar_event_free);
+
+ g_signal_connect_swapped (view, "objects-added",
+ G_CALLBACK (calendar_client_handle_query_result),
+ source);
+ g_signal_connect_swapped (view, "objects-modified",
+ G_CALLBACK (calendar_client_handle_query_result),
+ source);
+ g_signal_connect_swapped (view, "objects-removed",
+ G_CALLBACK (calendar_client_handle_objects_removed),
+ source);
+ g_signal_connect_swapped (view, "view-done",
+ G_CALLBACK (calendar_client_handle_query_completed),
+ source);
+
+ e_cal_view_start (view);
+}
+
+static void
+calendar_client_update_appointments (CalendarClient *client)
+{
+ GSList *l;
+ char *query;
+ char *month_begin;
+ char *month_end;
+
+ if (client->priv->month == -1 ||
+ client->priv->year == -1)
+ return;
+
+ month_begin = make_isodate_for_day_begin (1,
+ client->priv->month,
+ client->priv->year);
+
+ month_end = make_isodate_for_day_begin (1,
+ client->priv->month + 1,
+ client->priv->year);
+
+ query = g_strdup_printf ("occur-in-time-range? (make-time \"%s\") "
+ "(make-time \"%s\")",
+ month_begin, month_end);
+
+ for (l = client->priv->appointment_sources; l; l = l->next)
+ {
+ CalendarClientSource *cs = l->data;
+
+ if (e_cal_get_load_state (cs->source) != E_CAL_LOAD_LOADED)
+ continue;
+
+ calendar_client_start_query (client, cs, query);
+ }
+
+ g_free (month_begin);
+ g_free (month_end);
+ g_free (query);
+}
+
+/* FIXME:
+ * perhaps we should use evo's "hide_completed_tasks" pref?
+ */
+static void
+calendar_client_update_tasks (CalendarClient *client)
+{
+ GSList *l;
+ char *query;
+
+#ifdef FIX_BROKEN_TASKS_QUERY
+ /* FIXME: this doesn't work for tasks without a start or
+ * due date
+ * Look at filter_task() to see the behaviour we
+ * want.
+ */
+
+ char *day_begin;
+ char *day_end;
+
+ if (client->priv->day == -1 ||
+ client->priv->month == -1 ||
+ client->priv->year == -1)
+ return;
+
+ day_begin = make_isodate_for_day_begin (client->priv->day,
+ client->priv->month,
+ client->priv->year);
+
+ day_end = make_isodate_for_day_begin (client->priv->day + 1,
+ client->priv->month,
+ client->priv->year);
+ if (!day_begin || !day_end)
+ {
+ g_warning ("Cannot run query with invalid date: %dd %dy %dm\n",
+ client->priv->day,
+ client->priv->month,
+ client->priv->year);
+ g_free (day_begin);
+ g_free (day_end);
+ return;
+ }
+
+ query = g_strdup_printf ("(and (occur-in-time-range? (make-time \"%s\") "
+ "(make-time \"%s\")) "
+ "(or (not is-completed?) "
+ "(and (is-completed?) "
+ "(not (completed-before? (make-time \"%s\"))))))",
+ day_begin, day_end, day_begin);
+#else
+ query = g_strdup ("#t");
+#endif /* FIX_BROKEN_TASKS_QUERY */
+
+ for (l = client->priv->task_sources; l; l = l->next)
+ {
+ CalendarClientSource *cs = l->data;
+
+ if (e_cal_get_load_state (cs->source) != E_CAL_LOAD_LOADED)
+ continue;
+
+ calendar_client_start_query (client, cs, query);
+ }
+
+#ifdef FIX_BROKEN_TASKS_QUERY
+ g_free (day_begin);
+ g_free (day_end);
+#endif
+ g_free (query);
+}
+
+static void
+calendar_client_source_finalize (CalendarClientSource *source)
+{
+ source->client = NULL;
+
+ if (source->source) {
+ g_signal_handlers_disconnect_by_func (source->source,
+ cal_opened_cb, source);
+ g_object_unref (source->source);
+ }
+ source->source = NULL;
+
+ calendar_client_query_finalize (&source->completed_query);
+ calendar_client_query_finalize (&source->in_progress_query);
+
+ source->query_completed = FALSE;
+ source->query_in_progress = FALSE;
+}
+
+static int
+compare_calendar_sources (CalendarClientSource *s1,
+ CalendarClientSource *s2)
+{
+ return (s1->source == s2->source) ? 0 : 1;
+}
+
+static GSList *
+calendar_client_update_sources_list (CalendarClient *client,
+ GSList *sources,
+ GSList *esources,
+ guint changed_signal_id)
+{
+ GSList *retval, *l;
+
+ retval = NULL;
+
+ for (l = esources; l; l = l->next)
+ {
+ CalendarClientSource dummy_source;
+ CalendarClientSource *new_source;
+ GSList *s;
+ ECal *esource = l->data;
+
+ dummy_source.source = esource;
+
+ dprintf ("update_sources_list: adding client %s: ",
+ e_source_peek_uid (e_cal_get_source (esource)));
+
+ if ((s = g_slist_find_custom (sources,
+ &dummy_source,
+ (GCompareFunc) compare_calendar_sources)))
+ {
+ dprintf ("already on list\n");
+ new_source = s->data;
+ sources = g_slist_delete_link (sources, s);
+ }
+ else
+ {
+ dprintf ("added\n");
+ new_source = g_new0 (CalendarClientSource, 1);
+ new_source->client = client;
+ new_source->source = g_object_ref (esource);
+ new_source->changed_signal_id = changed_signal_id;
+ }
+
+ retval = g_slist_prepend (retval, new_source);
+ }
+
+ for (l = sources; l; l = l->next)
+ {
+ CalendarClientSource *source = l->data;
+
+ dprintf ("Removing client %s from list\n",
+ e_source_peek_uid (e_cal_get_source (source->source)));
+
+ calendar_client_source_finalize (source);
+ g_free (source);
+ }
+ g_slist_free (sources);
+
+ return retval;
+}
+
+static void
+calendar_client_appointment_sources_changed (CalendarClient *client)
+{
+ GSList *esources;
+
+ dprintf ("appointment_sources_changed: updating ...\n");
+
+ esources = calendar_sources_get_appointment_sources (client->priv->calendar_sources);
+
+ client->priv->appointment_sources =
+ calendar_client_update_sources_list (client,
+ client->priv->appointment_sources,
+ esources,
+ signals [APPOINTMENTS_CHANGED]);
+
+ load_calendars (client, CALENDAR_EVENT_APPOINTMENT);
+ calendar_client_update_appointments (client);
+}
+
+static void
+calendar_client_task_sources_changed (CalendarClient *client)
+{
+ GSList *esources;
+
+ dprintf ("task_sources_changed: updating ...\n");
+
+ esources = calendar_sources_get_task_sources (client->priv->calendar_sources);
+
+ client->priv->task_sources =
+ calendar_client_update_sources_list (client,
+ client->priv->task_sources,
+ esources,
+ signals [TASKS_CHANGED]);
+
+ load_calendars (client, CALENDAR_EVENT_TASK);
+ calendar_client_update_tasks (client);
+}
+
+void
+calendar_client_get_date (CalendarClient *client,
+ guint *year,
+ guint *month,
+ guint *day)
+{
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+
+ if (year)
+ *year = client->priv->year;
+
+ if (month)
+ *month = client->priv->month;
+
+ if (day)
+ *day = client->priv->day;
+}
+
+void
+calendar_client_select_month (CalendarClient *client,
+ guint month,
+ guint year)
+{
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (month <= 11);
+
+ if (client->priv->year != year || client->priv->month != month)
+ {
+ client->priv->month = month;
+ client->priv->year = year;
+
+ calendar_client_update_appointments (client);
+ calendar_client_update_tasks (client);
+
+ g_object_freeze_notify (G_OBJECT (client));
+ g_object_notify (G_OBJECT (client), "month");
+ g_object_notify (G_OBJECT (client), "year");
+ g_object_thaw_notify (G_OBJECT (client));
+ }
+}
+
+void
+calendar_client_select_day (CalendarClient *client,
+ guint day)
+{
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (day <= 31);
+
+ if (client->priv->day != day)
+ {
+ client->priv->day = day;
+
+ /* don't need to update appointments unless
+ * the selected month changes
+ */
+#ifdef FIX_BROKEN_TASKS_QUERY
+ calendar_client_update_tasks (client);
+#endif
+
+ g_object_notify (G_OBJECT (client), "day");
+ }
+}
+
+typedef struct
+{
+ CalendarClient *client;
+ GSList *events;
+ time_t start_time;
+ time_t end_time;
+} FilterData;
+
+typedef void (* CalendarEventFilterFunc) (const char *uid,
+ CalendarEvent *event,
+ FilterData *filter_data);
+
+static void
+filter_appointment (const char *uid,
+ CalendarEvent *event,
+ FilterData *filter_data)
+{
+ GSList *occurrences, *l;
+
+ if (event->type != CALENDAR_EVENT_APPOINTMENT)
+ return;
+
+ occurrences = CALENDAR_APPOINTMENT (event)->occurrences;
+ CALENDAR_APPOINTMENT (event)->occurrences = NULL;
+
+ for (l = occurrences; l; l = l->next)
+ {
+ CalendarOccurrence *occurrence = l->data;
+ time_t start_time = occurrence->start_time;
+ time_t end_time = occurrence->end_time;
+
+ if ((start_time >= filter_data->start_time &&
+ start_time < filter_data->end_time) ||
+ (start_time <= filter_data->start_time &&
+ (end_time - 1) > filter_data->start_time))
+ {
+ CalendarEvent *new_event;
+
+ new_event = calendar_event_copy (event);
+
+ CALENDAR_APPOINTMENT (new_event)->start_time = occurrence->start_time;
+ CALENDAR_APPOINTMENT (new_event)->end_time = occurrence->end_time;
+
+ filter_data->events = g_slist_prepend (filter_data->events, new_event);
+ }
+ }
+
+ CALENDAR_APPOINTMENT (event)->occurrences = occurrences;
+}
+
+static void
+filter_task (const char *uid,
+ CalendarEvent *event,
+ FilterData *filter_data)
+{
+#ifdef FIX_BROKEN_TASKS_QUERY
+ CalendarTask *task;
+#endif
+
+ if (event->type != CALENDAR_EVENT_TASK)
+ return;
+
+#ifdef FIX_BROKEN_TASKS_QUERY
+ task = CALENDAR_TASK (event);
+
+ if (task->start_time && task->start_time > filter_data->start_time)
+ return;
+
+ if (task->completed_time &&
+ (task->completed_time < filter_data->start_time ||
+ task->completed_time > filter_data->end_time))
+ return;
+#endif /* FIX_BROKEN_TASKS_QUERY */
+
+ filter_data->events = g_slist_prepend (filter_data->events,
+ calendar_event_copy (event));
+}
+
+static GSList *
+calendar_client_filter_events (CalendarClient *client,
+ GSList *sources,
+ CalendarEventFilterFunc filter_func,
+ time_t start_time,
+ time_t end_time)
+{
+ FilterData filter_data;
+ GSList *l;
+ GSList *retval;
+
+ if (!sources)
+ return NULL;
+
+ filter_data.client = client;
+ filter_data.events = NULL;
+ filter_data.start_time = start_time;
+ filter_data.end_time = end_time;
+
+ retval = NULL;
+ for (l = sources; l; l = l->next)
+ {
+ CalendarClientSource *source = l->data;
+
+ if (source->query_completed)
+ {
+ filter_data.events = NULL;
+ g_hash_table_foreach (source->completed_query.events,
+ (GHFunc) filter_func,
+ &filter_data);
+
+ filter_data.events = g_slist_reverse (filter_data.events);
+
+ retval = g_slist_concat (retval, filter_data.events);
+ }
+ }
+
+ return retval;
+}
+
+GSList *
+calendar_client_get_events (CalendarClient *client,
+ CalendarEventType event_mask)
+{
+ GSList *appointments;
+ GSList *tasks;
+ time_t day_begin;
+ time_t day_end;
+
+ g_return_val_if_fail (CALENDAR_IS_CLIENT (client), NULL);
+ g_return_val_if_fail (client->priv->day != -1 &&
+ client->priv->month != -1 &&
+ client->priv->year != -1, NULL);
+
+ day_begin = make_time_for_day_begin (client->priv->day,
+ client->priv->month,
+ client->priv->year);
+ day_end = make_time_for_day_begin (client->priv->day + 1,
+ client->priv->month,
+ client->priv->year);
+
+ appointments = NULL;
+ if (event_mask & CALENDAR_EVENT_APPOINTMENT)
+ {
+ appointments = calendar_client_filter_events (client,
+ client->priv->appointment_sources,
+ filter_appointment,
+ day_begin,
+ day_end);
+ }
+
+ tasks = NULL;
+ if (event_mask & CALENDAR_EVENT_TASK)
+ {
+ tasks = calendar_client_filter_events (client,
+ client->priv->task_sources,
+ filter_task,
+ day_begin,
+ day_end);
+ }
+
+ return g_slist_concat (appointments, tasks);
+}
+
+static inline int
+day_from_time_t (time_t t)
+{
+ struct tm *tm = localtime (&t);
+
+ g_assert (tm == NULL || (tm->tm_mday >=1 && tm->tm_mday <= 31));
+
+ return tm ? tm->tm_mday : 0;
+}
+
+void
+calendar_client_foreach_appointment_day (CalendarClient *client,
+ CalendarDayIter iter_func,
+ gpointer user_data)
+{
+ GSList *appointments, *l;
+ gboolean marked_days [32] = { FALSE, };
+ time_t month_begin;
+ time_t month_end;
+ int i;
+
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (iter_func != NULL);
+ g_return_if_fail (client->priv->month != -1 &&
+ client->priv->year != -1);
+
+ month_begin = make_time_for_day_begin (1,
+ client->priv->month,
+ client->priv->year);
+ month_end = make_time_for_day_begin (1,
+ client->priv->month + 1,
+ client->priv->year);
+
+ appointments = calendar_client_filter_events (client,
+ client->priv->appointment_sources,
+ filter_appointment,
+ month_begin,
+ month_end);
+ for (l = appointments; l; l = l->next)
+ {
+ CalendarAppointment *appointment = l->data;
+
+ if (appointment->start_time)
+ {
+ time_t day_time = appointment->start_time;
+
+ if (day_time >= month_begin)
+ marked_days [day_from_time_t (day_time)] = TRUE;
+
+ if (appointment->end_time)
+ {
+ int day_offset;
+ int duration = appointment->end_time - appointment->start_time;
+ /* mark the days for the appointment, no need to add an extra one when duration is a multiple of 86400 */
+ for (day_offset = 1; day_offset <= duration / 86400 && duration != day_offset * 86400; day_offset++)
+ {
+ time_t day_tm = appointment->start_time + day_offset * 86400;
+
+ if (day_tm > month_end)
+ break;
+ if (day_tm >= month_begin)
+ marked_days [day_from_time_t (day_tm)] = TRUE;
+ }
+ }
+ }
+ calendar_event_free (CALENDAR_EVENT (appointment));
+ }
+
+ g_slist_free (appointments);
+
+ for (i = 1; i < 32; i++)
+ {
+ if (marked_days [i])
+ iter_func (client, i, user_data);
+ }
+}
+
+void
+calendar_client_set_task_completed (CalendarClient *client,
+ char *task_uid,
+ gboolean task_completed,
+ guint percent_complete)
+{
+ GSList *l;
+ ECal *esource;
+ icalcomponent *ical;
+ icalproperty *prop;
+ icalproperty_status status;
+
+ g_return_if_fail (CALENDAR_IS_CLIENT (client));
+ g_return_if_fail (task_uid != NULL);
+ g_return_if_fail (task_completed == FALSE || percent_complete == 100);
+
+ ical = NULL;
+ esource = NULL;
+ for (l = client->priv->task_sources; l; l = l->next)
+ {
+ CalendarClientSource *source = l->data;
+
+ esource = source->source;
+ e_cal_get_object (esource, task_uid, NULL, &ical, NULL);
+ if (ical)
+ break;
+ }
+
+ if (!ical)
+ {
+ g_warning ("Cannot locate task with uid = '%s'\n", task_uid);
+ return;
+ }
+
+ g_assert (esource != NULL);
+
+ /* Completed time */
+ prop = icalcomponent_get_first_property (ical,
+ ICAL_COMPLETED_PROPERTY);
+ if (task_completed)
+ {
+ struct icaltimetype completed_time;
+
+ completed_time = icaltime_current_time_with_zone (client->priv->zone);
+ if (!prop)
+ {
+ icalcomponent_add_property (ical,
+ icalproperty_new_completed (completed_time));
+ }
+ else
+ {
+ icalproperty_set_completed (prop, completed_time);
+ }
+ }
+ else if (prop)
+ {
+ icalcomponent_remove_property (ical, prop);
+ }
+
+ /* Percent complete */
+ prop = icalcomponent_get_first_property (ical,
+ ICAL_PERCENTCOMPLETE_PROPERTY);
+ if (!prop)
+ {
+ icalcomponent_add_property (ical,
+ icalproperty_new_percentcomplete (percent_complete));
+ }
+ else
+ {
+ icalproperty_set_percentcomplete (prop, percent_complete);
+ }
+
+ /* Status */
+ status = task_completed ? ICAL_STATUS_COMPLETED : ICAL_STATUS_NEEDSACTION;
+ prop = icalcomponent_get_first_property (ical, ICAL_STATUS_PROPERTY);
+ if (prop)
+ {
+ icalproperty_set_status (prop, status);
+ }
+ else
+ {
+ icalcomponent_add_property (ical,
+ icalproperty_new_status (status));
+ }
+
+ e_cal_modify_object (esource, ical, CALOBJ_MOD_ALL, NULL);
+}
diff --git a/applets/clock/calendar-client.h b/applets/clock/calendar-client.h
new file mode 100644
index 00000000..9d502ba0
--- /dev/null
+++ b/applets/clock/calendar-client.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#ifndef __CALENDAR_CLIENT_H__
+#define __CALENDAR_CLIENT_H__
+
+#include <glib-object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum
+{
+ CALENDAR_EVENT_APPOINTMENT = 1 << 0,
+ CALENDAR_EVENT_TASK = 1 << 1,
+ CALENDAR_EVENT_ALL = (1 << 2) - 1
+} CalendarEventType;
+
+#define CALENDAR_TYPE_CLIENT (calendar_client_get_type ())
+#define CALENDAR_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_CLIENT, CalendarClient))
+#define CALENDAR_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_CLIENT, CalendarClientClass))
+#define CALENDAR_IS_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_CLIENT))
+#define CALENDAR_IS_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_CLIENT))
+#define CALENDAR_CLIENT_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_CLIENT, CalendarClientClass))
+
+typedef struct _CalendarClient CalendarClient;
+typedef struct _CalendarClientClass CalendarClientClass;
+typedef struct _CalendarClientPrivate CalendarClientPrivate;
+
+struct _CalendarClient
+{
+ GObject parent;
+ CalendarClientPrivate *priv;
+};
+
+struct _CalendarClientClass
+{
+ GObjectClass parent_class;
+
+ void (* appointments_changed) (CalendarClient *client);
+ void (* tasks_changed) (CalendarClient *client);
+};
+
+
+typedef struct
+{
+ time_t start_time;
+ time_t end_time;
+} CalendarOccurrence;
+
+typedef struct
+{
+ char *uid;
+ char *rid;
+ char *uri;
+ char *summary;
+ char *description;
+ char *color_string;
+ time_t start_time;
+ time_t end_time;
+ guint is_all_day : 1;
+
+ /* Only used internally */
+ GSList *occurrences;
+} CalendarAppointment;
+
+typedef struct
+{
+ char *uid;
+ char *summary;
+ char *description;
+ char *color_string;
+ char *url;
+ time_t start_time;
+ time_t due_time;
+ guint percent_complete;
+ time_t completed_time;
+ int priority;
+} CalendarTask;
+
+typedef struct
+{
+ union
+ {
+ CalendarAppointment appointment;
+ CalendarTask task;
+ } event;
+ CalendarEventType type;
+} CalendarEvent;
+
+#define CALENDAR_EVENT(e) ((CalendarEvent *)(e))
+#define CALENDAR_APPOINTMENT(e) ((CalendarAppointment *)(e))
+#define CALENDAR_TASK(e) ((CalendarTask *)(e))
+
+typedef void (* CalendarDayIter) (CalendarClient *client,
+ guint day,
+ gpointer user_data);
+
+
+GType calendar_client_get_type (void) G_GNUC_CONST;
+CalendarClient *calendar_client_new (void);
+
+void calendar_client_get_date (CalendarClient *client,
+ guint *year,
+ guint *month,
+ guint *day);
+void calendar_client_select_month (CalendarClient *client,
+ guint month,
+ guint year);
+void calendar_client_select_day (CalendarClient *client,
+ guint day);
+
+GSList *calendar_client_get_events (CalendarClient *client,
+ CalendarEventType event_mask);
+void calendar_client_foreach_appointment_day (CalendarClient *client,
+ CalendarDayIter iter_func,
+ gpointer user_data);
+
+void calendar_client_set_task_completed (CalendarClient *client,
+ char *task_uid,
+ gboolean task_completed,
+ guint percent_complete);
+
+void calendar_event_free (CalendarEvent *event);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CALENDAR_CLIENT_H__ */
diff --git a/applets/clock/calendar-debug.h b/applets/clock/calendar-debug.h
new file mode 100644
index 00000000..a7ea2a79
--- /dev/null
+++ b/applets/clock/calendar-debug.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ */
+
+#ifndef __CALENDAR_DEBUG_H__
+#define __CALENDAR_DEBUG_H__
+
+#include <glib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef CALENDAR_ENABLE_DEBUG
+
+#include <stdio.h>
+
+#ifdef G_HAVE_ISO_VARARGS
+# define dprintf(...) fprintf (stderr, __VA_ARGS__);
+#elif defined(G_HAVE_GNUC_VARARGS)
+# define dprintf(args...) fprintf (stderr, args);
+#endif
+
+#else /* if !defined (CALENDAR_DEBUG) */
+
+#ifdef G_HAVE_ISO_VARARGS
+# define dprintf(...)
+#elif defined(G_HAVE_GNUC_VARARGS)
+# define dprintf(args...)
+#endif
+
+#endif /* CALENDAR_ENABLE_DEBUG */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CALENDAR_DEBUG_H__ */
diff --git a/applets/clock/calendar-sources.c b/applets/clock/calendar-sources.c
new file mode 100644
index 00000000..721ff062
--- /dev/null
+++ b/applets/clock/calendar-sources.c
@@ -0,0 +1,658 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#include <config.h>
+
+#include "calendar-sources.h"
+
+#include <libintl.h>
+#include <string.h>
+#include <mateconf/mateconf-client.h>
+#define HANDLE_LIBICAL_MEMORY
+#include <libecal/e-cal.h>
+#include <libedataserver/e-source-list.h>
+#include <libedataserverui/e-passwords.h>
+
+#undef CALENDAR_ENABLE_DEBUG
+#include "calendar-debug.h"
+
+#ifndef _
+#define _(x) gettext(x)
+#endif
+
+#ifndef N_
+#define N_(x) x
+#endif
+
+#define CALENDAR_SOURCES_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesPrivate))
+
+#define CALENDAR_SOURCES_EVO_DIR "/apps/evolution"
+#define CALENDAR_SOURCES_APPOINTMENT_SOURCES_KEY CALENDAR_SOURCES_EVO_DIR "/calendar/sources"
+#define CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR CALENDAR_SOURCES_EVO_DIR "/calendar/display"
+#define CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_KEY CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR "/selected_calendars"
+#define CALENDAR_SOURCES_TASK_SOURCES_KEY CALENDAR_SOURCES_EVO_DIR "/tasks/sources"
+#define CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR CALENDAR_SOURCES_EVO_DIR "/calendar/tasks"
+#define CALENDAR_SOURCES_SELECTED_TASK_SOURCES_KEY CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR "/selected_tasks"
+
+typedef struct _CalendarSourceData CalendarSourceData;
+
+struct _CalendarSourceData
+{
+ ECalSourceType source_type;
+ CalendarSources *sources;
+ guint changed_signal;
+
+ GSList *clients;
+ GSList *selected_sources;
+ ESourceList *esource_list;
+
+ guint selected_sources_listener;
+ char *selected_sources_dir;
+
+ guint timeout_id;
+
+ guint loaded : 1;
+};
+
+struct _CalendarSourcesPrivate
+{
+ CalendarSourceData appointment_sources;
+ CalendarSourceData task_sources;
+
+ MateConfClient *mateconf_client;
+};
+
+static void calendar_sources_class_init (CalendarSourcesClass *klass);
+static void calendar_sources_init (CalendarSources *sources);
+static void calendar_sources_finalize (GObject *object);
+
+static void backend_died_cb (ECal *client, CalendarSourceData *source_data);
+static void calendar_sources_esource_list_changed (ESourceList *source_list,
+ CalendarSourceData *source_data);
+
+enum
+{
+ APPOINTMENT_SOURCES_CHANGED,
+ TASK_SOURCES_CHANGED,
+ LAST_SIGNAL
+};
+static guint signals [LAST_SIGNAL] = { 0, };
+
+static GObjectClass *parent_class = NULL;
+static CalendarSources *calendar_sources_singleton = NULL;
+
+GType
+calendar_sources_get_type (void)
+{
+ static GType sources_type = 0;
+
+ if (!sources_type)
+ {
+ static const GTypeInfo sources_info =
+ {
+ sizeof (CalendarSourcesClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) calendar_sources_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (CalendarSources),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) calendar_sources_init,
+ };
+
+ sources_type = g_type_register_static (G_TYPE_OBJECT,
+ "CalendarSources",
+ &sources_info, 0);
+ }
+
+ return sources_type;
+}
+
+static void
+calendar_sources_class_init (CalendarSourcesClass *klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->finalize = calendar_sources_finalize;
+
+ g_type_class_add_private (klass, sizeof (CalendarSourcesPrivate));
+
+ signals [APPOINTMENT_SOURCES_CHANGED] =
+ g_signal_new ("appointment-sources-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarSourcesClass,
+ appointment_sources_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ signals [TASK_SOURCES_CHANGED] =
+ g_signal_new ("task-sources-changed",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (CalendarSourcesClass,
+ task_sources_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+}
+
+static void
+calendar_sources_init (CalendarSources *sources)
+{
+ sources->priv = CALENDAR_SOURCES_GET_PRIVATE (sources);
+
+ sources->priv->appointment_sources.source_type = E_CAL_SOURCE_TYPE_EVENT;
+ sources->priv->appointment_sources.sources = sources;
+ sources->priv->appointment_sources.changed_signal = signals [APPOINTMENT_SOURCES_CHANGED];
+ sources->priv->appointment_sources.timeout_id = 0;
+
+ sources->priv->task_sources.source_type = E_CAL_SOURCE_TYPE_TODO;
+ sources->priv->task_sources.sources = sources;
+ sources->priv->task_sources.changed_signal = signals [TASK_SOURCES_CHANGED];
+ sources->priv->task_sources.timeout_id = 0;
+
+ sources->priv->mateconf_client = mateconf_client_get_default ();
+}
+
+static void
+calendar_sources_finalize_source_data (CalendarSources *sources,
+ CalendarSourceData *source_data)
+{
+ if (source_data->loaded)
+ {
+ GSList *l;
+
+ if (source_data->selected_sources_dir)
+ {
+ mateconf_client_remove_dir (sources->priv->mateconf_client,
+ source_data->selected_sources_dir,
+ NULL);
+
+ g_free (source_data->selected_sources_dir);
+ source_data->selected_sources_dir = NULL;
+ }
+
+ if (source_data->selected_sources_listener)
+ {
+ mateconf_client_notify_remove (sources->priv->mateconf_client,
+ source_data->selected_sources_listener);
+ source_data->selected_sources_listener = 0;
+ }
+
+ for (l = source_data->clients; l; l = l->next)
+ {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (l->data),
+ G_CALLBACK (backend_died_cb),
+ source_data);
+ g_object_unref (l->data);
+ }
+ g_slist_free (source_data->clients);
+ source_data->clients = NULL;
+
+ if (source_data->esource_list)
+ {
+ g_signal_handlers_disconnect_by_func (source_data->esource_list,
+ G_CALLBACK (calendar_sources_esource_list_changed),
+ source_data);
+ g_object_unref (source_data->esource_list);
+ }
+ source_data->esource_list = NULL;
+
+ for (l = source_data->selected_sources; l; l = l->next)
+ g_free (l->data);
+ g_slist_free (source_data->selected_sources);
+ source_data->selected_sources = NULL;
+
+ if (source_data->timeout_id != 0)
+ {
+ g_source_remove (source_data->timeout_id);
+ source_data->timeout_id = 0;
+ }
+
+ source_data->loaded = FALSE;
+ }
+}
+
+static void
+calendar_sources_finalize (GObject *object)
+{
+ CalendarSources *sources = CALENDAR_SOURCES (object);
+
+ calendar_sources_finalize_source_data (sources, &sources->priv->appointment_sources);
+ calendar_sources_finalize_source_data (sources, &sources->priv->task_sources);
+
+ if (sources->priv->mateconf_client)
+ g_object_unref (sources->priv->mateconf_client);
+ sources->priv->mateconf_client = NULL;
+
+ if (G_OBJECT_CLASS (parent_class)->finalize)
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+CalendarSources *
+calendar_sources_get (void)
+{
+ gpointer singleton_location = &calendar_sources_singleton;
+
+ if (calendar_sources_singleton)
+ return g_object_ref (calendar_sources_singleton);
+
+ calendar_sources_singleton = g_object_new (CALENDAR_TYPE_SOURCES, NULL);
+ g_object_add_weak_pointer (G_OBJECT (calendar_sources_singleton),
+ singleton_location);
+
+ return calendar_sources_singleton;
+}
+
+static gboolean
+is_source_selected (ESource *esource,
+ GSList *selected_sources)
+{
+ const char *uid;
+ GSList *l;
+
+ uid = e_source_peek_uid (esource);
+
+ for (l = selected_sources; l; l = l->next)
+ {
+ const char *source = l->data;
+
+ if (!strcmp (source, uid))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static char *
+auth_func_cb (ECal *ecal,
+ const char *prompt,
+ const char *key,
+ gpointer user_data)
+{
+ ESource *source;
+ const gchar *auth_domain;
+ const gchar *component_name;
+
+ source = e_cal_get_source (ecal);
+ auth_domain = e_source_get_property (source, "auth-domain");
+ component_name = auth_domain ? auth_domain : "Calendar";
+
+ return e_passwords_get_password (component_name, key);
+}
+
+/* The clients are just created here but not loaded */
+static ECal *
+get_ecal_from_source (ESource *esource,
+ ECalSourceType source_type,
+ GSList *existing_clients)
+{
+ ECal *retval;
+
+ if (existing_clients)
+ {
+ GSList *l;
+
+ for (l = existing_clients; l; l = l->next)
+ {
+ ECal *client = E_CAL (l->data);
+
+ if (e_source_equal (esource, e_cal_get_source (client)))
+ {
+ dprintf (" load_esource: found existing source ... returning that\n");
+
+ return g_object_ref (client);
+ }
+ }
+ }
+
+ retval = e_cal_new (esource, source_type);
+ if (!retval)
+ {
+ g_warning ("Could not load source '%s' from '%s'\n",
+ e_source_peek_name (esource),
+ e_source_peek_relative_uri (esource));
+ return NULL;
+ }
+
+ e_cal_set_auth_func (retval, auth_func_cb, NULL);
+
+ return retval;
+}
+
+/* - Order doesn't matter
+ * - Can just compare object pointers since we
+ * re-use client connections
+ */
+static gboolean
+compare_ecal_lists (GSList *a,
+ GSList *b)
+{
+ GSList *l;
+
+ if (g_slist_length (a) != g_slist_length (b))
+ return FALSE;
+
+ for (l = a; l; l = l->next)
+ {
+ if (!g_slist_find (b, l->data))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static inline void
+debug_dump_selected_sources (GSList *selected_sources)
+{
+#ifdef CALENDAR_ENABLE_DEBUG
+ GSList *l;
+
+ dprintf ("Selected sources:\n");
+ for (l = selected_sources; l; l = l->next)
+ {
+ char *source = l->data;
+
+ dprintf (" %s\n", source);
+ }
+ dprintf ("\n");
+#endif
+}
+
+static inline void
+debug_dump_ecal_list (GSList *ecal_list)
+{
+#ifdef CALENDAR_ENABLE_DEBUG
+ GSList *l;
+
+ dprintf ("Loaded clients:\n");
+ for (l = ecal_list; l; l = l->next)
+ {
+ ECal *client = l->data;
+ ESource *source = e_cal_get_source (client);
+
+ dprintf (" %s %s %s\n",
+ e_source_peek_uid (source),
+ e_source_peek_name (source),
+ e_cal_get_uri (client));
+ }
+#endif
+}
+
+static void
+calendar_sources_load_esource_list (CalendarSourceData *source_data);
+
+static gboolean
+backend_restart (gpointer data)
+{
+ CalendarSourceData *source_data = data;
+
+ calendar_sources_load_esource_list (source_data);
+
+ source_data->timeout_id = 0;
+
+ return FALSE;
+}
+
+static void
+backend_died_cb (ECal *client, CalendarSourceData *source_data)
+{
+ const char *uristr;
+
+ source_data->clients = g_slist_remove (source_data->clients, client);
+ if (g_slist_length (source_data->clients) < 1)
+ {
+ g_slist_free (source_data->clients);
+ source_data->clients = NULL;
+ }
+ uristr = e_cal_get_uri (client);
+ g_warning ("The calendar backend for %s has crashed.", uristr);
+
+ if (source_data->timeout_id != 0)
+ {
+ g_source_remove (source_data->timeout_id);
+ source_data->timeout_id = 0;
+ }
+
+ source_data->timeout_id = g_timeout_add_seconds (2, backend_restart,
+ source_data);
+}
+
+static void
+calendar_sources_load_esource_list (CalendarSourceData *source_data)
+{
+ GSList *clients = NULL;
+ GSList *groups, *l;
+ gboolean emit_signal = FALSE;
+
+ g_return_if_fail (source_data->esource_list != NULL);
+
+ debug_dump_selected_sources (source_data->selected_sources);
+
+ dprintf ("Source groups:\n");
+ groups = e_source_list_peek_groups (source_data->esource_list);
+ for (l = groups; l; l = l->next)
+ {
+ GSList *esources, *s;
+
+ dprintf (" %s\n", e_source_group_peek_uid (l->data));
+ dprintf (" sources:\n");
+
+ esources = e_source_group_peek_sources (l->data);
+ for (s = esources; s; s = s->next)
+ {
+ ESource *esource = E_SOURCE (s->data);
+ ECal *client;
+
+ dprintf (" type = '%s' uid = '%s', name = '%s', relative uri = '%s': \n",
+ source_data->source_type == E_CAL_SOURCE_TYPE_EVENT ? "appointment" : "task",
+ e_source_peek_uid (esource),
+ e_source_peek_name (esource),
+ e_source_peek_relative_uri (esource));
+
+ if (is_source_selected (esource, source_data->selected_sources) &&
+ (client = get_ecal_from_source (esource, source_data->source_type, source_data->clients)))
+ {
+ clients = g_slist_prepend (clients, client);
+ }
+ }
+ }
+ dprintf ("\n");
+
+ if (source_data->loaded &&
+ !compare_ecal_lists (source_data->clients, clients))
+ emit_signal = TRUE;
+
+ for (l = source_data->clients; l; l = l->next)
+ {
+ g_signal_handlers_disconnect_by_func (G_OBJECT (l->data),
+ G_CALLBACK (backend_died_cb),
+ source_data);
+
+ g_object_unref (l->data);
+ }
+ g_slist_free (source_data->clients);
+ source_data->clients = g_slist_reverse (clients);
+
+ /* connect to backend_died after we disconnected the previous signal
+ * handlers. If we do it before, we'll lose some handlers (for clients that
+ * were already there before) */
+ for (l = source_data->clients; l; l = l->next)
+ {
+ g_signal_connect (G_OBJECT (l->data), "backend_died",
+ G_CALLBACK (backend_died_cb), source_data);
+ }
+
+ if (emit_signal)
+ {
+ dprintf ("Emitting %s-sources-changed signal\n",
+ source_data->source_type == E_CAL_SOURCE_TYPE_EVENT ? "appointment" : "task");
+ g_signal_emit (source_data->sources, source_data->changed_signal, 0);
+ }
+
+ debug_dump_ecal_list (source_data->clients);
+}
+
+static void
+calendar_sources_esource_list_changed (ESourceList *source_list,
+ CalendarSourceData *source_data)
+
+{
+ dprintf ("ESourceList changed, reloading\n");
+
+ calendar_sources_load_esource_list (source_data);
+}
+
+static void
+calendar_sources_selected_sources_notify (MateConfClient *client,
+ guint cnx_id,
+ MateConfEntry *entry,
+ CalendarSourceData *source_data)
+{
+ GSList *l;
+
+ if (!entry->value ||
+ entry->value->type != MATECONF_VALUE_LIST ||
+ mateconf_value_get_list_type (entry->value) != MATECONF_VALUE_STRING)
+ return;
+
+ dprintf ("Selected sources key (%s) changed, reloading\n", entry->key);
+
+ for (l = source_data->selected_sources; l; l = l->next)
+ g_free (l->data);
+ source_data->selected_sources = NULL;
+
+ for (l = mateconf_value_get_list (entry->value); l; l = l->next)
+ {
+ const char *source = mateconf_value_get_string (l->data);
+
+ source_data->selected_sources =
+ g_slist_prepend (source_data->selected_sources,
+ g_strdup (source));
+ }
+ source_data->selected_sources =
+ g_slist_reverse (source_data->selected_sources);
+
+ calendar_sources_load_esource_list (source_data);
+}
+
+static void
+calendar_sources_load_sources (CalendarSources *sources,
+ CalendarSourceData *source_data,
+ const char *sources_key,
+ const char *selected_sources_key,
+ const char *selected_sources_dir)
+{
+ MateConfClient *mateconf_client;
+ GError *error;
+
+ dprintf ("---------------------------\n");
+ dprintf ("Loading sources:\n");
+ dprintf (" sources_key: %s\n", sources_key);
+ dprintf (" selected_sources_key: %s\n", selected_sources_key);
+ dprintf (" selected_sources_dir: %s\n", selected_sources_dir);
+
+ mateconf_client = sources->priv->mateconf_client;
+
+ error = NULL;
+ source_data->selected_sources = mateconf_client_get_list (mateconf_client,
+ selected_sources_key,
+ MATECONF_VALUE_STRING,
+ &error);
+ if (error)
+ {
+ g_warning ("Failed to get selected sources from '%s': %s\n",
+ selected_sources_key,
+ error->message);
+ g_error_free (error);
+ return;
+ }
+
+ mateconf_client_add_dir (mateconf_client,
+ selected_sources_dir,
+ MATECONF_CLIENT_PRELOAD_NONE,
+ NULL);
+ source_data->selected_sources_dir = g_strdup (selected_sources_dir);
+
+ source_data->selected_sources_listener =
+ mateconf_client_notify_add (mateconf_client,
+ selected_sources_dir,
+ (MateConfClientNotifyFunc) calendar_sources_selected_sources_notify,
+ source_data, NULL, NULL);
+
+ source_data->esource_list = e_source_list_new_for_mateconf (mateconf_client, sources_key);
+ g_signal_connect (source_data->esource_list, "changed",
+ G_CALLBACK (calendar_sources_esource_list_changed),
+ source_data);
+
+ calendar_sources_load_esource_list (source_data);
+
+ source_data->loaded = TRUE;
+
+ dprintf ("---------------------------\n");
+}
+
+GSList *
+calendar_sources_get_appointment_sources (CalendarSources *sources)
+{
+ g_return_val_if_fail (CALENDAR_IS_SOURCES (sources), NULL);
+
+ if (!sources->priv->appointment_sources.loaded)
+ {
+ calendar_sources_load_sources (sources,
+ &sources->priv->appointment_sources,
+ CALENDAR_SOURCES_APPOINTMENT_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_APPOINTMENT_SOURCES_DIR);
+ }
+
+ return sources->priv->appointment_sources.clients;
+}
+
+GSList *
+calendar_sources_get_task_sources (CalendarSources *sources)
+{
+ g_return_val_if_fail (CALENDAR_IS_SOURCES (sources), NULL);
+
+ if (!sources->priv->task_sources.loaded)
+ {
+ calendar_sources_load_sources (sources,
+ &sources->priv->task_sources,
+ CALENDAR_SOURCES_TASK_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_TASK_SOURCES_KEY,
+ CALENDAR_SOURCES_SELECTED_TASK_SOURCES_DIR);
+ }
+
+ return sources->priv->task_sources.clients;
+}
diff --git a/applets/clock/calendar-sources.h b/applets/clock/calendar-sources.h
new file mode 100644
index 00000000..3f080c55
--- /dev/null
+++ b/applets/clock/calendar-sources.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Mark McLoughlin <[email protected]>
+ * William Jon McCann <[email protected]>
+ * Martin Grimme <[email protected]>
+ * Christian Kellner <[email protected]>
+ */
+
+#ifndef __CALENDAR_SOURCES_H__
+#define __CALENDAR_SOURCES_H__
+
+#include <glib-object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CALENDAR_TYPE_SOURCES (calendar_sources_get_type ())
+#define CALENDAR_SOURCES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_SOURCES, CalendarSources))
+#define CALENDAR_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
+#define CALENDAR_IS_SOURCES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_SOURCES))
+#define CALENDAR_IS_SOURCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_SOURCES))
+#define CALENDAR_SOURCES_GET_CLASS(o)(G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_SOURCES, CalendarSourcesClass))
+
+typedef struct _CalendarSources CalendarSources;
+typedef struct _CalendarSourcesClass CalendarSourcesClass;
+typedef struct _CalendarSourcesPrivate CalendarSourcesPrivate;
+
+struct _CalendarSources
+{
+ GObject parent;
+ CalendarSourcesPrivate *priv;
+};
+
+struct _CalendarSourcesClass
+{
+ GObjectClass parent_class;
+
+ void (* appointment_sources_changed) (CalendarSources *sources);
+ void (* task_sources_changed) (CalendarSources *sources);
+};
+
+
+GType calendar_sources_get_type (void) G_GNUC_CONST;
+CalendarSources *calendar_sources_get (void);
+GSList *calendar_sources_get_appointment_sources (CalendarSources *sources);
+GSList *calendar_sources_get_task_sources (CalendarSources *sources);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CALENDAR_SOURCES_H__ */
diff --git a/applets/clock/calendar-window.c b/applets/clock/calendar-window.c
new file mode 100644
index 00000000..d675f492
--- /dev/null
+++ b/applets/clock/calendar-window.c
@@ -0,0 +1,2125 @@
+/*
+ * calendar-window.c: toplevel window containing a calendar and
+ * tasks/appointments
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+ /*
+ * Evolution calendar integration TODO:
+ * + Fix treeview scrolling and sizing
+ * + Tooltips for tasks/appointments
+ * + Do everything backwards if the clock is on the bottom
+ * + Double clicking appointments/tasks should open them in evo
+ * + Consider using different colours for different sources
+ * + Consider doing a GtkMenu tearoff type thing
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <mateconf/mateconf-client.h>
+
+#define MATE_DESKTOP_USE_UNSTABLE_API
+#include <libmate/mate-desktop-utils.h>
+
+#include "calendar-window.h"
+
+#include "clock.h"
+#include "clock-utils.h"
+#include "clock-typebuiltins.h"
+#ifdef HAVE_LIBECAL
+#include "calendar-client.h"
+#endif
+
+#define CALENDAR_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CALENDAR_TYPE_WINDOW, CalendarWindowPrivate))
+
+#define KEY_LOCATIONS_EXPANDED "expand_locations"
+#ifdef HAVE_LIBECAL
+/* For the following value, take into account the KEY_* that are not inside this #ifdef! */
+# define N_CALENDAR_WINDOW_MATECONF_PREFS 5
+# define KEY_APPOINTMENTS_EXPANDED "expand_appointments"
+# define KEY_BIRTHDAYS_EXPANDED "expand_birthdays"
+# define KEY_TASKS_EXPANDED "expand_tasks"
+# define KEY_WEATHER_EXPANDED "expand_weather"
+
+# define KEY_CALENDAR_APP "/desktop/mate/applications/calendar"
+# define KEY_TASKS_APP "/desktop/mate/applications/tasks"
+#else
+# define N_CALENDAR_WINDOW_MATECONF_PREFS 1
+#endif
+
+enum {
+ EDIT_LOCATIONS,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+struct _CalendarWindowPrivate {
+ GtkWidget *calendar;
+
+ char *prefs_dir;
+
+ gboolean invert_order;
+ gboolean show_weeks;
+ time_t *current_time;
+
+ GtkWidget *locations_list;
+
+#ifdef HAVE_LIBECAL
+ ClockFormat time_format;
+
+ CalendarClient *client;
+
+ GtkWidget *appointment_list;
+ GtkWidget *birthday_list;
+ GtkWidget *weather_list;
+ GtkWidget *task_list;
+
+ GtkListStore *appointments_model;
+ GtkListStore *tasks_model;
+
+ GtkTreeSelection *previous_selection;
+
+ GtkTreeModelFilter *appointments_filter;
+ GtkTreeModelFilter *birthdays_filter;
+ GtkTreeModelFilter *tasks_filter;
+ GtkTreeModelFilter *weather_filter;
+
+ MateConfClient *mateconfclient;
+#endif /* HAVE_LIBECAL */
+};
+
+G_DEFINE_TYPE (CalendarWindow, calendar_window, GTK_TYPE_WINDOW)
+
+enum {
+ PROP_0,
+ PROP_INVERTORDER,
+ PROP_SHOWWEEKS,
+#ifdef HAVE_LIBECAL
+ PROP_TIMEFORMAT,
+#endif
+ PROP_CURRENTTIMEP,
+ PROP_PREFSDIR
+};
+
+static time_t *calendar_window_get_current_time_p (CalendarWindow *calwin);
+static void calendar_window_set_current_time_p (CalendarWindow *calwin,
+ time_t *current_time);
+static const char *calendar_window_get_prefs_dir (CalendarWindow *calwin);
+static void calendar_window_set_prefs_dir (CalendarWindow *calwin,
+ const char *prefs_dir);
+static GtkWidget * create_hig_frame (CalendarWindow *calwin,
+ const char *title,
+ const char *button_label,
+ const char *key,
+ GCallback callback);
+
+#ifdef HAVE_LIBECAL
+
+static void
+clock_launch_calendar_tasks_app (CalendarWindow *calwin,
+ const char *key_program,
+ const char *argument)
+{
+ char **argv;
+ int argc;
+ char *key;
+ char *program;
+ gboolean terminal;
+ char *command_line;
+ GdkScreen *screen;
+ GError *error;
+ gboolean result;
+
+ key = g_strdup_printf ("%s%s", key_program, "/exec");
+ program = mateconf_client_get_string (calwin->priv->mateconfclient,
+ key, NULL);
+ g_free (key);
+
+ key = g_strdup_printf ("%s%s", key_program, "/needs_term");
+ terminal = mateconf_client_get_bool (calwin->priv->mateconfclient,
+ key, NULL);
+ g_free (key);
+
+ if (program == NULL) {
+ g_printerr ("Cannot launch calendar/tasks application: key not set\n");
+ return;
+ }
+
+ command_line = g_find_program_in_path (program);
+ if (command_line == NULL) {
+ g_printerr ("Cannot launch calendar/tasks application: %s in path\n", program);
+ g_free (program);
+ return;
+ }
+ g_free (command_line);
+
+ if (argument) {
+ argc = 2;
+ argv = g_new0 (char *, 3);
+ argv[1] = g_strdup (argument);
+ } else {
+ argc = 1;
+ argv = g_new0 (char *, 2);
+ }
+ argv[0] = program; /* no strdup, and it will get freed for free */
+
+ screen = gtk_widget_get_screen (calwin->priv->calendar);
+ error = NULL;
+
+ if (terminal)
+ mate_desktop_prepend_terminal_to_vector (&argc, &argv);
+
+ result = gdk_spawn_on_screen (screen,
+ NULL, /* working directory */
+ argv,
+ NULL, /* envp */
+ G_SPAWN_SEARCH_PATH,
+ NULL, /* child setup func */
+ NULL, /* user data */
+ NULL, /* child pid */
+ &error);
+
+ if (!result) {
+ g_printerr ("Cannot launch calendar/tasks application: %s\n",
+ error->message);
+ g_error_free (error);
+ }
+
+ g_strfreev (argv);
+}
+
+static void
+clock_launch_calendar_app (CalendarWindow *calwin,
+ const char *argument)
+{
+ clock_launch_calendar_tasks_app (calwin, KEY_CALENDAR_APP, argument);
+}
+
+static void
+clock_launch_tasks_app (CalendarWindow *calwin,
+ const char *argument)
+{
+ clock_launch_calendar_tasks_app (calwin, KEY_TASKS_APP, argument);
+}
+
+static void
+update_frame_visibility (GtkWidget *frame,
+ GtkTreeModel *model)
+{
+ GtkTreeIter iter;
+ gboolean model_empty;
+
+ if (!frame)
+ return;
+
+ model_empty = !gtk_tree_model_get_iter_first (model, &iter);
+
+ if (model_empty)
+ gtk_widget_hide (frame);
+ else
+ gtk_widget_show (frame);
+}
+
+enum {
+ APPOINTMENT_COLUMN_UID,
+ APPOINTMENT_COLUMN_URI,
+ APPOINTMENT_COLUMN_SUMMARY,
+ APPOINTMENT_COLUMN_DESCRIPTION,
+ APPOINTMENT_COLUMN_START_TIME,
+ APPOINTMENT_COLUMN_START_TEXT,
+ APPOINTMENT_COLUMN_END_TIME,
+ APPOINTMENT_COLUMN_ALL_DAY,
+ APPOINTMENT_COLUMN_PIXBUF,
+ N_APPOINTMENT_COLUMNS
+};
+
+enum {
+ TASK_COLUMN_UID,
+ TASK_COLUMN_SUMMARY,
+ TASK_COLUMN_DESCRIPTION,
+ TASK_COLUMN_START_TIME,
+ TASK_COLUMN_DUE_TIME,
+ TASK_COLUMN_PERCENT_COMPLETE,
+ TASK_COLUMN_PERCENT_COMPLETE_TEXT,
+ TASK_COLUMN_COMPLETED,
+ TASK_COLUMN_COMPLETED_TIME,
+ TASK_COLUMN_OVERDUE_ATTR,
+ TASK_COLUMN_COLOR,
+ TASK_COLUMN_PRIORITY,
+ N_TASK_COLUMNS
+};
+
+static char *
+format_time (ClockFormat format,
+ time_t t,
+ guint year,
+ guint month,
+ guint day)
+{
+ struct tm *tm;
+ char *time_format;
+ char result [256] = { 0, };
+
+ if (!t)
+ return NULL;
+
+ tm = localtime (&t);
+ if (!tm)
+ return NULL;
+
+ if (year == (tm->tm_year + 1900) &&
+ month == tm->tm_mon &&
+ day == tm->tm_mday) {
+ if (format == CLOCK_FORMAT_12)
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format
+ * (eg, like in the US: 8:10 am). The %p expands to
+ * am/pm. */
+ time_format = g_locale_from_utf8 (_("%l:%M %p"), -1, NULL, NULL, NULL);
+ else
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format
+ * (eg, like in France: 20:10). */
+ time_format = g_locale_from_utf8 (_("%H:%M"), -1, NULL, NULL, NULL);
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the start date of an appointment, in
+ * the most abbreviated way possible. */
+ time_format = g_locale_from_utf8 (_("%b %d"), -1, NULL, NULL, NULL);
+ }
+
+ strftime (result, sizeof (result), time_format, tm);
+ g_free (time_format);
+
+ return g_locale_to_utf8 (result, -1, NULL, NULL, NULL);
+}
+
+static void
+handle_tasks_changed (CalendarWindow *calwin)
+{
+ GSList *events, *l;
+
+ gtk_list_store_clear (calwin->priv->tasks_model);
+
+ events = calendar_client_get_events (calwin->priv->client,
+ CALENDAR_EVENT_TASK);
+ for (l = events; l; l = l->next) {
+ CalendarTask *task = l->data;
+ GtkTreeIter iter;
+ char *percent_complete_text;
+
+ g_assert (CALENDAR_EVENT (task)->type == CALENDAR_EVENT_TASK);
+
+ /* FIXME: should this format be locale specific ? */
+ percent_complete_text = g_strdup_printf ("%d%%", task->percent_complete);
+
+ gtk_list_store_append (calwin->priv->tasks_model, &iter);
+ gtk_list_store_set (calwin->priv->tasks_model, &iter,
+ TASK_COLUMN_UID, task->uid,
+ TASK_COLUMN_SUMMARY, task->summary,
+ TASK_COLUMN_DESCRIPTION, task->description,
+ TASK_COLUMN_START_TIME, (gint64)task->start_time,
+ TASK_COLUMN_DUE_TIME, (gint64)task->due_time,
+ TASK_COLUMN_PERCENT_COMPLETE, task->percent_complete,
+ TASK_COLUMN_PERCENT_COMPLETE_TEXT, percent_complete_text,
+ TASK_COLUMN_COMPLETED, task->percent_complete == 100,
+ TASK_COLUMN_COMPLETED_TIME, (gint64)task->completed_time,
+ TASK_COLUMN_COLOR, task->color_string,
+ TASK_COLUMN_PRIORITY, task->priority,
+ -1);
+
+ g_free (percent_complete_text);
+ calendar_event_free (CALENDAR_EVENT (task));
+ }
+ g_slist_free (events);
+
+ update_frame_visibility (calwin->priv->task_list,
+ GTK_TREE_MODEL (calwin->priv->tasks_filter));
+}
+
+static void
+handle_task_completed_toggled (CalendarWindow *calwin,
+ const char *path_str,
+ GtkCellRendererToggle *cell)
+{
+ GtkTreePath *child_path, *path;
+ GtkTreeIter iter;
+ char *uid;
+ gboolean task_completed;
+ guint percent_complete;
+
+ path = gtk_tree_path_new_from_string (path_str);
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter, path);
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, child_path);
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter,
+ TASK_COLUMN_UID, &uid,
+ TASK_COLUMN_COMPLETED, &task_completed,
+ TASK_COLUMN_PERCENT_COMPLETE, &percent_complete,
+ -1);
+
+ task_completed = !task_completed;
+ percent_complete = task_completed ? 100 : 0;
+
+ calendar_client_set_task_completed (calwin->priv->client,
+ uid,
+ task_completed,
+ percent_complete);
+
+ g_free (uid);
+ gtk_tree_path_free (path);
+ gtk_tree_path_free (child_path);
+}
+
+static void
+handle_task_percent_complete_edited (CalendarWindow *calwin,
+ const char *path_str,
+ const char *text,
+ GtkCellRendererText *cell)
+{
+ GtkTreePath *child_path, *path;
+ GtkTreeIter iter;
+ char *uid;
+ int percent_complete;
+ char *error = NULL, *text_copy;
+
+ path = gtk_tree_path_new_from_string (path_str);
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter, path);
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, child_path);
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, TASK_COLUMN_UID, &uid,
+ -1);
+
+ text_copy = g_strdup (text);
+ text_copy = g_strdelimit (text_copy, "%", ' ');
+ text_copy = g_strstrip (text_copy);
+ percent_complete = (int) g_strtod (text_copy, &error);
+ if (!error || !error [0]) {
+ gboolean task_completed;
+
+ percent_complete = CLAMP (percent_complete, 0, 100);
+ task_completed = (percent_complete == 100);
+
+ calendar_client_set_task_completed (calwin->priv->client,
+ uid,
+ task_completed,
+ percent_complete);
+ }
+
+ g_free (uid);
+ g_free (text_copy);
+ gtk_tree_path_free (path);
+ gtk_tree_path_free (child_path);
+}
+
+static gboolean
+is_appointment (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gchar *uri;
+
+ gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1);
+ if (uri)
+ return (g_ascii_strcasecmp (uri, "file") == 0 ||
+ g_ascii_strcasecmp (uri, "webcal") == 0 ||
+ g_ascii_strcasecmp (uri, "caldav") == 0 ||
+ g_ascii_strcasecmp (uri, "exchange") == 0 ||
+ g_ascii_strcasecmp (uri, "groupwise") == 0 ||
+ g_ascii_strcasecmp (uri, "google") == 0);
+ return FALSE;
+}
+
+static gboolean
+is_birthday (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gchar *uri;
+
+ gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1);
+ if (uri)
+ return (g_ascii_strcasecmp (uri, "contacts") == 0);
+ return FALSE;
+}
+
+static gboolean
+is_weather (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gchar *uri;
+
+ gtk_tree_model_get (model, iter, APPOINTMENT_COLUMN_URI, &uri, -1);
+ if (uri)
+ return (g_ascii_strcasecmp (uri, "weather") == 0);
+ return FALSE;
+}
+
+static gboolean
+filter_out_tasks (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ CalendarWindow *calwin)
+{
+ gint64 start_time64;
+ gint64 completed_time64;
+ time_t start_time;
+ time_t completed_time;
+ time_t one_day_ago;
+ gboolean visible;
+
+ gtk_tree_model_get (model, iter,
+ TASK_COLUMN_START_TIME, &start_time64,
+ TASK_COLUMN_COMPLETED_TIME, &completed_time64,
+ -1);
+ start_time = start_time64;
+ completed_time = completed_time64;
+
+ one_day_ago = *(calwin->priv->current_time) - (24 * 60 * 60);
+
+ visible = !start_time || start_time <= *(calwin->priv->current_time);
+ if (visible)
+ visible = !completed_time || completed_time >= one_day_ago;
+
+ return visible;
+}
+
+static void
+modify_task_text_attributes (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ GValue *value,
+ gint column,
+ CalendarWindow *calwin)
+{
+ gint64 due_time64;
+ time_t due_time;
+ PangoAttrList *attr_list;
+ PangoAttribute *attr;
+ GtkTreeIter child_iter;
+
+ gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
+ &child_iter,
+ iter);
+
+ if (column != TASK_COLUMN_OVERDUE_ATTR) {
+ memset (value, 0, sizeof (GValue));
+ gtk_tree_model_get_value (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &child_iter, column, value);
+
+ return;
+ }
+
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &child_iter, TASK_COLUMN_DUE_TIME, &due_time64,
+ -1);
+ due_time = due_time64;
+
+ if (due_time && due_time > *(calwin->priv->current_time))
+ return;
+
+ attr_list = pango_attr_list_new ();
+
+ attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
+ attr->start_index = 0;
+ attr->end_index = G_MAXINT;
+ pango_attr_list_insert (attr_list, attr);
+
+ g_value_take_boxed (value, attr_list);
+}
+
+static gboolean
+task_activated_cb (GtkTreeView *view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ CalendarWindow *calwin)
+{
+ GtkTreeIter iter;
+ GtkTreePath *child_path;
+ char *uid;
+ char *argument;
+
+ child_path = gtk_tree_model_filter_convert_path_to_child_path (calwin->priv->tasks_filter,
+ path);
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, child_path);
+ gtk_tree_model_get (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ &iter, TASK_COLUMN_UID, &uid, -1);
+
+ argument = g_strdup_printf ("task:%s", uid);
+
+ clock_launch_tasks_app (calwin, argument);
+
+ g_free (argument);
+ g_free (uid);
+ gtk_tree_path_free (child_path);
+
+ return TRUE;
+}
+
+static void
+set_renderer_pixbuf_color_by_column (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gint column_number)
+{
+ char *color_string;
+ GdkPixbuf *pixbuf = NULL;
+ GdkColor color;
+
+ gtk_tree_model_get (model, iter, column_number, &color_string, -1);
+
+ if (color_string && gdk_color_parse (color_string, &color)) {
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 16, 16);
+ /* GdkColor has 16 bits per color, gdk_pixbuf only uses 8 bits
+ * per color. So just drop the least significant parts */
+ gdk_pixbuf_fill (pixbuf,
+ (color.red & 0xff00) << 16 |
+ (color.green & 0xff00) << 8 |
+ (color.blue & 0xff00));
+
+ g_object_set (renderer, "visible", pixbuf != NULL, "pixbuf", pixbuf, NULL);
+
+ if (pixbuf)
+ g_object_unref (pixbuf);
+
+ g_free (color_string);
+ }
+}
+
+static void
+set_renderer_pixbuf_pixmap (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ const char *iconpath)
+{
+ GdkPixbuf *pixbuf = NULL;
+ GError *error = NULL;
+
+ if (!g_file_test (iconpath, G_FILE_TEST_IS_REGULAR)) {
+ g_printerr ("File '%s' does not exist.\n", iconpath);
+ return;
+ }
+
+ pixbuf = gdk_pixbuf_new_from_file (iconpath, &error);
+ if (error) {
+ g_printerr ("Cannot load '%s': %s\n",
+ iconpath, error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_object_set (renderer,
+ "visible", pixbuf != NULL,
+ "pixbuf", pixbuf,
+ NULL);
+
+ if (pixbuf)
+ g_object_unref (pixbuf);
+}
+
+static void
+set_renderer_pixbuf_pixmap_for_bday (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gint data_column)
+{
+ const gchar *path = NULL;
+ gchar *type = NULL;
+
+ gtk_tree_model_get (model, iter, data_column, &type, -1);
+ if (!type)
+ return;
+
+ /* type should be in format like this:
+ * pas-id-4121A93E00000001-anniversary
+ * pas-id-41112AF900000003-birthday
+ * ...
+ */
+ if (g_strrstr (type, "birthday") != NULL)
+ path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_birthday_16.png";
+ else if (g_strrstr (type, "anniversary") != NULL)
+ path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_gifts_16.png";
+ else
+ path = CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_miscellaneous_16.png";
+
+ g_free (type);
+
+ set_renderer_pixbuf_pixmap (renderer, model, iter, path);
+}
+
+static void
+set_renderer_pixbuf_pixmap_for_weather (GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter)
+{
+ set_renderer_pixbuf_pixmap (renderer, model, iter,
+ CLOCK_EDS_ICONDIR G_DIR_SEPARATOR_S "category_holiday_16.png");
+}
+
+static void
+task_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ set_renderer_pixbuf_color_by_column (renderer,
+ model,
+ iter,
+ TASK_COLUMN_COLOR);
+}
+
+static void
+appointment_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ set_renderer_pixbuf_color_by_column (renderer,
+ model,
+ iter,
+ APPOINTMENT_COLUMN_PIXBUF);
+}
+static void
+birthday_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+
+ /* APPOINTMENT_COLUMN_UID contains data to select between
+ * anniversary or birthday
+ */
+ set_renderer_pixbuf_pixmap_for_bday (renderer,
+ model,
+ iter,
+ APPOINTMENT_COLUMN_UID);
+}
+static void
+weather_pixbuf_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+
+ set_renderer_pixbuf_pixmap_for_weather (renderer,
+ model,
+ iter);
+}
+
+static int
+compare_tasks (GtkTreeModel *model,
+ GtkTreeIter *a,
+ GtkTreeIter *b,
+ gpointer user_data)
+{
+ gboolean done_a, done_b;
+ int priority_a, priority_b;
+
+ gtk_tree_model_get (model, a,
+ TASK_COLUMN_COMPLETED, &done_a,
+ TASK_COLUMN_PRIORITY, &priority_a,
+ -1);
+ gtk_tree_model_get (model, b,
+ TASK_COLUMN_COMPLETED, &done_b,
+ TASK_COLUMN_PRIORITY, &priority_b,
+ -1);
+
+ /* Always sort completed tasks last */
+ if (done_a != done_b)
+ return done_a ? -1 : 1;
+
+ /* We change undefined priorities so they appear as "Normal" */
+ if (priority_a <= 0)
+ priority_a = 5;
+ if (priority_b <= 0)
+ priority_b = 5;
+
+ /* We'll just use the ordering of the priority values. */
+ if (priority_a < priority_b)
+ return -1;
+ else if (priority_a > priority_b)
+ return 1;
+ else {
+ gint64 due_time_a64, due_time_b64;
+ time_t due_time_a, due_time_b;
+
+ gtk_tree_model_get (model, a,
+ TASK_COLUMN_DUE_TIME, &due_time_a64, -1);
+ gtk_tree_model_get (model, b,
+ TASK_COLUMN_DUE_TIME, &due_time_b64, -1);
+ due_time_a = due_time_a64;
+ due_time_b = due_time_b64;
+
+ if (due_time_a < due_time_b)
+ return -1;
+ else if (due_time_a > due_time_b)
+ return 1;
+ else {
+ char *summary_a, *summary_b;
+ int res;
+
+ gtk_tree_model_get (model, a, TASK_COLUMN_SUMMARY, &summary_a, -1);
+ gtk_tree_model_get (model, b, TASK_COLUMN_SUMMARY, &summary_b, -1);
+
+ res = g_utf8_collate (summary_a ? summary_a: "",
+ summary_b ? summary_b: "");
+
+ g_free (summary_a);
+ g_free (summary_b);
+
+ return res;
+ }
+ }
+}
+
+static void
+calendar_window_tree_selection_changed (GtkTreeSelection *selection,
+ CalendarWindow *calwin)
+{
+ if (selection == calwin->priv->previous_selection)
+ return;
+
+ if (calwin->priv->previous_selection) {
+ g_signal_handlers_block_by_func (calwin->priv->previous_selection,
+ calendar_window_tree_selection_changed,
+ calwin);
+ gtk_tree_selection_unselect_all (calwin->priv->previous_selection);
+ g_signal_handlers_unblock_by_func (calwin->priv->previous_selection,
+ calendar_window_tree_selection_changed,
+ calwin);
+ }
+
+ calwin->priv->previous_selection = selection;
+}
+
+static void
+edit_tasks (CalendarWindow *calwin)
+{
+ clock_launch_tasks_app (calwin, NULL);
+}
+
+static GtkWidget *
+create_task_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ GtkWidget *list;
+ GtkWidget *view;
+ GtkWidget *scrolled;
+ GtkCellRenderer *cell;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+ list = create_hig_frame (calwin,
+ _("Tasks"), _("Edit"),
+ KEY_TASKS_EXPANDED,
+ G_CALLBACK (edit_tasks));
+
+ *scrolled_window = scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ /* we show the widget before adding to the container, since adding to
+ * the container changes the visibility depending on the state of the
+ * expander */
+ gtk_widget_show (scrolled);
+ gtk_container_add (GTK_CONTAINER (list), scrolled);
+
+ g_assert (calwin->priv->tasks_model != NULL);
+
+ *tree_view = view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (calwin->priv->tasks_filter));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
+
+ g_signal_connect (view, "row-activated",
+ G_CALLBACK (task_activated_cb), calwin);
+
+ /* Source color */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_set_cell_data_func (column, cell,
+ (GtkTreeCellDataFunc) task_pixbuf_cell_data_func,
+ NULL, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ /* Completed toggle */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_toggle_new ();
+ g_object_set (cell,
+ "activatable", TRUE,
+ NULL);
+ g_signal_connect_swapped (cell, "toggled",
+ G_CALLBACK (handle_task_completed_toggled),
+ calwin);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "active", TASK_COLUMN_COMPLETED);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ /* Percent complete */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell,
+ "editable", TRUE,
+ NULL);
+ g_signal_connect_swapped (cell, "edited",
+ G_CALLBACK (handle_task_percent_complete_edited),
+ calwin);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text", TASK_COLUMN_PERCENT_COMPLETE_TEXT);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ /* Summary */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_set_attributes (column, cell,
+ "text", TASK_COLUMN_SUMMARY,
+ "strikethrough", TASK_COLUMN_COMPLETED,
+ "attributes", TASK_COLUMN_OVERDUE_ATTR,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (calendar_window_tree_selection_changed),
+ calwin);
+
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+
+ gtk_widget_show (view);
+
+ return list;
+}
+
+static void
+mark_day_on_calendar (CalendarClient *client,
+ guint day,
+ CalendarWindow *calwin)
+{
+ gtk_calendar_mark_day (GTK_CALENDAR (calwin->priv->calendar), day);
+}
+
+static void
+handle_appointments_changed (CalendarWindow *calwin)
+{
+ GSList *events, *l;
+ guint year, month, day;
+
+ if (calwin->priv->calendar) {
+ gtk_calendar_clear_marks (GTK_CALENDAR (calwin->priv->calendar));
+
+ calendar_client_foreach_appointment_day (calwin->priv->client,
+ (CalendarDayIter) mark_day_on_calendar,
+ calwin);
+ }
+
+ gtk_list_store_clear (calwin->priv->appointments_model);
+
+ calendar_client_get_date (calwin->priv->client, &year, &month, &day);
+
+ events = calendar_client_get_events (calwin->priv->client,
+ CALENDAR_EVENT_APPOINTMENT);
+ for (l = events; l; l = l->next) {
+ CalendarAppointment *appointment = l->data;
+ GtkTreeIter iter;
+ char *start_text;
+
+ g_assert (CALENDAR_EVENT (appointment)->type == CALENDAR_EVENT_APPOINTMENT);
+
+ if (appointment->is_all_day)
+ start_text = g_strdup (_("All Day"));
+ else
+ start_text = format_time (calwin->priv->time_format,
+ appointment->start_time,
+ year, month, day);
+
+
+ gtk_list_store_append (calwin->priv->appointments_model,
+ &iter);
+ gtk_list_store_set (calwin->priv->appointments_model, &iter,
+ APPOINTMENT_COLUMN_UID, appointment->uid,
+ APPOINTMENT_COLUMN_URI, appointment->uri,
+ APPOINTMENT_COLUMN_SUMMARY, appointment->summary,
+ APPOINTMENT_COLUMN_DESCRIPTION, appointment->description,
+ APPOINTMENT_COLUMN_START_TIME, (gint64)appointment->start_time,
+ APPOINTMENT_COLUMN_START_TEXT, start_text,
+ APPOINTMENT_COLUMN_END_TIME, (gint64)appointment->end_time,
+ APPOINTMENT_COLUMN_ALL_DAY, appointment->is_all_day,
+ APPOINTMENT_COLUMN_PIXBUF, appointment->color_string,
+ -1);
+
+ g_free (start_text);
+ calendar_event_free (CALENDAR_EVENT (appointment));
+ }
+ g_slist_free (events);
+
+ update_frame_visibility (calwin->priv->appointment_list,
+ GTK_TREE_MODEL (calwin->priv->appointments_filter));
+ update_frame_visibility (calwin->priv->birthday_list,
+ GTK_TREE_MODEL (calwin->priv->birthdays_filter));
+ update_frame_visibility (calwin->priv->weather_list,
+ GTK_TREE_MODEL (calwin->priv->weather_filter));
+}
+
+static GtkWidget *
+create_list_for_appointment_model (CalendarWindow *calwin,
+ const char *label,
+ GtkTreeModelFilter **filter,
+ GtkTreeModelFilterVisibleFunc is_for_filter,
+ GtkTreeCellDataFunc set_pixbuf_cell,
+ gboolean show_start,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window,
+ const char *key,
+ GCallback callback)
+{
+ GtkWidget *list;
+ GtkWidget *view;
+ GtkWidget *scrolled;
+ GtkCellRenderer *cell;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+
+ list = create_hig_frame (calwin, label, _("Edit"), key, callback);
+
+ *scrolled_window = scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_SHADOW_IN);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ /* we show the widget before adding to the container, since adding to
+ * the container changes the visibility depending on the state of the
+ * expander */
+ gtk_widget_show (scrolled);
+ gtk_container_add (GTK_CONTAINER (list), scrolled);
+
+ g_assert (calwin->priv->appointments_model != NULL);
+
+ if (!*filter) {
+ *filter =
+ GTK_TREE_MODEL_FILTER (
+ gtk_tree_model_filter_new (GTK_TREE_MODEL (calwin->priv->appointments_model),
+ NULL));
+ gtk_tree_model_filter_set_visible_func (
+ *filter,
+ (GtkTreeModelFilterVisibleFunc) is_for_filter,
+ calwin,
+ NULL);
+ }
+
+ *tree_view = view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (*filter));
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (view), FALSE);
+
+ /* Icon */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_set_cell_data_func (column, cell,
+ (GtkTreeCellDataFunc) set_pixbuf_cell,
+ NULL, NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ if (show_start) {
+ /* Start time */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text", APPOINTMENT_COLUMN_START_TEXT);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+ }
+
+ /* Summary */
+ column = gtk_tree_view_column_new ();
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text", APPOINTMENT_COLUMN_SUMMARY);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), column);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (calendar_window_tree_selection_changed),
+ calwin);
+
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+
+ gtk_widget_show (view);
+
+ return list;
+}
+
+static void
+edit_appointments (CalendarWindow *calwin)
+{
+ clock_launch_calendar_app (calwin, NULL);
+}
+
+static GtkWidget *
+create_appointment_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ return create_list_for_appointment_model (
+ calwin,
+ _("Appointments"),
+ &calwin->priv->appointments_filter,
+ is_appointment,
+ appointment_pixbuf_cell_data_func,
+ TRUE,
+ tree_view,
+ scrolled_window,
+ KEY_APPOINTMENTS_EXPANDED,
+ G_CALLBACK (edit_appointments));
+}
+
+static void
+edit_birthdays (CalendarWindow *calwin)
+{
+ clock_launch_calendar_app (calwin, NULL);
+}
+
+static GtkWidget *
+create_birthday_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ /* FIXME: Figure out how to get rid of useless localized message in front of the summary */
+ return create_list_for_appointment_model (
+ calwin,
+ _("Birthdays and Anniversaries"),
+ &calwin->priv->birthdays_filter,
+ is_birthday,
+ birthday_pixbuf_cell_data_func,
+ FALSE,
+ tree_view,
+ scrolled_window,
+ KEY_BIRTHDAYS_EXPANDED,
+ G_CALLBACK (edit_birthdays));
+}
+
+static void
+edit_weather (CalendarWindow *calwin)
+{
+ clock_launch_calendar_app (calwin, NULL);
+}
+
+
+static GtkWidget *
+create_weather_list (CalendarWindow *calwin,
+ GtkWidget **tree_view,
+ GtkWidget **scrolled_window)
+{
+ return create_list_for_appointment_model (
+ calwin,
+ _("Weather Information"),
+ &calwin->priv->weather_filter,
+ is_weather,
+ weather_pixbuf_cell_data_func,
+ FALSE,
+ tree_view,
+ scrolled_window,
+ KEY_WEATHER_EXPANDED,
+ G_CALLBACK (edit_weather));
+}
+
+static void
+calendar_window_create_tasks_model (CalendarWindow *calwin)
+{
+ GType column_types [N_TASK_COLUMNS] = {
+ G_TYPE_STRING, /* uid */
+ G_TYPE_STRING, /* summary */
+ G_TYPE_STRING, /* description */
+ G_TYPE_INT64, /* start time */
+ G_TYPE_INT64, /* due time */
+ G_TYPE_UINT, /* percent complete */
+ G_TYPE_STRING, /* percent complete text */
+ G_TYPE_BOOLEAN, /* completed */
+ G_TYPE_INT64, /* completed time */
+ PANGO_TYPE_ATTR_LIST, /* summary text attributes */
+ G_TYPE_STRING, /* color */
+ G_TYPE_INT /* priority */
+ };
+
+ calwin->priv->tasks_model = gtk_list_store_newv (N_TASK_COLUMNS,
+ column_types);
+
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (calwin->priv->tasks_model),
+ TASK_COLUMN_PRIORITY,
+ compare_tasks,
+ NULL, NULL);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (calwin->priv->tasks_model),
+ TASK_COLUMN_PRIORITY,
+ GTK_SORT_ASCENDING);
+
+ calwin->priv->tasks_filter = GTK_TREE_MODEL_FILTER (
+ gtk_tree_model_filter_new (GTK_TREE_MODEL (calwin->priv->tasks_model),
+ NULL));
+ gtk_tree_model_filter_set_visible_func (
+ calwin->priv->tasks_filter,
+ (GtkTreeModelFilterVisibleFunc) filter_out_tasks,
+ calwin,
+ NULL);
+ gtk_tree_model_filter_set_modify_func (
+ calwin->priv->tasks_filter,
+ N_TASK_COLUMNS,
+ column_types,
+ (GtkTreeModelFilterModifyFunc) modify_task_text_attributes,
+ calwin,
+ NULL);
+}
+
+static void
+calendar_window_create_appointments_model (CalendarWindow *calwin)
+{
+ calwin->priv->appointments_model =
+ gtk_list_store_new (N_APPOINTMENT_COLUMNS,
+ G_TYPE_STRING, /* uid */
+ G_TYPE_STRING, /* uri */
+ G_TYPE_STRING, /* summary */
+ G_TYPE_STRING, /* description */
+ G_TYPE_INT64, /* start time */
+ G_TYPE_STRING, /* start time text */
+ G_TYPE_INT64, /* end time */
+ G_TYPE_BOOLEAN, /* all day */
+ G_TYPE_STRING); /* color */
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (calwin->priv->appointments_model),
+ APPOINTMENT_COLUMN_START_TIME,
+ GTK_SORT_ASCENDING);
+}
+
+static void
+calendar_day_activated (GtkCalendar *calendar,
+ CalendarWindow *calwin)
+{
+ unsigned int day;
+ unsigned int month;
+ unsigned int year;
+ time_t date;
+ struct tm utc_date_tm;
+ struct tm local_date_tm = { 0, };
+ char *argument;
+
+ gtk_calendar_get_date (calendar, &year, &month, &day);
+
+ local_date_tm.tm_mday = (int) day;
+ local_date_tm.tm_mon = (int) month;
+ local_date_tm.tm_year = (int) year - 1900;
+ local_date_tm.tm_isdst = -1;
+
+ /* convert the local date picked in the calendar to broken-down UTC */
+ date = mktime (&local_date_tm);
+ gmtime_r (&date, &utc_date_tm);
+
+ /* FIXME: once bug 409200 is fixed, we'll have to make this hh:mm:ss
+ * instead of hhmmss */
+ argument = g_strdup_printf ("calendar:///?startdate="
+ "%.4d%.2d%.2dT%.2d%.2d%.2dZ",
+ utc_date_tm.tm_year + 1900,
+ utc_date_tm.tm_mon + 1,
+ utc_date_tm.tm_mday,
+ utc_date_tm.tm_hour,
+ utc_date_tm.tm_min,
+ 0);
+
+ clock_launch_calendar_app (calwin, argument);
+
+ g_free (argument);
+}
+
+static void
+calendar_day_selected (GtkCalendar *calendar,
+ CalendarWindow *calwin)
+{
+ guint day;
+
+ gtk_calendar_get_date (calendar, NULL, NULL, &day);
+
+ calendar_client_select_day (calwin->priv->client, day);
+
+ handle_appointments_changed (calwin);
+ handle_tasks_changed (calwin);
+}
+
+static void
+calendar_month_selected (GtkCalendar *calendar,
+ CalendarWindow *calwin)
+{
+ guint year, month;
+
+ gtk_calendar_get_date (calendar, &year, &month, NULL);
+
+ calendar_client_select_month (calwin->priv->client, month, year);
+
+ handle_appointments_changed (calwin);
+ handle_tasks_changed (calwin);
+}
+
+typedef struct
+{
+ GtkWidget *calendar;
+ GtkWidget *tree;
+} ConstraintData;
+
+static void
+constrain_list_size (GtkWidget *widget,
+ GtkRequisition *requisition,
+ ConstraintData *constraint)
+{
+ GtkRequisition req;
+ int screen_h;
+ int max_height;
+
+ /* constrain width to the calendar width */
+ gtk_widget_size_request (constraint->calendar, &req);
+ requisition->width = MIN (requisition->width, req.width);
+
+ screen_h = gdk_screen_get_height (gtk_widget_get_screen (widget));
+ /* constrain height to be the tree height up to a max */
+ max_height = (screen_h - req.height) / 3;
+ gtk_widget_size_request (constraint->tree, &req);
+
+ requisition->height = MIN (req.height, max_height);
+ requisition->height += 2 * gtk_widget_get_style (widget)->ythickness;
+}
+
+static void
+setup_list_size_constraint (GtkWidget *widget,
+ GtkWidget *calendar,
+ GtkWidget *tree)
+{
+ ConstraintData *constraint;
+
+ constraint = g_new0 (ConstraintData, 1);
+ constraint->calendar = calendar;
+ constraint->tree = tree;
+
+ g_signal_connect_data (widget, "size-request",
+ G_CALLBACK (constrain_list_size), constraint,
+ (GClosureNotify) g_free, 0);
+}
+
+static void
+expander_activated (GtkExpander *expander,
+ CalendarWindow *calwin)
+{
+ const char *key;
+
+ key = (const gchar*)g_object_get_data (G_OBJECT (expander), "mateconf-key");
+
+ if (mateconf_client_key_is_writable (calwin->priv->mateconfclient,
+ key, NULL)) {
+ mateconf_client_set_bool (calwin->priv->mateconfclient, key,
+ gtk_expander_get_expanded (expander),
+ NULL);
+ }
+}
+
+static void
+expanded_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ GtkExpander *expander)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ gtk_expander_set_expanded (expander, value);
+}
+
+static void
+remove_listener (gpointer data)
+{
+ MateConfClient *client;
+
+ client = mateconf_client_get_default ();
+ mateconf_client_notify_remove (client, GPOINTER_TO_UINT (data));
+ g_object_unref (client);
+}
+
+static void
+connect_expander_with_mateconf (CalendarWindow *calwin,
+ GtkWidget *expander,
+ const char *relative_key)
+{
+ char *key;
+ gboolean expanded;
+ guint listener;
+
+ key = g_strdup_printf ("%s/%s",
+ calwin->priv->prefs_dir, relative_key);
+
+ g_object_set_data_full (G_OBJECT (expander), "mateconf-key", (gpointer)key, g_free);
+
+ expanded = mateconf_client_get_bool (calwin->priv->mateconfclient, key,
+ NULL);
+ gtk_expander_set_expanded (GTK_EXPANDER (expander), expanded);
+
+ g_signal_connect_after (expander, "activate",
+ G_CALLBACK (expander_activated),
+ calwin);
+
+ listener = mateconf_client_notify_add (
+ calwin->priv->mateconfclient, key,
+ (MateConfClientNotifyFunc) expanded_changed,
+ expander, NULL, NULL);
+
+ g_object_set_data_full (G_OBJECT (expander), "listener-id",
+ GUINT_TO_POINTER (listener), remove_listener);
+}
+#endif /* HAVE_LIBECAL */
+
+static void
+calendar_window_pack_pim (CalendarWindow *calwin,
+ GtkWidget *vbox)
+{
+#ifdef HAVE_LIBECAL
+ GtkWidget *list;
+ GtkWidget *tree_view;
+ GtkWidget *scrolled_window;
+ guint year, month, day;
+
+ calendar_window_create_tasks_model (calwin);
+ calendar_window_create_appointments_model (calwin);
+
+ list = create_task_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->tasks_model));
+ calwin->priv->task_list = list;
+
+ list = create_birthday_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->birthdays_filter));
+ calwin->priv->birthday_list = list;
+
+ list = create_weather_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->weather_filter));
+ calwin->priv->weather_list = list;
+
+ list = create_appointment_list (calwin, &tree_view, &scrolled_window);
+ setup_list_size_constraint (scrolled_window,
+ calwin->priv->calendar, tree_view);
+ update_frame_visibility (list,
+ GTK_TREE_MODEL (calwin->priv->appointments_filter));
+ calwin->priv->appointment_list = list;
+
+ if (!calwin->priv->invert_order) {
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->task_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->appointment_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->birthday_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->weather_list,
+ TRUE, TRUE, 0);
+ } else {
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->weather_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->birthday_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->appointment_list,
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->task_list,
+ TRUE, TRUE, 0);
+ }
+
+ if (!calwin->priv->client) {
+ calwin->priv->client = calendar_client_new ();
+
+ g_signal_connect_swapped (calwin->priv->client,
+ "tasks-changed",
+ G_CALLBACK (handle_tasks_changed),
+ calwin);
+ g_signal_connect_swapped (calwin->priv->client,
+ "appointments-changed",
+ G_CALLBACK (handle_appointments_changed),
+ calwin);
+ }
+
+ gtk_calendar_get_date (GTK_CALENDAR (calwin->priv->calendar),
+ &year, &month, &day);
+
+ calendar_client_select_day (calwin->priv->client, day);
+ calendar_client_select_month (calwin->priv->client, month, year);
+
+ handle_tasks_changed (calwin);
+ handle_appointments_changed (calwin);
+
+ g_signal_connect (calwin->priv->calendar,
+ "day-selected-double-click",
+ G_CALLBACK (calendar_day_activated),
+ calwin);
+ g_signal_connect (calwin->priv->calendar,
+ "day-selected",
+ G_CALLBACK (calendar_day_selected),
+ calwin);
+ g_signal_connect (calwin->priv->calendar,
+ "month-changed",
+ G_CALLBACK (calendar_month_selected),
+ calwin);
+#endif /* HAVE_LIBECAL */
+}
+
+static GtkWidget *
+calendar_window_create_calendar (CalendarWindow *calwin)
+{
+ GtkWidget *calendar;
+ GtkCalendarDisplayOptions options;
+ struct tm *tm;
+
+ calendar = gtk_calendar_new ();
+ options = gtk_calendar_get_display_options (GTK_CALENDAR (calendar));
+ if (calwin->priv->show_weeks)
+ options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;
+ else
+ options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS);
+ gtk_calendar_set_display_options (GTK_CALENDAR (calendar), options);
+
+ tm = localtime (calwin->priv->current_time);
+
+ gtk_calendar_select_month (GTK_CALENDAR (calendar),
+ tm->tm_mon,
+ tm->tm_year + 1900);
+ gtk_calendar_select_day (GTK_CALENDAR (calendar), tm->tm_mday);
+
+ return calendar;
+}
+
+static void
+expand_collapse_child (GtkWidget *child,
+ gpointer data)
+{
+ gboolean expanded;
+
+ if (data == child || gtk_widget_is_ancestor (data, child))
+ return;
+
+ expanded = gtk_expander_get_expanded (GTK_EXPANDER (data));
+ g_object_set (child, "visible", expanded, NULL);
+}
+
+static void
+expand_collapse (GtkWidget *expander,
+ GParamSpec *pspec,
+ gpointer data)
+{
+ GtkWidget *box = data;
+
+ gtk_container_foreach (GTK_CONTAINER (box),
+ (GtkCallback)expand_collapse_child,
+ expander);
+}
+
+static void add_child (GtkContainer *container,
+ GtkWidget *child,
+ GtkExpander *expander)
+{
+ expand_collapse_child (child, expander);
+}
+
+static GtkWidget *
+create_hig_frame (CalendarWindow *calwin,
+ const char *title,
+ const char *button_label,
+ const char *key,
+ GCallback callback)
+{
+ GtkWidget *vbox;
+ GtkWidget *alignment;
+ GtkWidget *label;
+ GtkWidget *hbox;
+ GtkWidget *button;
+ char *bold_title;
+ char *text;
+ GtkWidget *expander;
+
+ vbox = gtk_vbox_new (FALSE, 6);
+
+ bold_title = g_strdup_printf ("<b>%s</b>", title);
+ expander = gtk_expander_new (bold_title);
+ g_free (bold_title);
+ gtk_expander_set_use_markup (GTK_EXPANDER (expander), TRUE);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), expander, FALSE, FALSE, 0);
+ gtk_widget_show_all (vbox);
+
+ g_signal_connect (expander, "notify::expanded",
+ G_CALLBACK (expand_collapse), hbox);
+ g_signal_connect (expander, "notify::expanded",
+ G_CALLBACK (expand_collapse), vbox);
+
+ /* FIXME: this doesn't really work, since "add" does not
+ * get emitted for e.g. gtk_box_pack_start
+ */
+ g_signal_connect (vbox, "add", G_CALLBACK (add_child), expander);
+ g_signal_connect (hbox, "add", G_CALLBACK (add_child), expander);
+
+ if (button_label) {
+ button = gtk_button_new ();
+ text = g_markup_printf_escaped ("<small>%s</small>", button_label);
+ label = gtk_label_new (text);
+ g_free (text);
+ gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+ gtk_container_add (GTK_CONTAINER (button), label);
+
+ alignment = gtk_alignment_new (1, 0, 0, 0);
+ gtk_container_add (GTK_CONTAINER (alignment), button);
+ gtk_widget_show_all (alignment);
+
+ gtk_container_add (GTK_CONTAINER (hbox), alignment);
+
+ g_signal_connect_swapped (button, "clicked", callback, calwin);
+ }
+
+#ifdef HAVE_LIBECAL
+ connect_expander_with_mateconf (calwin, expander, key);
+#endif
+
+ return vbox;
+}
+
+static void
+edit_locations (CalendarWindow *calwin)
+{
+ g_signal_emit (calwin, signals[EDIT_LOCATIONS], 0);
+}
+
+static void
+calendar_window_pack_locations (CalendarWindow *calwin, GtkWidget *vbox)
+{
+ calwin->priv->locations_list = create_hig_frame (calwin,
+ _("Locations"), _("Edit"),
+ KEY_LOCATIONS_EXPANDED,
+ G_CALLBACK (edit_locations));
+
+ /* we show the widget before adding to the container, since adding to
+ * the container changes the visibility depending on the state of the
+ * expander */
+ gtk_widget_show (calwin->priv->locations_list);
+ gtk_container_add (GTK_CONTAINER (vbox), calwin->priv->locations_list);
+
+ //gtk_box_pack_start (GTK_BOX (vbox), calwin->priv->locations_list, TRUE, FALSE, 0);
+}
+
+static void
+calendar_window_fill (CalendarWindow *calwin)
+{
+ GtkWidget *frame;
+ GtkWidget *vbox;
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
+ gtk_container_add (GTK_CONTAINER (calwin), frame);
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ calwin->priv->calendar = calendar_window_create_calendar (calwin);
+ gtk_widget_show (calwin->priv->calendar);
+
+ if (!calwin->priv->invert_order) {
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->calendar, TRUE, FALSE, 0);
+ calendar_window_pack_pim (calwin, vbox);
+ calendar_window_pack_locations (calwin, vbox);
+ } else {
+ calendar_window_pack_locations (calwin, vbox);
+ calendar_window_pack_pim (calwin, vbox);
+ gtk_box_pack_start (GTK_BOX (vbox),
+ calwin->priv->calendar, TRUE, FALSE, 0);
+ }
+}
+
+GtkWidget *
+calendar_window_get_locations_box (CalendarWindow *calwin)
+{
+ return calwin->priv->locations_list;
+}
+
+static GObject *
+calendar_window_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GObject *obj;
+ CalendarWindow *calwin;
+
+ obj = G_OBJECT_CLASS (calendar_window_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_properties);
+
+ calwin = CALENDAR_WINDOW (obj);
+
+ g_assert (calwin->priv->current_time != NULL);
+ g_assert (calwin->priv->prefs_dir != NULL);
+
+ calendar_window_fill (calwin);
+
+ return obj;
+}
+
+static void
+calendar_window_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarWindow *calwin;
+
+ g_return_if_fail (CALENDAR_IS_WINDOW (object));
+
+ calwin = CALENDAR_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_INVERTORDER:
+ g_value_set_boolean (value,
+ calendar_window_get_invert_order (calwin));
+ break;
+ case PROP_SHOWWEEKS:
+ g_value_set_boolean (value,
+ calendar_window_get_show_weeks (calwin));
+ break;
+#ifdef HAVE_LIBECAL
+ case PROP_TIMEFORMAT:
+ g_value_set_enum (value,
+ calendar_window_get_time_format (calwin));
+ break;
+#endif
+ case PROP_CURRENTTIMEP:
+ g_value_set_pointer (value,
+ calendar_window_get_current_time_p (calwin));
+ break;
+ case PROP_PREFSDIR:
+ g_value_set_string (value,
+ calendar_window_get_prefs_dir (calwin));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+calendar_window_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CalendarWindow *calwin;
+
+ g_return_if_fail (CALENDAR_IS_WINDOW (object));
+
+ calwin = CALENDAR_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_INVERTORDER:
+ calendar_window_set_invert_order (calwin,
+ g_value_get_boolean (value));
+ break;
+ case PROP_SHOWWEEKS:
+ calendar_window_set_show_weeks (calwin,
+ g_value_get_boolean (value));
+ break;
+#ifdef HAVE_LIBECAL
+ case PROP_TIMEFORMAT:
+ calendar_window_set_time_format (calwin,
+ g_value_get_enum (value));
+ break;
+#endif
+ case PROP_CURRENTTIMEP:
+ calendar_window_set_current_time_p (calwin,
+ g_value_get_pointer (value));
+ break;
+ case PROP_PREFSDIR:
+ calendar_window_set_prefs_dir (calwin,
+ g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+calendar_window_destroy (GtkObject *object)
+{
+#ifdef HAVE_LIBECAL
+ CalendarWindow *calwin;
+
+ calwin = CALENDAR_WINDOW (object);
+
+ if (calwin->priv->client)
+ g_object_unref (calwin->priv->client);
+ calwin->priv->client = NULL;
+
+ if (calwin->priv->appointments_model)
+ g_object_unref (calwin->priv->appointments_model);
+ calwin->priv->appointments_model = NULL;
+
+ if (calwin->priv->tasks_model)
+ g_object_unref (calwin->priv->tasks_model);
+ calwin->priv->tasks_model = NULL;
+
+ if (calwin->priv->appointments_filter)
+ g_object_unref (calwin->priv->appointments_filter);
+ calwin->priv->appointments_filter = NULL;
+
+ if (calwin->priv->birthdays_filter)
+ g_object_unref (calwin->priv->birthdays_filter);
+ calwin->priv->birthdays_filter = NULL;
+
+ if (calwin->priv->tasks_filter)
+ g_object_unref (calwin->priv->tasks_filter);
+ calwin->priv->tasks_filter = NULL;
+
+ if (calwin->priv->weather_filter)
+ g_object_unref (calwin->priv->weather_filter);
+ calwin->priv->weather_filter = NULL;
+
+ if (calwin->priv->mateconfclient)
+ g_object_unref (calwin->priv->mateconfclient);
+ calwin->priv->mateconfclient = NULL;
+#endif /* HAVE_LIBECAL */
+
+ GTK_OBJECT_CLASS (calendar_window_parent_class)->destroy (object);
+}
+
+static void
+calendar_window_class_init (CalendarWindowClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass);
+
+ gobject_class->constructor = calendar_window_constructor;
+ gobject_class->get_property = calendar_window_get_property;
+ gobject_class->set_property = calendar_window_set_property;
+
+ gtkobject_class->destroy = calendar_window_destroy;
+
+ g_type_class_add_private (klass, sizeof (CalendarWindowPrivate));
+
+ signals[EDIT_LOCATIONS] = g_signal_new ("edit-locations",
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (CalendarWindowClass, edit_locations),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_INVERTORDER,
+ g_param_spec_boolean ("invert-order",
+ "Invert Order",
+ "Invert order of the calendar and tree views",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_SHOWWEEKS,
+ g_param_spec_boolean ("show-weeks",
+ "Show Weeks",
+ "Show weeks in the calendar",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
+#ifdef HAVE_LIBECAL
+ g_object_class_install_property (
+ gobject_class,
+ PROP_TIMEFORMAT,
+ g_param_spec_enum ("time-format",
+ "Time Format",
+ "Time format used to display time",
+ CLOCK_TYPE_FORMAT,
+ clock_locale_format (),
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+#endif
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_CURRENTTIMEP,
+ g_param_spec_pointer ("current-time",
+ "Current Time",
+ "Pointer to a variable containing the current time",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property (
+ gobject_class,
+ PROP_PREFSDIR,
+ g_param_spec_string ("prefs-dir",
+ "Preferences Directory",
+ "Preferences directory in MateConf",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+}
+
+static void
+calendar_window_init (CalendarWindow *calwin)
+{
+ GtkWindow *window;
+
+ calwin->priv = CALENDAR_WINDOW_GET_PRIVATE (calwin);
+
+ window = GTK_WINDOW (calwin);
+ gtk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_DOCK);
+ gtk_window_set_decorated (window, FALSE);
+ gtk_window_set_resizable (window, FALSE);
+ gtk_window_stick (window);
+ gtk_window_set_title (window, _("Calendar"));
+ gtk_window_set_icon_name (window, CLOCK_ICON);
+
+#ifdef HAVE_LIBECAL
+ calwin->priv->previous_selection = NULL;
+ calwin->priv->mateconfclient = mateconf_client_get_default ();
+#endif
+}
+
+GtkWidget *
+calendar_window_new (time_t *static_current_time,
+ const char *prefs_dir,
+ gboolean invert_order)
+{
+ CalendarWindow *calwin;
+
+ calwin = g_object_new (CALENDAR_TYPE_WINDOW,
+ "type", GTK_WINDOW_TOPLEVEL,
+ "current-time", static_current_time,
+ "invert-order", invert_order,
+ "prefs-dir", prefs_dir,
+ NULL);
+
+ return GTK_WIDGET (calwin);
+}
+
+void
+calendar_window_refresh (CalendarWindow *calwin)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+#ifdef HAVE_LIBECAL
+ if (calwin->priv->appointments_filter && calwin->priv->appointment_list)
+ gtk_tree_model_filter_refilter (calwin->priv->appointments_filter);
+ if (calwin->priv->birthdays_filter && calwin->priv->birthday_list)
+ gtk_tree_model_filter_refilter (calwin->priv->birthdays_filter);
+ if (calwin->priv->tasks_filter && calwin->priv->task_list)
+ gtk_tree_model_filter_refilter (calwin->priv->tasks_filter);
+ if (calwin->priv->weather_filter && calwin->priv->weather_list)
+ gtk_tree_model_filter_refilter (calwin->priv->weather_filter);
+#endif
+}
+
+gboolean
+calendar_window_get_invert_order (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), FALSE);
+
+ return calwin->priv->invert_order;
+}
+
+void
+calendar_window_set_invert_order (CalendarWindow *calwin,
+ gboolean invert_order)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (invert_order == calwin->priv->invert_order)
+ return;
+
+ calwin->priv->invert_order = invert_order;
+ //FIXME: update the order of the content of the window
+
+ g_object_notify (G_OBJECT (calwin), "invert-order");
+}
+
+gboolean
+calendar_window_get_show_weeks (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), FALSE);
+
+ return calwin->priv->show_weeks;
+}
+
+void
+calendar_window_set_show_weeks (CalendarWindow *calwin,
+ gboolean show_weeks)
+{
+ GtkCalendarDisplayOptions options;
+
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (show_weeks == calwin->priv->show_weeks)
+ return;
+
+ calwin->priv->show_weeks = show_weeks;
+
+ if (calwin->priv->calendar) {
+ options = gtk_calendar_get_display_options (GTK_CALENDAR (calwin->priv->calendar));
+
+ if (show_weeks)
+ options |= GTK_CALENDAR_SHOW_WEEK_NUMBERS;
+ else
+ options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS);
+
+ gtk_calendar_set_display_options (GTK_CALENDAR (calwin->priv->calendar),
+ options);
+ }
+
+ g_object_notify (G_OBJECT (calwin), "show-weeks");
+}
+
+ClockFormat
+calendar_window_get_time_format (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin),
+ CLOCK_FORMAT_INVALID);
+
+#ifdef HAVE_LIBECAL
+ return calwin->priv->time_format;
+#else
+ return CLOCK_FORMAT_INVALID;
+#endif
+}
+
+void
+calendar_window_set_time_format (CalendarWindow *calwin,
+ ClockFormat time_format)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+#ifdef HAVE_LIBECAL
+ if (time_format != CLOCK_FORMAT_12 && time_format != CLOCK_FORMAT_24)
+ time_format = clock_locale_format ();
+
+ if (time_format == calwin->priv->time_format)
+ return;
+
+ calwin->priv->time_format = time_format;
+ /* Time to display for appointments has changed */
+ if (calwin->priv->appointments_model)
+ handle_appointments_changed (calwin);
+
+ g_object_notify (G_OBJECT (calwin), "time-format");
+#endif
+}
+
+static time_t *
+calendar_window_get_current_time_p (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), NULL);
+
+ return calwin->priv->current_time;
+}
+
+static void
+calendar_window_set_current_time_p (CalendarWindow *calwin,
+ time_t *current_time)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (current_time == calwin->priv->current_time)
+ return;
+
+ calwin->priv->current_time = current_time;
+
+ g_object_notify (G_OBJECT (calwin), "current-time");
+}
+
+static const char *
+calendar_window_get_prefs_dir (CalendarWindow *calwin)
+{
+ g_return_val_if_fail (CALENDAR_IS_WINDOW (calwin), NULL);
+
+ return calwin->priv->prefs_dir;
+}
+
+static void
+calendar_window_set_prefs_dir (CalendarWindow *calwin,
+ const char *prefs_dir)
+{
+ g_return_if_fail (CALENDAR_IS_WINDOW (calwin));
+
+ if (!calwin->priv->prefs_dir && (!prefs_dir || !prefs_dir [0]))
+ return;
+
+ if (calwin->priv->prefs_dir && prefs_dir && prefs_dir [0] &&
+ !strcmp (calwin->priv->prefs_dir, prefs_dir))
+ return;
+
+ if (calwin->priv->prefs_dir)
+ g_free (calwin->priv->prefs_dir);
+ calwin->priv->prefs_dir = NULL;
+
+ if (prefs_dir && prefs_dir [0])
+ calwin->priv->prefs_dir = g_strdup (prefs_dir);
+
+ g_object_notify (G_OBJECT (calwin), "prefs-dir");
+}
diff --git a/applets/clock/calendar-window.h b/applets/clock/calendar-window.h
new file mode 100644
index 00000000..0b0546c8
--- /dev/null
+++ b/applets/clock/calendar-window.h
@@ -0,0 +1,84 @@
+/*
+ * calendar-window.h: toplevel window containing a calendar and
+ * tasks/appointments
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#ifndef CALENDAR_WINDOW_H
+#define CALENDAR_WINDOW_H
+
+#include <gtk/gtk.h>
+#include "clock-utils.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CALENDAR_TYPE_WINDOW (calendar_window_get_type ())
+#define CALENDAR_WINDOW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CALENDAR_TYPE_WINDOW, CalendarWindow))
+#define CALENDAR_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CALENDAR_TYPE_WINDOW, CalendarWindowClass))
+#define CALENDAR_IS_WINDOW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CALENDAR_TYPE_WINDOW))
+#define CALENDAR_IS_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CALENDAR_TYPE_WINDOW))
+#define CALENDAR_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CALENDAR_TYPE_WINDOW, CalendarWindowClass))
+
+typedef struct _CalendarWindow CalendarWindow;
+typedef struct _CalendarWindowClass CalendarWindowClass;
+typedef struct _CalendarWindowPrivate CalendarWindowPrivate;
+
+struct _CalendarWindow {
+ GtkWindow parent_instance;
+
+ CalendarWindowPrivate *priv;
+};
+
+struct _CalendarWindowClass {
+ GtkWindowClass parent_class;
+
+ void (* edit_locations) (CalendarWindow *calwin);
+};
+
+GType calendar_window_get_type (void) G_GNUC_CONST;
+GtkWidget *calendar_window_new (time_t *static_current_time,
+ const char *prefs_dir,
+ gboolean invert_order);
+
+void calendar_window_refresh (CalendarWindow *calwin);
+
+GtkWidget *calendar_window_get_locations_box (CalendarWindow *calwin);
+
+gboolean calendar_window_get_invert_order (CalendarWindow *calwin);
+void calendar_window_set_invert_order (CalendarWindow *calwin,
+ gboolean invert_order);
+gboolean calendar_window_get_show_weeks (CalendarWindow *calwin);
+void calendar_window_set_show_weeks (CalendarWindow *calwin,
+ gboolean show_weeks);
+ClockFormat calendar_window_get_time_format (CalendarWindow *calwin);
+void calendar_window_set_time_format (CalendarWindow *calwin,
+ ClockFormat time_format);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CALENDAR_WINDOW_H */
diff --git a/applets/clock/clock-face.c b/applets/clock/clock-face.c
new file mode 100644
index 00000000..53f0e4f4
--- /dev/null
+++ b/applets/clock/clock-face.c
@@ -0,0 +1,462 @@
+/**
+ * clock.c
+ *
+ * A GTK+ widget that implements a clock face
+ *
+ * (c) 2007, Peter Teichman
+ * (c) 2005-2006, Davyd Madeley
+ *
+ * Authors:
+ * Davyd Madeley <[email protected]>
+ * Peter Teichman <[email protected]>
+ */
+
+#include <gtk/gtk.h>
+#include <math.h>
+#include <time.h>
+
+#include <librsvg/rsvg.h>
+
+#include "clock-face.h"
+#include "clock-location.h"
+
+static GHashTable *pixbuf_cache = NULL;
+
+#define CLOCK_FACE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), INTL_TYPE_CLOCK_FACE, ClockFacePrivate))
+
+G_DEFINE_TYPE (ClockFace, clock_face, GTK_TYPE_WIDGET)
+
+static void clock_face_finalize (GObject *);
+static gboolean clock_face_expose (GtkWidget *clock, GdkEventExpose *event);
+static void clock_face_size_request (GtkWidget *clock,
+ GtkRequisition *requisition);
+static void clock_face_size_allocate (GtkWidget *clock,
+ GtkAllocation *allocation);
+
+static void update_time_and_face (ClockFace *this,
+ gboolean force_face_loading);
+static void clock_face_load_face (ClockFace *this,
+ gint width, gint height);
+
+typedef struct _ClockFacePrivate ClockFacePrivate;
+
+typedef enum {
+ CLOCK_FACE_MORNING,
+ CLOCK_FACE_DAY,
+ CLOCK_FACE_EVENING,
+ CLOCK_FACE_NIGHT,
+ CLOCK_FACE_INVALID
+} ClockFaceTimeOfDay;
+
+struct _ClockFacePrivate
+{
+ struct tm time; /* the time on the clock face */
+ int minute_offset; /* the offset of the minutes hand */
+
+ ClockFaceSize size;
+ ClockFaceTimeOfDay timeofday;
+ ClockLocation *location;
+ GdkPixbuf *face_pixbuf;
+ GtkWidget *size_widget;
+};
+
+static void
+clock_face_class_init (ClockFaceClass *class)
+{
+ GObjectClass *obj_class;
+ GtkWidgetClass *widget_class;
+
+ obj_class = G_OBJECT_CLASS (class);
+ widget_class = GTK_WIDGET_CLASS (class);
+
+ /* GtkWidget signals */
+ widget_class->expose_event = clock_face_expose;
+ widget_class->size_request = clock_face_size_request;
+ widget_class->size_allocate = clock_face_size_allocate;
+
+ /* GObject signals */
+ obj_class->finalize = clock_face_finalize;
+
+ g_type_class_add_private (obj_class, sizeof (ClockFacePrivate));
+}
+
+static void
+clock_face_init (ClockFace *this)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ priv->size = CLOCK_FACE_SMALL;
+ priv->timeofday = CLOCK_FACE_INVALID;
+ priv->location = NULL;
+ priv->size_widget = NULL;
+
+ gtk_widget_set_has_window (GTK_WIDGET (this), FALSE);
+}
+
+static void
+draw (GtkWidget *this, cairo_t *cr)
+{
+ ClockFacePrivate *priv;
+ GtkAllocation allocation;
+ double x, y;
+ double radius;
+ int hours, minutes, seconds;
+
+ /* Hand lengths as a multiple of the clock radius */
+ double hour_length, min_length, sec_length;
+
+ priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ if (priv->size == CLOCK_FACE_LARGE) {
+ hour_length = 0.45;
+ min_length = 0.6;
+ sec_length = 0.65;
+ } else {
+ hour_length = 0.5;
+ min_length = 0.7;
+ sec_length = 0.8; /* not drawn currently */
+ }
+
+ gtk_widget_get_allocation (this, &allocation);
+
+ x = allocation.x + allocation.width / 2;
+ y = allocation.y + allocation.height / 2;
+ radius = MIN (allocation.width / 2,
+ allocation.height / 2) - 5;
+
+ cairo_save (cr);
+ cairo_translate (cr, allocation.x, allocation.y);
+
+ /* clock back */
+ if (priv->face_pixbuf) {
+ GdkWindow *window = gtk_widget_get_window (this);
+ gdk_draw_pixbuf (GDK_DRAWABLE (window),
+ NULL,
+ priv->face_pixbuf,
+ 0, 0,
+ allocation.x,
+ allocation.y,
+ allocation.width,
+ allocation.height,
+ GDK_RGB_DITHER_NONE, 0, 0);
+ }
+
+ cairo_restore (cr);
+
+ /* clock hands */
+ hours = priv->time.tm_hour;
+ minutes = priv->time.tm_min + priv->minute_offset;
+ seconds = priv->time.tm_sec;
+
+ cairo_set_line_width (cr, 1);
+
+ /* hour hand:
+ * the hour hand is rotated 30 degrees (pi/6 r) per hour +
+ * 1/2 a degree (pi/360 r) per minute
+ */
+ cairo_save (cr);
+ cairo_move_to (cr, x, y);
+ cairo_line_to (cr, x + radius * hour_length * sin (M_PI / 6 * hours +
+ M_PI / 360 * minutes),
+ y + radius * hour_length * -cos (M_PI / 6 * hours +
+ M_PI / 360 * minutes));
+ cairo_stroke (cr);
+ cairo_restore (cr);
+ /* minute hand:
+ * the minute hand is rotated 6 degrees (pi/30 r) per minute
+ */
+ cairo_move_to (cr, x, y);
+ cairo_line_to (cr, x + radius * min_length * sin (M_PI / 30 * minutes),
+ y + radius * min_length * -cos (M_PI / 30 * minutes));
+ cairo_stroke (cr);
+
+ /* seconds hand:
+ * operates identically to the minute hand
+ */
+ if (priv->size == CLOCK_FACE_LARGE) {
+ cairo_save (cr);
+ cairo_set_source_rgb (cr, 0.937, 0.161, 0.161); /* tango red */
+ cairo_move_to (cr, x, y);
+ cairo_line_to (cr, x + radius * sec_length * sin (M_PI / 30 * seconds),
+ y + radius * sec_length * -cos (M_PI / 30 * seconds));
+ cairo_stroke (cr);
+ cairo_restore (cr);
+ }
+}
+
+static gboolean
+clock_face_expose (GtkWidget *this, GdkEventExpose *event)
+{
+ cairo_t *cr;
+
+ /* get a cairo_t */
+ cr = gdk_cairo_create (gtk_widget_get_window (this));
+
+ cairo_rectangle (cr,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+ cairo_clip (cr);
+
+ draw (this, cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+static void
+clock_face_redraw_canvas (ClockFace *this)
+{
+ gtk_widget_queue_draw (GTK_WIDGET (this));
+}
+
+static void
+clock_face_size_request (GtkWidget *this,
+ GtkRequisition *requisition)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ if (priv->size_widget != NULL) {
+ GtkRequisition req;
+
+ /* Tie our size to the height of the size_widget */
+ gtk_widget_size_request (GTK_WIDGET (priv->size_widget), &req);
+
+ /* Pad out our height by a little bit - this improves
+ the balance */
+ requisition->width = req.height + req.height / 8;
+ requisition->height = req.height + req.height / 8;
+ } else if (priv->face_pixbuf != NULL) {
+ int w, h;
+
+ /* Use the size of the current pixbuf */
+ w = gdk_pixbuf_get_width (GDK_PIXBUF (priv->face_pixbuf));
+ h = gdk_pixbuf_get_height (GDK_PIXBUF (priv->face_pixbuf));
+
+ requisition->width = w;
+ requisition->height = h;
+ } else {
+ /* we don't know anything, so use known dimensions for the svg
+ * files */
+ if (priv->size == CLOCK_FACE_LARGE) {
+ requisition->width = 50;
+ requisition->height = 50;
+ } else {
+ requisition->width = 36;
+ requisition->height = 36;
+ }
+ }
+}
+
+static void
+clock_face_size_allocate (GtkWidget *this,
+ GtkAllocation *allocation)
+{
+ GtkAllocation this_allocation;
+ GtkAllocation old_allocation;
+
+ gtk_widget_get_allocation (this, &this_allocation);
+
+ old_allocation.width = this_allocation.width;
+ old_allocation.height = this_allocation.height;
+
+ if (GTK_WIDGET_CLASS (clock_face_parent_class)->size_allocate)
+ GTK_WIDGET_CLASS (clock_face_parent_class)->size_allocate (this, allocation);
+
+ if (old_allocation.width == allocation->width &&
+ old_allocation.height == allocation->height)
+ return;
+
+ /* Reload the face for the new size */
+ update_time_and_face (CLOCK_FACE (this), TRUE);
+}
+
+static void
+update_time_and_face (ClockFace *this,
+ gboolean force_face_loading)
+{
+ ClockFacePrivate *priv;
+ ClockFaceTimeOfDay timeofday;
+
+ priv = CLOCK_FACE_GET_PRIVATE (this);
+
+ /* update the time */
+ if (priv->location) {
+ clock_location_localtime (priv->location, &priv->time);
+ } else {
+ time_t timet;
+ time (&timet);
+ localtime_r (&timet, &priv->time);
+ }
+
+ /* FIXME this should be a mateconf setting
+ * Or we could use some code from clock-sun.c?
+ * currently we hardcode
+ * morning 7-9
+ * day 9-17
+ * evening 17-22
+ * night 22-7
+ */
+ if (priv->time.tm_hour < 7)
+ timeofday = CLOCK_FACE_NIGHT;
+ else if (priv->time.tm_hour < 9)
+ timeofday = CLOCK_FACE_MORNING;
+ else if (priv->time.tm_hour < 17)
+ timeofday = CLOCK_FACE_DAY;
+ else if (priv->time.tm_hour < 22)
+ timeofday = CLOCK_FACE_EVENING;
+ else
+ timeofday = CLOCK_FACE_NIGHT;
+
+ if (priv->timeofday != timeofday || force_face_loading) {
+ GtkAllocation allocation;
+ gint width, height;
+
+ priv->timeofday = timeofday;
+
+ gtk_widget_get_allocation (GTK_WIDGET (this), &allocation);
+
+ width = allocation.width;
+ height = allocation.height;
+
+ /* Only load the pixbuf if we have some space allocated.
+ * Note that 1x1 is not really some space... */
+ if (width > 1 && height > 1)
+ clock_face_load_face (this, width, height);
+ }
+}
+
+gboolean
+clock_face_refresh (ClockFace *this)
+{
+ update_time_and_face (this, FALSE);
+ clock_face_redraw_canvas (this);
+
+ return TRUE; /* keep running this event */
+}
+
+GtkWidget *
+clock_face_new (ClockFaceSize size)
+{
+ GObject *obj = g_object_new (INTL_TYPE_CLOCK_FACE, NULL);
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj);
+
+ priv->size = size;
+
+ return GTK_WIDGET (obj);
+}
+
+GtkWidget *
+clock_face_new_with_location (ClockFaceSize size,
+ ClockLocation *loc,
+ GtkWidget *size_widget)
+{
+ GObject *obj = g_object_new (INTL_TYPE_CLOCK_FACE, NULL);
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj);
+
+ priv->size = size;
+ priv->location = g_object_ref (loc);
+ priv->size_widget = g_object_ref (size_widget);
+
+ return GTK_WIDGET (obj);
+}
+
+static void
+clock_face_finalize (GObject *obj)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (obj);
+
+ if (priv->location) {
+ g_object_unref (priv->location);
+ priv->location = NULL;
+ }
+
+ if (priv->face_pixbuf) {
+ g_object_unref (priv->face_pixbuf);
+ priv->face_pixbuf = NULL;
+ }
+
+ if (priv->size_widget) {
+ g_object_unref (priv->size_widget);
+ priv->size_widget = NULL;
+ }
+
+ G_OBJECT_CLASS (clock_face_parent_class)->finalize (obj);
+
+ if (pixbuf_cache && g_hash_table_size (pixbuf_cache) == 0) {
+ g_hash_table_destroy (pixbuf_cache);
+ pixbuf_cache = NULL;
+ }
+}
+
+/* The pixbuf is being disposed, so remove it from the cache */
+static void
+remove_pixbuf_from_cache (const char *key,
+ GObject *pixbuf)
+{
+ g_hash_table_remove (pixbuf_cache, key);
+}
+
+static void
+clock_face_load_face (ClockFace *this, gint width, gint height)
+{
+ ClockFacePrivate *priv = CLOCK_FACE_GET_PRIVATE (this);
+ const gchar *size_string[2] = { "small", "large" };
+ const gchar *daytime_string[4] = { "morning", "day", "evening", "night" };
+ gchar *cache_name;
+ gchar *name;
+
+ if (!pixbuf_cache)
+ pixbuf_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, NULL);
+
+ if (priv->face_pixbuf != NULL) {
+ /* This might empty the cache, but it's useless to destroy
+ * it since this object is still alive and might add another
+ * pixbuf in the cache later (eg, a few lines below) */
+ g_object_unref (priv->face_pixbuf);
+ priv->face_pixbuf = NULL;
+ }
+
+ /* Look for the pixbuf in the process-wide cache first */
+ cache_name = g_strdup_printf ("%d-%d-%d-%d",
+ priv->size, priv->timeofday,
+ width, height);
+
+ priv->face_pixbuf = g_hash_table_lookup (pixbuf_cache, cache_name);
+ if (priv->face_pixbuf) {
+ g_object_ref (priv->face_pixbuf);
+ return;
+ }
+
+ /* The pixbuf is not cached, let's load it */
+ name = g_strconcat (ICONDIR, "/clock-face-", size_string[priv->size],
+ "-", daytime_string[priv->timeofday], ".svg",
+ NULL);
+ priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name,
+ width, height,
+ NULL);
+ g_free (name);
+
+ if (!priv->face_pixbuf) {
+ name = g_strconcat (ICONDIR, "/clock-face-",
+ size_string[priv->size], ".svg", NULL);
+ priv->face_pixbuf = rsvg_pixbuf_from_file_at_size (name,
+ width,
+ height,
+ NULL);
+ g_free (name);
+ }
+
+ /* Save the found pixbuf in the cache */
+ if (priv->face_pixbuf) {
+ g_hash_table_replace (pixbuf_cache,
+ cache_name, priv->face_pixbuf);
+ /* This will handle automatic removal from the cache when
+ * the pixbuf isn't needed anymore */
+ g_object_weak_ref (G_OBJECT (priv->face_pixbuf),
+ (GWeakNotify) remove_pixbuf_from_cache,
+ cache_name);
+ } else
+ g_free (cache_name);
+}
diff --git a/applets/clock/clock-face.h b/applets/clock/clock-face.h
new file mode 100644
index 00000000..3c665c63
--- /dev/null
+++ b/applets/clock/clock-face.h
@@ -0,0 +1,64 @@
+/**
+ * clock.h
+ *
+ * A GTK+ widget that implements a clock face
+ *
+ * (c) 2007, Peter Teichman
+ * (c) 2005-2006, Davyd Madeley
+ *
+ * Authors:
+ * Davyd Madeley <[email protected]>
+ * Peter Teichman <[email protected]>
+ */
+
+#ifndef __INTL_CLOCK_FACE_H__
+#define __INTL_CLOCK_FACE_H__
+
+#include <gtk/gtk.h>
+#include "clock-location.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define INTL_TYPE_CLOCK_FACE (clock_face_get_type ())
+#define CLOCK_FACE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INTL_TYPE_CLOCK_FACE, ClockFace))
+#define CLOCK_FACE_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), INTL_CLOCK_FACE, ClockFaceClass))
+#define INTL_IS_CLOCK_FACE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INTL_TYPE_CLOCK_FACE))
+#define INTL_IS_CLOCK_FACE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), INTL_TYPE_CLOCK_FACE))
+#define CLOCK_FACE_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS ((obj), INTL_TYPE_CLOCK_FACE, ClockFaceClass))
+
+typedef struct _ClockFace ClockFace;
+typedef struct _ClockFaceClass ClockFaceClass;
+
+struct _ClockFace
+{
+ GtkWidget parent;
+
+ /* < private > */
+};
+
+struct _ClockFaceClass
+{
+ GtkWidgetClass parent_class;
+};
+
+typedef enum {
+ CLOCK_FACE_SMALL,
+ CLOCK_FACE_LARGE
+} ClockFaceSize;
+
+GType clock_face_get_type (void);
+
+GtkWidget *clock_face_new (ClockFaceSize size);
+GtkWidget *clock_face_new_with_location (ClockFaceSize size,
+ ClockLocation *loc,
+ GtkWidget *size_widget);
+gboolean clock_face_refresh (ClockFace *this);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/applets/clock/clock-location-tile.c b/applets/clock/clock-location-tile.c
new file mode 100644
index 00000000..a6f6a4ce
--- /dev/null
+++ b/applets/clock/clock-location-tile.c
@@ -0,0 +1,728 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#include "clock.h"
+#include "clock-face.h"
+#include "clock-location-tile.h"
+#include "clock-location.h"
+#include "clock-utils.h"
+#include "clock-marshallers.h"
+#include "set-timezone.h"
+
+G_DEFINE_TYPE (ClockLocationTile, clock_location_tile, GTK_TYPE_ALIGNMENT)
+
+enum {
+ TILE_PRESSED,
+ NEED_CLOCK_FORMAT,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+typedef struct {
+ ClockLocation *location;
+
+ struct tm last_refresh;
+ long last_offset;
+
+ ClockFaceSize size;
+
+ GtkWidget *box;
+ GtkWidget *clock_face;
+ GtkWidget *city_label;
+ GtkWidget *time_label;
+
+ GtkWidget *current_button;
+ GtkWidget *current_label;
+ GtkWidget *current_marker;
+ GtkWidget *current_spacer;
+ GtkSizeGroup *current_group;
+ GtkSizeGroup *button_group;
+
+ GtkWidget *weather_icon;
+
+ gulong location_weather_updated_id;
+} ClockLocationTilePrivate;
+
+static void clock_location_tile_finalize (GObject *);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTilePrivate))
+
+static void clock_location_tile_fill (ClockLocationTile *this);
+static void update_weather_icon (ClockLocation *loc, WeatherInfo *info, gpointer data);
+static gboolean weather_tooltip (GtkWidget *widget,
+ gint x, gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ gpointer data);
+
+ClockLocationTile *
+clock_location_tile_new (ClockLocation *loc,
+ ClockFaceSize size)
+{
+ ClockLocationTile *this;
+ ClockLocationTilePrivate *priv;
+
+ this = g_object_new (CLOCK_LOCATION_TILE_TYPE, NULL);
+ priv = PRIVATE (this);
+
+ priv->location = g_object_ref (loc);
+ priv->size = size;
+
+ clock_location_tile_fill (this);
+
+ update_weather_icon (loc, clock_location_get_weather_info (loc), this);
+ gtk_widget_set_has_tooltip (priv->weather_icon, TRUE);
+
+ g_signal_connect (priv->weather_icon, "query-tooltip",
+ G_CALLBACK (weather_tooltip), this);
+ priv->location_weather_updated_id = g_signal_connect (G_OBJECT (loc), "weather-updated",
+ G_CALLBACK (update_weather_icon), this);
+
+ return this;
+}
+
+static void
+clock_location_tile_class_init (ClockLocationTileClass *this_class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class);
+
+ g_obj_class->finalize = clock_location_tile_finalize;
+
+ g_type_class_add_private (this_class, sizeof (ClockLocationTilePrivate));
+
+ signals[TILE_PRESSED] = g_signal_new ("tile-pressed",
+ G_TYPE_FROM_CLASS (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ClockLocationTileClass, tile_pressed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals[NEED_CLOCK_FORMAT] = g_signal_new ("need-clock-format",
+ G_TYPE_FROM_CLASS (g_obj_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ClockLocationTileClass, need_clock_format),
+ NULL,
+ NULL,
+ _clock_marshal_INT__VOID,
+ G_TYPE_INT, 0);
+}
+
+static void
+clock_location_tile_init (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+
+ priv->location = NULL;
+
+ memset (&(priv->last_refresh), 0, sizeof (struct tm));
+ priv->last_offset = 0;
+
+ priv->size = CLOCK_FACE_SMALL;
+
+ priv->clock_face = NULL;
+ priv->city_label = NULL;
+ priv->time_label = NULL;
+}
+
+static void
+clock_location_tile_finalize (GObject *g_obj)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (g_obj);
+
+ if (priv->location) {
+ g_signal_handler_disconnect (priv->location, priv->location_weather_updated_id);
+ priv->location_weather_updated_id = 0;
+
+ g_object_unref (priv->location);
+ priv->location = NULL;
+ }
+
+ if (priv->button_group) {
+ g_object_unref (priv->button_group);
+ priv->button_group = NULL;
+ }
+
+ if (priv->current_group) {
+ g_object_unref (priv->current_group);
+ priv->current_group = NULL;
+ }
+
+ G_OBJECT_CLASS (clock_location_tile_parent_class)->finalize (g_obj);
+}
+
+static gboolean
+press_on_tile (GtkWidget *widget,
+ GdkEventButton *event,
+ ClockLocationTile *tile)
+{
+ g_signal_emit (tile, signals[TILE_PRESSED], 0);
+
+ return TRUE;
+}
+
+static void
+make_current_cb (gpointer data, GError *error)
+{
+ GtkWidget *dialog;
+
+ if (error) {
+ dialog = gtk_message_dialog_new (NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Failed to set the system timezone"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_error_free (error);
+ }
+}
+
+static void
+make_current (GtkWidget *widget, ClockLocationTile *tile)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+ GtkWidget *toplevel;
+ guint xid;
+
+ xid = 0;
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (tile));
+
+ if (toplevel) {
+ GdkWindow *window = gtk_widget_get_window (toplevel);
+
+ if (window)
+ xid = GDK_WINDOW_XWINDOW (window);
+ }
+
+ clock_location_make_current (priv->location,
+ xid,
+ (GFunc)make_current_cb, tile, NULL);
+}
+
+static gboolean
+enter_or_leave_tile (GtkWidget *widget,
+ GdkEventCrossing *event,
+ ClockLocationTile *tile)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+
+ if (event->mode != GDK_CROSSING_NORMAL) {
+ return TRUE;
+ }
+
+ if (clock_location_is_current (priv->location)) {
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_hide (priv->current_spacer);
+ gtk_widget_show (priv->current_marker);
+
+ return TRUE;
+ }
+
+ if (event->type == GDK_ENTER_NOTIFY) {
+ gint can_set;
+
+ if (clock_location_is_current_timezone (priv->location))
+ can_set = 2;
+ else
+ can_set = can_set_system_timezone ();
+ if (can_set != 0) {
+ gtk_label_set_markup (GTK_LABEL (priv->current_label),
+ can_set == 1 ?
+ _("<small>Set...</small>") :
+ _("<small>Set</small>"));
+ gtk_widget_hide (priv->current_spacer);
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_show (priv->current_button);
+ }
+ else {
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_show (priv->current_spacer);
+ }
+ }
+ else {
+ if (event->detail != GDK_NOTIFY_INFERIOR) {
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_show (priv->current_spacer);
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+clock_location_tile_fill (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ GtkWidget *align;
+ GtkWidget *strut;
+ GtkWidget *box;
+ GtkWidget *alignment;
+ GtkWidget *tile;
+ GtkWidget *head_section;
+
+ priv->box = gtk_event_box_new ();
+
+ gtk_widget_add_events (priv->box, GDK_BUTTON_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
+ g_signal_connect (priv->box, "button-press-event",
+ G_CALLBACK (press_on_tile), this);
+ g_signal_connect (priv->box, "enter-notify-event",
+ G_CALLBACK (enter_or_leave_tile), this);
+ g_signal_connect (priv->box, "leave-notify-event",
+ G_CALLBACK (enter_or_leave_tile), this);
+
+ alignment = gtk_alignment_new (0, 0, 1, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 3, 3, 3, 0);
+
+ tile = gtk_hbox_new (FALSE, 6);
+ head_section = gtk_vbox_new (FALSE, 0);
+
+ priv->city_label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (priv->city_label), 0, 0);
+
+ align = gtk_alignment_new (0, 0, 0, 0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, 0, 3);
+ gtk_container_add (GTK_CONTAINER (align), priv->city_label);
+ gtk_box_pack_start (GTK_BOX (head_section), align, FALSE, FALSE, 0);
+
+ priv->time_label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (priv->time_label), 0, 0);
+
+ priv->weather_icon = gtk_image_new ();
+ align = gtk_alignment_new (0, 0, 0, 0);
+ gtk_container_add (GTK_CONTAINER (align), priv->weather_icon);
+
+ box = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (head_section), box, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), align, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->time_label, FALSE, FALSE, 0);
+
+ priv->current_button = gtk_button_new ();
+ /* The correct label is set on EnterNotify events */
+ priv->current_label = gtk_label_new ("");
+ gtk_widget_show (priv->current_label);
+ gtk_widget_set_no_show_all (priv->current_button, TRUE);
+ gtk_container_add (GTK_CONTAINER (priv->current_button), priv->current_label);
+ gtk_widget_set_tooltip_text (priv->current_button,
+ _("Set location as current location and use its timezone for this computer"));
+
+ priv->current_marker = gtk_image_new_from_icon_name ("go-home", GTK_ICON_SIZE_BUTTON);
+ gtk_misc_set_alignment (GTK_MISC (priv->current_marker), 1.0, 0.5);
+ gtk_widget_set_no_show_all (priv->current_marker, TRUE);
+
+ priv->current_spacer = gtk_event_box_new ();
+ gtk_widget_set_no_show_all (priv->current_spacer, TRUE);
+
+ strut = gtk_event_box_new ();
+ gtk_box_pack_start (GTK_BOX (box), strut, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->current_button, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->current_marker, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->current_spacer, FALSE, FALSE, 0);
+ priv->button_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
+ gtk_size_group_set_ignore_hidden (priv->button_group, FALSE);
+ gtk_size_group_add_widget (priv->button_group, strut);
+ gtk_size_group_add_widget (priv->button_group, priv->current_button);
+
+ /*
+ * Avoid resizing the popup as the tiles display the current marker,
+ * set button or nothing. For that purpose, replace 'nothing' with
+ * an event box, and force the button, marker and spacer to have the
+ * same size via a size group. The visibility of the three is managed
+ * manually to ensure that only one of them is shown at any time.
+ * (The all have to be shown initially to get the sizes worked out,
+ * but they are never visible together).
+ */
+ priv->current_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
+ gtk_size_group_set_ignore_hidden (priv->current_group, FALSE);
+ gtk_size_group_add_widget (priv->current_group, priv->current_button);
+ gtk_size_group_add_widget (priv->current_group, priv->current_marker);
+ gtk_size_group_add_widget (priv->current_group, priv->current_spacer);
+
+ gtk_widget_show (priv->current_button);
+ gtk_widget_show (priv->current_marker);
+ gtk_widget_show (priv->current_spacer);
+
+ g_signal_connect (priv->current_button, "clicked",
+ G_CALLBACK (make_current), this);
+
+ priv->clock_face = clock_face_new_with_location (
+ priv->size, priv->location, head_section);
+
+ gtk_box_pack_start (GTK_BOX (tile), priv->clock_face, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (tile), head_section, TRUE, TRUE, 0);
+
+ gtk_container_add (GTK_CONTAINER (alignment), tile);
+ gtk_container_add (GTK_CONTAINER (priv->box), alignment);
+ gtk_container_add (GTK_CONTAINER (this), priv->box);
+}
+
+static gboolean
+clock_needs_face_refresh (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ struct tm now;
+
+ clock_location_localtime (priv->location, &now);
+
+ if (now.tm_year > priv->last_refresh.tm_year
+ || now.tm_mon > priv->last_refresh.tm_mon
+ || now.tm_mday > priv->last_refresh.tm_mday
+ || now.tm_hour > priv->last_refresh.tm_hour
+ || now.tm_min > priv->last_refresh.tm_min) {
+ return TRUE;
+ }
+
+ if ((priv->size == CLOCK_FACE_LARGE)
+ && now.tm_sec > priv->last_refresh.tm_sec) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+clock_needs_label_refresh (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ struct tm now;
+ long offset;
+
+ clock_location_localtime (priv->location, &now);
+ offset = clock_location_get_offset (priv->location);
+
+ if (now.tm_year > priv->last_refresh.tm_year
+ || now.tm_mon > priv->last_refresh.tm_mon
+ || now.tm_mday > priv->last_refresh.tm_mday
+ || now.tm_hour > priv->last_refresh.tm_hour
+ || now.tm_min > priv->last_refresh.tm_min
+ || offset != priv->last_offset) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+copy_tm (struct tm *from, struct tm *to)
+{
+ to->tm_sec = from->tm_sec;
+ to->tm_min = from->tm_min;
+ to->tm_hour = from->tm_hour;
+ to->tm_mday = from->tm_mday;
+ to->tm_mon = from->tm_mon;
+ to->tm_year = from->tm_year;
+ to->tm_wday = from->tm_wday;
+ to->tm_yday = from->tm_yday;
+}
+
+static char *
+format_time (struct tm *now,
+ char *tzname,
+ ClockFormat clock_format,
+ long offset)
+{
+ char buf[256];
+ char *format;
+ time_t local_t;
+ struct tm local_now;
+ char *utf8;
+ char *tmp;
+ long hours, minutes;
+
+ time (&local_t);
+ localtime_r (&local_t, &local_now);
+
+ if (local_now.tm_wday != now->tm_wday) {
+ if (clock_format == CLOCK_FORMAT_12) {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format
+ * (eg, like in the US: 8:10 am), when the local
+ * weekday differs from the weekday at the location
+ * (the %A expands to the weekday). The %p expands to
+ * am/pm. */
+ format = _("%l:%M <small>%p (%A)</small>");
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format
+ * (eg, like in France: 20:10), when the local
+ * weekday differs from the weekday at the location
+ * (the %A expands to the weekday). */
+ format = _("%H:%M <small>(%A)</small>");
+ }
+ }
+ else {
+ if (clock_format == CLOCK_FORMAT_12) {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format
+ * (eg, like in the US: 8:10 am). The %p expands to
+ * am/pm. */
+ format = _("%l:%M <small>%p</small>");
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format
+ * (eg, like in France: 20:10). */
+ format = _("%H:%M");
+ }
+ }
+
+ if (strftime (buf, sizeof (buf), format, now) <= 0) {
+ strcpy (buf, "???");
+ }
+
+ hours = offset / 3600;
+ minutes = labs (offset % 3600) / 60;
+
+ if (hours != 0 && minutes != 0) {
+ tmp = g_strdup_printf ("%s <small>%s %+ld:%ld</small>", buf, tzname, hours, minutes);
+ }
+ else if (hours != 0) {
+ tmp = g_strdup_printf ("%s <small>%s %+ld</small>", buf, tzname, hours);
+ }
+ else {
+ tmp = g_strdup_printf ("%s <small>%s</small>", buf, tzname);
+ }
+
+ utf8 = g_locale_to_utf8 (tmp, -1, NULL, NULL, NULL);
+
+ g_free (tmp);
+
+ return utf8;
+}
+
+static char *
+convert_time_to_str (time_t now, ClockFormat clock_format)
+{
+ const gchar *format;
+ struct tm *tm;
+ gchar buf[128];
+
+ if (clock_format == CLOCK_FORMAT_12) {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format (eg, like
+ * in the US: 8:10 am). The %p expands to am/pm.
+ */
+ format = _("%l:%M %p");
+ }
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format (eg, like
+ * in France: 20:10).
+ */
+ format = _("%H:%M");
+ }
+
+ tm = localtime (&now);
+ strftime (buf, sizeof (buf) - 1, format, tm);
+
+ return g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
+}
+
+void
+clock_location_tile_refresh (ClockLocationTile *this, gboolean force_refresh)
+{
+ ClockLocationTilePrivate *priv = PRIVATE (this);
+ gchar *tmp, *tzname;
+ struct tm now;
+ long offset;
+ int format;
+
+ g_return_if_fail (IS_CLOCK_LOCATION_TILE (this));
+
+ if (clock_location_is_current (priv->location)) {
+ gtk_widget_hide (priv->current_spacer);
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_show (priv->current_marker);
+ }
+ else {
+ if (gtk_widget_get_visible (priv->current_marker)) {
+ gtk_widget_hide (priv->current_marker);
+ gtk_widget_hide (priv->current_button);
+ gtk_widget_show (priv->current_spacer);
+ }
+ }
+
+ if (clock_needs_face_refresh (this)) {
+ clock_face_refresh (CLOCK_FACE (priv->clock_face));
+ }
+
+ if (!force_refresh && !clock_needs_label_refresh (this)) {
+ return;
+ }
+
+ clock_location_localtime (priv->location, &now);
+ tzname = clock_location_get_tzname (priv->location);
+
+ copy_tm (&now, &(priv->last_refresh));
+ priv->last_offset = clock_location_get_offset (priv->location);
+
+ tmp = g_strdup_printf ("<big><b>%s</b></big>",
+ clock_location_get_display_name (priv->location));
+ gtk_label_set_markup (GTK_LABEL (priv->city_label), tmp);
+ g_free (tmp);
+
+ g_signal_emit (this, signals[NEED_CLOCK_FORMAT], 0, &format);
+
+ offset = - priv->last_offset;
+
+ tmp = format_time (&now, tzname, format, offset);
+
+ gtk_label_set_markup (GTK_LABEL (priv->time_label), tmp);
+
+ g_free (tmp);
+}
+
+void
+weather_info_setup_tooltip (WeatherInfo *info, ClockLocation *location, GtkTooltip *tooltip,
+ ClockFormat clock_format)
+{
+ GdkPixbuf *pixbuf = NULL;
+ GtkIconTheme *theme = NULL;
+ const gchar *conditions, *wind;
+ gchar *temp, *apparent;
+ gchar *line1, *line2, *line3, *line4, *tip;
+ const gchar *icon_name;
+ const gchar *sys_timezone;
+ time_t sunrise_time, sunset_time;
+ gchar *sunrise_str, *sunset_str;
+
+ icon_name = weather_info_get_icon_name (info);
+ theme = gtk_icon_theme_get_default ();
+ pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 48,
+ GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+ if (pixbuf)
+ gtk_tooltip_set_icon (tooltip, pixbuf);
+
+ conditions = weather_info_get_conditions (info);
+ if (strcmp (conditions, "-") != 0)
+ line1 = g_strdup_printf (_("%s, %s"),
+ conditions,
+ weather_info_get_sky (info));
+ else
+ line1 = g_strdup (weather_info_get_sky (info));
+
+ /* we need to g_strdup() since both functions return the same address
+ * of a static buffer */
+ temp = g_strdup (weather_info_get_temp (info));
+ apparent = g_strdup (weather_info_get_apparent (info));
+ if (strcmp (apparent, temp) != 0 &&
+ /* FMQ: it's broken to read from another module's translations; add some API to libmateweather. */
+ strcmp (apparent, dgettext ("mate-applets-2.0", "Unknown")) != 0)
+ /* Translators: The two strings are temperatures. */
+ line2 = g_strdup_printf (_("%s, feels like %s"), temp, apparent);
+ else
+ line2 = g_strdup (temp);
+ g_free (temp);
+ g_free (apparent);
+
+ wind = weather_info_get_wind (info);
+ if (strcmp (apparent, dgettext ("mate-applets-2.0", "Unknown")) != 0)
+ line3 = g_strdup_printf ("%s\n", wind);
+ else
+ line3 = g_strdup ("");
+
+ sys_timezone = getenv ("TZ");
+ setenv ("TZ", clock_location_get_timezone (location), 1);
+ tzset ();
+ if (weather_info_get_value_sunrise (info, &sunrise_time))
+ sunrise_str = convert_time_to_str (sunrise_time, clock_format);
+ else
+ sunrise_str = g_strdup ("???");
+ if (weather_info_get_value_sunset (info, &sunset_time))
+ sunset_str = convert_time_to_str (sunset_time, clock_format);
+ else
+ sunset_str = g_strdup ("???");
+ line4 = g_strdup_printf (_("Sunrise: %s / Sunset: %s"),
+ sunrise_str, sunset_str);
+ g_free (sunrise_str);
+ g_free (sunset_str);
+
+ if (sys_timezone)
+ setenv ("TZ", sys_timezone, 1);
+ else
+ unsetenv ("TZ");
+ tzset ();
+
+ tip = g_strdup_printf ("<b>%s</b>\n%s\n%s%s", line1, line2, line3, line4);
+ gtk_tooltip_set_markup (tooltip, tip);
+ g_free (line1);
+ g_free (line2);
+ g_free (line3);
+ g_free (line4);
+ g_free (tip);
+}
+
+static gboolean
+weather_tooltip (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ gpointer data)
+{
+ ClockLocationTile *tile = data;
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+ WeatherInfo *info;
+ int clock_format;
+
+ info = clock_location_get_weather_info (priv->location);
+
+ if (!info || !weather_info_is_valid (info))
+ return FALSE;
+
+ g_signal_emit (tile, signals[NEED_CLOCK_FORMAT], 0, &clock_format);
+
+ weather_info_setup_tooltip (info, priv->location, tooltip, clock_format);
+
+ return TRUE;
+}
+
+static void
+update_weather_icon (ClockLocation *loc, WeatherInfo *info, gpointer data)
+{
+ ClockLocationTile *tile = data;
+ ClockLocationTilePrivate *priv = PRIVATE (tile);
+ GdkPixbuf *pixbuf = NULL;
+ GtkIconTheme *theme = NULL;
+ const gchar *icon_name;
+
+ if (!info || !weather_info_is_valid (info))
+ return;
+
+ icon_name = weather_info_get_icon_name (info);
+ theme = gtk_icon_theme_get_default ();
+ pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 16,
+ GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+
+ if (pixbuf) {
+ gtk_image_set_from_pixbuf (GTK_IMAGE (priv->weather_icon), pixbuf);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (gtk_widget_get_parent (priv->weather_icon)), 0, 0, 0, 6);
+ }
+}
+
+ClockLocation *
+clock_location_tile_get_location (ClockLocationTile *this)
+{
+ ClockLocationTilePrivate *priv;
+
+ g_return_val_if_fail (IS_CLOCK_LOCATION_TILE (this), NULL);
+
+ priv = PRIVATE (this);
+
+ return g_object_ref (priv->location);
+}
diff --git a/applets/clock/clock-location-tile.h b/applets/clock/clock-location-tile.h
new file mode 100644
index 00000000..00ccb5a8
--- /dev/null
+++ b/applets/clock/clock-location-tile.h
@@ -0,0 +1,51 @@
+#ifndef __CLOCK_LOCATION_TILE_H__
+#define __CLOCK_LOCATION_TILE_H__
+
+#include <gtk/gtk.h>
+
+#include "clock.h"
+#include "clock-face.h"
+#include "clock-location.h"
+#include "clock-utils.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_LOCATION_TILE_TYPE (clock_location_tile_get_type ())
+#define CLOCK_LOCATION_TILE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTile))
+#define CLOCK_LOCATION_TILE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_LOCATION_TILE_TYPE, ClockLocationTileClass))
+#define IS_CLOCK_LOCATION_TILE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_LOCATION_TILE_TYPE))
+#define IS_CLOCK_LOCATION_TILE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_LOCATION_TILE_TYPE))
+#define CLOCK_LOCATION_TILE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_LOCATION_TILE_TYPE, ClockLocationTileClass))
+
+typedef struct
+{
+ GtkAlignment parent;
+} ClockLocationTile;
+
+typedef struct
+{
+ GtkAlignmentClass parent_class;
+
+ void (* tile_pressed) (ClockLocationTile *tile);
+ int (* need_clock_format) (ClockLocationTile *tile);
+} ClockLocationTileClass;
+
+GType clock_location_tile_get_type (void);
+
+ClockLocationTile *clock_location_tile_new (ClockLocation *loc,
+ ClockFaceSize size);
+
+ClockLocation *clock_location_tile_get_location (ClockLocationTile *this);
+
+void weather_info_setup_tooltip (WeatherInfo *info, ClockLocation *location, GtkTooltip *tip,
+ ClockFormat clock_format);
+
+void clock_location_tile_refresh (ClockLocationTile *this,
+ gboolean force_refresh);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CLOCK_H__ */
diff --git a/applets/clock/clock-location.c b/applets/clock/clock-location.c
new file mode 100644
index 00000000..1b81c517
--- /dev/null
+++ b/applets/clock/clock-location.c
@@ -0,0 +1,894 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <dirent.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <glib.h>
+#include <gio/gio.h>
+
+#ifdef HAVE_NETWORK_MANAGER
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+#include <NetworkManager/NetworkManager.h>
+#endif
+
+#include "clock-location.h"
+#include "clock-marshallers.h"
+#include "set-timezone.h"
+#include "system-timezone.h"
+
+G_DEFINE_TYPE (ClockLocation, clock_location, G_TYPE_OBJECT)
+
+typedef struct {
+ gchar *name;
+ gchar *city;
+
+ SystemTimezone *systz;
+
+ gchar *timezone;
+
+ gchar *tzname;
+
+ gfloat latitude;
+ gfloat longitude;
+
+ gchar *weather_code;
+ WeatherInfo *weather_info;
+ guint weather_timeout;
+ guint weather_retry_time;
+
+ TempUnit temperature_unit;
+ SpeedUnit speed_unit;
+} ClockLocationPrivate;
+
+#define WEATHER_TIMEOUT_BASE 30
+#define WEATHER_TIMEOUT_MAX 1800
+#define WEATHER_EMPTY_CODE "-"
+
+enum {
+ WEATHER_UPDATED,
+ SET_CURRENT,
+ LAST_SIGNAL
+};
+
+static guint location_signals[LAST_SIGNAL] = { 0 };
+
+static void clock_location_finalize (GObject *);
+static void clock_location_set_tz (ClockLocation *this);
+static void clock_location_unset_tz (ClockLocation *this);
+static void setup_weather_updates (ClockLocation *loc);
+static void add_to_network_monitor (ClockLocation *loc);
+static void remove_from_network_monitor (ClockLocation *loc);
+
+static gchar *clock_location_get_valid_weather_code (const gchar *code);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_LOCATION_TYPE, ClockLocationPrivate))
+
+ClockLocation *
+clock_location_find_and_ref (GList *locations,
+ const gchar *name,
+ const gchar *city,
+ const gchar *timezone,
+ gfloat latitude,
+ gfloat longitude,
+ const gchar *code)
+{
+ GList *l;
+ ClockLocationPrivate *priv;
+
+ for (l = locations; l != NULL; l = l->next) {
+ priv = PRIVATE (l->data);
+
+ if (priv->latitude == latitude &&
+ priv->longitude == longitude &&
+ g_strcmp0 (priv->weather_code, code) == 0 &&
+ g_strcmp0 (priv->timezone, timezone) == 0 &&
+ g_strcmp0 (priv->city, city) == 0 &&
+ g_strcmp0 (priv->name, name) == 0)
+ break;
+ }
+
+ if (l != NULL)
+ return g_object_ref (CLOCK_LOCATION (l->data));
+ else
+ return NULL;
+}
+
+ClockLocation *
+clock_location_new (const gchar *name, const gchar *city,
+ const gchar *timezone,
+ gfloat latitude, gfloat longitude,
+ const gchar *code, WeatherPrefs *prefs)
+{
+ ClockLocation *this;
+ ClockLocationPrivate *priv;
+
+ this = g_object_new (CLOCK_LOCATION_TYPE, NULL);
+ priv = PRIVATE (this);
+
+ priv->name = g_strdup (name);
+ priv->city = g_strdup (city);
+ priv->timezone = g_strdup (timezone);
+
+ /* initialize priv->tzname */
+ clock_location_set_tz (this);
+ clock_location_unset_tz (this);
+
+ priv->latitude = latitude;
+ priv->longitude = longitude;
+
+ priv->weather_code = clock_location_get_valid_weather_code (code);
+
+ if (prefs) {
+ priv->temperature_unit = prefs->temperature_unit;
+ priv->speed_unit = prefs->speed_unit;
+ }
+
+ setup_weather_updates (this);
+
+ return this;
+}
+
+static ClockLocation *current_location = NULL;
+
+static void
+clock_location_class_init (ClockLocationClass *this_class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class);
+
+ g_obj_class->finalize = clock_location_finalize;
+
+ location_signals[WEATHER_UPDATED] =
+ g_signal_new ("weather-updated",
+ G_OBJECT_CLASS_TYPE (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ClockLocationClass, weather_updated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+ location_signals[SET_CURRENT] =
+ g_signal_new ("set-current",
+ G_OBJECT_CLASS_TYPE (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (ClockLocationClass, set_current),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (this_class, sizeof (ClockLocationPrivate));
+}
+
+static void
+clock_location_init (ClockLocation *this)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+
+ priv->name = NULL;
+ priv->city = NULL;
+
+ priv->systz = system_timezone_new ();
+
+ priv->timezone = NULL;
+
+ priv->tzname = NULL;
+
+ priv->latitude = 0;
+ priv->longitude = 0;
+
+ priv->temperature_unit = TEMP_UNIT_CENTIGRADE;
+ priv->speed_unit = SPEED_UNIT_MS;
+}
+
+static void
+clock_location_finalize (GObject *g_obj)
+{
+ ClockLocationPrivate *priv = PRIVATE (g_obj);
+
+ remove_from_network_monitor (CLOCK_LOCATION (g_obj));
+
+ if (priv->name) {
+ g_free (priv->name);
+ priv->name = NULL;
+ }
+
+ if (priv->city) {
+ g_free (priv->city);
+ priv->city = NULL;
+ }
+
+ if (priv->systz) {
+ g_object_unref (priv->systz);
+ priv->systz = NULL;
+ }
+
+ if (priv->timezone) {
+ g_free (priv->timezone);
+ priv->timezone = NULL;
+ }
+
+ if (priv->tzname) {
+ g_free (priv->tzname);
+ priv->tzname = NULL;
+ }
+
+ if (priv->weather_code) {
+ g_free (priv->weather_code);
+ priv->weather_code = NULL;
+ }
+
+ if (priv->weather_info) {
+ weather_info_free (priv->weather_info);
+ priv->weather_info = NULL;
+ }
+
+ if (priv->weather_timeout) {
+ g_source_remove (priv->weather_timeout);
+ priv->weather_timeout = 0;
+ }
+
+ G_OBJECT_CLASS (clock_location_parent_class)->finalize (g_obj);
+}
+
+const gchar *
+clock_location_get_display_name (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->name && priv->name[0])
+ return priv->name;
+ else
+ return priv->city;
+}
+
+const gchar *
+clock_location_get_name (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->name;
+}
+
+void
+clock_location_set_name (ClockLocation *loc, const gchar *name)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->name) {
+ g_free (priv->name);
+ priv->name = NULL;
+ }
+
+ priv->name = g_strdup (name);
+}
+
+const gchar *
+clock_location_get_city (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->city;
+}
+
+void
+clock_location_set_city (ClockLocation *loc, const gchar *city)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->city) {
+ g_free (priv->city);
+ priv->city = NULL;
+ }
+
+ priv->city = g_strdup (city);
+}
+
+gchar *
+clock_location_get_timezone (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->timezone;
+}
+
+void
+clock_location_set_timezone (ClockLocation *loc, const gchar *timezone)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ if (priv->timezone) {
+ g_free (priv->timezone);
+ priv->timezone = NULL;
+ }
+
+ priv->timezone = g_strdup (timezone);
+}
+
+gchar *
+clock_location_get_tzname (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->tzname;
+}
+
+void
+clock_location_get_coords (ClockLocation *loc, gfloat *latitude,
+ gfloat *longitude)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ *latitude = priv->latitude;
+ *longitude = priv->longitude;
+}
+
+void
+clock_location_set_coords (ClockLocation *loc, gfloat latitude,
+ gfloat longitude)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ priv->latitude = latitude;
+ priv->longitude = longitude;
+}
+
+static void
+clock_location_set_tzname (ClockLocation *this, const char *tzname)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+
+ if (priv->tzname) {
+ if (strcmp (priv->tzname, tzname) == 0) {
+ return;
+ }
+
+ g_free (priv->tzname);
+ priv->tzname = NULL;
+ }
+
+ if (tzname) {
+ priv->tzname = g_strdup (tzname);
+ } else {
+ priv->tzname = NULL;
+ }
+}
+
+static void
+clock_location_set_tz (ClockLocation *this)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+
+ time_t now_t;
+ struct tm now;
+
+ if (priv->timezone == NULL) {
+ return;
+ }
+
+ setenv ("TZ", priv->timezone, 1);
+ tzset();
+
+ now_t = time (NULL);
+ localtime_r (&now_t, &now);
+
+ if (now.tm_isdst > 0) {
+ clock_location_set_tzname (this, tzname[1]);
+ } else {
+ clock_location_set_tzname (this, tzname[0]);
+ }
+}
+
+static void
+clock_location_unset_tz (ClockLocation *this)
+{
+ ClockLocationPrivate *priv = PRIVATE (this);
+ const char *env_timezone;
+
+ if (priv->timezone == NULL) {
+ return;
+ }
+
+ env_timezone = system_timezone_get_env (priv->systz);
+
+ if (env_timezone) {
+ setenv ("TZ", env_timezone, 1);
+ } else {
+ unsetenv ("TZ");
+ }
+ tzset();
+}
+
+void
+clock_location_localtime (ClockLocation *loc, struct tm *tm)
+{
+ time_t now;
+
+ clock_location_set_tz (loc);
+
+ time (&now);
+ localtime_r (&now, tm);
+
+ clock_location_unset_tz (loc);
+}
+
+gboolean
+clock_location_is_current_timezone (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ const char *zone;
+
+ zone = system_timezone_get (priv->systz);
+
+ if (zone)
+ return strcmp (zone, priv->timezone) == 0;
+ else
+ return clock_location_get_offset (loc) == 0;
+}
+
+gboolean
+clock_location_is_current (ClockLocation *loc)
+{
+ if (current_location == loc)
+ return TRUE;
+ else if (current_location != NULL)
+ return FALSE;
+
+ if (clock_location_is_current_timezone (loc)) {
+ /* Note that some code in clock.c depends on the fact that
+ * calling this function can set the current location if
+ * there's none */
+ current_location = loc;
+ g_object_add_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ g_signal_emit (current_location, location_signals[SET_CURRENT],
+ 0, NULL);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
+glong
+clock_location_get_offset (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ glong sys_timezone, local_timezone;
+ glong offset;
+ time_t t;
+ struct tm *tm;
+
+ t = time (NULL);
+
+ unsetenv ("TZ");
+ tm = localtime (&t);
+ sys_timezone = timezone;
+
+ if (tm->tm_isdst > 0) {
+ sys_timezone -= 3600;
+ }
+
+ setenv ("TZ", priv->timezone, 1);
+ tm = localtime (&t);
+ local_timezone = timezone;
+
+ if (tm->tm_isdst > 0) {
+ local_timezone -= 3600;
+ }
+
+ offset = local_timezone - sys_timezone;
+
+ clock_location_unset_tz (loc);
+
+ return offset;
+}
+
+typedef struct {
+ ClockLocation *location;
+ GFunc callback;
+ gpointer data;
+ GDestroyNotify destroy;
+} MakeCurrentData;
+
+static void
+make_current_cb (gpointer data, GError *error)
+{
+ MakeCurrentData *mcdata = data;
+
+ if (error == NULL) {
+ if (current_location)
+ g_object_remove_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ current_location = mcdata->location;
+ g_object_add_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ g_signal_emit (current_location, location_signals[SET_CURRENT],
+ 0, NULL);
+ }
+
+ if (mcdata->callback)
+ mcdata->callback (mcdata->data, error);
+ else
+ g_error_free (error);
+}
+
+static void
+free_make_current_data (gpointer data)
+{
+ MakeCurrentData *mcdata = data;
+
+ if (mcdata->destroy)
+ mcdata->destroy (mcdata->data);
+
+ g_object_unref (mcdata->location);
+ g_free (mcdata);
+}
+
+void
+clock_location_make_current (ClockLocation *loc,
+ guint transient_parent_xid,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify destroy)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ gchar *filename;
+ MakeCurrentData *mcdata;
+
+ if (loc == current_location) {
+ if (destroy)
+ destroy (data);
+ return;
+ }
+
+ if (clock_location_is_current_timezone (loc)) {
+ if (current_location)
+ g_object_remove_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ current_location = loc;
+ g_object_add_weak_pointer (G_OBJECT (current_location),
+ (gpointer *)&current_location);
+ g_signal_emit (current_location, location_signals[SET_CURRENT],
+ 0, NULL);
+ if (callback)
+ callback (data, NULL);
+ if (destroy)
+ destroy (data);
+ return;
+ }
+
+ mcdata = g_new (MakeCurrentData, 1);
+
+ mcdata->location = g_object_ref (loc);
+ mcdata->callback = callback;
+ mcdata->data = data;
+ mcdata->destroy = destroy;
+
+ filename = g_build_filename (SYSTEM_ZONEINFODIR, priv->timezone, NULL);
+ set_system_timezone_async (filename,
+ (GFunc)make_current_cb,
+ mcdata,
+ free_make_current_data);
+ g_free (filename);
+}
+
+static gchar *
+clock_location_get_valid_weather_code (const gchar *code)
+{
+ if (!code || code[0] == '\0')
+ return g_strdup (WEATHER_EMPTY_CODE);
+ else
+ return g_strdup (code);
+}
+
+const gchar *
+clock_location_get_weather_code (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->weather_code;
+}
+
+void
+clock_location_set_weather_code (ClockLocation *loc, const gchar *code)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ g_free (priv->weather_code);
+ priv->weather_code = clock_location_get_valid_weather_code (code);
+
+ setup_weather_updates (loc);
+}
+
+WeatherInfo *
+clock_location_get_weather_info (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ return priv->weather_info;
+}
+
+static gboolean update_weather_info (gpointer data);
+
+static void
+set_weather_update_timeout (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ guint timeout;
+
+ if (!weather_info_network_error (priv->weather_info)) {
+ /* The last update succeeded; set the next update to
+ * happen in half an hour, and reset the retry timer.
+ */
+ timeout = WEATHER_TIMEOUT_MAX;
+ priv->weather_retry_time = WEATHER_TIMEOUT_BASE;
+ } else {
+ /* The last update failed; set the next update
+ * according to the retry timer, and exponentially
+ * back off the retry timer.
+ */
+ timeout = priv->weather_retry_time;
+ priv->weather_retry_time *= 2;
+ if (priv->weather_retry_time > WEATHER_TIMEOUT_MAX)
+ priv->weather_retry_time = WEATHER_TIMEOUT_MAX;
+ }
+
+ if (priv->weather_timeout)
+ g_source_remove (priv->weather_timeout);
+ priv->weather_timeout =
+ g_timeout_add_seconds (timeout, update_weather_info, loc);
+}
+
+static void
+weather_info_updated (WeatherInfo *info, gpointer data)
+{
+ ClockLocation *loc = data;
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ set_weather_update_timeout (loc);
+ g_signal_emit (loc, location_signals[WEATHER_UPDATED],
+ 0, priv->weather_info);
+}
+
+static gboolean
+update_weather_info (gpointer data)
+{
+ ClockLocation *loc = data;
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ WeatherPrefs prefs = {
+ FORECAST_STATE,
+ FALSE,
+ NULL,
+ TEMP_UNIT_CENTIGRADE,
+ SPEED_UNIT_MS,
+ PRESSURE_UNIT_MB,
+ DISTANCE_UNIT_KM
+ };
+
+ prefs.temperature_unit = priv->temperature_unit;
+ prefs.speed_unit = priv->speed_unit;
+
+ weather_info_abort (priv->weather_info);
+ weather_info_update (priv->weather_info,
+ &prefs, weather_info_updated, loc);
+
+ return TRUE;
+}
+
+static gchar *
+rad2dms (gfloat lat, gfloat lon)
+{
+ gchar h, h2;
+ gfloat d, deg, min, d2, deg2, min2;
+
+ h = lat > 0 ? 'N' : 'S';
+ d = fabs (lat);
+ deg = floor (d);
+ min = floor (60 * (d - deg));
+ h2 = lon > 0 ? 'E' : 'W';
+ d2 = fabs (lon);
+ deg2 = floor (d2);
+ min2 = floor (60 * (d2 - deg2));
+ return g_strdup_printf ("%02d-%02d%c %02d-%02d%c",
+ (int)deg, (int)min, h,
+ (int)deg2, (int)min2, h2);
+}
+
+static GList *locations = NULL;
+
+static void
+update_weather_infos (void)
+{
+ GList *l;
+
+ for (l = locations; l; l = l->next) {
+ ClockLocation *loc = l->data;
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ priv->weather_retry_time = WEATHER_TIMEOUT_BASE;
+ update_weather_info (loc);
+ }
+}
+
+#ifdef HAVE_NETWORK_MANAGER
+static void
+state_notify (DBusPendingCall *pending, gpointer data)
+{
+ DBusMessage *msg = dbus_pending_call_steal_reply (pending);
+
+ if (!msg)
+ return;
+
+ if (dbus_message_get_type (msg) == DBUS_MESSAGE_TYPE_METHOD_RETURN) {
+ dbus_uint32_t result;
+
+ if (dbus_message_get_args (msg, NULL,
+ DBUS_TYPE_UINT32, &result,
+ DBUS_TYPE_INVALID)) {
+ if (result == NM_STATE_CONNECTED) {
+ update_weather_infos ();
+ }
+ }
+ }
+
+ dbus_message_unref (msg);
+}
+
+static void
+check_network (DBusConnection *connection)
+{
+ DBusMessage *message;
+ DBusPendingCall *reply;
+
+ message = dbus_message_new_method_call (NM_DBUS_SERVICE,
+ NM_DBUS_PATH,
+ NM_DBUS_INTERFACE,
+ "state");
+ if (dbus_connection_send_with_reply (connection, message, &reply, -1)) {
+ dbus_pending_call_set_notify (reply, state_notify, NULL, NULL);
+ dbus_pending_call_unref (reply);
+ }
+
+ dbus_message_unref (message);
+}
+
+static DBusHandlerResult
+filter_func (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
+{
+ if (dbus_message_is_signal (message,
+ NM_DBUS_INTERFACE,
+ "StateChanged")) {
+ check_network (connection);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+static void
+setup_network_monitor (void)
+{
+ GError *error;
+ DBusError derror;
+ static DBusGConnection *bus = NULL;
+ DBusConnection *dbus;
+
+ if (bus == NULL) {
+ error = NULL;
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (bus == NULL) {
+ g_warning ("Couldn't connect to system bus: %s",
+ error->message);
+ g_error_free (error);
+
+ return;
+ }
+
+ dbus_error_init (&derror);
+ dbus = dbus_g_connection_get_connection (bus);
+ dbus_connection_add_filter (dbus, filter_func, NULL, NULL);
+ dbus_bus_add_match (dbus,
+ "type='signal',"
+ "interface='" NM_DBUS_INTERFACE "'",
+ &derror);
+ if (dbus_error_is_set (&derror)) {
+ g_warning ("Couldn't register signal handler: %s: %s",
+ derror.name, derror.message);
+ dbus_error_free (&derror);
+ }
+ }
+}
+#endif
+
+static void
+add_to_network_monitor (ClockLocation *loc)
+{
+#ifdef HAVE_NETWORK_MANAGER
+ setup_network_monitor ();
+#endif
+
+ if (!g_list_find (locations, loc))
+ locations = g_list_prepend (locations, loc);
+}
+
+static void
+remove_from_network_monitor (ClockLocation *loc)
+{
+ locations = g_list_remove (locations, loc);
+}
+
+static void
+setup_weather_updates (ClockLocation *loc)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+ WeatherLocation *wl;
+ WeatherPrefs prefs = {
+ FORECAST_STATE,
+ FALSE,
+ NULL,
+ TEMP_UNIT_CENTIGRADE,
+ SPEED_UNIT_MS,
+ PRESSURE_UNIT_MB,
+ DISTANCE_UNIT_KM
+ };
+
+ gchar *dms;
+
+ prefs.temperature_unit = priv->temperature_unit;
+ prefs.speed_unit = priv->speed_unit;
+
+ if (priv->weather_info) {
+ weather_info_free (priv->weather_info);
+ priv->weather_info = NULL;
+ }
+
+ if (priv->weather_timeout) {
+ g_source_remove (priv->weather_timeout);
+ priv->weather_timeout = 0;
+ }
+
+ if (!priv->weather_code ||
+ strcmp (priv->weather_code, WEATHER_EMPTY_CODE) == 0)
+ return;
+
+ dms = rad2dms (priv->latitude, priv->longitude);
+ wl = weather_location_new (priv->city, priv->weather_code,
+ NULL, NULL, dms, NULL, NULL);
+
+ priv->weather_info =
+ weather_info_new (wl, &prefs, weather_info_updated, loc);
+
+ set_weather_update_timeout (loc);
+
+ weather_location_free (wl);
+ g_free (dms);
+
+ add_to_network_monitor (loc);
+}
+
+void
+clock_location_set_weather_prefs (ClockLocation *loc,
+ WeatherPrefs *prefs)
+{
+ ClockLocationPrivate *priv = PRIVATE (loc);
+
+ priv->temperature_unit = prefs->temperature_unit;
+ priv->speed_unit = prefs->speed_unit;
+
+ update_weather_info (loc);
+}
+
diff --git a/applets/clock/clock-location.h b/applets/clock/clock-location.h
new file mode 100644
index 00000000..ae2275aa
--- /dev/null
+++ b/applets/clock/clock-location.h
@@ -0,0 +1,87 @@
+#ifndef __CLOCK_LOCATION_H__
+#define __CLOCK_LOCATION_H__
+
+#include <time.h>
+#include <glib.h>
+#include <glib-object.h>
+#include <libmateweather/weather.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_LOCATION_TYPE (clock_location_get_type ())
+#define CLOCK_LOCATION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_LOCATION_TYPE, ClockLocation))
+#define CLOCK_LOCATION_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_LOCATION_TYPE, ClockLocationClass))
+#define IS_CLOCK_LOCATION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_LOCATION_TYPE))
+#define IS_CLOCK_LOCATION_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_LOCATION_TYPE))
+#define CLOCK_LOCATION_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_LOCATION_TYPE, ClockLocationClass))
+
+typedef struct
+{
+ GObject g_object;
+} ClockLocation;
+
+typedef struct
+{
+ GObjectClass g_object_class;
+
+ void (* weather_updated) (ClockLocation *location, WeatherInfo *info);
+
+ void (* set_current) (ClockLocation *location);
+} ClockLocationClass;
+
+GType clock_location_get_type (void);
+
+ClockLocation *clock_location_new (const gchar *name, const gchar *city,
+ const gchar *timezone,
+ gfloat latitude, gfloat longitude,
+ const gchar *code,
+ WeatherPrefs *prefs);
+
+ClockLocation *clock_location_find_and_ref (GList *locations,
+ const gchar *name,
+ const gchar *city,
+ const gchar *timezone,
+ gfloat latitude,
+ gfloat longitude,
+ const gchar *code);
+
+gchar *clock_location_get_tzname (ClockLocation *loc);
+
+const gchar *clock_location_get_display_name (ClockLocation *loc);
+
+const gchar *clock_location_get_name (ClockLocation *loc);
+void clock_location_set_name (ClockLocation *loc, const gchar *name);
+
+const gchar *clock_location_get_city (ClockLocation *loc);
+void clock_location_set_city (ClockLocation *loc, const gchar *city);
+
+gchar *clock_location_get_timezone (ClockLocation *loc);
+void clock_location_set_timezone (ClockLocation *loc, const gchar *timezone);
+
+void clock_location_get_coords (ClockLocation *loc, gfloat *latitude, gfloat *longitude);
+void clock_location_set_coords (ClockLocation *loc, gfloat latitude, gfloat longitude);
+
+void clock_location_localtime (ClockLocation *loc, struct tm *tm);
+
+gboolean clock_location_is_current (ClockLocation *loc);
+void clock_location_make_current (ClockLocation *loc,
+ guint transient_parent_xid,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify destroy);
+gboolean clock_location_is_current_timezone (ClockLocation *loc);
+
+const gchar *clock_location_get_weather_code (ClockLocation *loc);
+void clock_location_set_weather_code (ClockLocation *loc, const gchar *code);
+WeatherInfo *clock_location_get_weather_info (ClockLocation *loc);
+void clock_location_set_weather_prefs (ClockLocation *loc,
+ WeatherPrefs *weather_prefs);
+
+glong clock_location_get_offset (ClockLocation *loc);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CLOCK_LOCATION_H__ */
diff --git a/applets/clock/clock-map.c b/applets/clock/clock-map.c
new file mode 100644
index 00000000..5a6e0379
--- /dev/null
+++ b/applets/clock/clock-map.c
@@ -0,0 +1,700 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cairo.h>
+#include <sys/time.h>
+#include <sys/timeb.h>
+#include <gtk/gtk.h>
+#include <math.h>
+
+#include "clock.h"
+#include "clock-map.h"
+#include "clock-sunpos.h"
+#include "clock-marshallers.h"
+
+G_DEFINE_TYPE (ClockMap, clock_map, GTK_TYPE_WIDGET)
+
+enum {
+ NEED_LOCATIONS,
+ LAST_SIGNAL
+};
+
+enum {
+ MARKER_NORMAL = 0,
+ MARKER_HILIGHT,
+ MARKER_CURRENT,
+ MARKER_NB
+};
+
+static char *marker_files[MARKER_NB] = {
+ ICONDIR "/clock-map-location-marker.png",
+ ICONDIR "/clock-map-location-hilight.png",
+ ICONDIR "/clock-map-location-current.png"
+};
+
+static guint signals[LAST_SIGNAL];
+
+typedef struct {
+ time_t last_refresh;
+
+ gint width;
+ gint height;
+
+ guint highlight_timeout_id;
+
+ GdkPixbuf *stock_map_pixbuf;
+ GdkPixbuf *location_marker_pixbuf[MARKER_NB];
+
+ GdkPixbuf *location_map_pixbuf;
+
+ /* The shadow itself */
+ GdkPixbuf *shadow_pixbuf;
+
+ /* The map with the shadow composited onto it */
+ GdkPixbuf *shadow_map_pixbuf;
+} ClockMapPrivate;
+
+static void clock_map_finalize (GObject *);
+static void clock_map_size_request (GtkWidget *this,
+ GtkRequisition *requisition);
+static void clock_map_size_allocate (GtkWidget *this,
+ GtkAllocation *allocation);
+static gboolean clock_map_expose (GtkWidget *this,
+ GdkEventExpose *expose);
+
+static void clock_map_place_locations (ClockMap *this);
+static void clock_map_render_shadow (ClockMap *this);
+static void clock_map_display (ClockMap *this);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CLOCK_MAP_TYPE, ClockMapPrivate))
+
+ClockMap *
+clock_map_new (void)
+{
+ ClockMap *this;
+
+ this = g_object_new (CLOCK_MAP_TYPE, NULL);
+
+ return this;
+}
+
+static void
+clock_map_class_init (ClockMapClass *this_class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (this_class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (g_obj_class);
+
+ g_obj_class->finalize = clock_map_finalize;
+
+ /* GtkWidget signals */
+ widget_class->size_request = clock_map_size_request;
+ widget_class->size_allocate = clock_map_size_allocate;
+ widget_class->expose_event = clock_map_expose;
+
+ g_type_class_add_private (this_class, sizeof (ClockMapPrivate));
+
+ /**
+ * ClockMap::need-locations
+ *
+ * The map widget emits this signal when it needs to know which
+ * locations to display.
+ *
+ * Returns: the handler should return a (GList *) of (ClockLocation *).
+ * The map widget will not modify this list, so the caller should keep
+ * it alive.
+ */
+ signals[NEED_LOCATIONS] = g_signal_new ("need-locations",
+ G_TYPE_FROM_CLASS (g_obj_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ClockMapClass, need_locations),
+ NULL,
+ NULL,
+ _clock_marshal_POINTER__VOID,
+ G_TYPE_POINTER, 0);
+}
+
+static void
+clock_map_init (ClockMap *this)
+{
+ int i;
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ gtk_widget_set_has_window (GTK_WIDGET (this), FALSE);
+
+ priv->last_refresh = 0;
+ priv->width = 0;
+ priv->height = 0;
+ priv->highlight_timeout_id = 0;
+ priv->stock_map_pixbuf = NULL;
+
+ g_assert (sizeof (marker_files)/sizeof (char *) == MARKER_NB);
+
+ for (i = 0; i < MARKER_NB; i++) {
+ priv->location_marker_pixbuf[i] = gdk_pixbuf_new_from_file
+ (marker_files[i], NULL);
+ }
+}
+
+static void
+clock_map_finalize (GObject *g_obj)
+{
+ ClockMapPrivate *priv = PRIVATE (g_obj);
+ int i;
+
+ if (priv->highlight_timeout_id) {
+ g_source_remove (priv->highlight_timeout_id);
+ priv->highlight_timeout_id = 0;
+ }
+
+ if (priv->stock_map_pixbuf) {
+ g_object_unref (priv->stock_map_pixbuf);
+ priv->stock_map_pixbuf = NULL;
+ }
+
+ for (i = 0; i < MARKER_NB; i++) {
+ if (priv->location_marker_pixbuf[i]) {
+ g_object_unref (priv->location_marker_pixbuf[i]);
+ priv->location_marker_pixbuf[i] = NULL;
+ }
+ }
+
+ if (priv->location_map_pixbuf) {
+ g_object_unref (priv->location_map_pixbuf);
+ priv->location_map_pixbuf = NULL;
+ }
+
+ if (priv->shadow_pixbuf) {
+ g_object_unref (priv->shadow_pixbuf);
+ priv->shadow_pixbuf = NULL;
+ }
+
+ if (priv->shadow_map_pixbuf) {
+ g_object_unref (priv->shadow_map_pixbuf);
+ priv->shadow_map_pixbuf = NULL;
+ }
+
+ G_OBJECT_CLASS (clock_map_parent_class)->finalize (g_obj);
+}
+
+void
+clock_map_refresh (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GtkWidget *widget = GTK_WIDGET (this);
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ /* Only do something if we have some space allocated.
+ * Note that 1x1 is not really some space... */
+ if (allocation.width <= 1 || allocation.height <= 1)
+ return;
+
+ /* Allocation changed => we reload the map */
+ if (priv->width != allocation.width ||
+ priv->height != allocation.height) {
+ if (priv->stock_map_pixbuf) {
+ g_object_unref (priv->stock_map_pixbuf);
+ priv->stock_map_pixbuf = NULL;
+ }
+
+ priv->width = allocation.width;
+ priv->height = allocation.height;
+ }
+
+ if (!priv->stock_map_pixbuf) {
+ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_scale
+ (ICONDIR "/clock-map.png",
+ priv->width, priv->height, FALSE, NULL);
+
+ priv->stock_map_pixbuf = pixbuf;
+ }
+
+ clock_map_place_locations (this);
+
+ clock_map_display (this);
+}
+
+static gboolean
+clock_map_expose (GtkWidget *this, GdkEventExpose *event)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GdkWindow *window;
+ GtkStyle *style;
+ GtkAllocation allocation;
+ GdkRectangle region;
+ cairo_t *cr;
+
+ window = gtk_widget_get_window (this);
+ style = gtk_widget_get_style (this);
+ gtk_widget_get_allocation (this, &allocation);
+
+ if (!priv->shadow_map_pixbuf) {
+ g_warning ("Needed to refresh the map in expose event.");
+ clock_map_refresh (CLOCK_MAP (this));
+ }
+
+ cr = gdk_cairo_create (window);
+
+ region.x = allocation.x;
+ region.y = allocation.y;
+ region.width = gdk_pixbuf_get_width (priv->shadow_map_pixbuf);
+ region.height = gdk_pixbuf_get_height (priv->shadow_map_pixbuf);
+
+ gdk_rectangle_intersect (&region, &(event->area), &region);
+ gdk_draw_pixbuf (window,
+ style->black_gc,
+ priv->shadow_map_pixbuf,
+ region.x - allocation.x,
+ region.y - allocation.y,
+ region.x,
+ region.y,
+ region.width,
+ region.height,
+ GDK_RGB_DITHER_NORMAL,
+ 0, 0);
+
+ /* draw a simple outline */
+ cairo_rectangle (
+ cr,
+ allocation.x + 0.5, allocation.y + 0.5,
+ gdk_pixbuf_get_width (priv->shadow_map_pixbuf) - 1,
+ gdk_pixbuf_get_height (priv->shadow_map_pixbuf) - 1);
+
+ cairo_set_source_rgb (
+ cr,
+ style->mid [GTK_STATE_ACTIVE].red / 65535.0,
+ style->mid [GTK_STATE_ACTIVE].green / 65535.0,
+ style->mid [GTK_STATE_ACTIVE].blue / 65535.0);
+
+ cairo_set_line_width (cr, 1.0);
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
+
+ return FALSE;
+}
+
+static void
+clock_map_size_request (GtkWidget *this, GtkRequisition *requisition)
+{
+ requisition->width = 250;
+ requisition->height = 125;
+}
+
+static void
+clock_map_size_allocate (GtkWidget *this, GtkAllocation *allocation)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ if (GTK_WIDGET_CLASS (clock_map_parent_class)->size_allocate)
+ GTK_WIDGET_CLASS (clock_map_parent_class)->size_allocate (this, allocation);
+
+ if (priv->width != allocation->width ||
+ priv->height != allocation->height)
+ clock_map_refresh (CLOCK_MAP (this));
+}
+
+static void
+clock_map_mark (ClockMap *this, gfloat latitude, gfloat longitude, gint mark)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GdkPixbuf *marker = priv->location_marker_pixbuf[mark];
+ GdkPixbuf *partial = NULL;
+
+ int x, y;
+ int width, height;
+ int marker_width, marker_height;
+ int dest_x, dest_y, dest_width, dest_height;
+
+ width = gdk_pixbuf_get_width (priv->location_map_pixbuf);
+ height = gdk_pixbuf_get_height (priv->location_map_pixbuf);
+
+ x = (width / 2.0 + (width / 2.0) * longitude / 180.0);
+ y = (height / 2.0 - (height / 2.0) * latitude / 90.0);
+
+ marker_width = gdk_pixbuf_get_width (marker);
+ marker_height = gdk_pixbuf_get_height (marker);
+
+ dest_x = x - marker_width / 2;
+ dest_y = y - marker_height / 2;
+ dest_width = marker_width;
+ dest_height = marker_height;
+
+ /* create a small partial pixbuf if the mark is too close to
+ the north or south pole */
+ if (dest_y < 0) {
+ partial = gdk_pixbuf_new_subpixbuf
+ (marker, 0, dest_y + marker_height,
+ marker_width, -dest_y);
+
+ dest_y = 0.0;
+ marker_height = gdk_pixbuf_get_height (partial);
+ } else if (dest_y + dest_height > height) {
+ partial = gdk_pixbuf_new_subpixbuf
+ (marker, 0, 0, marker_width, height - dest_y);
+ marker_height = gdk_pixbuf_get_height (partial);
+ }
+
+ if (partial) {
+ marker = partial;
+ }
+
+ /* handle the cases where the marker needs to be placed across
+ the 180 degree longitude line */
+ if (dest_x < 0) {
+ /* split into our two pixbufs for the left and right edges */
+ GdkPixbuf *lhs = NULL;
+ GdkPixbuf *rhs = NULL;
+
+ lhs = gdk_pixbuf_new_subpixbuf
+ (marker, -dest_x, 0, marker_width + dest_x, marker_height);
+
+ gdk_pixbuf_composite (lhs, priv->location_map_pixbuf,
+ 0, dest_y,
+ gdk_pixbuf_get_width (lhs),
+ gdk_pixbuf_get_height (lhs),
+ 0, dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ rhs = gdk_pixbuf_new_subpixbuf
+ (marker, 0, 0, -dest_x, marker_height);
+
+ gdk_pixbuf_composite (rhs, priv->location_map_pixbuf,
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ gdk_pixbuf_get_width (rhs),
+ gdk_pixbuf_get_height (rhs),
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ g_object_unref (lhs);
+ g_object_unref (rhs);
+ } else if (dest_x + dest_width > width) {
+ /* split into our two pixbufs for the left and right edges */
+ GdkPixbuf *lhs = NULL;
+ GdkPixbuf *rhs = NULL;
+
+ lhs = gdk_pixbuf_new_subpixbuf
+ (marker, width - dest_x, 0, marker_width - width + dest_x, marker_height);
+
+ gdk_pixbuf_composite (lhs, priv->location_map_pixbuf,
+ 0, dest_y,
+ gdk_pixbuf_get_width (lhs),
+ gdk_pixbuf_get_height (lhs),
+ 0, dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ rhs = gdk_pixbuf_new_subpixbuf
+ (marker, 0, 0, width - dest_x, marker_height);
+
+ gdk_pixbuf_composite (rhs, priv->location_map_pixbuf,
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ gdk_pixbuf_get_width (rhs),
+ gdk_pixbuf_get_height (rhs),
+ width - gdk_pixbuf_get_width (rhs) - 1,
+ dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+
+ g_object_unref (lhs);
+ g_object_unref (rhs);
+ } else {
+ gdk_pixbuf_composite (marker, priv->location_map_pixbuf,
+ dest_x, dest_y,
+ gdk_pixbuf_get_width (marker),
+ gdk_pixbuf_get_height (marker),
+ dest_x, dest_y,
+ 1.0, 1.0, GDK_INTERP_NEAREST, 0xFF);
+ }
+
+ if (partial != NULL) {
+ g_object_unref (partial);
+ }
+}
+
+/**
+ * Return value: %TRUE if @loc can be placed on the map, %FALSE otherwise.
+ **/
+static gboolean
+clock_map_place_location (ClockMap *this, ClockLocation *loc, gboolean hilight)
+{
+ gfloat latitude, longitude;
+ gint marker;
+
+ clock_location_get_coords (loc, &latitude, &longitude);
+ /* 0/0 means unset, basically */
+ if (latitude == 0 && longitude == 0)
+ return FALSE;
+
+ if (hilight)
+ marker = MARKER_HILIGHT;
+ else if (clock_location_is_current (loc))
+ marker = MARKER_CURRENT;
+ else
+ marker = MARKER_NORMAL;
+
+ clock_map_mark (this, latitude, longitude, marker);
+
+ return TRUE;
+}
+
+static void
+clock_map_place_locations (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ GList *locs;
+ ClockLocation *loc;
+
+ if (priv->location_map_pixbuf) {
+ g_object_unref (priv->location_map_pixbuf);
+ priv->location_map_pixbuf = NULL;
+ }
+
+ priv->location_map_pixbuf = gdk_pixbuf_copy (priv->stock_map_pixbuf);
+
+ locs = NULL;
+ g_signal_emit (this, signals[NEED_LOCATIONS], 0, &locs);
+
+ while (locs) {
+ loc = CLOCK_LOCATION (locs->data);
+
+ clock_map_place_location (this, loc, FALSE);
+
+ locs = locs->next;
+ }
+
+#if 0
+ /* map_mark test suite for the edge cases */
+
+ /* points around longitude 180 */
+ clock_map_mark (this, 0.0, 180.0);
+ clock_map_mark (this, -15.0, -178.0);
+ clock_map_mark (this, -30.0, -176.0);
+ clock_map_mark (this, 15.0, 178.0);
+ clock_map_mark (this, 30.0, 176.0);
+
+ clock_map_mark (this, 90.0, 180.0);
+ clock_map_mark (this, -90.0, 180.0);
+
+ /* north pole & friends */
+ clock_map_mark (this, 90.0, 0.0);
+ clock_map_mark (this, 88.0, -15.0);
+ clock_map_mark (this, 92.0, 15.0);
+
+ /* south pole & friends */
+ clock_map_mark (this, -90.0, 0.0);
+ clock_map_mark (this, -88.0, -15.0);
+ clock_map_mark (this, -92.0, 15.0);
+#endif
+}
+
+static void
+clock_map_compute_vector (gdouble lat, gdouble lon, gdouble *vec)
+{
+ gdouble lat_rad, lon_rad;
+ lat_rad = lat * (M_PI/180.0);
+ lon_rad = lon * (M_PI/180.0);
+
+ vec[0] = sin(lon_rad) * cos(lat_rad);
+ vec[1] = sin(lat_rad);
+ vec[2] = cos(lon_rad) * cos(lat_rad);
+}
+
+static guchar
+clock_map_is_sunlit (gdouble pos_lat, gdouble pos_long,
+ gdouble sun_lat, gdouble sun_long)
+{
+ gdouble pos_vec[3];
+ gdouble sun_vec[3];
+ gdouble dot;
+
+ /* twilight */
+ gdouble epsilon = 0.01;
+
+ clock_map_compute_vector (pos_lat, pos_long, pos_vec);
+ clock_map_compute_vector (sun_lat, sun_long, sun_vec);
+
+ /* compute the dot product of the two */
+ dot = pos_vec[0]*sun_vec[0] + pos_vec[1]*sun_vec[1]
+ + pos_vec[2]*sun_vec[2];
+
+ if (dot > epsilon) {
+ return 0x00;
+ }
+
+ if (dot < -epsilon) {
+ return 0xFF;
+ }
+
+ return (guchar)(-128 * ((dot / epsilon) - 1));
+}
+
+static void
+clock_map_render_shadow_pixbuf (GdkPixbuf *pixbuf)
+{
+ int x, y;
+ int height, width;
+ int n_channels, rowstride;
+ guchar *pixels, *p;
+ gdouble sun_lat, sun_lon;
+ time_t now = time (NULL);
+
+ n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+ rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+
+ sun_position (now, &sun_lat, &sun_lon);
+
+ for (y = 0; y < height; y++) {
+ gdouble lat = (height / 2.0 - y) / (height / 2.0) * 90.0;
+
+ for (x = 0; x < width; x++) {
+ guchar shade;
+ gdouble lon =
+ (x - width / 2.0) / (width / 2.0) * 180.0;
+
+ shade = clock_map_is_sunlit (lat, lon,
+ sun_lat, sun_lon);
+
+ p = pixels + y * rowstride + x * n_channels;
+ p[3] = shade;
+ }
+ }
+}
+
+static void
+clock_map_render_shadow (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ if (priv->shadow_pixbuf) {
+ g_object_unref (priv->shadow_pixbuf);
+ }
+
+ priv->shadow_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
+ priv->width, priv->height);
+
+ /* Initialize to all shadow */
+ gdk_pixbuf_fill (priv->shadow_pixbuf, 0x6d9ccdff);
+
+ clock_map_render_shadow_pixbuf (priv->shadow_pixbuf);
+
+ if (priv->shadow_map_pixbuf) {
+ g_object_unref (priv->shadow_map_pixbuf);
+ }
+
+ priv->shadow_map_pixbuf = gdk_pixbuf_copy (priv->location_map_pixbuf);
+
+ gdk_pixbuf_composite (priv->shadow_pixbuf, priv->shadow_map_pixbuf,
+ 0, 0, priv->width, priv->height,
+ 0, 0, 1, 1, GDK_INTERP_NEAREST, 0x66);
+}
+
+static void
+clock_map_display (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+
+ clock_map_render_shadow (this);
+ gtk_widget_queue_draw (GTK_WIDGET (this));
+
+ time (&priv->last_refresh);
+}
+
+typedef struct {
+ ClockMap *map;
+ ClockLocation *location;
+ int count;
+} BlinkData;
+
+static gboolean
+highlight (gpointer user_data)
+{
+ BlinkData *data = user_data;
+
+ if (data->count == 6)
+ return FALSE;
+
+ if (data->count % 2 == 0) {
+ if (!clock_map_place_location (data->map,
+ data->location, TRUE))
+ return FALSE;
+ } else
+ clock_map_place_locations (data->map);
+ clock_map_display (data->map);
+
+ data->count++;
+
+ return TRUE;
+}
+
+static void
+highlight_destroy (gpointer user_data)
+{
+ BlinkData *data = user_data;
+ ClockMapPrivate *priv;
+
+ priv = PRIVATE (data->map);
+ priv->highlight_timeout_id = 0;
+
+ g_object_unref (data->location);
+ g_free (data);
+}
+
+void
+clock_map_blink_location (ClockMap *this, ClockLocation *loc)
+{
+ BlinkData *data;
+ ClockMapPrivate *priv;
+
+ priv = PRIVATE (this);
+
+ g_return_if_fail (IS_CLOCK_MAP (this));
+ g_return_if_fail (IS_CLOCK_LOCATION (loc));
+
+ data = g_new0 (BlinkData, 1);
+ data->map = this;
+ data->location = g_object_ref (loc);
+
+ if (priv->highlight_timeout_id) {
+ g_source_remove (priv->highlight_timeout_id);
+ clock_map_place_locations (this);
+ }
+
+ highlight (data);
+
+ priv->highlight_timeout_id = g_timeout_add_full (G_PRIORITY_DEFAULT_IDLE,
+ 300, highlight, data,
+ highlight_destroy);
+}
+
+static gboolean
+clock_map_needs_refresh (ClockMap *this)
+{
+ ClockMapPrivate *priv = PRIVATE (this);
+ time_t now_t;
+
+ time (&now_t);
+
+ /* refresh once per minute */
+ return (ABS (now_t - priv->last_refresh) >= 60);
+}
+
+void
+clock_map_update_time (ClockMap *this)
+{
+
+ g_return_if_fail (IS_CLOCK_MAP (this));
+
+ if (!clock_map_needs_refresh (this)) {
+ return;
+ }
+
+ clock_map_display (this);
+}
diff --git a/applets/clock/clock-map.h b/applets/clock/clock-map.h
new file mode 100644
index 00000000..2b662c87
--- /dev/null
+++ b/applets/clock/clock-map.h
@@ -0,0 +1,43 @@
+#ifndef __CLOCK_MAP_H__
+#define __CLOCK_MAP_H__
+
+#include "clock.h"
+#include "clock-location.h"
+
+#include <gtk/gtk.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_MAP_TYPE (clock_map_get_type ())
+#define CLOCK_MAP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CLOCK_MAP_TYPE, ClockMap))
+#define CLOCK_MAP_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), CLOCK_MAP_TYPE, ClockMapClass))
+#define IS_CLOCK_MAP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CLOCK_MAP_TYPE))
+#define IS_CLOCK_MAP_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), CLOCK_MAP_TYPE))
+#define CLOCK_MAP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CLOCK_MAP_TYPE, ClockMapClass))
+
+typedef struct
+{
+ GtkWidget parent;
+} ClockMap;
+
+typedef struct
+{
+ GtkWidgetClass parent_class;
+
+ GList *(* need_locations) (ClockMap *map);
+} ClockMapClass;
+
+GType clock_map_get_type (void);
+
+ClockMap *clock_map_new (void);
+void clock_map_refresh (ClockMap *this);
+void clock_map_update_time (ClockMap *this);
+void clock_map_blink_location (ClockMap *this, ClockLocation *loc);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __CLOCK_MAP_H__ */
diff --git a/applets/clock/clock-marshallers.list b/applets/clock/clock-marshallers.list
new file mode 100644
index 00000000..8c4d3072
--- /dev/null
+++ b/applets/clock/clock-marshallers.list
@@ -0,0 +1,3 @@
+POINTER:VOID
+VOID:OBJECT,STRING
+INT:VOID
diff --git a/applets/clock/clock-menu.xml b/applets/clock/clock-menu.xml
new file mode 100644
index 00000000..abe0e071
--- /dev/null
+++ b/applets/clock/clock-menu.xml
@@ -0,0 +1,8 @@
+<menuitem name="Clock Copy Time Item" action="ClockCopyTime" />
+<menuitem name="Clock Copy Date Item" action="ClockCopyDate" />
+<separator/>
+<menuitem name="Clock Configure Item" action="ClockConfig" />
+<menuitem name="Clock Preferences Item" action="ClockPreferences" />
+<menuitem name="Clock Help Item" action="ClockHelp" />
+<menuitem name="Clock About Item" action="ClockAbout" />
+
diff --git a/applets/clock/clock-sunpos.c b/applets/clock/clock-sunpos.c
new file mode 100644
index 00000000..2103fd90
--- /dev/null
+++ b/applets/clock/clock-sunpos.c
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2007 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Jonathan Blandford <[email protected]>
+ * Matthias Clasen <[email protected]>
+ */
+
+#include <time.h>
+#include <gtk/gtk.h>
+#include <math.h>
+#include "clock-sunpos.h"
+
+/* Calculated with the methods and figures from "Practical Astronomy With Your
+ * Calculator, version 3" by Peter Duffet-Smith.
+ */
+/* Table 6. Details of the Sun's apparent matecorba at epoch 1990.0 */
+
+#define EPOCH 2447891.5 /* days */ /* epoch 1990 */
+#define UNIX_EPOCH 2440586.5 /* days */ /* epoch 1970 */
+#define EPSILON_G 279.403303 /* degrees */ /* ecliptic longitude at epoch 1990.0 */
+#define MU_G 282.768422 /* degrees */ /* ecliptic longitude at perigee */
+#define ECCENTRICITY 0.016713 /* eccentricity of matecorba */
+#define R_0 149598500 /* km */ /* semi-major axis */
+#define THETA_0 0.533128 /* degrees */ /* angular diameter at r = r_0 */
+#define MEAN_OBLIQUITY 23.440592 /* degrees */ /* mean obliquity of earth's axis at epoch 1990.0 */
+
+#define NORMALIZE(x) \
+ while (x>360) x-=360; while (x<0) x+= 360;
+
+#define DEG_TO_RADS(x) \
+ (x * G_PI/180.0)
+
+#define RADS_TO_DEG(x) \
+ (x * 180.0/G_PI)
+
+/* Calculate number of days since 4713BC.
+ */
+static gdouble
+unix_time_to_julian_date (gint unix_time)
+{
+ return UNIX_EPOCH + (double) unix_time / (60 * 60 * 24);
+}
+
+/* Finds an iterative solution for [ E - e sin (E) = M ] for values of e less
+ than 0.1. Page 90 */
+
+#define ERROR_ACCURACY 1e-6 /* radians */
+
+static gdouble
+solve_keplers_equation (gdouble e,
+ gdouble M)
+{
+ gdouble d, E;
+
+ /* start with an initial estimate */
+ E = M;
+
+ d = E - e * sin (E) - M;
+
+ while (ABS (d) > ERROR_ACCURACY)
+ {
+ E = E - (d / (1 - e * cos (E)));
+ d = E - e * sin (E) - M;
+ }
+
+ return E;
+}
+
+ /* convert the ecliptic longitude to right ascension and declination. Section 27. */
+static void
+ecliptic_to_equatorial (gdouble lambda,
+ gdouble beta,
+ gdouble *ra,
+ gdouble *dec)
+{
+ gdouble cos_mo;
+ gdouble sin_mo;
+
+ g_assert (ra != NULL);
+ g_assert (dec != NULL);
+
+ sin_mo = sin (DEG_TO_RADS (MEAN_OBLIQUITY));
+ cos_mo = cos (DEG_TO_RADS (MEAN_OBLIQUITY));
+
+ *ra = atan2 (sin (lambda) * cos_mo - tan (beta) * sin_mo, cos (lambda));
+ *dec = asin (sin (beta) * cos_mo + cos (beta) * sin_mo * sin (lambda));
+}
+
+/* calculate GST. Section 12 */
+static gdouble
+greenwich_sidereal_time (gdouble unix_time)
+{
+ gdouble u, JD, T, T0, UT;
+
+ u = fmod (unix_time, 24 * 60 * 60);
+ JD = unix_time_to_julian_date (unix_time - u);
+ T = (JD - 2451545) / 36525;
+ T0 = 6.697374558 + (2400.051336 * T) + (0.000025862 * T * T);
+ T0 = fmod (T0, 24);
+ UT = u / (60 * 60);
+ T0 = T0 + UT * 1.002737909;
+ T0 = fmod (T0, 24);
+
+ return T0;
+}
+
+/* Calculate the position of the sun at a given time. pages 89-91 */
+void
+sun_position (time_t unix_time, gdouble *lat, gdouble *lon)
+{
+ gdouble jd, D, N, M, E, x, v, lambda;
+ gdouble ra, dec;
+ jd = unix_time_to_julian_date (unix_time);
+
+ /* Calculate number of days since the epoch */
+ D = jd - EPOCH;
+
+ N = D*360/365.242191;
+
+ /* normalize to 0 - 360 degrees */
+ NORMALIZE (N);
+
+ /* Step 4: */
+ M = N + EPSILON_G - MU_G;
+ NORMALIZE (M);
+
+ /* Step 5: convert to radians */
+ M = DEG_TO_RADS (M);
+
+ /* Step 6: */
+ E = solve_keplers_equation (ECCENTRICITY, M);
+
+ /* Step 7: */
+ x = sqrt ((1 + ECCENTRICITY)/(1 - ECCENTRICITY)) * tan (E/2);
+
+ /* Step 8, 9 */
+ v = 2 * RADS_TO_DEG (atan (x));
+ NORMALIZE (v);
+
+ /* Step 10 */
+ lambda = v + MU_G;
+ NORMALIZE (lambda);
+
+ /* convert the ecliptic longitude to right ascension and declination */
+ ecliptic_to_equatorial (DEG_TO_RADS (lambda), 0.0, &ra, &dec);
+
+ ra = ra - (G_PI/12) * greenwich_sidereal_time (unix_time);
+ ra = RADS_TO_DEG (ra);
+ dec = RADS_TO_DEG (dec);
+ NORMALIZE (ra);
+ NORMALIZE (dec);
+
+ *lat = dec;
+ *lon = ra;
+}
+
+
+#if 0
+int
+main (int argc, char *argv[])
+{
+ gint i;
+ gint now;
+ GTimeVal timeval;
+ gdouble lat, lon;
+
+ gtk_init (&argc, &argv);
+
+ g_get_current_time (&timeval);
+ now = timeval.tv_sec;
+
+ for (i = 0; i < now; i += 15 * 60)
+ {
+ sun_position (i, &lat, &lon);
+ g_print ("%d: %f %f\n", lat, lon);
+ }
+
+ return 0;
+}
+
+#endif
diff --git a/applets/clock/clock-sunpos.h b/applets/clock/clock-sunpos.h
new file mode 100644
index 00000000..97124505
--- /dev/null
+++ b/applets/clock/clock-sunpos.h
@@ -0,0 +1,8 @@
+#ifndef __CLOCK_SUNPOS_H__
+#define __CLOCK_SUNPOS_H__
+
+#include <glib.h>
+
+void sun_position(time_t unix_time, gdouble *lat, gdouble *lon);
+
+#endif
diff --git a/applets/clock/clock-utils.c b/applets/clock/clock-utils.c
new file mode 100644
index 00000000..c9581e00
--- /dev/null
+++ b/applets/clock/clock-utils.c
@@ -0,0 +1,127 @@
+/*
+ * clock-utils.c
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#include "config.h"
+
+#ifdef HAVE_LANGINFO_H
+#include <langinfo.h>
+#endif
+
+#include <glib/gi18n.h>
+
+#include <gtk/gtk.h>
+
+#include "clock.h"
+
+#include "clock-utils.h"
+
+gboolean
+clock_locale_supports_am_pm (void)
+{
+#ifdef HAVE_NL_LANGINFO
+ const char *am;
+
+ am = nl_langinfo (AM_STR);
+ return (am[0] != '\0');
+#else
+ return TRUE;
+#endif
+}
+
+ClockFormat
+clock_locale_format (void)
+{
+ return clock_locale_supports_am_pm () ?
+ CLOCK_FORMAT_12 : CLOCK_FORMAT_24;
+}
+
+void
+clock_utils_display_help (GtkWidget *widget,
+ const char *doc_id,
+ const char *link_id)
+{
+ GError *error = NULL;
+ char *uri;
+
+ if (link_id)
+ uri = g_strdup_printf ("ghelp:%s?%s", doc_id, link_id);
+ else
+ uri = g_strdup_printf ("ghelp:%s", doc_id);
+
+ gtk_show_uri (gtk_widget_get_screen (widget), uri,
+ gtk_get_current_event_time (), &error);
+
+ g_free (uri);
+
+ if (error &&
+ g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_error_free (error);
+ else if (error) {
+ GtkWidget *parent;
+ GtkWidget *dialog;
+ char *primary;
+
+ if (GTK_IS_WINDOW (widget))
+ parent = widget;
+ else
+ parent = NULL;
+
+ primary = g_markup_printf_escaped (
+ _("Could not display help document '%s'"),
+ doc_id);
+ dialog = gtk_message_dialog_new (
+ parent ? GTK_WINDOW (parent) : NULL,
+ GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s", primary);
+
+ gtk_message_dialog_format_secondary_text (
+ GTK_MESSAGE_DIALOG (dialog),
+ "%s", error->message);
+
+ g_error_free (error);
+ g_free (primary);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), CLOCK_ICON);
+ gtk_window_set_screen (GTK_WINDOW (dialog),
+ gtk_widget_get_screen (widget));
+
+ if (parent == NULL) {
+ /* we have no parent window */
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog),
+ FALSE);
+ gtk_window_set_title (GTK_WINDOW (dialog),
+ _("Error displaying help document"));
+ }
+
+ gtk_widget_show (dialog);
+ }
+}
diff --git a/applets/clock/clock-utils.h b/applets/clock/clock-utils.h
new file mode 100644
index 00000000..a185d9e2
--- /dev/null
+++ b/applets/clock/clock-utils.h
@@ -0,0 +1,57 @@
+/*
+ * clock-utils.h
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#ifndef __CLOCK_UTILS_H__
+#define __CLOCK_UTILS_H__
+
+#include <gtk/gtk.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Needs to match the indices in the combo of the prefs dialog */
+typedef enum {
+ CLOCK_FORMAT_INVALID = 0,
+ CLOCK_FORMAT_12,
+ CLOCK_FORMAT_24,
+ CLOCK_FORMAT_UNIX,
+ CLOCK_FORMAT_INTERNET,
+ CLOCK_FORMAT_CUSTOM
+} ClockFormat;
+
+gboolean clock_locale_supports_am_pm (void);
+ClockFormat clock_locale_format (void);
+
+void clock_utils_display_help (GtkWidget *widget,
+ const char *doc_id,
+ const char *link_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CLOCK_UTILS_H__ */
diff --git a/applets/clock/clock.c b/applets/clock/clock.c
new file mode 100644
index 00000000..b4846009
--- /dev/null
+++ b/applets/clock/clock.c
@@ -0,0 +1,3745 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+/*
+ * clock.c: the MATE clock applet
+ *
+ * Copyright (C) 1997-2003 Free Software Foundation, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Miguel de Icaza
+ * Frederico Mena
+ * Stuart Parmenter
+ * Alexander Larsson
+ * George Lebl
+ * Gediminas Paulauskas
+ * Mark McLoughlin
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <string.h>
+#include <time.h>
+#include <sys/time.h>
+#include <math.h>
+#include <locale.h>
+
+#include <mate-panel-applet.h>
+#include <mate-panel-applet-mateconf.h>
+
+#include <glib/gi18n.h>
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <gdk/gdkx.h>
+#include <mateconf/mateconf-client.h>
+
+#include <libmateweather/mateweather-prefs.h>
+#include <libmateweather/mateweather-xml.h>
+#include <libmateweather/location-entry.h>
+#include <libmateweather/timezone-menu.h>
+
+#ifdef HAVE_LIBECAL
+#include <libedataserverui/e-passwords.h>
+#endif
+
+#include "clock.h"
+
+#include "calendar-window.h"
+#include "clock-location.h"
+#include "clock-location-tile.h"
+#include "clock-map.h"
+#include "clock-utils.h"
+#include "set-timezone.h"
+#include "system-timezone.h"
+
+#define INTERNETSECOND (864)
+#define INTERNETBEAT (86400)
+
+#define NEVER_SENSITIVE "never_sensitive"
+
+#define N_MATECONF_PREFS 11 /* Keep this in sync with the number of keys below! */
+#define KEY_FORMAT "format"
+#define KEY_SHOW_SECONDS "show_seconds"
+#define KEY_SHOW_DATE "show_date"
+#define KEY_SHOW_WEATHER "show_weather"
+#define KEY_SHOW_TEMPERATURE "show_temperature"
+#define KEY_CUSTOM_FORMAT "custom_format"
+#define KEY_SHOW_WEEK "show_week_numbers"
+#define KEY_CITIES "cities"
+#define KEY_TEMPERATURE_UNIT "temperature_unit"
+#define KEY_SPEED_UNIT "speed_unit"
+
+static MateConfEnumStringPair format_type_enum_map [] = {
+ { CLOCK_FORMAT_12, "12-hour" },
+ { CLOCK_FORMAT_24, "24-hour" },
+ { CLOCK_FORMAT_UNIX, "unix" },
+ { CLOCK_FORMAT_INTERNET, "internet" },
+ { CLOCK_FORMAT_CUSTOM, "custom" },
+ { 0, NULL }
+};
+
+enum {
+ COL_CITY_NAME = 0,
+ COL_CITY_TZ,
+ COL_CITY_LOC,
+ COL_CITY_LAST
+};
+
+typedef struct _ClockData ClockData;
+
+struct _ClockData {
+ /* widgets */
+ GtkWidget *applet;
+
+ GtkWidget *panel_button; /* main toggle button for the whole clock */
+
+ GtkWidget *main_obox; /* orientable box inside panel_button */
+ GtkWidget *weather_obox; /* orientable box for the weather widgets */
+
+ GtkWidget *clockw; /* main label for the date/time display */
+
+ GtkWidget *panel_weather_icon;
+ GtkWidget *panel_temperature_label;
+
+ GtkWidget *props;
+ GtkWidget *calendar_popup;
+
+ GtkWidget *clock_vbox;
+ GtkSizeGroup *clock_group;
+
+ GtkBuilder *builder;
+
+ /* Preferences dialog */
+ GtkWidget *prefs_window;
+ GtkTreeView *prefs_locations;
+
+ GtkWidget *prefs_location_add_button;
+ GtkWidget *prefs_location_edit_button;
+ GtkWidget *prefs_location_remove_button;
+
+ MateWeatherLocationEntry *location_entry;
+ MateWeatherTimezoneMenu *zone_combo;
+
+ GtkWidget *time_settings_button;
+ GtkWidget *calendar;
+ GtkWidget *hours_spin;
+ GtkWidget *minutes_spin;
+ GtkWidget *seconds_spin;
+ GtkWidget *set_time_button;
+
+ GtkListStore *cities_store;
+ GtkWidget *cities_section;
+ GtkWidget *map_section;
+ GtkWidget *map_widget;
+
+ /* Window to set the time */
+ GtkWidget *set_time_window;
+ GtkWidget *current_time_label;
+
+ /* preferences */
+ ClockFormat format;
+ char *custom_format;
+ gboolean showseconds;
+ gboolean showdate;
+ gboolean showweek;
+ gboolean show_weather;
+ gboolean show_temperature;
+
+ gboolean use_temperature_default;
+ gboolean use_speed_default;
+ TempUnit temperature_unit;
+ SpeedUnit speed_unit;
+
+ /* Locations */
+ GList *locations;
+ GList *location_tiles;
+
+ /* runtime data */
+ time_t current_time;
+ char *timeformat;
+ guint timeout;
+ MatePanelAppletOrient orient;
+ int size;
+ GtkAllocation old_allocation;
+
+ SystemTimezone *systz;
+
+ int fixed_width;
+ int fixed_height;
+
+ GtkWidget *showseconds_check;
+ GtkWidget *showdate_check;
+ GtkWidget *custom_hbox;
+ GtkWidget *custom_label;
+ GtkWidget *custom_entry;
+ gboolean custom_format_shown;
+
+ gboolean can_handle_format_12;
+
+ guint listeners [N_MATECONF_PREFS];
+};
+
+/* Used to count the number of clock instances. It's there to know when we
+ * should free resources that are shared. */
+static int clock_numbers = 0;
+
+static void update_clock (ClockData * cd);
+static void update_tooltip (ClockData * cd);
+static void update_panel_weather (ClockData *cd);
+static int clock_timeout_callback (gpointer data);
+static float get_itime (time_t current_time);
+
+static void set_atk_name_description (GtkWidget *widget,
+ const char *name,
+ const char *desc);
+static void verb_display_properties_dialog (GtkAction *action,
+ ClockData *cd);
+
+static void display_properties_dialog (ClockData *cd,
+ gboolean start_in_locations_page);
+static void display_help_dialog (GtkAction *action,
+ ClockData *cd);
+static void display_about_dialog (GtkAction *action,
+ ClockData *cd);
+static void position_calendar_popup (ClockData *cd);
+static void update_orient (ClockData *cd);
+static void applet_change_orient (MatePanelApplet *applet,
+ MatePanelAppletOrient orient,
+ ClockData *cd);
+
+static void edit_hide (GtkWidget *unused, ClockData *cd);
+static gboolean edit_delete (GtkWidget *unused, GdkEvent *event, ClockData *cd);
+static void save_cities_store (ClockData *cd);
+
+/* ClockBox, an instantiable GtkBox */
+
+typedef GtkBox ClockBox;
+typedef GtkBoxClass ClockBoxClass;
+
+static GType clock_box_get_type (void);
+
+G_DEFINE_TYPE (ClockBox, clock_box, GTK_TYPE_BOX)
+
+static void
+clock_box_init (ClockBox *box)
+{
+}
+
+static void
+clock_box_class_init (ClockBoxClass *klass)
+{
+}
+
+/* Clock */
+
+static inline GtkWidget *
+_clock_get_widget (ClockData *cd,
+ const char *name)
+{
+ return GTK_WIDGET (gtk_builder_get_object (cd->builder, name));
+}
+
+static void
+unfix_size (ClockData *cd)
+{
+ cd->fixed_width = -1;
+ cd->fixed_height = -1;
+ gtk_widget_queue_resize (cd->panel_button);
+}
+
+static int
+calculate_minimum_width (GtkWidget *widget,
+ const gchar *text)
+{
+ PangoContext *context;
+ PangoLayout *layout;
+ int width, height;
+ int focus_width = 0;
+ int focus_pad = 0;
+
+ context = gtk_widget_get_pango_context (widget);
+
+ layout = pango_layout_new (context);
+ pango_layout_set_alignment (layout, PANGO_ALIGN_LEFT);
+ pango_layout_set_text (layout, text, -1);
+ pango_layout_get_pixel_size (layout, &width, &height);
+ g_object_unref (G_OBJECT (layout));
+ layout = NULL;
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
+
+ width += 2 * (focus_width + focus_pad + gtk_widget_get_style (widget)->xthickness);
+
+ return width;
+}
+
+static void
+clock_set_timeout (ClockData *cd,
+ time_t now)
+{
+ int timeouttime;
+
+ if (cd->format == CLOCK_FORMAT_INTERNET) {
+ int itime_ms;
+
+ itime_ms = ((unsigned int) (get_itime (now) * 1000));
+
+ if (!cd->showseconds)
+ timeouttime = (999 - itime_ms % 1000) * 86.4 + 1;
+ else {
+ struct timeval tv;
+ gettimeofday (&tv, NULL);
+ itime_ms += (tv.tv_usec * 86.4) / 1000;
+ timeouttime = ((999 - itime_ms % 1000) * 86.4) / 100 + 1;
+ }
+ } else {
+ struct timeval tv;
+
+ gettimeofday (&tv, NULL);
+ timeouttime = (G_USEC_PER_SEC - tv.tv_usec)/1000+1;
+
+ /* timeout of one minute if we don't care about the seconds */
+ if (cd->format != CLOCK_FORMAT_UNIX &&
+ !cd->showseconds &&
+ (!cd->set_time_window || !gtk_widget_get_visible (cd->set_time_window)))
+ timeouttime += 1000 * (59 - now % 60);
+ }
+
+ cd->timeout = g_timeout_add (timeouttime,
+ clock_timeout_callback,
+ cd);
+}
+
+static int
+clock_timeout_callback (gpointer data)
+{
+ ClockData *cd = data;
+ time_t new_time;
+
+ time (&new_time);
+
+ if (!cd->showseconds &&
+ (!cd->set_time_window || !gtk_widget_get_visible (cd->set_time_window)) &&
+ cd->format != CLOCK_FORMAT_UNIX &&
+ cd->format != CLOCK_FORMAT_CUSTOM) {
+ if (cd->format == CLOCK_FORMAT_INTERNET &&
+ (unsigned int)get_itime (new_time) !=
+ (unsigned int)get_itime (cd->current_time)) {
+ update_clock (cd);
+ } else if ((cd->format == CLOCK_FORMAT_12 ||
+ cd->format == CLOCK_FORMAT_24) &&
+ new_time / 60 != cd->current_time / 60) {
+ update_clock (cd);
+ }
+ } else {
+ update_clock (cd);
+ }
+
+ clock_set_timeout (cd, new_time);
+
+ return FALSE;
+}
+
+static float
+get_itime (time_t current_time)
+{
+ struct tm *tm;
+ float itime;
+ time_t bmt;
+
+ /* BMT (Biel Mean Time) is GMT+1 */
+ bmt = current_time + 3600;
+ tm = gmtime (&bmt);
+ itime = (tm->tm_hour*3600.0 + tm->tm_min*60.0 + tm->tm_sec)/86.4;
+
+ return itime;
+}
+
+/* adapted from panel-toplevel.c */
+static int
+calculate_minimum_height (GtkWidget *widget,
+ MatePanelAppletOrient orientation)
+{
+ GtkStyle *style;
+ PangoContext *context;
+ PangoFontMetrics *metrics;
+ int focus_width = 0;
+ int focus_pad = 0;
+ int ascent;
+ int descent;
+ int thickness;
+
+ style = gtk_widget_get_style (widget);
+ context = gtk_widget_get_pango_context (widget);
+ metrics = pango_context_get_metrics (context,
+ style->font_desc,
+ pango_context_get_language (context));
+
+ ascent = pango_font_metrics_get_ascent (metrics);
+ descent = pango_font_metrics_get_descent (metrics);
+
+ pango_font_metrics_unref (metrics);
+
+ gtk_widget_style_get (widget,
+ "focus-line-width", &focus_width,
+ "focus-padding", &focus_pad,
+ NULL);
+
+ if (orientation == MATE_PANEL_APPLET_ORIENT_UP
+ || orientation == MATE_PANEL_APPLET_ORIENT_DOWN) {
+ thickness = style->ythickness;
+ } else {
+ thickness = style->xthickness;
+ }
+
+ return PANGO_PIXELS (ascent + descent) + 2 * (focus_width + focus_pad + thickness);
+}
+
+static gboolean
+use_two_line_format (ClockData *cd)
+{
+ if (cd->size >= 2 * calculate_minimum_height (cd->panel_button, cd->orient))
+ return TRUE;
+
+ return FALSE;
+}
+
+static char *
+get_updated_timeformat (ClockData *cd)
+{
+ /* Show date in another line if panel is vertical, or
+ * horizontal but large enough to hold two lines of text
+ */
+ char *result;
+ const char *time_format;
+ const char *date_format;
+ char *clock_format;
+
+ if (cd->format == CLOCK_FORMAT_12)
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 12-hours format (eg, like
+ * in the US: 8:10 am). The %p expands to am/pm. */
+ time_format = cd->showseconds ? _("%l:%M:%S %p") : _("%l:%M %p");
+ else
+ /* Translators: This is a strftime format string.
+ * It is used to display the time in 24-hours format (eg, like
+ * in France: 20:10). */
+ time_format = cd->showseconds ? _("%H:%M:%S") : _("%H:%M");
+
+ if (!cd->showdate)
+ clock_format = g_strdup (time_format);
+
+ else {
+ /* Translators: This is a strftime format string.
+ * It is used to display the date. Replace %e with %d if, when
+ * the day of the month as a decimal number is a single digit,
+ * it should begin with a 0 in your locale (e.g. "May 01"
+ * instead of "May 1"). */
+ date_format = _("%a %b %e");
+
+ if (use_two_line_format (cd))
+ /* translators: reverse the order of these arguments
+ * if the time should come before the
+ * date on a clock in your locale.
+ */
+ clock_format = g_strdup_printf (_("%1$s\n%2$s"),
+ date_format,
+ time_format);
+ else
+ /* translators: reverse the order of these arguments
+ * if the time should come before the
+ * date on a clock in your locale.
+ */
+ clock_format = g_strdup_printf (_("%1$s, %2$s"),
+ date_format,
+ time_format);
+ }
+
+ result = g_locale_from_utf8 (clock_format, -1, NULL, NULL, NULL);
+ g_free (clock_format);
+
+ /* let's be paranoid */
+ if (!result)
+ result = g_strdup ("???");
+
+ return result;
+}
+
+static void
+update_timeformat (ClockData *cd)
+{
+ g_free (cd->timeformat);
+ cd->timeformat = get_updated_timeformat (cd);
+}
+
+/* sets accessible name and description for the widget */
+static void
+set_atk_name_description (GtkWidget *widget,
+ const char *name,
+ const char *desc)
+{
+ AtkObject *obj;
+ obj = gtk_widget_get_accessible (widget);
+
+ /* return if gail is not loaded */
+ if (!GTK_IS_ACCESSIBLE (obj))
+ return;
+
+ if (desc != NULL)
+ atk_object_set_description (obj, desc);
+ if (name != NULL)
+ atk_object_set_name (obj, name);
+}
+
+static void
+update_location_tiles (ClockData *cd)
+{
+ GList *l;
+
+ for (l = cd->location_tiles; l; l = l->next) {
+ ClockLocationTile *tile;
+
+ tile = CLOCK_LOCATION_TILE (l->data);
+ clock_location_tile_refresh (tile, FALSE);
+ }
+}
+
+static char *
+format_time (ClockData *cd)
+{
+ struct tm *tm;
+ char hour[256];
+ char *utf8;
+
+ utf8 = NULL;
+
+ tm = localtime (&cd->current_time);
+
+ if (cd->format == CLOCK_FORMAT_UNIX) {
+ if (use_two_line_format (cd)) {
+ utf8 = g_strdup_printf ("%lu\n%05lu",
+ (unsigned long)(cd->current_time / 100000L),
+ (unsigned long)(cd->current_time % 100000L));
+ } else {
+ utf8 = g_strdup_printf ("%lu",
+ (unsigned long)cd->current_time);
+ }
+ } else if (cd->format == CLOCK_FORMAT_INTERNET) {
+ float itime = get_itime (cd->current_time);
+ if (cd->showseconds)
+ utf8 = g_strdup_printf ("@%3.2f", itime);
+ else
+ utf8 = g_strdup_printf ("@%3d", (unsigned int) itime);
+ } else if (cd->format == CLOCK_FORMAT_CUSTOM) {
+ char *timeformat = g_locale_from_utf8 (cd->custom_format, -1,
+ NULL, NULL, NULL);
+ if (!timeformat)
+ strcpy (hour, "???");
+ else if (strftime (hour, sizeof (hour), timeformat, tm) <= 0)
+ strcpy (hour, "???");
+ g_free (timeformat);
+
+ utf8 = g_locale_to_utf8 (hour, -1, NULL, NULL, NULL);
+ } else {
+ if (strftime (hour, sizeof (hour), cd->timeformat, tm) <= 0)
+ strcpy (hour, "???");
+
+ utf8 = g_locale_to_utf8 (hour, -1, NULL, NULL, NULL);
+ }
+
+ if (!utf8)
+ utf8 = g_strdup (hour);
+
+ return utf8;
+}
+
+static gchar *
+format_time_24 (ClockData *cd)
+{
+ struct tm *tm;
+ gchar buf[128];
+
+ tm = localtime (&cd->current_time);
+ strftime (buf, sizeof (buf) - 1, "%k:%M:%S", tm);
+ return g_locale_to_utf8 (buf, -1, NULL, NULL, NULL);
+}
+
+static void
+update_clock (ClockData * cd)
+{
+ gboolean use_markup;
+ char *utf8;
+
+ use_markup = FALSE;
+
+ time (&cd->current_time);
+ utf8 = format_time (cd);
+
+ use_markup = FALSE;
+ if (pango_parse_markup (utf8, -1, 0, NULL, NULL, NULL, NULL))
+ use_markup = TRUE;
+
+ if (use_markup)
+ gtk_label_set_markup (GTK_LABEL (cd->clockw), utf8);
+ else
+ gtk_label_set_text (GTK_LABEL (cd->clockw), utf8);
+
+ g_free (utf8);
+
+ update_orient (cd);
+ gtk_widget_queue_resize (cd->panel_button);
+
+ update_tooltip (cd);
+ update_location_tiles (cd);
+
+ if (cd->map_widget && cd->calendar_popup && gtk_widget_get_visible (cd->calendar_popup))
+ clock_map_update_time (CLOCK_MAP (cd->map_widget));
+
+ if (cd->current_time_label &&
+ gtk_widget_get_visible (cd->current_time_label)) {
+ utf8 = format_time_24 (cd);
+ gtk_label_set_text (GTK_LABEL (cd->current_time_label), utf8);
+ g_free (utf8);
+ }
+}
+
+static void
+update_tooltip (ClockData * cd)
+{
+ if (!cd->showdate) {
+ struct tm *tm;
+ char date[256];
+ char *utf8, *loc;
+ char *zone;
+ time_t now_t;
+ struct tm now;
+ char *tip;
+
+ tm = localtime (&cd->current_time);
+
+ utf8 = NULL;
+
+ /* Show date in tooltip. */
+ /* Translators: This is a strftime format string.
+ * It is used to display a date. Please leave "%%s" as it is:
+ * it will be used to insert the timezone name later. */
+ loc = g_locale_from_utf8 (_("%A %B %d (%%s)"), -1, NULL, NULL, NULL);
+ if (!loc)
+ strcpy (date, "???");
+ else if (strftime (date, sizeof (date), loc, tm) <= 0)
+ strcpy (date, "???");
+ g_free (loc);
+
+ utf8 = g_locale_to_utf8 (date, -1, NULL, NULL, NULL);
+
+ /* Add the timezone name */
+
+ tzset ();
+ time (&now_t);
+ localtime_r (&now_t, &now);
+
+ if (now.tm_isdst > 0) {
+ zone = tzname[1];
+ } else {
+ zone = tzname[0];
+ }
+
+ tip = g_strdup_printf (utf8, zone);
+
+ gtk_widget_set_tooltip_text (cd->panel_button, tip);
+ g_free (utf8);
+ g_free (tip);
+ } else {
+#ifdef HAVE_LIBECAL
+ if (cd->calendar_popup)
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to hide your appointments and tasks"));
+ else
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to view your appointments and tasks"));
+#else
+ if (cd->calendar_popup)
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to hide month calendar"));
+ else
+ gtk_widget_set_tooltip_text (cd->panel_button,
+ _("Click to view month calendar"));
+#endif
+ }
+}
+
+static void
+refresh_clock (ClockData *cd)
+{
+ unfix_size (cd);
+ update_clock (cd);
+}
+
+static void
+refresh_clock_timeout(ClockData *cd)
+{
+ unfix_size (cd);
+
+ update_timeformat (cd);
+
+ if (cd->timeout)
+ g_source_remove (cd->timeout);
+
+ update_clock (cd);
+
+ clock_set_timeout (cd, cd->current_time);
+}
+
+/**
+ * This is like refresh_clock_timeout(), except that we only care about whether
+ * the time actually changed. We don't care about the format.
+ */
+static void
+refresh_click_timeout_time_only (ClockData *cd)
+{
+ if (cd->timeout)
+ g_source_remove (cd->timeout);
+ clock_timeout_callback (cd);
+}
+
+static void
+free_locations (ClockData *cd)
+{
+ GList *l;
+
+ for (l = cd->locations; l; l = l->next)
+ g_object_unref (l->data);
+
+ g_list_free (cd->locations);
+ cd->locations = NULL;
+}
+
+static void
+destroy_clock (GtkWidget * widget, ClockData *cd)
+{
+ MateConfClient *client;
+ int i;
+
+ client = mateconf_client_get_default ();
+
+ for (i = 0; i < N_MATECONF_PREFS; i++)
+ mateconf_client_notify_remove (
+ client, cd->listeners [i]);
+
+ g_object_unref (G_OBJECT (client));
+
+ if (cd->timeout)
+ g_source_remove (cd->timeout);
+ cd->timeout = 0;
+
+ if (cd->props)
+ gtk_widget_destroy (cd->props);
+ cd->props = NULL;
+
+ if (cd->calendar_popup)
+ gtk_widget_destroy (cd->calendar_popup);
+ cd->calendar_popup = NULL;
+
+ g_free (cd->timeformat);
+ g_free (cd->custom_format);
+
+ free_locations (cd);
+
+ g_list_free (cd->location_tiles);
+ cd->location_tiles = NULL;
+
+ if (cd->systz) {
+ g_object_unref (cd->systz);
+ cd->systz = NULL;
+ }
+
+ if (cd->cities_store) {
+ g_object_unref (cd->cities_store);
+ cd->cities_store = NULL;
+ }
+
+ if (cd->builder) {
+ g_object_unref (cd->builder);
+ cd->builder = NULL;
+ }
+
+ g_free (cd);
+
+#ifdef HAVE_LIBECAL
+ if (clock_numbers > 0) {
+ e_passwords_shutdown ();
+ clock_numbers--;
+ }
+#endif
+}
+
+static gboolean
+close_on_escape (GtkWidget *widget,
+ GdkEventKey *event,
+ GtkToggleButton *toggle_button)
+{
+ if (event->keyval == GDK_Escape) {
+ gtk_toggle_button_set_active (toggle_button, FALSE);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+delete_event (GtkWidget *widget,
+ GdkEvent *event,
+ GtkToggleButton *toggle_button)
+{
+ gtk_toggle_button_set_active (toggle_button, FALSE);
+ return TRUE;
+}
+
+static void
+edit_locations_cb (CalendarWindow *calwin, gpointer data)
+{
+ ClockData *cd;
+
+ cd = data;
+
+ display_properties_dialog (cd, TRUE);
+}
+
+static GtkWidget *
+create_calendar (ClockData *cd)
+{
+ GtkWidget *window;
+ char *prefs_dir;
+
+ prefs_dir = mate_panel_applet_get_preferences_key (MATE_PANEL_APPLET (cd->applet));
+ window = calendar_window_new (&cd->current_time,
+ prefs_dir,
+ cd->orient == MATE_PANEL_APPLET_ORIENT_UP);
+ g_free (prefs_dir);
+
+ calendar_window_set_show_weeks (CALENDAR_WINDOW (window),
+ cd->showweek);
+ calendar_window_set_time_format (CALENDAR_WINDOW (window),
+ cd->format);
+
+ gtk_window_set_screen (GTK_WINDOW (window),
+ gtk_widget_get_screen (cd->applet));
+
+ g_signal_connect (window, "edit-locations",
+ G_CALLBACK (edit_locations_cb), cd);
+
+ g_signal_connect (window, "delete_event",
+ G_CALLBACK (delete_event), cd->panel_button);
+ g_signal_connect (window, "key_press_event",
+ G_CALLBACK (close_on_escape), cd->panel_button);
+
+ return window;
+}
+
+static void
+position_calendar_popup (ClockData *cd)
+{
+ GtkRequisition req;
+ GtkAllocation allocation;
+ GdkScreen *screen;
+ GdkRectangle monitor;
+ GdkGravity gravity = GDK_GRAVITY_NORTH_WEST;
+ int button_w, button_h;
+ int x, y;
+ int w, h;
+ int i, n;
+ gboolean found_monitor = FALSE;
+
+ /* Get root origin of the toggle button, and position above that. */
+ gdk_window_get_origin (gtk_widget_get_window (cd->panel_button),
+ &x, &y);
+
+ gtk_window_get_size (GTK_WINDOW (cd->calendar_popup), &w, &h);
+ gtk_widget_size_request (cd->calendar_popup, &req);
+ w = req.width;
+ h = req.height;
+
+ gtk_widget_get_allocation (cd->panel_button, &allocation);
+ button_w = allocation.width;
+ button_h = allocation.height;
+
+ screen = gtk_window_get_screen (GTK_WINDOW (cd->calendar_popup));
+
+ n = gdk_screen_get_n_monitors (screen);
+ for (i = 0; i < n; i++) {
+ gdk_screen_get_monitor_geometry (screen, i, &monitor);
+ if (x >= monitor.x && x <= monitor.x + monitor.width &&
+ y >= monitor.y && y <= monitor.y + monitor.height) {
+ found_monitor = TRUE;
+ break;
+ }
+ }
+
+ if (!found_monitor) {
+ /* eek, we should be on one of those xinerama
+ monitors */
+ monitor.x = 0;
+ monitor.y = 0;
+ monitor.width = gdk_screen_get_width (screen);
+ monitor.height = gdk_screen_get_height (screen);
+ }
+
+ /* Based on panel orientation, position the popup.
+ * Ignore window gravity since the window is undecorated.
+ * The orientations are all named backward from what
+ * I expected.
+ */
+ switch (cd->orient) {
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ x += button_w;
+ if ((y + h) > monitor.y + monitor.height)
+ y -= (y + h) - (monitor.y + monitor.height);
+
+ if ((y + h) > (monitor.height / 2))
+ gravity = GDK_GRAVITY_SOUTH_WEST;
+ else
+ gravity = GDK_GRAVITY_NORTH_WEST;
+
+ break;
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ x -= w;
+ if ((y + h) > monitor.y + monitor.height)
+ y -= (y + h) - (monitor.y + monitor.height);
+
+ if ((y + h) > (monitor.height / 2))
+ gravity = GDK_GRAVITY_SOUTH_EAST;
+ else
+ gravity = GDK_GRAVITY_NORTH_EAST;
+
+ break;
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ y += button_h;
+ if ((x + w) > monitor.x + monitor.width)
+ x -= (x + w) - (monitor.x + monitor.width);
+
+ gravity = GDK_GRAVITY_NORTH_WEST;
+
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ y -= h;
+ if ((x + w) > monitor.x + monitor.width)
+ x -= (x + w) - (monitor.x + monitor.width);
+
+ gravity = GDK_GRAVITY_SOUTH_WEST;
+
+ break;
+ }
+
+ gtk_window_move (GTK_WINDOW (cd->calendar_popup), x, y);
+ gtk_window_set_gravity (GTK_WINDOW (cd->calendar_popup), gravity);
+}
+
+static void
+add_to_group (GtkWidget *child, gpointer data)
+{
+ GtkSizeGroup *group = data;
+
+ gtk_size_group_add_widget (group, child);
+}
+
+static void
+create_clock_window (ClockData *cd)
+{
+ GtkWidget *locations_box;
+
+ locations_box = calendar_window_get_locations_box (CALENDAR_WINDOW (cd->calendar_popup));
+ gtk_widget_show (locations_box);
+
+ cd->clock_vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_add (GTK_CONTAINER (locations_box), cd->clock_vbox);
+
+ cd->clock_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+ gtk_size_group_set_ignore_hidden (cd->clock_group, FALSE);
+
+ gtk_container_foreach (GTK_CONTAINER (locations_box),
+ (GtkCallback) add_to_group,
+ cd->clock_group);
+}
+
+static gint
+sort_locations_by_name (gconstpointer a, gconstpointer b)
+{
+ ClockLocation *loc_a = (ClockLocation *) a;
+ ClockLocation *loc_b = (ClockLocation *) b;
+
+ const char *name_a = clock_location_get_display_name (loc_a);
+ const char *name_b = clock_location_get_display_name (loc_b);
+
+ return strcmp (name_a, name_b);
+}
+
+static void
+create_cities_store (ClockData *cd)
+{
+ GtkTreeIter iter;
+ GList *cities = cd->locations;
+ GList *list = NULL;
+
+ if (cd->cities_store) {
+ g_object_unref (G_OBJECT (cd->cities_store));
+ cd->cities_store = NULL;
+ }
+
+ /* City name, Timezone name, Coordinates in lat/long */
+ cd->cities_store = g_object_ref (gtk_list_store_new (COL_CITY_LAST,
+ G_TYPE_STRING, /* COL_CITY_NAME */
+ G_TYPE_STRING, /* COL_CITY_TZ */
+ CLOCK_LOCATION_TYPE)); /* COL_CITY_LOC */
+
+ list = g_list_copy (cities);
+ list = g_list_sort (list, sort_locations_by_name);
+
+ while (list) {
+ ClockLocation *loc = CLOCK_LOCATION (list->data);
+
+ gtk_list_store_append (cd->cities_store, &iter);
+ gtk_list_store_set (cd->cities_store, &iter,
+ COL_CITY_NAME, clock_location_get_display_name (loc),
+ /* FIXME: translate the timezone */
+ COL_CITY_TZ, clock_location_get_timezone (loc),
+ COL_CITY_LOC, loc,
+ -1);
+
+ list = list->next;
+ }
+
+
+ if (cd->prefs_window) {
+ GtkWidget *widget = _clock_get_widget (cd, "cities_list");
+ gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
+ GTK_TREE_MODEL (cd->cities_store));
+ }
+}
+
+static gint
+sort_locations_by_time (gconstpointer a, gconstpointer b)
+{
+ ClockLocation *loc_a = (ClockLocation *) a;
+ ClockLocation *loc_b = (ClockLocation *) b;
+
+ struct tm tm_a;
+ struct tm tm_b;
+ gint ret;
+
+ clock_location_localtime (loc_a, &tm_a);
+ clock_location_localtime (loc_b, &tm_b);
+
+ ret = (tm_a.tm_year == tm_b.tm_year) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_year < tm_b.tm_year) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_mon == tm_b.tm_mon) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_mon < tm_b.tm_mon) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_mday == tm_b.tm_mday) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_mday < tm_b.tm_mday) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_hour == tm_b.tm_hour) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_hour < tm_b.tm_hour) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_min == tm_b.tm_min) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_min < tm_b.tm_min) ? -1 : 1;
+ }
+
+ ret = (tm_a.tm_sec == tm_b.tm_sec) ? 0 : 1;
+ if (ret) {
+ return (tm_a.tm_sec < tm_b.tm_sec) ? -1 : 1;
+ }
+
+ return ret;
+}
+
+static void
+location_tile_pressed_cb (ClockLocationTile *tile, gpointer data)
+{
+ ClockData *cd = data;
+ ClockLocation *loc;
+
+ loc = clock_location_tile_get_location (tile);
+
+ clock_map_blink_location (CLOCK_MAP (cd->map_widget), loc);
+
+ g_object_unref (loc);
+}
+
+static ClockFormat
+location_tile_need_clock_format_cb(ClockLocationTile *tile, gpointer data)
+{
+ ClockData *cd = data;
+
+ return cd->format;
+}
+
+static void
+create_cities_section (ClockData *cd)
+{
+ GList *node;
+ ClockLocationTile *city;
+ GList *cities;
+
+ if (cd->cities_section) {
+ gtk_widget_destroy (cd->cities_section);
+ cd->cities_section = NULL;
+ }
+
+ g_list_free (cd->location_tiles);
+ cd->location_tiles = NULL;
+
+ cd->cities_section = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width (GTK_CONTAINER (cd->cities_section), 0);
+
+ cities = cd->locations;
+ if (g_list_length (cities) == 0) {
+ /* if the list is empty, don't bother showing the
+ cities section */
+ gtk_widget_hide (cd->cities_section);
+ return;
+ }
+
+ /* Copy the existing list, so we can sort it nondestructively */
+ node = g_list_copy (cities);
+ node = g_list_sort (node, sort_locations_by_time);
+ node = g_list_reverse (node);
+
+ while (node) {
+ ClockLocation *loc = node->data;
+
+ city = clock_location_tile_new (loc, CLOCK_FACE_SMALL);
+ g_signal_connect (city, "tile-pressed",
+ G_CALLBACK (location_tile_pressed_cb), cd);
+ g_signal_connect (city, "need-clock-format",
+ G_CALLBACK (location_tile_need_clock_format_cb), cd);
+
+ gtk_box_pack_start (GTK_BOX (cd->cities_section),
+ GTK_WIDGET (city),
+ FALSE, FALSE, 0);
+
+ cd->location_tiles = g_list_prepend (cd->location_tiles, city);
+
+ clock_location_tile_refresh (city, TRUE);
+
+ node = g_list_next (node);
+ }
+
+ g_list_free (node);
+
+ gtk_box_pack_end (GTK_BOX (cd->clock_vbox),
+ cd->cities_section, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (cd->cities_section);
+}
+
+static GList *
+map_need_locations_cb (ClockMap *map, gpointer data)
+{
+ ClockData *cd = data;
+
+ return cd->locations;
+}
+
+static void
+create_map_section (ClockData *cd)
+{
+ ClockMap *map;
+
+ if (cd->map_widget) {
+ gtk_widget_destroy (GTK_WIDGET (cd->map_section));
+ cd->map_widget = NULL;
+ }
+
+ map = clock_map_new ();
+ g_signal_connect (map, "need-locations",
+ G_CALLBACK (map_need_locations_cb), cd);
+
+ cd->map_section = gtk_alignment_new (0, 0, 1, 1);
+ cd->map_widget = GTK_WIDGET (map);
+
+ gtk_container_add (GTK_CONTAINER (cd->map_section), cd->map_widget);
+
+ gtk_alignment_set_padding (GTK_ALIGNMENT (cd->map_section), 1, 1, 1, 1);
+
+ gtk_box_pack_start (GTK_BOX (cd->clock_vbox), cd->map_section, FALSE, FALSE, 0);
+ gtk_widget_show (cd->map_widget);
+ gtk_widget_show (cd->map_section);
+}
+
+static void
+update_calendar_popup (ClockData *cd)
+{
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->panel_button))) {
+ if (cd->calendar_popup) {
+ gtk_widget_destroy (cd->calendar_popup);
+ cd->calendar_popup = NULL;
+ cd->cities_section = NULL;
+ cd->map_section = NULL;
+ cd->map_widget = NULL;
+ cd->clock_vbox = NULL;
+
+ g_list_free (cd->location_tiles);
+ cd->location_tiles = NULL;
+ }
+ update_tooltip (cd);
+ return;
+ }
+
+ if (!cd->calendar_popup) {
+ cd->calendar_popup = create_calendar (cd);
+ g_object_add_weak_pointer (G_OBJECT (cd->calendar_popup),
+ (gpointer *) &cd->calendar_popup);
+ update_tooltip (cd);
+
+ create_clock_window (cd);
+ create_cities_store (cd);
+ create_cities_section (cd);
+ create_map_section (cd);
+ }
+
+ if (cd->calendar_popup && gtk_widget_get_realized (cd->panel_button)) {
+ calendar_window_refresh (CALENDAR_WINDOW (cd->calendar_popup));
+ position_calendar_popup (cd);
+ gtk_window_present (GTK_WINDOW (cd->calendar_popup));
+ }
+}
+
+static void
+toggle_calendar (GtkWidget *button,
+ ClockData *cd)
+{
+ /* if time is wrong, the user might try to fix it by clicking on the
+ * clock */
+ refresh_click_timeout_time_only (cd);
+ update_calendar_popup (cd);
+}
+
+static gboolean
+do_not_eat_button_press (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ if (event->button != 1)
+ g_signal_stop_emission_by_name (widget, "button_press_event");
+
+ return FALSE;
+}
+
+/* Don't request smaller size then the last one we did, this avoids
+ jumping when proportional fonts are used. We must take care to
+ call "unfix_size" whenever options are changed or such where
+ we'd want to forget the fixed size */
+static void
+clock_size_request (GtkWidget *clock, GtkRequisition *req, gpointer data)
+{
+ ClockData *cd = data;
+
+ if (req->width > cd->fixed_width)
+ cd->fixed_width = req->width;
+ if (req->height > cd->fixed_height)
+ cd->fixed_height = req->height;
+ req->width = cd->fixed_width;
+ req->height = cd->fixed_height;
+}
+
+static void
+clock_update_text_gravity (GtkWidget *label)
+{
+ PangoLayout *layout;
+ PangoContext *context;
+
+ layout = gtk_label_get_layout (GTK_LABEL (label));
+ context = pango_layout_get_context (layout);
+ pango_context_set_base_gravity (context, PANGO_GRAVITY_AUTO);
+}
+
+static inline void
+force_no_focus_padding (GtkWidget *widget)
+{
+ static gboolean first_time = TRUE;
+
+ if (first_time) {
+ gtk_rc_parse_string ("\n"
+ " style \"clock-applet-button-style\"\n"
+ " {\n"
+ " GtkWidget::focus-line-width=0\n"
+ " GtkWidget::focus-padding=0\n"
+ " }\n"
+ "\n"
+ " widget \"*.clock-applet-button\" style \"clock-applet-button-style\"\n"
+ "\n");
+ first_time = FALSE;
+ }
+
+ gtk_widget_set_name (widget, "clock-applet-button");
+}
+
+static GtkWidget *
+create_main_clock_button (void)
+{
+ GtkWidget *button;
+
+ button = gtk_toggle_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
+
+ force_no_focus_padding (button);
+
+ return button;
+}
+
+static GtkWidget *
+create_main_clock_label (ClockData *cd)
+{
+ GtkWidget *label;
+
+ label = gtk_label_new (NULL);
+ g_signal_connect (label, "size_request",
+ G_CALLBACK (clock_size_request),
+ cd);
+ g_signal_connect_swapped (label, "style_set",
+ G_CALLBACK (unfix_size),
+ cd);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
+ clock_update_text_gravity (label);
+ g_signal_connect (label, "screen-changed",
+ G_CALLBACK (clock_update_text_gravity),
+ NULL);
+
+ return label;
+}
+
+static gboolean
+weather_tooltip (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_mode,
+ GtkTooltip *tooltip,
+ ClockData *cd)
+{
+ GList *locations, *l;
+ WeatherInfo *info;
+
+ locations = cd->locations;
+
+ for (l = locations; l; l = l->next) {
+ ClockLocation *location = l->data;
+ if (clock_location_is_current (location)) {
+ info = clock_location_get_weather_info (location);
+ if (!info || !weather_info_is_valid (info))
+ continue;
+
+ weather_info_setup_tooltip (info, location, tooltip, cd->format);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+create_clock_widget (ClockData *cd)
+{
+#ifdef HAVE_LIBECAL
+ clock_numbers++;
+ e_passwords_init ();
+#endif
+
+ /* Main toggle button */
+ cd->panel_button = create_main_clock_button ();
+ g_signal_connect (cd->panel_button, "button_press_event",
+ G_CALLBACK (do_not_eat_button_press), NULL);
+ g_signal_connect (cd->panel_button, "toggled",
+ G_CALLBACK (toggle_calendar), cd);
+ g_signal_connect (G_OBJECT (cd->panel_button), "destroy",
+ G_CALLBACK (destroy_clock),
+ cd);
+ gtk_widget_show (cd->panel_button);
+
+ /* Main orientable box */
+ cd->main_obox = g_object_new (clock_box_get_type (), NULL);
+ gtk_box_set_spacing (GTK_BOX (cd->main_obox), 12); /* spacing between weather and time */
+ gtk_container_add (GTK_CONTAINER (cd->panel_button), cd->main_obox);
+ gtk_widget_show (cd->main_obox);
+
+ /* Weather orientable box */
+ cd->weather_obox = g_object_new (clock_box_get_type (), NULL);
+ gtk_box_set_spacing (GTK_BOX (cd->weather_obox), 2); /* spacing between weather icon and temperature */
+ gtk_box_pack_start (GTK_BOX (cd->main_obox), cd->weather_obox, FALSE, FALSE, 0);
+ gtk_widget_set_has_tooltip (cd->weather_obox, TRUE);
+ g_signal_connect (cd->weather_obox, "query-tooltip",
+ G_CALLBACK (weather_tooltip), cd);
+
+ /* Weather widgets */
+ cd->panel_weather_icon = gtk_image_new ();
+ gtk_box_pack_start (GTK_BOX (cd->weather_obox), cd->panel_weather_icon, FALSE, FALSE, 0);
+
+ cd->panel_temperature_label = gtk_label_new (NULL);
+ gtk_box_pack_start (GTK_BOX (cd->weather_obox), cd->panel_temperature_label, FALSE, FALSE, 0);
+
+ /* Main label for time display */
+ cd->clockw = create_main_clock_label (cd);
+ gtk_box_pack_start (GTK_BOX (cd->main_obox), cd->clockw, FALSE, FALSE, 0);
+ gtk_widget_show (cd->clockw);
+
+ /* Done! */
+
+ set_atk_name_description (GTK_WIDGET (cd->applet), NULL,
+ _("Computer Clock"));
+
+ gtk_container_add (GTK_CONTAINER (cd->applet), cd->panel_button);
+ gtk_container_set_border_width (GTK_CONTAINER (cd->applet), 0);
+
+ cd->props = NULL;
+ cd->orient = -1;
+ cd->size = mate_panel_applet_get_size (MATE_PANEL_APPLET (cd->applet));
+
+ update_panel_weather (cd);
+
+ /* Refresh the clock so that it paints its first state */
+ refresh_clock_timeout (cd);
+ applet_change_orient (MATE_PANEL_APPLET (cd->applet),
+ mate_panel_applet_get_orient (MATE_PANEL_APPLET (cd->applet)),
+ cd);
+}
+
+static void
+update_orient (ClockData *cd)
+{
+ const gchar *text;
+ int min_width;
+ GtkAllocation allocation;
+ gdouble new_angle;
+ gdouble angle;
+
+ text = gtk_label_get_text (GTK_LABEL (cd->clockw));
+ min_width = calculate_minimum_width (cd->panel_button, text);
+ gtk_widget_get_allocation (cd->panel_button, &allocation);
+
+ if (cd->orient == MATE_PANEL_APPLET_ORIENT_LEFT &&
+ min_width > allocation.width)
+ new_angle = 270;
+ else if (cd->orient == MATE_PANEL_APPLET_ORIENT_RIGHT &&
+ min_width > allocation.width)
+ new_angle = 90;
+ else
+ new_angle = 0;
+
+ angle = gtk_label_get_angle (GTK_LABEL (cd->clockw));
+ if (angle != new_angle) {
+ unfix_size (cd);
+ gtk_label_set_angle (GTK_LABEL (cd->clockw), new_angle);
+ gtk_label_set_angle (GTK_LABEL (cd->panel_temperature_label), new_angle);
+ }
+}
+
+/* this is when the panel orientation changes */
+static void
+applet_change_orient (MatePanelApplet *applet,
+ MatePanelAppletOrient orient,
+ ClockData *cd)
+{
+ GtkOrientation o;
+
+ if (orient == cd->orient)
+ return;
+
+ cd->orient = orient;
+
+ switch (cd->orient) {
+ case MATE_PANEL_APPLET_ORIENT_RIGHT:
+ o = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_LEFT:
+ o = GTK_ORIENTATION_VERTICAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_DOWN:
+ o = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ case MATE_PANEL_APPLET_ORIENT_UP:
+ o = GTK_ORIENTATION_HORIZONTAL;
+ break;
+ default:
+ g_assert_not_reached ();
+ return;
+ }
+
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (cd->main_obox), o);
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (cd->weather_obox), o);
+
+ unfix_size (cd);
+ update_clock (cd);
+ update_calendar_popup (cd);
+}
+
+/* this is when the panel size changes */
+static void
+panel_button_change_pixel_size (GtkWidget *widget,
+ GtkAllocation *allocation,
+ ClockData *cd)
+{
+ int new_size;
+
+ if (cd->old_allocation.width == allocation->width &&
+ cd->old_allocation.height == allocation->height)
+ return;
+
+ cd->old_allocation.width = allocation->width;
+ cd->old_allocation.height = allocation->height;
+
+ if (cd->orient == MATE_PANEL_APPLET_ORIENT_LEFT ||
+ cd->orient == MATE_PANEL_APPLET_ORIENT_RIGHT)
+ new_size = allocation->width;
+ else
+ new_size = allocation->height;
+
+ cd->size = new_size;
+
+ unfix_size (cd);
+ update_timeformat (cd);
+ update_clock (cd);
+}
+
+static void
+copy_time (GtkAction *action,
+ ClockData *cd)
+{
+ char string[256];
+ char *utf8;
+
+ if (cd->format == CLOCK_FORMAT_UNIX) {
+ g_snprintf (string, sizeof(string), "%lu",
+ (unsigned long)cd->current_time);
+ } else if (cd->format == CLOCK_FORMAT_INTERNET) {
+ float itime = get_itime (cd->current_time);
+ if (cd->showseconds)
+ g_snprintf (string, sizeof (string), "@%3.2f", itime);
+ else
+ g_snprintf (string, sizeof (string), "@%3d",
+ (unsigned int) itime);
+ } else {
+ struct tm *tm;
+ char *format;
+
+ if (cd->format == CLOCK_FORMAT_CUSTOM) {
+ format = g_locale_from_utf8 (cd->custom_format, -1,
+ NULL, NULL, NULL);
+ } else if (cd->format == CLOCK_FORMAT_12) {
+ if (cd->showseconds)
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 12-hours
+ * format with a leading 0 if needed (eg, like
+ * in the US: 08:10 am). The %p expands to
+ * am/pm. */
+ format = g_locale_from_utf8 (_("%I:%M:%S %p"), -1, NULL, NULL, NULL);
+ else
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 12-hours
+ * format with a leading 0 if needed (eg, like
+ * in the US: 08:10 am). The %p expands to
+ * am/pm. */
+ format = g_locale_from_utf8 (_("%I:%M %p"), -1, NULL, NULL, NULL);
+ } else {
+ if (cd->showseconds)
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 24-hours
+ * format (eg, like in France: 20:10). */
+ format = g_locale_from_utf8 (_("%H:%M:%S"), -1, NULL, NULL, NULL);
+ else
+ /* Translators: This is a strftime format
+ * string.
+ * It is used to display the time in 24-hours
+ * format (eg, like in France: 20:10). */
+ format = g_locale_from_utf8 (_("%H:%M"), -1, NULL, NULL, NULL);
+ }
+
+ tm = localtime (&cd->current_time);
+
+ if (!format)
+ strcpy (string, "???");
+ else if (strftime (string, sizeof (string), format, tm) <= 0)
+ strcpy (string, "???");
+ g_free (format);
+ }
+
+ utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY),
+ utf8, -1);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
+ utf8, -1);
+ g_free (utf8);
+}
+
+static void
+copy_date (GtkAction *action,
+ ClockData *cd)
+{
+ struct tm *tm;
+ char string[256];
+ char *utf8, *loc;
+
+ tm = localtime (&cd->current_time);
+
+ /* Translators: This is a strftime format string.
+ * It is used to display a date in the full format (so that people can
+ * copy and paste it elsewhere). */
+ loc = g_locale_from_utf8 (_("%A, %B %d %Y"), -1, NULL, NULL, NULL);
+ if (!loc)
+ strcpy (string, "???");
+ else if (strftime (string, sizeof (string), loc, tm) <= 0)
+ strcpy (string, "???");
+ g_free (loc);
+
+ utf8 = g_locale_to_utf8 (string, -1, NULL, NULL, NULL);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY),
+ utf8, -1);
+ gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD),
+ utf8, -1);
+ g_free (utf8);
+}
+
+static void
+update_set_time_button (ClockData *cd)
+{
+ gint can_set;
+
+ /* this returns more than just a boolean; check the documentation of
+ * the dbus method for more information */
+ can_set = can_set_system_time ();
+
+ if (cd->time_settings_button)
+ gtk_widget_set_sensitive (cd->time_settings_button, can_set);
+
+ if (cd->set_time_button) {
+ gtk_widget_set_sensitive (cd->set_time_button, can_set != 0);
+ gtk_button_set_label (GTK_BUTTON (cd->set_time_button),
+ can_set == 1 ?
+ _("Set System Time...") :
+ _("Set System Time"));
+ }
+}
+
+static void
+set_time_callback (ClockData *cd, GError *error)
+{
+ GtkWidget *window;
+ GtkWidget *dialog;
+
+ if (error) {
+ dialog = gtk_message_dialog_new (NULL,
+ 0,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Failed to set the system time"));
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_error_free (error);
+ }
+ else
+ update_set_time_button (cd);
+
+ window = _clock_get_widget (cd, "set-time-window");
+ gtk_widget_hide (window);
+}
+
+static void
+set_time (GtkWidget *widget, ClockData *cd)
+{
+ struct tm t;
+ time_t tim;
+ guint year, month, day;
+
+ time (&tim);
+ /* sets t.isdst -- we could set it to -1 to have mktime() guess the
+ * right value , but we don't know if this works with all libc */
+ localtime_r (&tim, &t);
+
+ t.tm_sec = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->seconds_spin));
+ t.tm_min = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->minutes_spin));
+ t.tm_hour = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (cd->hours_spin));
+ gtk_calendar_get_date (GTK_CALENDAR (cd->calendar), &year, &month, &day);
+ t.tm_year = year - 1900;
+ t.tm_mon = month;
+ t.tm_mday = day;
+
+ tim = mktime (&t);
+
+ set_system_time_async (tim, (GFunc)set_time_callback, cd, NULL);
+}
+
+static void
+cancel_time_settings (GtkWidget *button, ClockData *cd)
+{
+ gtk_widget_hide (cd->set_time_window);
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static gboolean
+delete_time_settings (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+ cancel_time_settings (widget, data);
+
+ return TRUE;
+}
+
+static void
+fill_time_settings_window (ClockData *cd)
+{
+ time_t now_t;
+ struct tm now;
+
+ /* Fill the time settings */
+ tzset ();
+ time (&now_t);
+ localtime_r (&now_t, &now);
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->seconds_spin), now.tm_sec);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->minutes_spin), now.tm_min);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (cd->hours_spin), now.tm_hour);
+
+ gtk_calendar_select_month (GTK_CALENDAR (cd->calendar), now.tm_mon,
+ now.tm_year + 1900);
+ gtk_calendar_select_day (GTK_CALENDAR (cd->calendar), now.tm_mday);
+}
+
+static void
+wrap_cb (GtkSpinButton *spin, ClockData *cd)
+{
+ gdouble value;
+ gdouble min, max;
+ GtkSpinType direction;
+
+ value = gtk_spin_button_get_value (spin);
+ gtk_spin_button_get_range (spin, &min, &max);
+
+ if (value == min)
+ direction = GTK_SPIN_STEP_FORWARD;
+ else
+ direction = GTK_SPIN_STEP_BACKWARD;
+
+ if (spin == (GtkSpinButton *) cd->seconds_spin)
+ gtk_spin_button_spin (GTK_SPIN_BUTTON (cd->minutes_spin), direction, 1.0);
+ else if (spin == (GtkSpinButton *) cd->minutes_spin)
+ gtk_spin_button_spin (GTK_SPIN_BUTTON (cd->hours_spin), direction, 1.0);
+ else {
+ guint year, month, day;
+ GDate *date;
+
+ gtk_calendar_get_date (GTK_CALENDAR (cd->calendar), &year, &month, &day);
+
+ date = g_date_new_dmy (day, month + 1, year);
+
+ if (direction == GTK_SPIN_STEP_FORWARD)
+ g_date_add_days (date, 1);
+ else
+ g_date_subtract_days (date, 1);
+
+ year = g_date_get_year (date);
+ month = g_date_get_month (date) - 1;
+ day = g_date_get_day (date);
+
+ gtk_calendar_select_month (GTK_CALENDAR (cd->calendar), month, year);
+ gtk_calendar_select_day (GTK_CALENDAR (cd->calendar), day);
+
+ g_date_free (date);
+ }
+}
+
+static gboolean
+output_cb (GtkSpinButton *spin,
+ gpointer data)
+{
+ GtkAdjustment *adj;
+ gchar *text;
+ int value;
+
+ adj = gtk_spin_button_get_adjustment (spin);
+ value = (int) gtk_adjustment_get_value (adj);
+ text = g_strdup_printf ("%02d", value);
+ gtk_entry_set_text (GTK_ENTRY (spin), text);
+ g_free (text);
+
+ return TRUE;
+}
+
+static void
+ensure_time_settings_window_is_created (ClockData *cd)
+{
+ GtkWidget *cancel_button;
+
+ if (cd->set_time_window)
+ return;
+
+ cd->set_time_window = _clock_get_widget (cd, "set-time-window");
+ g_signal_connect (cd->set_time_window, "delete_event",
+ G_CALLBACK (delete_time_settings), cd);
+
+ cd->calendar = _clock_get_widget (cd, "calendar");
+ cd->hours_spin = _clock_get_widget (cd, "hours_spin");
+ cd->minutes_spin = _clock_get_widget (cd, "minutes_spin");
+ cd->seconds_spin = _clock_get_widget (cd, "seconds_spin");
+
+ gtk_entry_set_width_chars (GTK_ENTRY (cd->hours_spin), 2);
+ gtk_entry_set_width_chars (GTK_ENTRY (cd->minutes_spin), 2);
+ gtk_entry_set_width_chars (GTK_ENTRY (cd->seconds_spin), 2);
+ gtk_entry_set_alignment (GTK_ENTRY (cd->hours_spin), 1.0);
+ gtk_entry_set_alignment (GTK_ENTRY (cd->minutes_spin), 1.0);
+ gtk_entry_set_alignment (GTK_ENTRY (cd->seconds_spin), 1.0);
+ g_signal_connect (cd->seconds_spin, "wrapped", G_CALLBACK (wrap_cb), cd);
+ g_signal_connect (cd->minutes_spin, "wrapped", G_CALLBACK (wrap_cb), cd);
+ g_signal_connect (cd->hours_spin, "wrapped", G_CALLBACK (wrap_cb), cd);
+
+ g_signal_connect (cd->minutes_spin, "output", G_CALLBACK (output_cb), cd);
+ g_signal_connect (cd->seconds_spin, "output", G_CALLBACK (output_cb), cd);
+
+ cd->set_time_button = _clock_get_widget (cd, "set-time-button");
+ g_signal_connect (cd->set_time_button, "clicked", G_CALLBACK (set_time), cd);
+
+ cancel_button = _clock_get_widget (cd, "cancel-set-time-button");
+ g_signal_connect (cancel_button, "clicked", G_CALLBACK (cancel_time_settings), cd);
+
+ cd->current_time_label = _clock_get_widget (cd, "current_time_label");
+}
+
+static void
+run_time_settings (GtkWidget *unused, ClockData *cd)
+{
+ ensure_time_settings_window_is_created (cd);
+ fill_time_settings_window (cd);
+
+ update_set_time_button (cd);
+
+ gtk_window_present (GTK_WINDOW (cd->set_time_window));
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static void
+config_date (GtkAction *action,
+ ClockData *cd)
+{
+ run_time_settings (NULL, cd);
+}
+
+/* current timestamp */
+static const GtkActionEntry clock_menu_actions [] = {
+ { "ClockPreferences", GTK_STOCK_PROPERTIES, N_("_Preferences"),
+ NULL, NULL,
+ G_CALLBACK (verb_display_properties_dialog) },
+ { "ClockHelp", GTK_STOCK_HELP, N_("_Help"),
+ NULL, NULL,
+ G_CALLBACK (display_help_dialog) },
+ { "ClockAbout", GTK_STOCK_ABOUT, N_("_About"),
+ NULL, NULL,
+ G_CALLBACK (display_about_dialog) },
+ { "ClockCopyTime", GTK_STOCK_COPY, N_("Copy _Time"),
+ NULL, NULL,
+ G_CALLBACK (copy_time) },
+ { "ClockCopyDate", GTK_STOCK_COPY, N_("Copy _Date"),
+ NULL, NULL,
+ G_CALLBACK (copy_date) },
+ { "ClockConfig", GTK_STOCK_PREFERENCES, N_("Ad_just Date & Time"),
+ NULL, NULL,
+ G_CALLBACK (config_date) }
+};
+
+static void
+format_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ const char *value;
+ int new_format;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+ if (!mateconf_string_to_enum (format_type_enum_map, value, &new_format))
+ return;
+
+ if (!clock->can_handle_format_12 && new_format == CLOCK_FORMAT_12)
+ new_format = CLOCK_FORMAT_24;
+
+ if (new_format == clock->format)
+ return;
+
+ clock->format = new_format;
+ refresh_clock_timeout (clock);
+
+ if (clock->calendar_popup != NULL) {
+ calendar_window_set_time_format (CALENDAR_WINDOW (clock->calendar_popup), clock->format);
+ position_calendar_popup (clock);
+ }
+
+}
+
+static void
+show_seconds_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ clock->showseconds = (value != 0);
+ refresh_clock_timeout (clock);
+}
+
+static void
+show_date_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ clock->showdate = (value != 0);
+ update_timeformat (clock);
+ refresh_clock (clock);
+}
+
+static void
+update_panel_weather (ClockData *cd)
+{
+ if (cd->show_weather)
+ gtk_widget_show (cd->panel_weather_icon);
+ else
+ gtk_widget_hide (cd->panel_weather_icon);
+
+ if (cd->show_temperature)
+ gtk_widget_show (cd->panel_temperature_label);
+ else
+ gtk_widget_hide (cd->panel_temperature_label);
+
+ if ((cd->show_weather || cd->show_temperature) &&
+ g_list_length (cd->locations) > 0)
+ gtk_widget_show (cd->weather_obox);
+ else
+ gtk_widget_hide (cd->weather_obox);
+
+ gtk_widget_queue_resize (cd->applet);
+}
+
+static void
+update_weather_bool_value_and_toggle_from_mateconf (ClockData *cd, MateConfEntry *entry,
+ gboolean *value_loc, const char *widget_name)
+{
+ GtkWidget *widget;
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ *value_loc = (value != 0);
+
+ widget = _clock_get_widget (cd, widget_name);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget),
+ *value_loc);
+
+ update_panel_weather (cd);
+}
+
+static void
+show_weather_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_weather, "weather_check");
+}
+
+static void
+show_temperature_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ update_weather_bool_value_and_toggle_from_mateconf (cd, entry, &cd->show_temperature, "temperature_check");
+}
+
+static void
+location_weather_updated_cb (ClockLocation *location,
+ WeatherInfo *info,
+ gpointer data)
+{
+ ClockData *cd = data;
+ const gchar *icon_name;
+ const gchar *temp;
+ GtkIconTheme *theme;
+ GdkPixbuf *pixbuf;
+
+ if (!info || !weather_info_is_valid (info))
+ return;
+
+ if (!clock_location_is_current (location))
+ return;
+
+ icon_name = weather_info_get_icon_name (info);
+ /* FIXME: mmh, screen please? Also, don't hardcode to 16 */
+ theme = gtk_icon_theme_get_default ();
+ pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 16,
+ GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL);
+
+ temp = weather_info_get_temp_summary (info);
+
+ gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon), pixbuf);
+ gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label), temp);
+}
+
+static void
+location_set_current_cb (ClockLocation *loc,
+ gpointer data)
+{
+ ClockData *cd = data;
+ WeatherInfo *info;
+
+ info = clock_location_get_weather_info (loc);
+ location_weather_updated_cb (loc, info, cd);
+
+ if (cd->map_widget)
+ clock_map_refresh (CLOCK_MAP (cd->map_widget));
+ update_location_tiles (cd);
+ save_cities_store (cd);
+}
+
+static void
+locations_changed (ClockData *cd)
+{
+ GList *l;
+ ClockLocation *loc;
+ glong id;
+
+ if (!cd->locations) {
+ if (cd->weather_obox)
+ gtk_widget_hide (cd->weather_obox);
+ if (cd->panel_weather_icon)
+ gtk_image_set_from_pixbuf (GTK_IMAGE (cd->panel_weather_icon),
+ NULL);
+ if (cd->panel_temperature_label)
+ gtk_label_set_text (GTK_LABEL (cd->panel_temperature_label),
+ "");
+ } else {
+ if (cd->weather_obox)
+ gtk_widget_show (cd->weather_obox);
+ }
+
+ for (l = cd->locations; l; l = l->next) {
+ loc = l->data;
+
+ id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (loc), "weather-updated"));
+ if (id == 0) {
+ id = g_signal_connect (loc, "weather-updated",
+ G_CALLBACK (location_weather_updated_cb), cd);
+ g_object_set_data (G_OBJECT (loc), "weather-updated", GINT_TO_POINTER (id));
+ g_signal_connect (loc, "set-current",
+ G_CALLBACK (location_set_current_cb), cd);
+ }
+ }
+
+ if (cd->map_widget)
+ clock_map_refresh (CLOCK_MAP (cd->map_widget));
+
+ if (cd->clock_vbox)
+ create_cities_section (cd);
+}
+
+
+static void
+set_locations (ClockData *cd, GList *locations)
+{
+ free_locations (cd);
+ cd->locations = locations;
+ locations_changed (cd);
+}
+
+typedef struct {
+ GList *cities;
+ ClockData *cd;
+} LocationParserData;
+
+/* Parser for our serialized locations in mateconf */
+static void
+location_start_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ GError **error)
+{
+ ClockLocation *loc;
+ LocationParserData *data = user_data;
+ ClockData *cd = data->cd;
+ WeatherPrefs prefs;
+ const gchar *att_name;
+
+ gchar *name = NULL;
+ gchar *city = NULL;
+ gchar *timezone = NULL;
+ gfloat latitude = 0.0;
+ gfloat longitude = 0.0;
+ gchar *code = NULL;
+ gboolean current = FALSE;
+
+ int index = 0;
+
+ prefs.temperature_unit = cd->temperature_unit;
+ prefs.speed_unit = cd->speed_unit;
+
+ if (strcmp (element_name, "location") != 0) {
+ return;
+ }
+
+ setlocale (LC_NUMERIC, "POSIX");
+
+ for (att_name = attribute_names[index]; att_name != NULL;
+ att_name = attribute_names[++index]) {
+ if (strcmp (att_name, "name") == 0) {
+ name = (gchar *)attribute_values[index];
+ } else if (strcmp (att_name, "city") == 0) {
+ city = (gchar *)attribute_values[index];
+ } else if (strcmp (att_name, "timezone") == 0) {
+ timezone = (gchar *)attribute_values[index];
+ } else if (strcmp (att_name, "latitude") == 0) {
+ sscanf (attribute_values[index], "%f", &latitude);
+ } else if (strcmp (att_name, "longitude") == 0) {
+ sscanf (attribute_values[index], "%f", &longitude);
+ } else if (strcmp (att_name, "code") == 0) {
+ code = (gchar *)attribute_values[index];
+ }
+ else if (strcmp (att_name, "current") == 0) {
+ if (strcmp (attribute_values[index], "true") == 0) {
+ current = TRUE;
+ }
+ }
+ }
+
+ setlocale (LC_NUMERIC, "");
+
+ if ((!name && !city) || !timezone) {
+ return;
+ }
+
+ /* migration from the old configuration, when name == city */
+ if (!city)
+ city = name;
+
+ loc = clock_location_find_and_ref (cd->locations, name, city,
+ timezone, latitude, longitude, code);
+ if (!loc)
+ loc = clock_location_new (name, city, timezone,
+ latitude, longitude, code, &prefs);
+
+ if (current && clock_location_is_current_timezone (loc))
+ clock_location_make_current (loc, GDK_WINDOW_XWINDOW (gtk_widget_get_window (cd->applet)),
+ NULL, NULL, NULL);
+
+ data->cities = g_list_append (data->cities, loc);
+}
+
+static GMarkupParser location_parser = {
+ location_start_element, NULL, NULL, NULL, NULL
+};
+
+static void
+cities_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ LocationParserData data;
+
+ GSList *cur = NULL;
+
+ GMarkupParseContext *context;
+
+ data.cities = NULL;
+ data.cd = cd;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_LIST)
+ return;
+
+ context = g_markup_parse_context_new (&location_parser, 0, &data, NULL);
+
+ cur = mateconf_value_get_list (entry->value);
+
+ while (cur) {
+ const char *str = mateconf_value_get_string (cur->data);
+ g_markup_parse_context_parse (context, str, strlen (str), NULL);
+
+ cur = cur->next;
+ }
+
+ g_markup_parse_context_free (context);
+
+ set_locations (cd, data.cities);
+ create_cities_store (cd);
+}
+
+static void
+update_temperature_combo (ClockData *cd)
+{
+ GtkWidget *widget;
+ int active_index;
+
+ widget = _clock_get_widget (cd, "temperature_combo");
+
+ if (cd->use_temperature_default)
+ active_index = 0;
+ else
+ active_index = cd->temperature_unit - 1;
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index);
+}
+
+static void
+update_weather_locations (ClockData *cd)
+{
+ GList *locations, *l;
+ WeatherPrefs prefs = {
+ FORECAST_STATE,
+ FALSE,
+ NULL,
+ TEMP_UNIT_CENTIGRADE,
+ SPEED_UNIT_MS,
+ PRESSURE_UNIT_MB,
+ DISTANCE_UNIT_KM
+ };
+
+ prefs.temperature_unit = cd->temperature_unit;
+ prefs.speed_unit = cd->speed_unit;
+
+ locations = cd->locations;
+
+ for (l = locations; l; l = l->next) {
+ clock_location_set_weather_prefs (l->data, &prefs);
+ }
+}
+
+static void
+clock_migrate_to_26 (ClockData *clock)
+{
+ gboolean unixtime;
+ gboolean internettime;
+ int hourformat;
+
+ internettime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet),
+ "internet_time",
+ NULL);
+ unixtime = mate_panel_applet_mateconf_get_bool (MATE_PANEL_APPLET (clock->applet),
+ "unix_time",
+ NULL);
+ hourformat = mate_panel_applet_mateconf_get_int (MATE_PANEL_APPLET (clock->applet),
+ "hour_format",
+ NULL);
+
+ if (unixtime)
+ clock->format = CLOCK_FORMAT_UNIX;
+ else if (internettime)
+ clock->format = CLOCK_FORMAT_INTERNET;
+ else if (hourformat == 12)
+ clock->format = CLOCK_FORMAT_12;
+ else if (hourformat == 24)
+ clock->format = CLOCK_FORMAT_24;
+
+ /* It's still possible that we have none of the old keys, in which case
+ * we're not migrating from 2.6, but the config is simply wrong. So
+ * don't set the format key in this case. */
+ if (clock->format != CLOCK_FORMAT_INVALID)
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (clock->applet),
+ KEY_FORMAT,
+ mateconf_enum_to_string (format_type_enum_map,
+ clock->format),
+ NULL);
+}
+
+static void
+clock_timezone_changed (SystemTimezone *systz,
+ const char *new_tz,
+ ClockData *cd)
+{
+ /* This will refresh the current location */
+ save_cities_store (cd);
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static void
+parse_and_set_temperature_string (const char *str, ClockData *cd)
+{
+ gint value = 0;
+ gboolean use_default = FALSE;
+
+ value = mateweather_prefs_parse_temperature (str, &use_default);
+
+ cd->use_temperature_default = use_default;
+ cd->temperature_unit = value;
+}
+
+static void
+parse_and_set_speed_string (const char *str, ClockData *cd)
+{
+ gint value = 0;
+ gboolean use_default = FALSE;
+
+ value = mateweather_prefs_parse_speed (str, &use_default);
+
+ cd->use_speed_default = use_default;
+ cd->speed_unit = value;
+}
+
+static void
+temperature_unit_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ const gchar *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+ parse_and_set_temperature_string (value, cd);
+ update_temperature_combo (cd);
+ update_weather_locations (cd);
+}
+
+static void
+update_speed_combo (ClockData *cd)
+{
+ GtkWidget *widget;
+ int active_index;
+
+ widget = _clock_get_widget (cd, "wind_speed_combo");
+
+ if (cd->use_speed_default)
+ active_index = 0;
+ else
+ active_index = cd->speed_unit - 1;
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), active_index);
+}
+
+static void
+speed_unit_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *cd)
+{
+ const gchar *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+ parse_and_set_speed_string (value, cd);
+ update_speed_combo (cd);
+ update_weather_locations (cd);
+}
+
+static void
+custom_format_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ const char *value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_STRING)
+ return;
+
+ value = mateconf_value_get_string (entry->value);
+
+ g_free (clock->custom_format);
+ clock->custom_format = g_strdup (value);
+
+ if (clock->format == CLOCK_FORMAT_CUSTOM)
+ refresh_clock (clock);
+}
+
+static void
+show_week_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ ClockData *clock)
+{
+ gboolean value;
+
+ if (!entry->value || entry->value->type != MATECONF_VALUE_BOOL)
+ return;
+
+ value = mateconf_value_get_bool (entry->value);
+
+ if (clock->showweek == (value != 0))
+ return;
+
+ clock->showweek = (value != 0);
+
+ if (clock->calendar_popup != NULL) {
+ calendar_window_set_show_weeks (CALENDAR_WINDOW (clock->calendar_popup), clock->showweek);
+ position_calendar_popup (clock);
+ }
+}
+
+static guint
+setup_mateconf_preference (ClockData *cd, MateConfClient *client, const char *key_name, MateConfClientNotifyFunc callback)
+{
+ char *key;
+ guint id;
+
+ key = mate_panel_applet_mateconf_get_full_key (MATE_PANEL_APPLET (cd->applet),
+ key_name);
+ id = mateconf_client_notify_add (client, key,
+ callback,
+ cd, NULL, NULL);
+ g_free (key);
+
+ return id;
+}
+
+static void
+setup_mateconf (ClockData *cd)
+{
+ struct {
+ const char *key_name;
+ MateConfClientNotifyFunc callback;
+ } prefs[] = {
+ { KEY_FORMAT, (MateConfClientNotifyFunc) format_changed },
+ { KEY_SHOW_SECONDS, (MateConfClientNotifyFunc) show_seconds_changed },
+ { KEY_SHOW_DATE, (MateConfClientNotifyFunc) show_date_changed },
+ { KEY_SHOW_WEATHER, (MateConfClientNotifyFunc) show_weather_changed },
+ { KEY_SHOW_TEMPERATURE, (MateConfClientNotifyFunc) show_temperature_changed },
+ { KEY_CUSTOM_FORMAT, (MateConfClientNotifyFunc) custom_format_changed },
+ { KEY_SHOW_WEEK, (MateConfClientNotifyFunc) show_week_changed },
+ { KEY_CITIES, (MateConfClientNotifyFunc) cities_changed },
+ { KEY_TEMPERATURE_UNIT, (MateConfClientNotifyFunc) temperature_unit_changed },
+ { KEY_SPEED_UNIT, (MateConfClientNotifyFunc) speed_unit_changed },
+ };
+
+ MateConfClient *client;
+ int i;
+
+ client = mateconf_client_get_default ();
+
+ for (i = 0; i < G_N_ELEMENTS (prefs); i++)
+ cd->listeners[i] = setup_mateconf_preference (cd, client, prefs[i].key_name, prefs[i].callback);
+
+ g_object_unref (G_OBJECT (client));
+}
+
+static GList *
+parse_mateconf_cities (ClockData *cd, GSList *values)
+{
+ GSList *cur = values;
+ LocationParserData data;
+ GMarkupParseContext *context;
+
+ data.cities = NULL;
+ data.cd = cd;
+
+ context =
+ g_markup_parse_context_new (&location_parser, 0, &data, NULL);
+
+ while (cur) {
+ const char *str = (char *)cur->data;
+ g_markup_parse_context_parse (context, str, strlen(str), NULL);
+
+ cur = cur->next;
+ }
+
+ g_markup_parse_context_free (context);
+
+ return data.cities;
+}
+
+static void
+load_mateconf_settings (ClockData *cd)
+{
+ MatePanelApplet *applet;
+ int format;
+ char *format_str;
+ char *value;
+ GError *error;
+ GSList *values = NULL;
+ GList *cities = NULL;
+
+ applet = MATE_PANEL_APPLET (cd->applet);
+
+ cd->format = CLOCK_FORMAT_INVALID;
+
+ format_str = mate_panel_applet_mateconf_get_string (applet, KEY_FORMAT, NULL);
+ if (format_str &&
+ mateconf_string_to_enum (format_type_enum_map, format_str, &format))
+ cd->format = format;
+ else
+ clock_migrate_to_26 (cd);
+
+ g_free (format_str);
+
+ if (cd->format == CLOCK_FORMAT_INVALID)
+ cd->format = clock_locale_format ();
+
+ cd->custom_format = mate_panel_applet_mateconf_get_string (applet, KEY_CUSTOM_FORMAT, NULL);
+ cd->showseconds = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_SECONDS, NULL);
+
+ error = NULL;
+ cd->showdate = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_DATE, &error);
+ if (error) {
+ g_error_free (error);
+ /* if on a small screen don't show date by default */
+ if (gdk_screen_width () <= 800)
+ cd->showdate = FALSE;
+ else
+ cd->showdate = TRUE;
+ }
+
+ cd->show_weather = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEATHER, NULL);
+ cd->show_temperature = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_TEMPERATURE, NULL);
+ cd->showweek = mate_panel_applet_mateconf_get_bool (applet, KEY_SHOW_WEEK, NULL);
+ cd->timeformat = NULL;
+
+ cd->can_handle_format_12 = (clock_locale_format () == CLOCK_FORMAT_12);
+ if (!cd->can_handle_format_12 && cd->format == CLOCK_FORMAT_12)
+ cd->format = CLOCK_FORMAT_24;
+
+ value = mate_panel_applet_mateconf_get_string (applet, KEY_TEMPERATURE_UNIT, NULL);
+ parse_and_set_temperature_string (value, cd);
+ g_free (value);
+
+ value = mate_panel_applet_mateconf_get_string (applet, KEY_SPEED_UNIT, NULL);
+ parse_and_set_speed_string (value, cd);
+ g_free (value);
+
+ values = mate_panel_applet_mateconf_get_list (MATE_PANEL_APPLET (cd->applet), KEY_CITIES,
+ MATECONF_VALUE_STRING, NULL);
+
+ if (g_slist_length (values) == 0) {
+ cities = NULL;
+ } else {
+ cities = parse_mateconf_cities (cd, values);
+ }
+
+ set_locations (cd, cities);
+}
+
+static gboolean
+fill_clock_applet (MatePanelApplet *applet)
+{
+ ClockData *cd;
+ GtkActionGroup *action_group;
+ GtkAction *action;
+ gchar *ui_path;
+ char *filename;
+ GError *error;
+
+ mate_panel_applet_add_preferences (applet, CLOCK_SCHEMA_DIR, NULL);
+ mate_panel_applet_set_flags (applet, MATE_PANEL_APPLET_EXPAND_MINOR);
+
+ cd = g_new0 (ClockData, 1);
+ cd->fixed_width = -1;
+ cd->fixed_height = -1;
+
+ cd->applet = GTK_WIDGET (applet);
+
+ setup_mateconf (cd);
+ load_mateconf_settings (cd);
+
+ cd->builder = gtk_builder_new ();
+ gtk_builder_set_translation_domain (cd->builder, GETTEXT_PACKAGE);
+ filename = g_build_filename (BUILDERDIR, "clock.ui", NULL);
+
+ error = NULL;
+ gtk_builder_add_from_file (cd->builder, filename, &error);
+ if (error) {
+ g_warning ("Error loading \"%s\": %s",
+ filename, error->message);
+ g_error_free (error);
+ }
+
+ g_free (filename);
+
+ create_clock_widget (cd);
+
+#ifndef CLOCK_INPROCESS
+ gtk_window_set_default_icon_name (CLOCK_ICON);
+#endif
+ gtk_widget_show (cd->applet);
+
+ /* FIXME: Update this comment. */
+ /* we have to bind change_orient before we do applet_widget_add
+ since we need to get an initial change_orient signal to set our
+ initial oriantation, and we get that during the _add call */
+ g_signal_connect (G_OBJECT (cd->applet),
+ "change_orient",
+ G_CALLBACK (applet_change_orient),
+ cd);
+
+ g_signal_connect (G_OBJECT (cd->panel_button),
+ "size_allocate",
+ G_CALLBACK (panel_button_change_pixel_size),
+ cd);
+
+ mate_panel_applet_set_background_widget (MATE_PANEL_APPLET (cd->applet),
+ GTK_WIDGET (cd->applet));
+
+ action_group = gtk_action_group_new ("ClockApplet Menu Actions");
+ gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (action_group,
+ clock_menu_actions,
+ G_N_ELEMENTS (clock_menu_actions),
+ cd);
+ ui_path = g_build_filename (CLOCK_MENU_UI_DIR, "clock-menu.xml", NULL);
+ mate_panel_applet_setup_menu_from_file (MATE_PANEL_APPLET (cd->applet),
+ ui_path, action_group);
+ g_free (ui_path);
+
+ if (mate_panel_applet_get_locked_down (MATE_PANEL_APPLET (cd->applet))) {
+ action = gtk_action_group_get_action (action_group, "ClockPreferences");
+ gtk_action_set_visible (action, FALSE);
+
+ action = gtk_action_group_get_action (action_group, "ClockConfig");
+ gtk_action_set_visible (action, FALSE);
+ }
+
+ cd->systz = system_timezone_new ();
+ g_signal_connect (cd->systz, "changed",
+ G_CALLBACK (clock_timezone_changed), cd);
+
+ action = gtk_action_group_get_action (action_group, "ClockConfig");
+ gtk_action_set_visible (action, can_set_system_time ());
+ g_object_unref (action_group);
+
+ return TRUE;
+}
+
+/* FIXME old clock applet */
+#if 0
+static void
+setup_writability_sensitivity (ClockData *clock, GtkWidget *w, GtkWidget *label, const char *key)
+{
+ /* FMQ: was used from old preferences dialog; fix this up */
+ char *fullkey;
+ MateConfClient *client;
+
+ client = mateconf_client_get_default ();
+
+ fullkey = mate_panel_applet_mateconf_get_full_key
+ (MATE_PANEL_APPLET (clock->applet), key);
+
+ if ( ! mateconf_client_key_is_writable (client, fullkey, NULL)) {
+ g_object_set_data (G_OBJECT (w), NEVER_SENSITIVE,
+ GINT_TO_POINTER (1));
+ gtk_widget_set_sensitive (w, FALSE);
+ if (label != NULL) {
+ g_object_set_data (G_OBJECT (label), NEVER_SENSITIVE,
+ GINT_TO_POINTER (1));
+ gtk_widget_set_sensitive (label, FALSE);
+ }
+ }
+
+ g_free (fullkey);
+
+ g_object_unref (G_OBJECT (client));
+}
+
+static void
+update_properties_for_format (ClockData *cd,
+ GtkComboBox *combo,
+ ClockFormat format)
+{
+
+ /* show the custom format things the first time we actually
+ * have a custom format set in MateConf, but after that don't
+ * unshow it if the format changes
+ */
+ if (!cd->custom_format_shown &&
+ (cd->format == CLOCK_FORMAT_CUSTOM ||
+ (cd->custom_format && cd->custom_format [0]))) {
+ gtk_widget_show (cd->custom_hbox);
+ gtk_widget_show (cd->custom_label);
+ gtk_widget_show (cd->custom_entry);
+
+ gtk_combo_box_append_text (combo, _("Custom format"));
+
+ cd->custom_format_shown = TRUE;
+ }
+
+ /* Some combinations of options do not make sense */
+ switch (format) {
+ case CLOCK_FORMAT_12:
+ case CLOCK_FORMAT_24:
+ gtk_widget_set_sensitive (cd->showseconds_check, TRUE);
+ gtk_widget_set_sensitive (cd->showdate_check, TRUE);
+ gtk_widget_set_sensitive (cd->custom_entry, FALSE);
+ gtk_widget_set_sensitive (cd->custom_label, FALSE);
+ break;
+ case CLOCK_FORMAT_UNIX:
+ gtk_widget_set_sensitive (cd->showseconds_check, FALSE);
+ gtk_widget_set_sensitive (cd->showdate_check, FALSE);
+ gtk_widget_set_sensitive (cd->custom_entry, FALSE);
+ gtk_widget_set_sensitive (cd->custom_label, FALSE);
+ break;
+ case CLOCK_FORMAT_INTERNET:
+ gtk_widget_set_sensitive (cd->showseconds_check, TRUE);
+ gtk_widget_set_sensitive (cd->showdate_check, FALSE);
+ gtk_widget_set_sensitive (cd->custom_entry, FALSE);
+ gtk_widget_set_sensitive (cd->custom_label, FALSE);
+ break;
+ case CLOCK_FORMAT_CUSTOM:
+ gtk_widget_set_sensitive (cd->showseconds_check, FALSE);
+ gtk_widget_set_sensitive (cd->showdate_check, FALSE);
+ gtk_widget_set_sensitive (cd->custom_entry, TRUE);
+ gtk_widget_set_sensitive (cd->custom_label, TRUE);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+}
+
+static void
+set_format_cb (GtkComboBox *combo,
+ ClockData *cd)
+{
+ /* FMQ: was used from old preferences dialog; fix this up */
+ ClockFormat format;
+
+ /* valid values begin from 1 */
+ if (cd->can_handle_format_12)
+ format = gtk_combo_box_get_active (combo) + 1;
+ else
+ format = gtk_combo_box_get_active (combo) + 2;
+
+ update_properties_for_format (cd, combo, format);
+
+ if (cd->format != format)
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_FORMAT,
+ mateconf_enum_to_string (format_type_enum_map, format),
+ NULL);
+}
+#endif
+
+static void
+set_show_seconds_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_SECONDS,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+static void
+set_show_date_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_DATE,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+static void
+set_show_weather_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_WEATHER,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+static void
+set_show_temperature_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_TEMPERATURE,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
+ NULL);
+}
+
+#if 0
+static void
+set_show_zones_cb (GtkWidget *w,
+ ClockData *clock)
+{
+ mate_panel_applet_mateconf_set_bool (MATE_PANEL_APPLET (clock->applet),
+ KEY_SHOW_ZONES,
+ GTK_TOGGLE_BUTTON (w)->active,
+ NULL);
+}
+#endif
+
+/* FIXME old clock applet */
+#if 0
+static void
+set_custom_format_cb (GtkEntry *entry,
+ ClockData *cd)
+{
+ /* FMQ: was used from old preferences dialog; fix this up */
+ const char *custom_format;
+
+ custom_format = gtk_entry_get_text (entry);
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_CUSTOM_FORMAT, custom_format, NULL);
+}
+#endif
+
+static void
+prefs_locations_changed (GtkTreeSelection *selection, ClockData *cd)
+{
+ gint n;
+
+ n = gtk_tree_selection_count_selected_rows (selection);
+ gtk_widget_set_sensitive (cd->prefs_location_edit_button, n > 0);
+ gtk_widget_set_sensitive (cd->prefs_location_remove_button, n > 0);
+}
+
+static gchar *
+loc_to_string (ClockLocation *loc)
+{
+ const gchar *name, *city;
+ gfloat latitude, longitude;
+ gchar *ret;
+
+ name = clock_location_get_name (loc);
+ city = clock_location_get_city (loc);
+ clock_location_get_coords (loc, &latitude, &longitude);
+
+ setlocale (LC_NUMERIC, "POSIX");
+
+ ret = g_markup_printf_escaped
+ ("<location name=\"%s\" city=\"%s\" timezone=\"%s\" latitude=\"%f\" longitude=\"%f\" code=\"%s\" current=\"%s\"/>",
+ name ? name : "",
+ city ? city : "",
+ clock_location_get_timezone (loc),
+ latitude, longitude,
+ clock_location_get_weather_code (loc),
+ clock_location_is_current (loc) ? "true" : "false");
+
+ setlocale (LC_NUMERIC, "");
+
+ return ret;
+}
+
+static void
+save_cities_store (ClockData *cd)
+{
+ ClockLocation *loc;
+ GList *node = cd->locations;
+
+ GSList *root = NULL;
+ GSList *list = NULL;
+
+ while (node) {
+ loc = CLOCK_LOCATION (node->data);
+ list = g_slist_prepend (list, loc_to_string (loc));
+ node = node->next;
+ }
+
+ list = g_slist_reverse (list);
+ mate_panel_applet_mateconf_set_list (MATE_PANEL_APPLET (cd->applet),
+ KEY_CITIES, MATECONF_VALUE_STRING, list, NULL);
+
+ root = list;
+
+ while (list) {
+ g_free (list->data);
+ list = g_slist_next (list);
+ }
+
+ g_slist_free (root);
+}
+
+static void
+run_prefs_edit_save (GtkButton *button, ClockData *cd)
+{
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ ClockLocation *loc = g_object_get_data (G_OBJECT (edit_window), "clock-location");
+
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ const gchar *timezone, *weather_code;
+ gchar *city, *name;
+
+ MateWeatherLocation *gloc;
+ gfloat lat = 0;
+ gfloat lon = 0;
+
+ timezone = mateweather_timezone_menu_get_tzid (cd->zone_combo);
+ if (!timezone) {
+ edit_hide (NULL, cd);
+ return;
+ }
+
+ city = NULL;
+ weather_code = NULL;
+ name = NULL;
+
+ gloc = mateweather_location_entry_get_location (cd->location_entry);
+ if (gloc) {
+ city = mateweather_location_get_city_name (gloc);
+ weather_code = mateweather_location_get_code (gloc);
+ }
+
+ if (mateweather_location_entry_has_custom_text (cd->location_entry)) {
+ name = gtk_editable_get_chars (GTK_EDITABLE (cd->location_entry), 0, -1);
+ }
+
+ sscanf (gtk_entry_get_text (GTK_ENTRY (lat_entry)), "%f", &lat);
+ sscanf (gtk_entry_get_text (GTK_ENTRY (lon_entry)), "%f", &lon);
+
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (lat_combo)) != 0) {
+ lat = -lat;
+ }
+
+ if (gtk_combo_box_get_active (GTK_COMBO_BOX (lon_combo)) != 0) {
+ lon = -lon;
+ }
+
+ if (loc) {
+ clock_location_set_timezone (loc, timezone);
+ clock_location_set_name (loc, name);
+ clock_location_set_city (loc, city);
+ clock_location_set_coords (loc, lat, lon);
+ clock_location_set_weather_code (loc, weather_code);
+ } else {
+ WeatherPrefs prefs;
+
+ prefs.temperature_unit = cd->temperature_unit;
+ prefs.speed_unit = cd->speed_unit;
+
+ loc = clock_location_new (name, city, timezone, lat, lon, weather_code, &prefs);
+ /* has the side-effect of setting the current location if
+ * there's none and this one can be considered as a current one
+ */
+ clock_location_is_current (loc);
+
+ cd->locations = g_list_append (cd->locations, loc);
+ }
+ g_free (name);
+ g_free (city);
+
+ /* This will update everything related to locations to take into
+ * account the new location (via the mateconf notification) */
+ save_cities_store (cd);
+
+ edit_hide (edit_window, cd);
+}
+
+static void
+update_coords_helper (gfloat value, GtkWidget *entry, GtkWidget *combo)
+{
+ gchar *tmp;
+
+ tmp = g_strdup_printf ("%f", fabsf (value));
+ gtk_entry_set_text (GTK_ENTRY (entry), tmp);
+ g_free (tmp);
+
+ if (value > 0) {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
+ } else {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1);
+ }
+}
+
+static void
+update_coords (ClockData *cd, gboolean valid, gfloat lat, gfloat lon)
+{
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ if (!valid) {
+ gtk_entry_set_text (GTK_ENTRY (lat_entry), "");
+ gtk_entry_set_text (GTK_ENTRY (lon_entry), "");
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), -1);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), -1);
+
+ return;
+ }
+
+ update_coords_helper (lat, lat_entry, lat_combo);
+ update_coords_helper (lon, lon_entry, lon_combo);
+}
+
+static void
+fill_timezone_combo_from_location (ClockData *cd, ClockLocation *loc)
+{
+ if (loc != NULL) {
+ mateweather_timezone_menu_set_tzid (cd->zone_combo,
+ clock_location_get_timezone (loc));
+ } else {
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL);
+ }
+}
+
+static void
+location_update_ok_sensitivity (ClockData *cd)
+{
+ GtkWidget *ok_button;
+ const gchar *timezone;
+ gchar *name;
+
+ ok_button = _clock_get_widget (cd, "edit-location-ok-button");
+
+ timezone = mateweather_timezone_menu_get_tzid (cd->zone_combo);
+ name = gtk_editable_get_chars (GTK_EDITABLE (cd->location_entry), 0, -1);
+
+ if (timezone && name && name[0] != '\0') {
+ gtk_widget_set_sensitive (ok_button, TRUE);
+ } else {
+ gtk_widget_set_sensitive (ok_button, FALSE);
+ }
+
+ g_free (name);
+}
+
+static void
+location_changed (GObject *object, GParamSpec *param, ClockData *cd)
+{
+ MateWeatherLocationEntry *entry = MATEWEATHER_LOCATION_ENTRY (object);
+ MateWeatherLocation *gloc;
+ MateWeatherTimezone *zone;
+ gboolean latlon_valid;
+ double latitude = 0.0, longitude = 0.0;
+
+ gloc = mateweather_location_entry_get_location (entry);
+
+ latlon_valid = gloc && mateweather_location_has_coords (gloc);
+ if (latlon_valid)
+ mateweather_location_get_coords (gloc, &latitude, &longitude);
+ update_coords (cd, latlon_valid, latitude, longitude);
+
+ zone = gloc ? mateweather_location_get_timezone (gloc) : NULL;
+ if (zone)
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, mateweather_timezone_get_tzid (zone));
+ else
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL);
+
+ if (gloc)
+ mateweather_location_unref (gloc);
+}
+
+static void
+location_name_changed (GObject *object, ClockData *cd)
+{
+ location_update_ok_sensitivity (cd);
+}
+
+static void
+location_timezone_changed (GObject *object, GParamSpec *param, ClockData *cd)
+{
+ location_update_ok_sensitivity (cd);
+}
+
+static void
+edit_clear (ClockData *cd)
+{
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ /* clear out the old data */
+ mateweather_location_entry_set_location (cd->location_entry, NULL);
+ mateweather_timezone_menu_set_tzid (cd->zone_combo, NULL);
+
+ gtk_entry_set_text (GTK_ENTRY (lat_entry), "");
+ gtk_entry_set_text (GTK_ENTRY (lon_entry), "");
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), -1);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), -1);
+}
+
+static void
+edit_hide (GtkWidget *unused, ClockData *cd)
+{
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ gtk_widget_hide (edit_window);
+ edit_clear (cd);
+}
+
+static gboolean
+edit_delete (GtkWidget *unused, GdkEvent *event, ClockData *cd)
+{
+ edit_hide (unused, cd);
+
+ return TRUE;
+}
+
+static gboolean
+edit_hide_event (GtkWidget *widget, GdkEvent *event, ClockData *cd)
+{
+ edit_hide (widget, cd);
+
+ return TRUE;
+}
+
+static void
+prefs_hide (GtkWidget *widget, ClockData *cd)
+{
+ GtkWidget *tree;
+
+ edit_hide (widget, cd);
+
+ gtk_widget_hide (cd->prefs_window);
+
+ tree = _clock_get_widget (cd, "cities_list");
+
+ gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)));
+
+ refresh_click_timeout_time_only (cd);
+}
+
+static gboolean
+prefs_hide_event (GtkWidget *widget, GdkEvent *event, ClockData *cd)
+{
+ prefs_hide (widget, cd);
+
+ return TRUE;
+}
+
+static void
+prefs_help (GtkWidget *widget, ClockData *cd)
+{
+ clock_utils_display_help (cd->prefs_window,
+ "clock", "clock-settings");
+}
+
+static void
+remove_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+ ClockData *cd = data;
+ ClockLocation *loc = NULL;
+
+ gtk_tree_model_get (model, iter, COL_CITY_LOC, &loc, -1);
+ cd->locations = g_list_remove (cd->locations, loc);
+ g_object_unref (loc);
+
+ /* This will update everything related to locations to take into
+ * account the removed location (via the mateconf notification) */
+ save_cities_store (cd);
+}
+
+static void
+run_prefs_locations_remove (GtkButton *button, ClockData *cd)
+{
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations));
+
+ gtk_tree_selection_selected_foreach (sel, remove_tree_row, cd);
+}
+
+static void
+run_prefs_locations_add (GtkButton *button, ClockData *cd)
+{
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ fill_timezone_combo_from_location (cd, NULL);
+
+ g_object_set_data (G_OBJECT (edit_window), "clock-location", NULL);
+ gtk_window_set_title (GTK_WINDOW (edit_window), _("Choose Location"));
+ gtk_window_set_transient_for (GTK_WINDOW (edit_window), GTK_WINDOW (cd->prefs_window));
+
+ if (g_object_get_data (G_OBJECT (edit_window), "delete-handler") == NULL) {
+ g_object_set_data (G_OBJECT (edit_window), "delete-handler",
+ GINT_TO_POINTER (g_signal_connect (edit_window, "delete_event", G_CALLBACK (edit_delete), cd)));
+ }
+
+ location_update_ok_sensitivity (cd);
+
+ gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry));
+ gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1);
+
+ gtk_window_present_with_time (GTK_WINDOW (edit_window), gtk_get_current_event_time ());
+}
+
+static void
+edit_tree_row (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
+{
+ ClockData *cd = data;
+ ClockLocation *loc;
+ const char *name;
+ gchar *tmp;
+ gfloat lat, lon;
+
+ /* fill the dialog with this location's data, show it */
+ GtkWidget *edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ GtkWidget *lat_entry = _clock_get_widget (cd, "edit-location-latitude-entry");
+
+ GtkWidget *lon_entry = _clock_get_widget (cd, "edit-location-longitude-entry");
+
+ GtkWidget *lat_combo = _clock_get_widget (cd, "edit-location-latitude-combo");
+
+ GtkWidget *lon_combo = _clock_get_widget (cd, "edit-location-longitude-combo");
+
+ edit_clear (cd);
+
+ gtk_tree_model_get (model, iter, COL_CITY_LOC, &loc, -1);
+
+ mateweather_location_entry_set_city (cd->location_entry,
+ clock_location_get_city (loc),
+ clock_location_get_weather_code (loc));
+ name = clock_location_get_name (loc);
+ if (name && name[0]) {
+ gtk_entry_set_text (GTK_ENTRY (cd->location_entry), name);
+ }
+
+ clock_location_get_coords (loc, &lat, &lon);
+
+ fill_timezone_combo_from_location (cd, loc);
+
+ tmp = g_strdup_printf ("%f", fabsf(lat));
+ gtk_entry_set_text (GTK_ENTRY (lat_entry), tmp);
+ g_free (tmp);
+
+ if (lat > 0) {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), 0);
+ } else {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lat_combo), 1);
+ }
+
+ tmp = g_strdup_printf ("%f", fabsf(lon));
+ gtk_entry_set_text (GTK_ENTRY (lon_entry), tmp);
+ g_free (tmp);
+
+ if (lon > 0) {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), 0);
+ } else {
+ gtk_combo_box_set_active (GTK_COMBO_BOX (lon_combo), 1);
+ }
+
+ location_update_ok_sensitivity (cd);
+
+ g_object_set_data (G_OBJECT (edit_window), "clock-location", loc);
+
+ gtk_widget_grab_focus (GTK_WIDGET (cd->location_entry));
+ gtk_editable_set_position (GTK_EDITABLE (cd->location_entry), -1);
+
+ gtk_window_set_title (GTK_WINDOW (edit_window), _("Edit Location"));
+ gtk_window_present (GTK_WINDOW (edit_window));
+}
+
+static void
+run_prefs_locations_edit (GtkButton *unused, ClockData *cd)
+{
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (cd->prefs_locations));
+
+ gtk_tree_selection_selected_foreach (sel, edit_tree_row, cd);
+}
+
+static void
+set_12hr_format_radio_cb (GtkWidget *widget, ClockData *cd)
+{
+ const gchar *val;
+ ClockFormat format;
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
+ format = CLOCK_FORMAT_12;
+ else
+ format = CLOCK_FORMAT_24;
+
+ val = mateconf_enum_to_string (format_type_enum_map, format);
+
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_FORMAT, val, NULL);
+}
+
+static void
+temperature_combo_changed (GtkComboBox *combo, ClockData *cd)
+{
+ int value;
+ int old_value;
+ const gchar *str;
+
+ value = gtk_combo_box_get_active (combo) + 1;
+
+ if (cd->use_temperature_default)
+ old_value = TEMP_UNIT_DEFAULT;
+ else
+ old_value = cd->temperature_unit;
+
+ if (value == old_value)
+ return;
+
+ str = mateweather_prefs_temp_enum_to_string (value);
+
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_TEMPERATURE_UNIT, str, NULL);
+}
+
+static void
+speed_combo_changed (GtkComboBox *combo, ClockData *cd)
+{
+ int value;
+ int old_value;
+ const gchar *str;
+
+ value = gtk_combo_box_get_active (combo) + 1;
+
+ if (cd->use_speed_default)
+ old_value = SPEED_UNIT_DEFAULT;
+ else
+ old_value = cd->speed_unit;
+
+ if (value == old_value)
+ return;
+
+ str = mateweather_prefs_speed_enum_to_string (value);
+
+ mate_panel_applet_mateconf_set_string (MATE_PANEL_APPLET (cd->applet),
+ KEY_SPEED_UNIT, str, NULL);
+}
+
+static void
+fill_prefs_window (ClockData *cd)
+{
+ static const int temperatures[] = {
+ TEMP_UNIT_DEFAULT,
+ TEMP_UNIT_KELVIN,
+ TEMP_UNIT_CENTIGRADE,
+ TEMP_UNIT_FAHRENHEIT,
+ -1
+ };
+
+ static const int speeds[] = {
+ SPEED_UNIT_DEFAULT,
+ SPEED_UNIT_MS,
+ SPEED_UNIT_KPH,
+ SPEED_UNIT_MPH,
+ SPEED_UNIT_KNOTS,
+ SPEED_UNIT_BFT,
+ -1
+ };
+
+ GtkWidget *radio_12hr;
+ GtkWidget *radio_24hr;
+ GtkWidget *widget;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *col;
+ GtkListStore *store;
+ int i;
+
+ /* Set the 12 hour / 24 hour widget */
+ radio_12hr = _clock_get_widget (cd, "12hr_radio");
+ radio_24hr = _clock_get_widget (cd, "24hr_radio");
+
+ if (cd->format == CLOCK_FORMAT_12)
+ widget = radio_12hr;
+ else
+ widget = radio_24hr;
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+
+ g_signal_connect (radio_12hr, "toggled",
+ G_CALLBACK (set_12hr_format_radio_cb), cd);
+
+ /* Set the "Show Date" checkbox */
+ widget = _clock_get_widget (cd, "date_check");
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_date_cb), cd);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showdate);
+
+ /* Set the "Show Seconds" checkbox */
+ widget = _clock_get_widget (cd, "seconds_check");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->showseconds);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_seconds_cb), cd);
+
+ /* Set the "Show weather" checkbox */
+ widget = _clock_get_widget (cd, "weather_check");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_weather);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_weather_cb), cd);
+
+ /* Set the "Show temperature" checkbox */
+ widget = _clock_get_widget (cd, "temperature_check");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), cd->show_temperature);
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (set_show_temperature_cb), cd);
+
+ /* Fill the Cities list */
+ widget = _clock_get_widget (cd, "cities_list");
+
+ renderer = gtk_cell_renderer_text_new ();
+ col = gtk_tree_view_column_new_with_attributes (_("City Name"), renderer, "text", COL_CITY_NAME, NULL);
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1);
+
+ renderer = gtk_cell_renderer_text_new ();
+ col = gtk_tree_view_column_new_with_attributes (_("City Time Zone"), renderer, "text", COL_CITY_TZ, NULL);
+ gtk_tree_view_insert_column (GTK_TREE_VIEW (widget), col, -1);
+
+ if (cd->cities_store == NULL)
+ create_cities_store (cd);
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
+ GTK_TREE_MODEL (cd->cities_store));
+
+ /* Temperature combo */
+ widget = _clock_get_widget (cd, "temperature_combo");
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
+
+ for (i = 0; temperatures[i] != -1; i++)
+ gtk_combo_box_append_text (GTK_COMBO_BOX (widget),
+ mateweather_prefs_get_temp_display_name (temperatures[i]));
+
+ update_temperature_combo (cd);
+ g_signal_connect (widget, "changed",
+ G_CALLBACK (temperature_combo_changed), cd);
+
+ /* Wind speed combo */
+ widget = _clock_get_widget (cd, "wind_speed_combo");
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (store));
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), renderer, "text", 0, NULL);
+
+ for (i = 0; speeds[i] != -1; i++)
+ gtk_combo_box_append_text (GTK_COMBO_BOX (widget),
+ mateweather_prefs_get_speed_display_name (speeds[i]));
+
+ update_speed_combo (cd);
+ g_signal_connect (widget, "changed",
+ G_CALLBACK (speed_combo_changed), cd);
+}
+
+static void
+ensure_prefs_window_is_created (ClockData *cd)
+{
+ GtkWidget *edit_window;
+ GtkWidget *prefs_close_button;
+ GtkWidget *prefs_help_button;
+ GtkWidget *clock_options;
+ GtkWidget *edit_cancel_button;
+ GtkWidget *edit_ok_button;
+ GtkWidget *location_box;
+ GtkWidget *zone_box;
+ GtkWidget *location_name_label;
+ GtkWidget *timezone_label;
+ GtkTreeSelection *selection;
+ MateWeatherLocation *world;
+
+ if (cd->prefs_window)
+ return;
+
+ cd->prefs_window = _clock_get_widget (cd, "prefs-window");
+
+ gtk_window_set_icon_name (GTK_WINDOW (cd->prefs_window), CLOCK_ICON);
+
+ prefs_close_button = _clock_get_widget (cd, "prefs-close-button");
+ prefs_help_button = _clock_get_widget (cd, "prefs-help-button");
+ clock_options = _clock_get_widget (cd, "clock-options");
+ cd->prefs_locations = GTK_TREE_VIEW (_clock_get_widget (cd, "cities_list"));
+ location_name_label = _clock_get_widget (cd, "location-name-label");
+ timezone_label = _clock_get_widget (cd, "timezone-label");
+
+
+ if (!clock_locale_supports_am_pm ())
+ gtk_widget_hide (clock_options);
+
+ selection = gtk_tree_view_get_selection (cd->prefs_locations);
+ g_signal_connect (G_OBJECT (selection), "changed",
+ G_CALLBACK (prefs_locations_changed), cd);
+
+ g_signal_connect (G_OBJECT (cd->prefs_window), "delete_event",
+ G_CALLBACK (prefs_hide_event), cd);
+
+ g_signal_connect (G_OBJECT (prefs_close_button), "clicked",
+ G_CALLBACK (prefs_hide), cd);
+
+ g_signal_connect (G_OBJECT (prefs_help_button), "clicked",
+ G_CALLBACK (prefs_help), cd);
+
+ cd->prefs_location_remove_button = _clock_get_widget (cd, "prefs-locations-remove-button");
+
+ g_signal_connect (G_OBJECT (cd->prefs_location_remove_button), "clicked",
+ G_CALLBACK (run_prefs_locations_remove), cd);
+
+ cd->prefs_location_add_button = _clock_get_widget (cd, "prefs-locations-add-button");
+
+ g_signal_connect (G_OBJECT (cd->prefs_location_add_button), "clicked",
+ G_CALLBACK (run_prefs_locations_add), cd);
+
+ cd->prefs_location_edit_button = _clock_get_widget (cd, "prefs-locations-edit-button");
+
+ g_signal_connect (G_OBJECT (cd->prefs_location_edit_button), "clicked",
+ G_CALLBACK (run_prefs_locations_edit), cd);
+
+ edit_window = _clock_get_widget (cd, "edit-location-window");
+
+ gtk_window_set_transient_for (GTK_WINDOW (edit_window),
+ GTK_WINDOW (cd->prefs_window));
+
+ g_signal_connect (G_OBJECT (edit_window), "delete_event",
+ G_CALLBACK (edit_hide_event), cd);
+
+ edit_cancel_button = _clock_get_widget (cd, "edit-location-cancel-button");
+
+ edit_ok_button = _clock_get_widget (cd, "edit-location-ok-button");
+
+ world = mateweather_location_new_world (FALSE);
+
+ location_box = _clock_get_widget (cd, "edit-location-name-box");
+ cd->location_entry = MATEWEATHER_LOCATION_ENTRY (mateweather_location_entry_new (world));
+ gtk_widget_show (GTK_WIDGET (cd->location_entry));
+ gtk_container_add (GTK_CONTAINER (location_box), GTK_WIDGET (cd->location_entry));
+ gtk_label_set_mnemonic_widget (GTK_LABEL (location_name_label),
+ GTK_WIDGET (cd->location_entry));
+
+ g_signal_connect (G_OBJECT (cd->location_entry), "notify::location",
+ G_CALLBACK (location_changed), cd);
+ g_signal_connect (G_OBJECT (cd->location_entry), "changed",
+ G_CALLBACK (location_name_changed), cd);
+
+ zone_box = _clock_get_widget (cd, "edit-location-timezone-box");
+ cd->zone_combo = MATEWEATHER_TIMEZONE_MENU (mateweather_timezone_menu_new (world));
+ gtk_widget_show (GTK_WIDGET (cd->zone_combo));
+ gtk_container_add (GTK_CONTAINER (zone_box), GTK_WIDGET (cd->zone_combo));
+ gtk_label_set_mnemonic_widget (GTK_LABEL (timezone_label),
+ GTK_WIDGET (cd->zone_combo));
+
+ g_signal_connect (G_OBJECT (cd->zone_combo), "notify::tzid",
+ G_CALLBACK (location_timezone_changed), cd);
+
+ mateweather_location_unref (world);
+
+ g_signal_connect (G_OBJECT (edit_cancel_button), "clicked",
+ G_CALLBACK (edit_hide), cd);
+
+ g_signal_connect (G_OBJECT (edit_ok_button), "clicked",
+ G_CALLBACK (run_prefs_edit_save), cd);
+
+ /* Set up the time setting section */
+
+ cd->time_settings_button = _clock_get_widget (cd, "time-settings-button");
+ g_signal_connect (cd->time_settings_button, "clicked",
+ G_CALLBACK (run_time_settings), cd);
+
+ /* fill it with the current preferences */
+ fill_prefs_window (cd);
+}
+
+static void
+display_properties_dialog (ClockData *cd, gboolean start_in_locations_page)
+{
+ ensure_prefs_window_is_created (cd);
+
+ if (start_in_locations_page) {
+ GtkWidget *notebook = _clock_get_widget (cd, "notebook");
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1);
+ }
+
+ update_set_time_button (cd);
+
+ gtk_window_set_screen (GTK_WINDOW (cd->prefs_window),
+ gtk_widget_get_screen (cd->applet));
+ gtk_window_present (GTK_WINDOW (cd->prefs_window));
+
+ refresh_click_timeout_time_only (cd);
+
+ /* FMQ: cd->props was the old preferences window; remove references to it */
+ /* FMQ: connect to the Help button by hand; look at properties_response_cb() for the help code */
+#if 0
+ /* FMQ: check the code below; replace the proper parts */
+ GtkWidget *hbox;
+ GtkWidget *vbox;
+ GtkWidget *combo;
+ GtkWidget *label;
+
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("24 hour"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("UNIX time"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _("Internet time"));
+
+ gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0);
+ gtk_widget_show (combo);
+
+ cd->custom_hbox = gtk_hbox_new (FALSE, 12);
+ gtk_box_pack_start (GTK_BOX (vbox), cd->custom_hbox, TRUE, TRUE, 0);
+
+ cd->custom_label = gtk_label_new_with_mnemonic (_("Custom _format:"));
+ gtk_label_set_use_markup (GTK_LABEL (cd->custom_label), TRUE);
+ gtk_label_set_justify (GTK_LABEL (cd->custom_label),
+ GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (cd->custom_label), 0, 0.5);
+ gtk_box_pack_start (GTK_BOX (cd->custom_hbox),
+ cd->custom_label,
+ FALSE, FALSE, 0);
+
+ cd->custom_entry = gtk_entry_new ();
+ gtk_box_pack_start (GTK_BOX (cd->custom_hbox),
+ cd->custom_entry,
+ FALSE, FALSE, 0);
+ gtk_entry_set_text (GTK_ENTRY (cd->custom_entry),
+ cd->custom_format);
+ g_signal_connect (cd->custom_entry, "changed",
+ G_CALLBACK (set_custom_format_cb),
+ cd);
+
+ g_signal_connect (cd->props, "destroy",
+ G_CALLBACK (gtk_widget_destroyed),
+ &cd->props);
+ g_signal_connect (cd->props, "response",
+ G_CALLBACK (properties_response_cb),
+ cd);
+
+ cd->custom_format_shown = FALSE;
+ update_properties_for_format (cd, GTK_COMBO_BOX (combo), cd->format);
+
+ /* valid values begin from 1 */
+ if (cd->can_handle_format_12)
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo),
+ cd->format - 1);
+ else
+ gtk_combo_box_set_active (GTK_COMBO_BOX (combo),
+ cd->format - 2);
+
+ g_signal_connect (combo, "changed",
+ G_CALLBACK (set_format_cb), cd);
+
+ /* Now set up the sensitivity based on mateconf key writability */
+ setup_writability_sensitivity (cd, combo, label, KEY_FORMAT);
+ setup_writability_sensitivity (cd, cd->custom_entry, cd->custom_label,
+ KEY_CUSTOM_FORMAT);
+ setup_writability_sensitivity (cd, cd->showseconds_check, NULL, KEY_SHOW_SECONDS);
+ setup_writability_sensitivity (cd, cd->showdate_check, NULL, KEY_SHOW_DATE);
+
+ gtk_widget_show (cd->props);
+#endif
+}
+
+static void
+verb_display_properties_dialog (GtkAction *action,
+ ClockData *cd)
+{
+ display_properties_dialog (cd, FALSE);
+}
+
+static void
+display_help_dialog (GtkAction *action,
+ ClockData *cd)
+{
+ clock_utils_display_help (cd->applet, "clock", NULL);
+}
+
+static void display_about_dialog(GtkAction* action, ClockData* cd)
+{
+ static const gchar* authors[] = {
+ "George Lebl <[email protected]>",
+ "Gediminas Paulauskas <[email protected]>",
+ NULL
+ };
+
+ static const char* documenters[] = {
+ "Dan Mueth <[email protected]>",
+ NULL
+ };
+
+ char copyright[] = \
+ "Copyright \xc2\xa9 1998-2004 Free Software Foundation, Inc.";
+
+ gtk_show_about_dialog(NULL,
+ "program-name", _("Clock"),
+ "authors", authors,
+ "comments", _("The Clock displays the current time and date"),
+ "copyright", copyright,
+ "documenters", documenters,
+ "logo-icon-name", CLOCK_ICON,
+ "translator-credits", _("translator-credits"),
+ "version", VERSION,
+ "website", "http://matsusoft.com.ar/projects/mate/",
+ NULL);
+}
+
+static gboolean
+clock_factory (MatePanelApplet *applet,
+ const char *iid,
+ gpointer data)
+{
+ gboolean retval = FALSE;
+
+ if (!strcmp (iid, "ClockApplet"))
+ retval = fill_clock_applet (applet);
+
+ return retval;
+}
+
+#ifdef CLOCK_INPROCESS
+MATE_PANEL_APPLET_IN_PROCESS_FACTORY ("ClockAppletFactory",
+ PANEL_TYPE_APPLET,
+ "ClockApplet",
+ clock_factory,
+ NULL)
+#else
+MATE_PANEL_APPLET_OUT_PROCESS_FACTORY ("ClockAppletFactory",
+ PANEL_TYPE_APPLET,
+ "ClockApplet",
+ clock_factory,
+ NULL)
+#endif
diff --git a/applets/clock/clock.h b/applets/clock/clock.h
new file mode 100644
index 00000000..f2347f68
--- /dev/null
+++ b/applets/clock/clock.h
@@ -0,0 +1,41 @@
+/*
+ * clock.h
+ *
+ * Copyright (C) 2007 Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * Authors:
+ * Vincent Untz <[email protected]>
+ *
+ * Most of the original code comes from clock.c
+ */
+
+#ifndef CLOCK_H
+#define CLOCK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CLOCK_ICON "mate-panel-clock"
+#define CLOCK_SCHEMA_DIR "/schemas/apps/clock_applet/prefs"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* CLOCK_H */
diff --git a/applets/clock/clock.schemas.in b/applets/clock/clock.schemas.in
new file mode 100644
index 00000000..badec94e
--- /dev/null
+++ b/applets/clock/clock.schemas.in
@@ -0,0 +1,313 @@
+<?xml version="1.0"?>
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/format</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <locale name="C">
+ <default>
+ <!-- Translators:
+ This controls whether the MATE panel clock should display time in 24 hour mode
+ or 12 hour mode by default. The only valid values for this are "24-hour" and
+ "12-hour". If your locale uses 24 hour time notation, translate this to "24-hour".
+ If your locale uses 12 hour time notation with am/pm, translate this to "12-hour".
+
+ Do NOT translate this into anything else than "24-hour" or "12-hour". For example,
+ if you translate this to "24 sata" or anything else that isn't "24-hour" or
+ "12-hour", things will not work.
+ -->
+ 24-hour
+ </default>
+ <short>Hour format</short>
+ <long>
+ This key specifies the hour format used by the clock applet.
+ Possible values are "12-hour", "24-hour", "internet", "unix" and
+ "custom".
+ If set to "internet", the clock will display Internet time.
+ The Internet time system divides the day into 1000 ".beats". There
+ are no time zones in this system, so time is the same all over the
+ world.
+ If set to "unix", the clock will display time in seconds since
+ Epoch, i.e. 1970-01-01.
+ If set to "custom", the clock will display time according to the
+ format specified in the custom_format key.
+ </long>
+ </locale>
+ <locale name="en_US">
+ <default>12-hour</default>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/custom_format</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default></default>
+ <locale name="C">
+ <short>Custom format of the clock</short>
+ <long>
+ This key specifies the format used by the clock applet when the
+ format key is set to "custom". You can use conversion specifiers
+ understood by strftime() to obtain a specific format. See the
+ strftime() manual for more information.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_seconds</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Show time with seconds</short>
+ <long>If true, display seconds in time.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_date</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show date in clock</short>
+ <long>If true, display date in the clock, in addition to time.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_tooltip</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show date in tooltip</short>
+ <long>
+ If true, show date in a tooltip when the pointer is over the clock.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_weather</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show weather in clock</short>
+ <long>If true, display a weather icon.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_temperature</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show temperature in clock</short>
+ <long>If true, show the temperature next to the weather icon.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/gmt_time</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Use UTC</short>
+ <long>
+ The use of this key was deprecated in MATE 2.28 in favour of the
+ use of timezones. The schema is retained for compatibility with
+ older versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/config_tool</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default> </default>
+ <locale name="C">
+ <short>Time configuration tool</short>
+ <long>
+ The use of this key was deprecated in MATE 2.22 with the use
+ of an internal time configuration tool. The schema is retained for
+ compatibility with older versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/show_week_numbers</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show week numbers in calendar</short>
+ <long>
+ If true, show week numbers in the calendar.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_appointments</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of appointments</short>
+ <long>
+ If true, expand the list of appointments in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_birthdays</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of birthdays</short>
+ <long>
+ If true, expand the list of birthdays in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_tasks</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of tasks</short>
+ <long>
+ If true, expand the list of tasks in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_weather</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of weather information</short>
+ <long>
+ If true, expand the list of weather information in the calendar
+ window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/expand_locations</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Expand list of locations</short>
+ <long>
+ If true, expand the list of locations in the calendar
+ window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/hour_format</key>
+ <owner>clock-applet</owner>
+ <type>int</type>
+ <default>12</default>
+ <locale name="C">
+ <short>Hour format</short>
+ <long>
+ The use of this key was deprecated in MATE 2.6 in favour of the
+ 'format' key. The schema is retained for compatibility with older
+ versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/unix_time</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Use UNIX time</short>
+ <long>
+ The use of this key was deprecated in MATE 2.6 in favour of the
+ 'format' key. The schema is retained for compatibility with older
+ versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/internet_time</key>
+ <owner>clock-applet</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Use Internet time</short>
+ <long>
+ The use of this key was deprecated in MATE 2.6 in favour of the
+ 'format' key. The schema is retained for compatibility with older
+ versions.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/cities</key>
+ <owner>clock-applet</owner>
+ <type>list</type>
+ <list_type>string</list_type>
+ <default>[]</default>
+ <locale name="C">
+ <short>List of locations</short>
+ <long>
+ A list of locations to display in the calendar window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/temperature_unit</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default>Default</default>
+ <locale name="C">
+ <short>Temperature unit</short>
+ <long>
+ The unit to use when showing temperatures.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/clock_applet/prefs/speed_unit</key>
+ <owner>clock-applet</owner>
+ <type>string</type>
+ <default>Default</default>
+ <locale name="C">
+ <short>Speed unit</short>
+ <long>
+ The unit to use when showing wind speed.
+ </long>
+ </locale>
+ </schema>
+
+ </schemalist>
+
+</mateconfschemafile>
diff --git a/applets/clock/clock.ui b/applets/clock/clock.ui
new file mode 100644
index 00000000..11d9f8db
--- /dev/null
+++ b/applets/clock/clock.ui
@@ -0,0 +1,1136 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkDialog" id="edit-location-window">
+ <property name="border_width">5</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkTable" id="table26">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkVBox" id="vbox34">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow12">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <child>
+ <object class="GtkViewport" id="viewport3">
+ <property name="visible">True</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkImage" id="image30">
+ <property name="stock">gtk-missing-image</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table27">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">4</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label243">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Languages that have a single word that translates as either &quot;state&quot; or &quot;province&quot; should use that instead of &quot;region&quot;.">&lt;small&gt;&lt;i&gt;Type a city, region, or country name and then select a match from the pop-up.&lt;/i&gt;&lt;/small&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="edit-location-name-box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="edit-location-timezone-box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="timezone-label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Timezone:</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="location-name-label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Location Name:</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="edit-location-latitude-entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x2022;</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="edit-location-latitude-combo">
+ <property name="visible">True</property>
+ <property name="model">liststore2</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext2"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label240">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;i&gt;(optional)&lt;/i&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label239">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;i&gt;(optional)&lt;/i&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">3</property>
+ <property name="right_attach">4</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="edit-location-longitude-combo">
+ <property name="visible">True</property>
+ <property name="model">liststore1</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="edit-location-longitude-entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x2022;</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label238">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">L_ongitude:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">edit-location-longitude-entry</property>
+ </object>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox35">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkLabel" id="label237">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">L_atitude:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">edit-location-latitude-entry</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area3">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="edit-location-cancel-button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="edit-location-ok-button">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-6">edit-location-cancel-button</action-widget>
+ <action-widget response="-5">edit-location-ok-button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkDialog" id="set-time-window">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Time &amp; Date</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="yscale">0</property>
+ <property name="top_padding">7</property>
+ <property name="bottom_padding">6</property>
+ <property name="left_padding">7</property>
+ <property name="right_padding">7</property>
+ <child>
+ <object class="GtkHBox" id="time_settings_box">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkCalendar" id="calendar">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="year">2009</property>
+ <property name="month">5</property>
+ <property name="day">3</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkHBox" id="hbox61">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkSpinButton" id="hours_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ <property name="adjustment">adjustment3</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="minutes_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ <property name="adjustment">adjustment2</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="seconds_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</property>
+ <property name="adjustment">adjustment1</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="current_time_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label">23:59:59</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label236">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Time:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">hours_spin</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label235">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Current Time:</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area2">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="cancel-set-time-button">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="set-time-button">
+ <property name="label" translatable="yes">_Set System Time</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">cancel-set-time-button</action-widget>
+ <action-widget response="0">set-time-button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkListStore" id="liststore1">
+ <columns>
+ <!-- column-name item -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">East</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">West</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkListStore" id="liststore2">
+ <columns>
+ <!-- column-name item -->
+ <column type="gchararray"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">North</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">South</col>
+ </row>
+ </data>
+ </object>
+ <object class="GtkDialog" id="prefs-window">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Clock Preferences</property>
+ <property name="resizable">False</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">5</property>
+ <child>
+ <object class="GtkVBox" id="vbox17">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="clock-options">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label210">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Clock Format</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment32">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkHBox" id="hbox49">
+ <property name="visible">True</property>
+ <property name="spacing">13</property>
+ <child>
+ <object class="GtkRadioButton" id="12hr_radio">
+ <property name="label" translatable="yes">_12 hour format</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkRadioButton" id="24hr_radio">
+ <property name="label" translatable="yes">_24 hour format</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">12hr_radio</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox29">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label229">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Panel Display</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment33">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox30">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkCheckButton" id="date_check">
+ <property name="label" translatable="yes">Show the _date</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="seconds_check">
+ <property name="label" translatable="yes">Show seco_nds</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="weather_check">
+ <property name="label" translatable="yes">Show _weather</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="temperature_check">
+ <property name="label" translatable="yes">Show _temperature</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label209">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">General</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox24">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkHBox" id="hbox54">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow10">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">never</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="cities_list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="hover_expand">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVButtonBox" id="vbuttonbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">start</property>
+ <child>
+ <object class="GtkButton" id="prefs-locations-add-button">
+ <property name="label">gtk-add</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="prefs-locations-edit-button">
+ <property name="label">gtk-edit</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="prefs-locations-remove-button">
+ <property name="label">gtk-remove</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label220">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Locations</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox27">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkVBox" id="vbox28">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label224">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Display</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkAlignment" id="alignment34">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkTable" id="table25">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkComboBox" id="visibility_combo"/>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label232">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Visibility unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">visibility_combo</property>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="pressure_combo"/>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label231">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Pressure unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">pressure_combo</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="wind_speed_combo">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="temperature_combo">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label228">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Wind speed unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">wind_speed_combo</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label227">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Temperature unit:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">temperature_combo</property>
+ </object>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label223">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Weather</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="prefs-help-button">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="time-settings-button">
+ <property name="label" translatable="yes">Time _Settings</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="prefs-close-button">
+ <property name="label">gtk-close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="-11">prefs-help-button</action-widget>
+ <action-widget response="0">time-settings-button</action-widget>
+ <action-widget response="-7">prefs-close-button</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkAdjustment" id="adjustment1">
+ <property name="value">59</property>
+ <property name="upper">59</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">30</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment2">
+ <property name="value">59</property>
+ <property name="upper">59</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">30</property>
+ </object>
+ <object class="GtkAdjustment" id="adjustment3">
+ <property name="value">23</property>
+ <property name="upper">23</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">12</property>
+ </object>
+</interface>
diff --git a/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in b/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in
new file mode 100644
index 00000000..31ccda1f
--- /dev/null
+++ b/applets/clock/org.mate.panel.ClockApplet.mate-panel-applet.in.in
@@ -0,0 +1,18 @@
+[Applet Factory]
+Id=ClockAppletFactory
+InProcess=@IN_PROCESS@
+Location=@LOCATION@
+_Name=Clock Applet Factory
+_Description=Factory for clock applet
+
+[ClockApplet]
+_Name=Clock
+_Description=Get the current time and date
+Icon=mate-panel-clock
+MateComponentId=OAFIID:MATE_ClockApplet;
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=mate-panel
+X-MATE-Bugzilla-Component=clock
+X-MATE-Bugzilla-Version=@VERSION@
+X-MATE-Bugzilla-OtherBinaries=clock-applet
+
diff --git a/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in b/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in
new file mode 100644
index 00000000..bb866606
--- /dev/null
+++ b/applets/clock/org.mate.panel.applet.ClockAppletFactory.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.mate.panel.applet.ClockAppletFactory
+Exec=@LOCATION@
diff --git a/applets/clock/pixmaps/Makefile.am b/applets/clock/pixmaps/Makefile.am
new file mode 100644
index 00000000..3e9f5077
--- /dev/null
+++ b/applets/clock/pixmaps/Makefile.am
@@ -0,0 +1,21 @@
+icondir = $(datadir)/mate-panel/pixmaps
+icon_DATA = \
+ clock-calendar-icon.png \
+ clock-face-large.svg \
+ clock-face-small.svg \
+ clock-face-small-morning.svg \
+ clock-face-small-day.svg \
+ clock-face-small-evening.svg \
+ clock-face-small-night.svg \
+ clock-map.png \
+ clock-map-location-marker.png \
+ clock-map-location-current.png \
+ clock-map-location-hilight.png
+
+EXTRA_DIST = \
+ clock-map.svg \
+ $(icon_DATA)
+
+MAINTAINERCLEANFILES = Makefile.in
+
+-include $(top_srcdir)/git.mk
diff --git a/applets/clock/pixmaps/Makefile.in b/applets/clock/pixmaps/Makefile.in
new file mode 100644
index 00000000..11e6f2ff
--- /dev/null
+++ b/applets/clock/pixmaps/Makefile.in
@@ -0,0 +1,537 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = applets/clock/pixmaps
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/d-type.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/intltool.m4 \
+ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+ $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/mate-doc-utils.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(icondir)"
+DATA = $(icon_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ALL_LINGUAS = @ALL_LINGUAS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CLOCK_CFLAGS = @CLOCK_CFLAGS@
+CLOCK_EDS_ICONDIR = @CLOCK_EDS_ICONDIR@
+CLOCK_LIBS = @CLOCK_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DISABLE_DEPRECATED = @DISABLE_DEPRECATED@
+DISABLE_DEPRECATED_CFLAGS = @DISABLE_DEPRECATED_CFLAGS@
+DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@
+DLLTOOL = @DLLTOOL@
+DOC_USER_FORMATS = @DOC_USER_FORMATS@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGG_SMCLIENT_CFLAGS = @EGG_SMCLIENT_CFLAGS@
+EGG_SMCLIENT_LIBS = @EGG_SMCLIENT_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+FISH_CFLAGS = @FISH_CFLAGS@
+FISH_LIBS = @FISH_LIBS@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_QUERYMODULES = @GIO_QUERYMODULES@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HELP_DIR = @HELP_DIR@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLLIBS = @INTLLIBS@
+INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
+INTLTOOL_MERGE = @INTLTOOL_MERGE@
+INTLTOOL_PERL = @INTLTOOL_PERL@
+INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
+INTROSPECTION_CFLAGS = @INTROSPECTION_CFLAGS@
+INTROSPECTION_COMPILER = @INTROSPECTION_COMPILER@
+INTROSPECTION_GENERATE = @INTROSPECTION_GENERATE@
+INTROSPECTION_GIRDIR = @INTROSPECTION_GIRDIR@
+INTROSPECTION_LIBS = @INTROSPECTION_LIBS@
+INTROSPECTION_MAKEFILE = @INTROSPECTION_MAKEFILE@
+INTROSPECTION_SCANNER = @INTROSPECTION_SCANNER@
+INTROSPECTION_TYPELIBDIR = @INTROSPECTION_TYPELIBDIR@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBMATE_PANEL_APPLET_CFLAGS = @LIBMATE_PANEL_APPLET_CFLAGS@
+LIBMATE_PANEL_APPLET_LIBS = @LIBMATE_PANEL_APPLET_LIBS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_CFLAGS@
+LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS = @LIBMATE_PANEL_APPLET_MATECOMPONENT_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIB_MATE_PANEL_APPLET_LT_VERSION = @LIB_MATE_PANEL_APPLET_LT_VERSION@
+LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION = @LIB_MATE_PANEL_APPLET_MATECOMPONENT_LT_VERSION@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MATECOMPONENT_ACT_IDLDIR = @MATECOMPONENT_ACT_IDLDIR@
+MATECOMPONENT_CFLAGS = @MATECOMPONENT_CFLAGS@
+MATECOMPONENT_IDLDIR = @MATECOMPONENT_IDLDIR@
+MATECOMPONENT_LIBS = @MATECOMPONENT_LIBS@
+MATECONFTOOL = @MATECONFTOOL@
+MATECONF_SCHEMA_CONFIG_SOURCE = @MATECONF_SCHEMA_CONFIG_SOURCE@
+MATECONF_SCHEMA_FILE_DIR = @MATECONF_SCHEMA_FILE_DIR@
+MATECORBA_IDL = @MATECORBA_IDL@
+MKDIR_P = @MKDIR_P@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGFMT_OPTS = @MSGFMT_OPTS@
+MSGMERGE = @MSGMERGE@
+NETWORK_MANAGER_CFLAGS = @NETWORK_MANAGER_CFLAGS@
+NETWORK_MANAGER_LIBS = @NETWORK_MANAGER_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NOTIFICATION_AREA_CFLAGS = @NOTIFICATION_AREA_CFLAGS@
+NOTIFICATION_AREA_LIBS = @NOTIFICATION_AREA_LIBS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OMF_DIR = @OMF_DIR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PANEL_CFLAGS = @PANEL_CFLAGS@
+PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE = @PANEL_INTLTOOL_MATE_PANEL_APPLET_RULE@
+PANEL_LIBS = @PANEL_LIBS@
+PANEL_MODULE_MATECOMPONENT_CFLAGS = @PANEL_MODULE_MATECOMPONENT_CFLAGS@
+PANEL_MODULE_MATECOMPONENT_LIBS = @PANEL_MODULE_MATECOMPONENT_LIBS@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POFILES = @POFILES@
+POSUB = @POSUB@
+PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@
+PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+REBUILD = @REBUILD@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TZ_CFLAGS = @TZ_CFLAGS@
+TZ_LIBS = @TZ_LIBS@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WNCKLET_CFLAGS = @WNCKLET_CFLAGS@
+WNCKLET_LIBS = @WNCKLET_LIBS@
+XGETTEXT = @XGETTEXT@
+XMKMF = @XMKMF@
+XRANDR_CFLAGS = @XRANDR_CFLAGS@
+XRANDR_LIBS = @XRANDR_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appletsdir = @appletsdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+modulesdir = @modulesdir@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+icondir = $(datadir)/mate-panel/pixmaps
+icon_DATA = \
+ clock-calendar-icon.png \
+ clock-face-large.svg \
+ clock-face-small.svg \
+ clock-face-small-morning.svg \
+ clock-face-small-day.svg \
+ clock-face-small-evening.svg \
+ clock-face-small-night.svg \
+ clock-map.png \
+ clock-map-location-marker.png \
+ clock-map-location-current.png \
+ clock-map-location-hilight.png
+
+EXTRA_DIST = \
+ clock-map.svg \
+ $(icon_DATA)
+
+MAINTAINERCLEANFILES = Makefile.in
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu applets/clock/pixmaps/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu applets/clock/pixmaps/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-iconDATA: $(icon_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(icondir)" || $(MKDIR_P) "$(DESTDIR)$(icondir)"
+ @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \
+ done
+
+uninstall-iconDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(icondir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(icondir)" && rm -f $$files
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(icondir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-iconDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-iconDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-iconDATA install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-iconDATA
+
+
+-include $(top_srcdir)/git.mk
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/applets/clock/pixmaps/clock-calendar-icon.png b/applets/clock/pixmaps/clock-calendar-icon.png
new file mode 100644
index 00000000..cfab7200
--- /dev/null
+++ b/applets/clock/pixmaps/clock-calendar-icon.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-face-large.svg b/applets/clock/pixmaps/clock-face-large.svg
new file mode 100644
index 00000000..09b3224f
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-large.svg
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="50"
+ height="50"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ version="1.0"
+ sodipodi:docbase="/home/garrett/Desktop"
+ sodipodi:docname="clock-face-large.svg">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5593"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5595"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5597"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5599"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5601"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5603"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5605"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="10.446983"
+ inkscape:cx="24.509202"
+ inkscape:cy="28.161554"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1152"
+ inkscape:window-x="0"
+ inkscape:window-y="0" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ d="M 39.774755 19.008621 A 8.6620579 8.6620579 0 1 1 22.45064,19.008621 A 8.6620579 8.6620579 0 1 1 39.774755 19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="opacity:1;color:#000000;fill:url(#radialGradient5605);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(2.30892,0,0,1.098631,-46.84483,19.60015)" />
+ <path
+ transform="matrix(1.548421,0,0,1.548421,-0.161834,-1.184899)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5593);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.17789125;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.294287,0,0,1.294287,3.865446,3.010334)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5595);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5597);stroke-width:1.19954503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5599);stroke-width:1.24198496;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ transform="matrix(1.468514,0,0,1.468514,1.136597,7.079533e-2)" />
+ <path
+ transform="matrix(1.294287,0,0,1.294287,3.865446,3.010334)"
+ d="M 31.160714 16.910715 A 14.910714 14.910714 0 1 1 1.3392859,16.910715 A 14.910714 14.910714 0 1 1 31.160714 16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5601);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5603);stroke-width:1.19954503;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <g
+ id="g4760"
+ transform="matrix(0.966895,0,0,0.966895,0.827632,0.827631)">
+ <path
+ id="text4433"
+ d="M 23.395162,9.0668143 L 23.395162,12.043662 L 23.913899,12.043662 L 23.913899,7.8642859 L 23.572004,7.8642859 C 23.389268,8.5068127 23.271372,8.5952346 22.469687,8.6954452 L 22.469687,9.0668143 L 23.395162,9.0668143 M 27.500839,11.530819 L 25.302099,11.530819 C 25.355151,11.188924 25.543785,10.970817 26.056627,10.670186 L 26.646102,10.351869 C 27.229681,10.033553 27.530313,9.6032358 27.530313,9.0903933 C 27.530313,8.7426035 27.38884,8.4183919 27.141261,8.1943917 C 26.893681,7.9703915 26.587153,7.8642859 26.192206,7.8642859 C 25.661679,7.8642859 25.266731,8.0529181 25.036836,8.4066026 C 24.889466,8.6306028 24.824624,8.8899723 24.812835,9.3143937 L 25.331573,9.3143937 C 25.349257,9.0314461 25.384625,8.860498 25.455362,8.724919 C 25.590941,8.4714451 25.8621,8.3181814 26.174521,8.3181814 C 26.646101,8.3181814 26.999786,8.6541824 26.999786,9.1021828 C 26.999786,9.4322883 26.805259,9.7152367 26.43389,9.927447 L 25.891573,10.233974 C 25.019152,10.729133 24.765676,11.124082 24.718519,12.043662 L 27.500839,12.043662 L 27.500839,11.530819"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4437"
+ d="M 16.212011,11.007326 L 16.212011,13.984173 L 16.730749,13.984173 L 16.730749,9.8047976 L 16.388853,9.8047976 C 16.206116,10.447324 16.08822,10.535746 15.286536,10.635957 L 15.286536,11.007326 L 16.212011,11.007326 M 18.861687,11.007326 L 18.861687,13.984173 L 19.380424,13.984173 L 19.380424,9.8047976 L 19.038529,9.8047976 C 18.855792,10.447324 18.737896,10.535746 17.936211,10.635957 L 17.936211,11.007326 L 18.861687,11.007326"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4441"
+ d="M 10.655018,16.363726 L 10.655018,19.340573 L 11.173756,19.340573 L 11.173756,15.161197 L 10.831861,15.161197 C 10.649124,15.803724 10.531228,15.892146 9.7295429,15.992356 L 9.7295429,16.363726 L 10.655018,16.363726 M 13.39901,15.161197 C 13.009957,15.161197 12.656272,15.332145 12.438166,15.620987 C 12.167008,15.986461 12.031429,16.546463 12.031429,17.318675 C 12.031429,18.727518 12.503009,19.476152 13.39901,19.476152 C 14.283221,19.476152 14.766591,18.727518 14.766591,17.354043 C 14.766591,16.540569 14.636907,15.998251 14.359854,15.620987 C 14.141748,15.32625 13.793958,15.161197 13.39901,15.161197 M 13.39901,15.620987 C 13.95901,15.620987 14.236064,16.186884 14.236064,17.306885 C 14.236064,18.491728 13.964905,19.045836 13.38722,19.045836 C 12.83901,19.045836 12.561956,18.468149 12.561956,17.324569 C 12.561956,16.18099 12.83901,15.620987 13.39901,15.620987"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4445"
+ d="M 8.7336924,25.958803 C 8.833903,26.642593 9.2819044,27.049331 9.9185369,27.049331 C 10.378326,27.049331 10.796854,26.825331 11.038539,26.453962 C 11.303802,26.047225 11.421697,25.534381 11.421697,24.773959 C 11.421697,24.072485 11.315592,23.624483 11.068012,23.253114 C 10.838117,22.917114 10.472642,22.734376 10.012853,22.734376 C 9.2170623,22.734376 8.6452711,23.323852 8.6452711,24.143221 C 8.6452711,24.921327 9.1757991,25.469539 9.9303258,25.469539 C 10.325274,25.469539 10.614117,25.328065 10.885275,25.003854 C 10.87938,26.023644 10.549274,26.589541 9.9539049,26.589541 C 9.5884311,26.589541 9.3349564,26.359645 9.25243,25.958803 L 8.7336924,25.958803 M 10.006958,23.188272 C 10.490327,23.188272 10.855801,23.589115 10.855801,24.131431 C 10.855801,24.644274 10.496221,25.009749 9.9892739,25.009749 C 9.4882205,25.009749 9.1757983,24.661958 9.1757983,24.101958 C 9.1757983,23.571431 9.5294836,23.188272 10.006958,23.188272"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4449"
+ d="M 12.931858,32.152782 C 13.362174,31.893414 13.503648,31.681202 13.503648,31.286254 C 13.503648,30.631938 12.990804,30.172147 12.248067,30.172147 C 11.511224,30.172147 10.992486,30.631938 10.992486,31.286254 C 10.992486,31.675307 11.13396,31.887519 11.558382,32.152782 C 11.080908,32.382677 10.845117,32.730468 10.845117,33.190258 C 10.845117,33.956574 11.422803,34.487102 12.248067,34.487102 C 13.073331,34.487102 13.651017,33.956574 13.651017,33.196153 C 13.651017,32.730468 13.415226,32.382677 12.931858,32.152782 M 12.248067,30.631937 C 12.690173,30.631937 12.973121,30.891307 12.973121,31.298044 C 12.973121,31.687097 12.684278,31.946466 12.248067,31.946466 C 11.811856,31.946466 11.523013,31.687097 11.523013,31.292149 C 11.523013,30.891307 11.811856,30.631937 12.248067,30.631937 M 12.248067,32.382677 C 12.766804,32.382677 13.12049,32.712784 13.12049,33.202047 C 13.12049,33.697206 12.766804,34.027312 12.236277,34.027312 C 11.72933,34.027312 11.375644,33.691311 11.375644,33.202047 C 11.375644,32.712784 11.72933,32.382677 12.248067,32.382677"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4453"
+ d="M 18.730535,35.691354 L 15.936425,35.691354 L 15.936425,36.204197 L 18.194113,36.204197 C 17.197902,37.62483 16.791163,38.497255 16.478742,39.87073 L 17.032848,39.87073 C 17.262743,38.532624 17.787376,37.383145 18.730535,36.127565 L 18.730535,35.691354"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4457"
+ d="M 26.296845,38.911288 C 26.196634,38.227498 25.748632,37.82076 25.112,37.82076 C 24.65221,37.82076 24.239577,38.044761 23.991998,38.41613 C 23.73263,38.822867 23.614734,39.335711 23.614734,40.096133 C 23.614734,40.797607 23.72084,41.245609 23.968419,41.616977 C 24.19242,41.952978 24.557895,42.135715 25.017684,42.135715 C 25.813474,42.135715 26.385266,41.54624 26.385266,40.726871 C 26.385266,39.948765 25.854738,39.400552 25.106106,39.400552 C 24.693474,39.400552 24.369262,39.559711 24.145262,39.866237 C 24.151156,38.846447 24.481263,38.28055 25.076632,38.28055 C 25.442106,38.28055 25.69558,38.510446 25.778107,38.911288 L 26.296845,38.911288 M 25.041263,39.860343 C 25.542316,39.860343 25.854738,40.208133 25.854738,40.768134 C 25.854738,41.292766 25.501053,41.675925 25.023579,41.675925 C 24.54021,41.675925 24.174735,41.275082 24.174735,40.73866 C 24.174735,40.219923 24.528421,39.860343 25.041263,39.860343"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4461"
+ d="M 33.602455,35.88379 L 31.444977,35.88379 L 31.132555,38.159163 L 31.61003,38.159163 C 31.851714,37.870321 32.052136,37.77011 32.376347,37.77011 C 32.936348,37.77011 33.290033,38.153269 33.290033,38.772217 C 33.290033,39.37348 32.942242,39.738955 32.376347,39.738955 C 31.922452,39.738955 31.645398,39.509059 31.521609,39.03748 L 31.002871,39.03748 C 31.073608,39.379375 31.132556,39.544429 31.256345,39.697692 C 31.492135,40.016008 31.916557,40.198745 32.388137,40.198745 C 33.231085,40.198745 33.82056,39.585691 33.82056,38.70148 C 33.82056,37.876216 33.272348,37.310319 32.470663,37.310319 C 32.175926,37.310319 31.940136,37.386951 31.698451,37.563793 L 31.863504,36.396633 L 33.602455,36.396633 L 33.602455,35.88379"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4465"
+ d="M 38.288591,33.62013 L 38.288591,34.622237 L 38.807329,34.622237 L 38.807329,33.62013 L 39.426278,33.62013 L 39.426278,33.154445 L 38.807329,33.154445 L 38.807329,30.442861 L 38.424171,30.442861 L 36.526062,33.071918 L 36.526062,33.62013 L 38.288591,33.62013 M 38.288591,33.154445 L 36.979958,33.154445 L 38.288591,31.327073 L 38.288591,33.154445"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4469"
+ d="M 39.674726,25.214253 L 39.739568,25.214253 L 39.957674,25.208358 C 40.529464,25.208358 40.824202,25.467727 40.824202,25.96878 C 40.824202,26.493412 40.49999,26.805834 39.957674,26.805834 C 39.391779,26.805834 39.114725,26.522886 39.079356,25.915728 L 38.560619,25.915728 C 38.584198,26.251728 38.643145,26.469834 38.743356,26.658466 C 38.955566,27.059308 39.3682,27.265625 39.939989,27.265625 C 40.800622,27.265625 41.354729,26.752781 41.354729,25.962886 C 41.354729,25.432359 41.148412,25.137621 40.647359,24.966673 C 41.036412,24.81341 41.230939,24.518672 41.230939,24.100145 C 41.230939,23.380987 40.753464,22.95067 39.957674,22.95067 C 39.114726,22.95067 38.666724,23.410461 38.64904,24.300567 L 39.167778,24.300567 C 39.173672,24.047093 39.197251,23.905619 39.262094,23.775934 C 39.379988,23.546039 39.639358,23.404565 39.963568,23.404565 C 40.423358,23.404565 40.700412,23.675724 40.700412,24.11783 C 40.700412,24.412567 40.594306,24.58941 40.364411,24.683725 C 40.222937,24.742673 40.0402,24.766252 39.674726,24.772147 L 39.674726,25.214253"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4473"
+ d="M 39.352593,19.045902 L 37.153852,19.045902 C 37.206905,18.704007 37.395538,18.485901 37.90838,18.185269 L 38.497855,17.866953 C 39.081434,17.548636 39.382067,17.118319 39.382067,16.605477 C 39.382067,16.257687 39.240593,15.933475 38.993014,15.709475 C 38.745434,15.485475 38.438907,15.379369 38.043959,15.379369 C 37.513433,15.379369 37.118484,15.568001 36.888589,15.921686 C 36.74122,16.145686 36.676378,16.405056 36.664588,16.829477 L 37.183326,16.829477 C 37.20101,16.546529 37.236379,16.375581 37.307116,16.240002 C 37.442695,15.986528 37.713854,15.833265 38.026275,15.833265 C 38.497854,15.833265 38.85154,16.169266 38.85154,16.617266 C 38.85154,16.947372 38.657013,17.23032 38.285644,17.442531 L 37.743327,17.749058 C 36.870905,18.244216 36.61743,18.639165 36.570272,19.558745 L 39.352593,19.558745 L 39.352593,19.045902"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ <path
+ id="text4477"
+ d="M 32.615084,11.132164 L 32.615084,14.109011 L 33.133822,14.109011 L 33.133822,9.929635 L 32.791927,9.929635 C 32.60919,10.572162 32.491294,10.660584 31.689609,10.760795 L 31.689609,11.132164 L 32.615084,11.132164"
+ style="font-size:5.89474726px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Nimbus Sans L" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4423"
+ sodipodi:cx="119.38776"
+ sodipodi:cy="118.2449"
+ sodipodi:rx="11.22449"
+ sodipodi:ry="11.22449"
+ d="M 130.61225 118.2449 A 11.22449 11.22449 0 1 1 108.16327,118.2449 A 11.22449 11.22449 0 1 1 130.61225 118.2449 z"
+ transform="matrix(0.162679,0,0,0.162679,5.578045,5.763981)" />
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-day.svg b/applets/clock/pixmaps/clock-face-small-day.svg
new file mode 100644
index 00000000..bd4b5b2e
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-day.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ version="1.0"
+ sodipodi:docbase="/home/garrett/Desktop"
+ sodipodi:docname="clock-face-small-2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="18"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1154"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-evening.svg b/applets/clock/pixmaps/clock-face-small-evening.svg
new file mode 100644
index 00000000..17a9840b
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-evening.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps"
+ sodipodi:docname="intlclock-face-small-morning.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0"
+ style="stop-color:#434343;stop-opacity:0.53535354;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="39.221053"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1115"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-morning.svg b/applets/clock/pixmaps/clock-face-small-morning.svg
new file mode 100644
index 00000000..17a9840b
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-morning.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps"
+ sodipodi:docname="intlclock-face-small-morning.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0"
+ style="stop-color:#434343;stop-opacity:0.53535354;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="39.221053"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1115"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1.0;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small-night.svg b/applets/clock/pixmaps/clock-face-small-night.svg
new file mode 100644
index 00000000..d5a7d8e5
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small-night.svg
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="/home/mclasen/Desktop/intlclock-1.0/pixmaps"
+ sodipodi:docname="intlclock-face-dark-small.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#27293c;stop-opacity:1;"
+ offset="0"
+ id="stop37937" />
+ <stop
+ style="stop-color:#d6cae3;stop-opacity:1;"
+ offset="1"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="18"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1115"
+ inkscape:window-x="0"
+ inkscape:window-y="31"
+ width="36px"
+ height="36px"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1.0;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#c3c9c9;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#eaece7;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#eaece7;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10.30000019;stroke-miterlimit:3.9000001;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path6095"
+ sodipodi:cx="34.673683"
+ sodipodi:cy="29.804211"
+ sodipodi:rx="0"
+ sodipodi:ry="2.103158"
+ d="M 34.673683 29.804211 A 0 2.103158 0 1 1 34.673683,29.804211 A 0 2.103158 0 1 1 34.673683 29.804211 z" />
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-face-small.svg b/applets/clock/pixmaps/clock-face-small.svg
new file mode 100644
index 00000000..bd4b5b2e
--- /dev/null
+++ b/applets/clock/pixmaps/clock-face-small.svg
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="36"
+ height="36"
+ id="svg5416"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ version="1.0"
+ sodipodi:docbase="/home/garrett/Desktop"
+ sodipodi:docname="clock-face-small-2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs5418">
+ <linearGradient
+ id="linearGradient10653">
+ <stop
+ id="stop10655"
+ offset="0.0000000"
+ style="stop-color:#f3f4ff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop10657"
+ offset="1.0000000"
+ style="stop-color:#9193af;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient42174">
+ <stop
+ id="stop42176"
+ offset="0.0000000"
+ style="stop-color:#a0a0a0;stop-opacity:1.0000000;" />
+ <stop
+ id="stop42178"
+ offset="1.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2145">
+ <stop
+ id="stop2147"
+ offset="0.0000000"
+ style="stop-color:#fffffd;stop-opacity:1.0000000;" />
+ <stop
+ id="stop2149"
+ offset="1"
+ style="stop-color:#d9d9d8;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient37935">
+ <stop
+ style="stop-color:#9497b3;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop37937" />
+ <stop
+ style="stop-color:#4c4059;stop-opacity:1.0000000;"
+ offset="1.0000000"
+ id="stop37939" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3816"
+ inkscape:collect="always">
+ <stop
+ id="stop3818"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop3820"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3816"
+ id="radialGradient5847"
+ gradientUnits="userSpaceOnUse"
+ cx="31.112698"
+ cy="19.008621"
+ fx="31.112698"
+ fy="19.008621"
+ r="8.6620579" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient37935"
+ id="radialGradient5849"
+ gradientUnits="userSpaceOnUse"
+ cx="8.7468252"
+ cy="6.8283234"
+ fx="8.7468252"
+ fy="6.8283234"
+ r="29.889715" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5851"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5853"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10653"
+ id="radialGradient5855"
+ gradientUnits="userSpaceOnUse"
+ cx="11.3292"
+ cy="10.58397"
+ fx="11.3292"
+ fy="10.58397"
+ r="15.532059" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2145"
+ id="radialGradient5857"
+ gradientUnits="userSpaceOnUse"
+ cx="11.901996"
+ cy="10.045444"
+ fx="11.901996"
+ fy="10.045444"
+ r="29.292715" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient42174"
+ id="linearGradient5859"
+ gradientUnits="userSpaceOnUse"
+ x1="6.342216"
+ y1="7.7893324"
+ x2="22.218424"
+ y2="25.884274" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="26.388889"
+ inkscape:cx="18"
+ inkscape:cy="18"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1600"
+ inkscape:window-height="1154"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ width="36px"
+ height="36px" />
+ <metadata
+ id="metadata5421">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ d="M 39.774755,19.008621 A 8.6620579,8.6620579 0 1 1 22.45064,19.008621 A 8.6620579,8.6620579 0 1 1 39.774755,19.008621 z"
+ sodipodi:ry="8.6620579"
+ sodipodi:rx="8.6620579"
+ sodipodi:cy="19.008621"
+ sodipodi:cx="31.112698"
+ id="path4415"
+ style="color:#000000;fill:url(#radialGradient5847);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc"
+ transform="matrix(1.6624224,0,0,0.7910143,-33.728278,14.112097)" />
+ <path
+ transform="matrix(1.1148631,0,0,1.1148631,-0.1165205,-0.8531387)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4417"
+ style="fill:url(#radialGradient5849);fill-opacity:1;fill-rule:evenodd;stroke:#605773;stroke-width:1.6359601;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4419"
+ style="fill:url(#radialGradient5851);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5853);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient5855);stroke-width:1.72497916;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4421"
+ sodipodi:cx="16.25"
+ sodipodi:cy="16.910715"
+ sodipodi:rx="14.910714"
+ sodipodi:ry="14.910714"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ transform="matrix(1.0573301,0,0,1.0573301,0.8183498,5.0961231e-2)" />
+ <path
+ transform="matrix(0.9318866,0,0,0.9318866,2.7831211,2.1674291)"
+ d="M 31.160714,16.910715 A 14.910714,14.910714 0 1 1 1.3392859,16.910715 A 14.910714,14.910714 0 1 1 31.160714,16.910715 z"
+ sodipodi:ry="14.910714"
+ sodipodi:rx="14.910714"
+ sodipodi:cy="16.910715"
+ sodipodi:cx="16.25"
+ id="path4429"
+ style="opacity:0.53921569;fill:url(#radialGradient5857);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5859);stroke-width:1.6660347;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ sodipodi:type="arc" />
+ <path
+ id="path5543"
+ d="M 19,18 C 19,18.552 18.551999,19 18,19 C 17.448,19 17,18.552 17,18 C 17,17.448 17.448,17 18,17 C 18.551999,17 19,17.448 19,18 z"
+ style="fill:#999c9c;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <g
+ id="g5802"
+ style="fill:#888a85;fill-opacity:1"
+ transform="matrix(0.9954167,0,0,0.9954167,8.2499251e-2,8.2498405e-2)">
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 7.9470493,18 C 7.9470493,18.414 7.6110484,18.75 7.1970493,18.75 C 6.7830492,18.75 6.4470493,18.414 6.4470493,18 C 6.4470493,17.586 6.7830492,17.25 7.1970493,17.25 C 7.6110484,17.25 7.9470493,17.586 7.9470493,18 z"
+ id="path5545" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 29.552951,18 C 29.552951,18.414 29.21695,18.75 28.802951,18.75 C 28.388951,18.75 28.052951,18.414 28.052951,18 C 28.052951,17.586 28.388951,17.25 28.802951,17.25 C 29.21695,17.25 29.552951,17.586 29.552951,18 z"
+ id="path5557" />
+ <path
+ id="path5649"
+ d="M 9.2938893,23.026476 C 9.5008893,23.38501 9.377904,23.843995 9.0193703,24.050995 C 8.6608357,24.257995 8.2018512,24.13501 7.9948512,23.776476 C 7.7878512,23.417941 7.9108357,22.958957 8.2693703,22.751956 C 8.627904,22.544957 9.0868893,22.667941 9.2938893,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5651"
+ d="M 28.005149,12.223525 C 28.212149,12.582059 28.089164,13.041044 27.73063,13.248044 C 27.372095,13.455044 26.913111,13.332059 26.706111,12.973525 C 26.499111,12.61499 26.622095,12.156006 26.98063,11.949006 C 27.339164,11.742006 27.798149,11.86499 28.005149,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.973525,26.706111 C 13.332059,26.913111 13.455043,27.372097 13.248044,27.730631 C 13.041044,28.089165 12.582059,28.21215 12.223525,28.00515 C 11.86499,27.79815 11.742006,27.339165 11.949006,26.980631 C 12.156005,26.622097 12.61499,26.499111 12.973525,26.706111 z"
+ id="path5655" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.776476,7.9948518 C 24.13501,8.2018518 24.257994,8.6608372 24.050995,9.0193708 C 23.843995,9.3779054 23.38501,9.5008899 23.026476,9.2938899 C 22.667941,9.0868899 22.544956,8.6279054 22.751956,8.2693708 C 22.958956,7.9108372 23.417941,7.7878518 23.776476,7.9948518 z"
+ id="path5657" />
+ <path
+ id="path5661"
+ d="M 18,28.052952 C 18.414,28.052952 18.75,28.388953 18.75,28.802952 C 18.75,29.216952 18.414,29.552952 18,29.552952 C 17.586,29.552952 17.25,29.216952 17.25,28.802952 C 17.25,28.388953 17.586,28.052952 18,28.052952 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5663"
+ d="M 18,6.44705 C 18.414,6.44705 18.75,6.783051 18.75,7.19705 C 18.75,7.61105 18.414,7.94705 18,7.94705 C 17.586,7.94705 17.25,7.61105 17.25,7.19705 C 17.25,6.783051 17.586,6.44705 18,6.44705 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 23.026476,26.706111 C 23.38501,26.499111 23.843995,26.622097 24.050995,26.980631 C 24.257995,27.339165 24.13501,27.79815 23.776476,28.00515 C 23.417941,28.21215 22.958957,28.089165 22.751956,27.730631 C 22.544957,27.372097 22.667941,26.913111 23.026476,26.706111 z"
+ id="path5667" />
+ <path
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 12.223525,7.9948518 C 12.582059,7.7878518 13.041044,7.9108372 13.248044,8.2693708 C 13.455044,8.6279054 13.332059,9.0868899 12.973525,9.2938899 C 12.61499,9.5008899 12.156006,9.3779054 11.949006,9.0193708 C 11.742006,8.6608372 11.86499,8.2018518 12.223525,7.9948518 z"
+ id="path5669" />
+ <path
+ id="path5673"
+ d="M 26.706111,23.026476 C 26.913111,22.667942 27.372097,22.544958 27.730631,22.751957 C 28.089165,22.958957 28.21215,23.417942 28.00515,23.776476 C 27.79815,24.135011 27.339165,24.257995 26.980631,24.050995 C 26.622097,23.843996 26.499111,23.385011 26.706111,23.026476 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ <path
+ id="path5675"
+ d="M 7.9948518,12.223525 C 8.2018518,11.864991 8.6608372,11.742007 9.0193708,11.949006 C 9.3779054,12.156006 9.5008899,12.614991 9.2938899,12.973525 C 9.0868899,13.33206 8.6279054,13.455044 8.2693708,13.248044 C 7.9108372,13.041045 7.7878518,12.58206 7.9948518,12.223525 z"
+ style="fill:#888a85;fill-opacity:1;stroke:none;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/pixmaps/clock-map-location-current.png b/applets/clock/pixmaps/clock-map-location-current.png
new file mode 100644
index 00000000..5c505d11
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map-location-current.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map-location-hilight.png b/applets/clock/pixmaps/clock-map-location-hilight.png
new file mode 100644
index 00000000..d7de5b78
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map-location-hilight.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map-location-marker.png b/applets/clock/pixmaps/clock-map-location-marker.png
new file mode 100644
index 00000000..48d2184f
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map-location-marker.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map.png b/applets/clock/pixmaps/clock-map.png
new file mode 100644
index 00000000..31e1a777
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map.png
Binary files differ
diff --git a/applets/clock/pixmaps/clock-map.svg b/applets/clock/pixmaps/clock-map.svg
new file mode 100644
index 00000000..d910af1c
--- /dev/null
+++ b/applets/clock/pixmaps/clock-map.svg
@@ -0,0 +1,755 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ width="960"
+ height="480"
+ viewBox="0 0 468 234"
+ preserveAspectRatio="xMidYMid meet"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ sodipodi:docname="earth-2-simple.svg"
+ sodipodi:docbase="/home/garrett/Desktop"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs167">
+ <linearGradient
+ id="linearGradient6105">
+ <stop
+ id="stop6107"
+ offset="0"
+ style="stop-color:#b1cbe6;stop-opacity:1;" />
+ <stop
+ id="stop6109"
+ offset="1"
+ style="stop-color:#ccddef;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6105"
+ id="linearGradient5933"
+ gradientUnits="userSpaceOnUse"
+ x1="250.769"
+ y1="37.809563"
+ x2="250.76901"
+ y2="194.13469"
+ gradientTransform="matrix(1.0010416,0,0,1.0020833,-0.2437371,-0.2437448)" />
+ <filter
+ inkscape:collect="always"
+ id="filter7072">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="288.4"
+ id="feGaussianBlur7074" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-height="1154"
+ inkscape:window-width="1600"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1"
+ inkscape:cx="495.72419"
+ inkscape:cy="189.71763"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="layer3" />
+ <metadata
+ id="metadata4">
+Created by potrace 1.7, written by Peter Selinger 2001-2005
+<rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>The Earth</dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Garrett LeSage</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:description>A vectorized, cleaned up, tango-inspired map of the earth based off of the Evolution map.</dc:description>
+ </cc:Work>
+</rdf:RDF>
+</metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Sea">
+ <rect
+ style="opacity:1;fill:url(#linearGradient5933);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4773"
+ width="468.48749"
+ height="234.4875"
+ x="-0.24374618"
+ y="-0.24374475" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Land outline">
+ <g
+ transform="matrix(6.1000977e-4,0,0,-6.1064452e-4,-0.24375,234.24375)"
+ id="g5768"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7072);opacity:0.75">
+ <path
+ d="M 0,357500 L 0,331000 L 450,331003 C 698,331005 1123,331241 1395,331528 C 2302,332484 2614,332605 3562,332364 C 4142,332217 4565,332211 4861,332345 C 5753,332748 7593,332400 8946,331572 C 9737,331088 10453,330800 10865,330800 C 11227,330800 11698,330668 11912,330506 C 12125,330345 12475,330210 12689,330206 C 12903,330203 13331,329958 13640,329661 L 14202,329123 L 15114,330061 C 15616,330578 16145,331000 16289,331000 C 16433,331000 16662,331133 16797,331296 C 17187,331766 18123,332159 18632,332066 C 19222,331959 20200,332833 20200,333468 C 20200,334118 19827,334400 18967,334400 C 18456,334400 18153,334512 18024,334750 C 17702,335344 16464,335902 16114,335612 C 15785,335338 15400,335484 15400,335881 C 15400,336022 15220,336301 15000,336500 C 14780,336699 14600,336989 14600,337144 C 14600,337829 13575,339587 12801,340231 C 12015,340883 11978,340961 12146,341611 C 12386,342545 13670,342713 14598,341933 C 15276,341362 16765,341139 18800,341302 C 19515,341360 20712,341399 21459,341389 C 23473,341362 24911,342835 24091,344085 C 23791,344544 23805,344567 24641,344969 C 26590,345908 26985,345817 28565,344075 C 29195,343380 38688,343427 39640,344130 C 39991,344388 40420,344600 40594,344600 C 40769,344600 41113,344742 41360,344915 C 41935,345317 46754,345357 47382,344965 C 47709,344761 47843,344777 48155,345059 C 48731,345581 49035,345482 50068,344433 C 51214,343269 51011,342538 49784,343411 C 49176,343844 49135,343848 48572,343515 C 47992,343173 46000,342948 46000,343226 C 46000,343956 44454,344252 44046,343600 C 43903,343371 43580,343200 43290,343200 C 43012,343200 42450,343032 42042,342828 C 41605,342608 40809,342441 40106,342421 C 39227,342396 38801,342283 38493,341993 C 38263,341777 37880,341600 37643,341600 C 37395,341600 37022,341343 36763,340993 C 36451,340571 35990,340292 35247,340076 C 34660,339905 33949,339646 33667,339500 C 33385,339354 32602,339171 31927,339093 C 30657,338947 29600,338397 29600,337881 C 29600,337443 30594,337122 31230,337355 C 31676,337519 31839,337470 32267,337042 C 32639,336670 32967,336541 33496,336561 C 33973,336579 34256,336486 34333,336287 C 34517,335806 35807,335357 36633,335485 C 37482,335617 39059,334755 38955,334215 C 38787,333341 35672,333196 34353,334001 C 33504,334518 33105,334502 31929,333906 C 31157,333514 30778,333438 30078,333534 C 29322,333638 29131,333587 28735,333177 C 28482,332915 28109,332606 27908,332491 C 26940,331940 29604,329452 30707,329875 C 30877,329940 31185,329888 31391,329759 C 31681,329578 31987,329585 32733,329790 C 33655,330043 34680,330093 36367,329966 C 36963,329922 37279,330031 37782,330455 C 38583,331128 38839,331132 39932,330492 C 41386,329640 41053,328763 38975,327977 C 37142,327283 36747,327200 35282,327200 L 33861,327200 L 32803,326121 C 32220,325527 31464,324962 31122,324865 C 29952,324531 30775,322200 32063,322200 C 32230,322200 32723,321795 33158,321300 C 33724,320658 34103,320400 34482,320400 C 34775,320400 35241,320251 35519,320069 C 35990,319761 36073,319761 36719,320069 C 37854,320610 38609,319986 39078,318118 C 39271,317346 40028,317110 41471,317371 C 42306,317523 42913,317521 43589,317365 C 44283,317204 44878,317207 45818,317375 C 47153,317614 47996,317167 47999,316218 C 48001,315768 46256,314291 45028,313703 C 42687,312584 42539,312434 43062,311718 C 43457,311178 44489,311426 45931,312405 C 46672,312908 47328,313199 47721,313200 C 48105,313200 48547,313390 48881,313700 C 49178,313975 49582,314200 49779,314200 C 49977,314200 50291,314369 50478,314576 C 50665,314783 51160,315007 51578,315073 C 51997,315140 52680,315466 53097,315797 C 53586,316186 54084,316400 54501,316400 C 55534,316400 56168,317040 56239,318156 C 56295,319021 56361,319130 57032,319458 C 57435,319655 58018,320150 58327,320558 C 59709,322380 61000,322464 61000,320733 C 61000,319325 64753,318950 66431,320191 C 66735,320416 67028,320600 67083,320600 C 67506,320600 68302,321813 68396,322600 C 68515,323607 68423,323584 70398,323093 C 71272,322875 71982,322535 72575,322049 C 73059,321653 73645,321306 73877,321279 C 74110,321251 74705,321127 75200,321003 C 76868,320584 78091,320460 79891,320526 C 81491,320586 81730,320547 82132,320170 C 82473,319849 82732,319776 83199,319870 C 83545,319939 83980,319891 84189,319761 C 84474,319583 84826,319587 85687,319780 C 86809,320031 86813,320030 87513,319416 C 87898,319077 88335,318800 88482,318800 C 88630,318800 88863,318665 89000,318500 C 89137,318335 89381,318200 89542,318200 C 89704,318200 90000,317998 90200,317750 C 90675,317164 92538,317101 93145,317650 C 93634,318093 94174,318099 94341,317664 C 94426,317444 94320,317230 94035,317040 C 93440,316645 93489,316053 94209,314918 L 94818,313957 L 95726,314093 C 96449,314202 96684,314162 96877,313898 C 97010,313715 97427,313503 97803,313426 C 98373,313310 98509,313177 98621,312627 C 98695,312265 98941,311839 99167,311680 C 99394,311522 99780,311034 100027,310595 C 100355,310010 100664,309745 101187,309600 C 102227,309312 102389,309346 102600,309900 C 102999,310950 105600,309236 105600,307923 C 105600,307203 107050,305747 108117,305394 C 108493,305270 108800,305044 108800,304891 C 108800,304738 109205,304157 109700,303600 C 110195,303043 110600,302507 110600,302409 C 110600,302312 110866,302173 111191,302102 C 111909,301944 112167,301317 111718,300820 C 111080,300115 111300,299200 112107,299200 C 112679,299200 112977,299033 113661,298330 C 114331,297640 114697,297431 115427,297321 C 116847,297108 118908,295088 119075,293747 C 119140,293222 119339,292510 119518,292165 C 119984,291265 120011,285968 119553,285451 C 118983,284806 118688,282901 119068,282321 C 119248,282046 119359,281704 119314,281560 C 118915,280280 119015,278012 119497,277440 C 119774,277111 120000,276665 120000,276448 C 120000,276231 120180,275825 120400,275545 C 120620,275266 120800,274953 120800,274850 C 120800,274747 121477,273955 122304,273090 C 123319,272027 123873,271270 124011,270758 C 124124,270341 124299,270000 124401,270000 C 124504,270000 124714,269757 124870,269460 C 125182,268865 126051,267832 127350,266514 C 127818,266040 128200,265540 128200,265404 C 128200,265230 128403,265194 128872,265282 C 129343,265370 129618,265320 129789,265114 C 129923,264952 130453,264758 130966,264682 C 131488,264605 132150,264336 132465,264072 C 132776,263812 133112,263600 133212,263600 C 133311,263600 133454,263353 133530,263050 C 133740,262206 134556,260768 135002,260456 C 135282,260260 135367,260039 135286,259717 C 135216,259438 135291,259138 135476,258953 C 135643,258785 135840,258410 135913,258119 C 135986,257828 136205,257504 136400,257400 C 136595,257296 136809,256993 136875,256728 C 136942,256462 137335,255958 137748,255608 C 138162,255259 138680,254814 138900,254621 C 139120,254428 139593,254100 139950,253892 C 140628,253498 140758,253048 140373,252431 C 139959,251769 140338,249849 140962,249445 C 141254,249255 141660,248935 141864,248733 C 142123,248476 142389,248404 142746,248494 C 143620,248713 144556,247615 144718,246181 C 144844,245069 145825,243800 146559,243800 C 146659,243800 146984,243575 147281,243300 C 147578,243025 147945,242800 148097,242800 C 148249,242800 148565,242530 148800,242200 C 149227,241600 150225,241355 150491,241785 C 150691,242109 150148,243005 149680,243123 C 149393,243195 149038,243611 148704,244268 C 148415,244836 147813,245705 147366,246200 C 146919,246695 146301,247640 145994,248300 C 145686,248960 145157,249809 144817,250186 C 144478,250563 144200,250992 144200,251138 C 144200,251284 144011,251561 143779,251752 C 143548,251943 143138,252444 142868,252864 C 142597,253285 142112,253721 141788,253834 C 141465,253947 141200,254153 141200,254293 C 141200,254432 141026,254768 140812,255039 C 140599,255310 140363,255778 140287,256080 C 140212,256381 139981,256733 139775,256862 C 138931,257389 139982,259000 141169,259000 C 142060,259000 143000,258132 143000,257309 C 143000,256949 143164,256439 143365,256177 C 143566,255915 144034,255160 144406,254500 C 145059,253340 145642,252724 146488,252296 C 146710,252184 146984,251914 147096,251696 C 147404,251097 148303,250274 149260,249713 C 150343,249078 150916,248306 151138,247183 C 151276,246484 151436,246242 151906,246020 C 152233,245867 152815,245507 153200,245220 C 153585,244934 154339,244475 154876,244200 C 155550,243855 155938,243497 156131,243045 C 156284,242685 156753,242055 157173,241645 C 157593,241235 157993,240668 158063,240385 C 158133,240102 158436,239517 158736,239085 C 159230,238375 159280,238142 159259,236640 C 159240,235209 159290,234947 159619,234742 C 159836,234606 160000,234279 160000,233979 C 160000,233412 161201,232400 161874,232400 C 162067,232400 162444,232141 162710,231825 C 163240,231195 164901,230320 166000,230093 C 166385,230014 166878,229825 167095,229674 C 167311,229524 167747,229400 168063,229400 C 168379,229400 168866,229220 169145,229000 C 169425,228780 169824,228600 170031,228600 C 170239,228600 170799,228240 171277,227800 C 171754,227360 172285,227000 172457,227000 C 172629,227000 173040,226772 173372,226493 C 173825,226111 174104,226018 174498,226117 C 174889,226216 175146,226133 175509,225792 C 176224,225119 178959,224959 179554,225554 C 180886,226886 184761,226235 186000,224471 C 186275,224080 186660,223611 186855,223430 C 187050,223248 187420,222898 187678,222650 C 187935,222403 188227,222200 188327,222200 C 188426,222200 188837,221976 189240,221702 C 189767,221344 190131,221236 190541,221318 C 190960,221402 191208,221323 191486,221016 C 191696,220784 192109,220600 192421,220600 C 192739,220600 193211,220385 193517,220101 C 193997,219657 194170,219617 195112,219727 C 196463,219886 197125,219715 197445,219124 C 197768,218528 200932,215800 201301,215800 C 201754,215800 201854,215412 201529,214915 C 200945,214025 201704,212303 202594,212499 C 202976,212583 203227,212501 203493,212208 C 203696,211983 204025,211800 204224,211800 C 204423,211800 204676,211632 204785,211427 C 204895,211223 205244,210947 205561,210816 C 205887,210681 206260,210299 206419,209939 C 206689,209324 206753,209296 208111,209200 C 209406,209108 209588,209038 210311,208352 C 210745,207940 211259,207603 211453,207602 C 211647,207601 211990,207488 212215,207350 C 212712,207047 213195,207553 213207,208388 C 213242,210833 216022,210680 217266,208164 C 217665,207359 218067,206565 218162,206400 C 219047,204847 219154,204303 218786,203245 C 218611,202744 218636,202530 218921,202096 C 219255,201586 219254,201532 218904,200882 C 218555,200233 218554,200182 218887,199815 C 219429,199216 218513,197600 217631,197600 C 217206,197600 216000,196403 216000,195981 C 216000,195597 215577,195030 214152,193501 C 213401,192696 212959,192033 212875,191585 C 212803,191208 212637,190765 212506,190600 C 211501,189341 211197,187979 211747,187195 C 213035,185357 213098,184486 212010,183555 C 211042,182727 210703,181955 211034,181337 C 211163,181097 211255,180397 211238,179781 L 211207,178662 L 212823,177089 C 213727,176210 214669,175072 214959,174508 C 215245,173954 215586,173434 215716,173353 C 215847,173272 216015,172794 216091,172291 C 216166,171788 216357,171327 216514,171267 C 216693,171198 216800,170871 216800,170390 C 216800,169835 216917,169541 217223,169326 C 217718,168980 218400,167919 218400,167497 C 218400,167335 218580,167091 218800,166954 C 219042,166803 219200,166487 219200,166157 C 219200,165794 219368,165499 219696,165284 C 220434,164801 220985,163796 220862,163159 C 220790,162791 220892,162446 221178,162082 C 221410,161787 221600,161426 221600,161279 C 221600,160623 225067,157577 226111,157315 C 226433,157234 226742,157097 226798,157010 C 226854,156922 227583,156532 228418,156142 C 230649,155101 233600,152651 233600,151840 C 233600,151560 233726,151189 233880,151016 C 234276,150570 234614,149204 234423,148821 C 234335,148645 234288,147524 234317,146331 C 234363,144482 234314,144069 233986,143531 C 233775,143184 233601,142538 233601,142095 C 233600,141651 233456,141084 233281,140833 C 233033,140480 232973,139963 233015,138539 C 233044,137527 232997,136362 232911,135948 C 232803,135430 232834,135100 233009,134889 C 233201,134657 233207,134527 233032,134352 C 232904,134224 232800,133888 232800,133604 C 232800,133321 232614,132930 232387,132736 C 232009,132411 231979,132194 232028,130097 C 232077,127978 232049,127778 231641,127343 C 231398,127085 231197,126700 231193,126487 C 231189,126274 231063,125878 230913,125607 C 230673,125173 230684,125056 231004,124649 C 231291,124285 231347,123961 231264,123142 C 231170,122207 231212,122050 231679,121615 C 232339,121001 232346,120276 231702,119403 C 231421,119022 231149,118310 231077,117767 C 231007,117239 230826,116704 230675,116579 C 230524,116454 230400,116097 230400,115787 C 230400,115477 230303,115163 230183,115090 C 230064,115016 229797,114560 229590,114077 C 229383,113594 228796,112793 228287,112297 C 227407,111442 227366,111354 227474,110548 C 227537,110082 227667,109115 227762,108400 C 227857,107685 228001,106951 228082,106768 C 228181,106543 227997,106124 227512,105468 C 227117,104936 226657,104185 226488,103800 C 226320,103415 226083,102902 225963,102660 C 225800,102333 225807,102065 225993,101617 C 226205,101105 226194,100966 225921,100693 C 225536,100308 225509,99796 225850,99349 C 226166,98935 227112,98695 227290,98984 C 227499,99323 227764,99240 228097,98733 C 228555,98033 228161,97079 227232,96641 C 226435,96265 226275,95915 226091,94151 C 225996,93239 225851,92881 225386,92417 C 224684,91715 224640,91276 225250,91089 C 226494,90706 226710,89713 225699,89024 C 225314,88763 225000,88425 225000,88274 C 225000,88123 224817,88000 224594,88000 C 224127,88000 223848,87472 224153,87167 C 224296,87024 224482,87082 224751,87351 C 225240,87840 226200,88111 226200,87761 C 226200,87626 225953,87318 225651,87077 C 225111,86646 225108,86633 225478,86225 C 225945,85708 225836,84117 225306,83729 C 224689,83278 224973,82288 225700,82355 C 226373,82417 227664,80277 227841,78805 C 227874,78527 228103,78209 228364,78080 C 229203,77663 229501,77043 229085,76583 C 228846,76319 228796,76124 228931,75989 C 229192,75728 229800,75960 229800,76321 C 229800,76616 230042,76691 230267,76466 C 230341,76393 230255,76171 230076,75974 C 229599,75447 229865,74997 230644,75013 C 232292,75048 233401,74766 233522,74283 C 233710,73534 234140,73284 234569,73672 C 235093,74146 235365,74077 235437,73450 C 235523,72702 236383,72584 236990,73236 C 237261,73527 237470,73617 237559,73483 C 238048,72747 241251,72613 241570,73314 C 241748,73705 241884,73751 242588,73656 C 243641,73515 243726,74059 242716,74481 C 242339,74638 241880,74997 241696,75278 C 241491,75591 241096,75839 240677,75917 C 239894,76064 238901,76909 238609,77677 C 238488,77995 238257,78200 238019,78200 C 237443,78200 237037,78702 237147,79278 C 237207,79592 237085,79999 236821,80370 C 236335,81053 236269,81907 236690,82068 C 236849,82129 237075,82522 237192,82940 C 237363,83546 237575,83781 238242,84100 C 238898,84414 239216,84758 239714,85694 C 240211,86627 240483,86922 240960,87046 C 242727,87504 244166,90003 242850,90328 C 242548,90403 241985,90674 241600,90932 C 241215,91189 240563,91626 240150,91902 C 238956,92704 239096,93258 240673,93973 C 241373,94291 242008,94651 242085,94775 C 242161,94899 242614,95000 243091,95000 C 244168,95000 245320,95920 245134,96631 C 245055,96933 245166,97173 245511,97444 C 245795,97668 246000,98037 246000,98326 C 246000,98734 246192,98907 247082,99300 C 248757,100041 248814,100667 247275,101412 C 246138,101963 245810,102580 246276,103292 C 246715,103961 247611,103965 248482,103300 C 249433,102575 249993,102654 250960,103650 C 251413,104118 251923,104616 252092,104758 C 252445,105054 252495,105849 252195,106409 C 251753,107236 252323,107597 254098,107613 C 255596,107627 256988,107689 257537,107767 C 257667,107785 257832,107984 257903,108210 C 258016,108565 258143,108603 258867,108495 C 260180,108299 260795,108673 262785,110880 C 263755,111956 263908,113534 263113,114270 C 262712,114642 262569,114981 262540,115633 L 262500,116500 L 265400,116502 C 268552,116503 269611,116877 269917,118096 C 269978,118340 270308,118666 270649,118820 C 270991,118974 271367,119267 271485,119471 C 271603,119675 271937,120101 272228,120418 C 272518,120735 272810,121212 272877,121478 C 273083,122299 274364,124068 275061,124495 C 276160,125167 276729,125684 277059,126307 C 277232,126633 277997,127548 278759,128340 C 279870,129493 280172,129943 280276,130598 C 280352,131071 280542,131467 280728,131538 C 280995,131641 281028,131871 280923,132894 C 280765,134428 281051,136003 281641,136851 C 282323,137834 283250,138800 283511,138800 C 283639,138800 284153,139160 284653,139600 C 285357,140220 285725,140400 286289,140400 C 286689,140400 287283,140580 287608,140800 C 287934,141020 288451,141369 288759,141576 C 289419,142019 291098,142313 292500,142231 C 293619,142166 296400,143731 296400,144426 C 296400,144608 296535,144809 296700,144872 C 296865,144936 297000,145201 297000,145463 C 297000,145724 297180,146101 297400,146300 C 297620,146499 297800,146823 297800,147019 C 297800,147216 297885,147429 297989,147493 C 298264,147663 299400,149383 299400,149628 C 299400,149742 299603,150000 299850,150200 C 300125,150423 300310,150805 300325,151182 C 300339,151522 300361,152115 300375,152500 C 300391,152951 300499,153200 300677,153200 C 301041,153200 301187,153812 301056,154786 C 300975,155395 301047,155697 301375,156114 C 301870,156743 301930,157644 301500,158000 C 301119,158316 301115,158880 301491,159192 C 301707,159372 301771,159833 301741,160980 C 301701,162482 301719,162546 302350,163179 C 302708,163537 303000,163919 303000,164026 C 303000,164133 303270,164315 303600,164430 C 304070,164594 304200,164758 304200,165189 C 304200,165491 304378,165899 304595,166095 C 304812,166292 305182,166851 305418,167337 C 305653,167823 306083,168374 306373,168560 C 307070,169010 309000,170906 309000,171142 C 309000,171244 309225,171524 309500,171763 C 309817,172038 310000,172408 310000,172774 C 310000,173091 310125,173455 310278,173582 C 310828,174038 310885,175587 310377,176273 C 310050,176716 309917,177179 309906,177919 C 309879,179687 308335,181393 307023,181105 C 306697,181033 306237,181109 305888,181291 C 305564,181460 305139,181598 304941,181599 C 304744,181599 304069,182112 303441,182738 C 302814,183365 301895,184091 301400,184352 C 300905,184613 300383,184978 300241,185163 C 300028,185441 299616,185500 297909,185500 C 296072,185500 295766,185551 295226,185950 C 294711,186330 294363,186400 292990,186400 C 291668,186400 291264,186476 290832,186803 C 290539,187025 290120,187341 289900,187505 C 289680,187669 289217,188028 288871,188302 C 288525,188576 288044,188800 287803,188800 C 287561,188800 287134,188980 286855,189200 C 286575,189420 286147,189600 285904,189600 C 285661,189600 285296,189783 285094,190007 C 284776,190358 284506,190409 283134,190380 C 281741,190350 281502,190397 281221,190758 C 281019,191018 280554,191221 279967,191305 C 278340,191541 277377,193062 278308,193925 C 278869,194445 278720,195154 278009,195340 C 277452,195485 276200,197115 276200,197694 C 276200,197979 276065,198264 275900,198328 C 275716,198398 275600,198701 275600,199109 C 275600,199914 273612,202200 272911,202200 C 272671,202200 272411,202391 272297,202650 C 272185,202906 271884,203129 271600,203168 C 271325,203205 270916,203405 270692,203613 C 270438,203848 270022,203981 269591,203965 C 268961,203941 268094,204150 266841,204626 C 266065,204920 265212,204821 264594,204364 L 264003,203927 L 263539,204364 C 263283,204604 262934,204800 262762,204800 C 262590,204800 262342,204929 262211,205087 C 262080,205245 261731,205429 261436,205496 C 260702,205663 259640,206664 259478,207342 C 259242,208332 257313,209600 256044,209600 C 254898,209600 254431,210583 254351,213162 C 254320,214166 254217,214800 254085,214800 C 253770,214800 253051,213964 252968,213500 C 252860,212899 252062,212875 251523,213456 C 249850,215261 246800,215417 246800,213697 L 246800,213269 L 244750,213753 C 242165,214364 240590,214516 240019,214210 C 239642,214009 239503,214054 239001,214538 C 236558,216900 234812,217461 233580,216281 C 232812,215545 232201,215758 232197,216763 C 232193,217616 232069,217851 231450,218177 C 231001,218413 230200,218194 230200,217834 C 230200,217437 228595,216000 228152,216000 C 227885,216000 227472,215770 227222,215482 C 226801,214998 226693,214973 225599,215100 C 224231,215259 223218,214501 223206,213311 C 223198,212483 222295,211253 221581,211096 C 221262,211026 220888,210812 220750,210621 C 220222,209888 219138,210011 218411,210887 C 218268,211059 217983,211200 217777,211200 C 217572,211200 217291,211380 217154,211600 C 216812,212146 215037,212144 213828,211596 C 213349,211378 212758,211200 212516,211200 C 212274,211200 211902,211068 211688,210906 C 210866,210284 210147,210554 208445,212124 C 207925,212604 207439,212997 207364,212998 C 206564,213010 205515,216304 206018,217222 C 206284,217707 206526,219232 206715,221609 C 206825,222988 205898,224800 205083,224800 C 204918,224800 204540,224979 204242,225198 C 203757,225554 203342,225601 200300,225637 C 196394,225684 195247,226160 196511,227209 C 197117,227712 197230,228162 196906,228788 C 196403,229761 196688,231280 197557,232257 C 197764,232489 197858,232919 197829,233491 C 197793,234170 197881,234460 198215,234771 C 199556,236021 198485,238400 196581,238400 C 195820,238400 195548,238311 195354,238000 C 195151,237676 194887,237600 193964,237600 C 193337,237600 192762,237501 192687,237380 C 192612,237258 192259,237037 191902,236888 C 191239,236611 190871,235768 191126,235105 C 191189,234941 191029,234547 190770,234231 C 190512,233914 190165,233452 190000,233203 C 189190,231980 189117,231937 187782,231900 C 187077,231881 186185,231724 185800,231552 C 184394,230924 182576,230891 181938,231482 C 181631,231767 181167,232000 180908,232000 C 180349,232000 178670,233882 178759,234408 C 178790,234593 178587,234893 178308,235076 C 178029,235259 177800,235534 177800,235687 C 177800,236022 176791,237600 176577,237600 C 176493,237600 176365,238000 176291,238488 C 176218,238976 175988,239530 175779,239719 C 175290,240161 175298,240708 175803,241349 C 176181,241830 176185,241885 175872,242231 C 175561,242574 175561,242625 175869,242966 C 176081,243200 176200,243679 176200,244297 C 176200,245011 176326,245428 176686,245899 C 177149,246507 177164,246617 177012,248291 C 176839,250185 177050,251372 177590,251540 C 178364,251781 178825,252112 179246,252730 C 179496,253097 179864,253398 180064,253399 C 180264,253399 180996,253805 181690,254300 C 183047,255269 183542,255365 185199,254983 C 186005,254797 186131,254819 186431,255188 C 186961,255844 188772,255442 189754,254450 C 190243,253957 190508,253889 190705,254208 C 190776,254323 191010,254360 191226,254292 C 191761,254122 192222,254543 192087,255079 C 191940,255667 193072,256115 193906,255798 C 194376,255619 194533,255655 194934,256031 C 195557,256617 199748,256690 200371,256126 C 200569,255947 201052,255800 201443,255800 C 201981,255800 202234,255678 202482,255300 C 202891,254675 203609,254649 204542,255226 L 205231,255652 L 205808,255226 C 206125,254992 206470,254800 206576,254800 C 207080,254800 207668,253365 207431,252711 C 207118,251845 207140,251066 207481,250935 C 207636,250876 207821,250560 207892,250234 C 207964,249908 208198,249483 208411,249290 C 208625,249096 208800,248852 208800,248748 C 208800,248643 209003,248310 209250,248007 C 209498,247704 209835,247259 210000,247019 C 210525,246253 211513,245790 212148,246012 C 213556,246503 214471,248845 213502,249480 C 213134,249721 213015,249934 213100,250200 C 213166,250408 213036,250937 212810,251381 C 212584,251823 212399,252300 212398,252442 C 212397,252584 212175,253150 211904,253700 C 211634,254250 211410,254980 211406,255323 C 211403,255666 211209,256189 210975,256486 C 210572,256998 210567,257063 210864,257763 C 211036,258168 211227,258680 211288,258900 C 211440,259449 213238,261400 213592,261400 C 213998,261400 215381,262380 216069,263155 C 216449,263584 216770,263773 216995,263702 C 217197,263637 217536,263782 217819,264054 C 218084,264307 218525,264627 218800,264765 C 221972,266356 222988,267803 222410,269911 C 221817,272072 221848,272324 222731,272533 C 223512,272718 224237,273491 224277,274181 C 224289,274408 224863,275173 225550,275880 C 226348,276701 226802,277334 226805,277633 C 226811,278159 227937,278800 228858,278800 C 229147,278800 229565,278994 229786,279231 C 230171,279644 231293,279850 233033,279826 C 233886,279814 234825,281849 234097,282129 C 233138,282497 234325,284400 235513,284400 C 235672,284400 235998,284625 236237,284900 C 236476,285175 236777,285400 236905,285400 C 237034,285400 237355,285588 237619,285817 C 237996,286144 238263,286209 238850,286115 C 239521,286008 239713,286087 240675,286871 C 242405,288280 245243,288353 243600,286946 C 243050,286476 243042,285099 243587,284807 C 244569,284281 246444,285154 247465,286611 C 247727,286985 247978,287045 249405,287078 C 250691,287107 251097,287189 251294,287458 C 251434,287650 251809,287800 252147,287800 C 254041,287800 256707,290204 255890,291175 C 255411,291745 254600,292034 254600,291636 C 254600,290678 251669,290113 250796,290903 C 250515,291158 250216,291222 249700,291139 C 248957,291018 247172,291756 246656,292397 C 246319,292817 246341,293872 246707,294747 C 247641,296982 244104,298914 242400,297100 C 241635,296285 241000,296421 241000,297400 C 241000,298079 241063,298200 241419,298200 C 241650,298200 242078,298371 242371,298579 C 243020,299042 246290,299130 246800,298698 C 246965,298559 247415,298378 247800,298297 C 248185,298215 248678,298025 248895,297874 C 249111,297724 249726,297600 250260,297600 L 251232,297600 L 251100,298200 C 250943,298915 250708,298868 254200,298811 L 256900,298766 L 257750,299426 C 258218,299789 258600,300156 258600,300243 C 258600,300329 258829,300400 259110,300400 C 259396,300400 259822,300619 260082,300900 C 260675,301539 261328,301536 261927,300890 C 262555,300212 262526,300058 261707,299716 C 261226,299515 260973,299254 260878,298863 C 260730,298253 260164,297348 259511,296679 C 259285,296448 258766,295901 258359,295465 L 257617,294671 L 258129,293951 L 258642,293231 L 261771,293222 L 264900,293213 L 265521,292507 C 266252,291676 266226,291680 267342,292220 C 268438,292751 269035,292612 269573,291701 C 269800,291316 270112,291000 270266,291000 C 270655,291000 271600,291773 271600,292090 C 271600,292234 271803,292487 272050,292653 L 272500,292955 L 272078,293531 C 271846,293848 271595,294300 271520,294536 C 271446,294771 271253,295073 271092,295206 C 270932,295340 270800,295609 270800,295805 C 270800,296468 269594,297600 268888,297600 C 268536,297600 268137,297735 268000,297900 C 267840,298093 267397,298200 266762,298200 C 264978,298200 264316,299333 265500,300363 C 266081,300868 266103,300988 265706,301512 C 265328,302012 265328,303388 265706,303888 C 266273,304637 264567,307200 263503,307200 C 263221,307200 262599,307625 261885,308306 C 260725,309412 260069,309746 259494,309526 C 259096,309373 256630,310302 256091,310808 C 255862,311024 255542,311200 255380,311200 C 254947,311200 253861,312710 253708,313526 C 253600,314101 252958,314842 250251,317516 C 246561,321160 246279,321314 245391,320165 C 244436,318931 242921,317600 242470,317600 C 242224,317600 241899,317424 241748,317208 C 241276,316534 239994,316465 239415,317083 C 239148,317367 238770,317600 238573,317600 C 237385,317600 235800,319434 235800,320808 C 235800,321658 234792,322400 233638,322400 C 232713,322400 232449,322476 232246,322800 C 232109,323020 231912,323200 231808,323200 C 231577,323200 229855,324349 229693,324611 C 229629,324715 229315,324800 228995,324800 C 228619,324800 228339,324941 228200,325200 C 227897,325766 226338,325766 225854,325200 C 225417,324690 225105,324695 224581,325219 C 224200,325600 224021,325626 222604,325500 C 221553,325407 221003,325434 220912,325581 C 220588,326104 219057,325826 218293,325107 L 217558,324413 L 217698,323021 C 217797,322033 217949,321527 218219,321283 C 218830,320730 218722,319714 217997,319198 C 216502,318133 216913,316848 219148,315602 C 219614,315342 220054,314944 220126,314718 C 220198,314492 220436,314065 220656,313767 C 221120,313139 221020,312120 220449,311664 C 219740,311097 218601,310400 218386,310400 C 218263,310400 217933,310219 217651,309998 C 217370,309776 216795,309540 216374,309473 C 215033,309258 214625,307292 215636,305914 C 217038,304002 215631,301547 213447,302095 C 212907,302231 211409,303389 211404,303676 C 211402,303773 211018,304234 210550,304701 C 208973,306278 208987,306252 209125,307253 C 209416,309379 208045,310326 204600,310376 C 203047,310399 202601,310477 202158,310802 C 201793,311070 201300,311200 200646,311200 C 200103,311200 199506,311329 199288,311494 C 199075,311655 198710,311790 198477,311794 C 198244,311797 197839,311967 197577,312172 C 196572,312956 194468,313825 193911,313685 C 193511,313585 193279,313655 192992,313962 C 192549,314438 191107,314713 190150,314503 C 188400,314120 186800,314757 186800,315837 C 186800,316547 185574,317552 184267,317915 C 182640,318365 181967,319151 182473,320009 C 182653,320313 182800,320673 182800,320808 C 182800,321363 186786,325590 187314,325595 C 187938,325602 189671,326213 189912,326512 C 190029,326656 190374,326836 190678,326912 C 190983,326989 191326,327259 191442,327512 C 191739,328165 192424,328365 194633,328446 L 196566,328517 L 197591,329509 C 198154,330054 198667,330705 198731,330955 C 198866,331488 199366,331800 200087,331800 C 200661,331800 200770,331390 200300,331000 C 200135,330863 200000,330596 200000,330406 C 200000,330216 199816,329849 199590,329589 C 198879,328768 199115,327734 200049,327584 C 200461,327518 200956,327326 201149,327158 C 201462,326886 202353,326591 202900,326580 C 203624,326564 204761,327076 205410,327710 C 206292,328571 208420,328806 209172,328125 C 209370,327946 209609,327800 209705,327800 C 209800,327800 210137,327553 210453,327250 L 211028,326700 L 211608,327400 C 212426,328385 212195,328979 210988,328994 C 209650,329010 209093,330602 210287,330996 C 210832,331176 211084,331179 211289,331009 C 211461,330866 211924,330828 212532,330906 C 213064,330974 214040,330942 214700,330834 C 215657,330679 215964,330696 216216,330919 C 216783,331424 217302,331242 217978,330301 C 218364,329763 218840,329350 219162,329273 C 219458,329203 219803,329064 219929,328966 C 220168,328778 221414,329249 222038,329763 C 222329,330002 222468,329996 223019,329720 C 223822,329320 225199,329306 225712,329694 C 226257,330106 226875,330069 227300,329600 C 227499,329380 227821,329200 228016,329200 C 228210,329200 228782,328885 229286,328500 C 229791,328115 230376,327800 230586,327800 C 230797,327800 231273,327445 231645,327010 C 232463,326054 233167,325758 234222,325927 C 234969,326046 235619,325855 236800,325167 C 239232,323750 242808,324685 240788,326209 C 240541,326395 240405,326647 240483,326773 C 240713,327145 241369,327031 241612,326577 C 241798,326230 241964,326174 242536,326267 C 242920,326329 243721,326290 244316,326180 C 245366,325986 245422,325999 246194,326619 L 246989,327258 L 246644,327854 C 246455,328183 245993,328687 245618,328976 C 245243,329264 244568,329825 244118,330223 C 243668,330620 242873,331133 242350,331362 C 241704,331644 241400,331897 241400,332151 C 241400,332667 242173,333453 242541,333312 C 243066,333110 243975,332313 244107,331937 C 244299,331392 245403,330200 245716,330200 C 245866,330200 246125,329937 246291,329617 C 246689,328849 247682,328527 249700,328512 C 251425,328499 251722,328623 253629,330151 C 254075,330510 254679,330859 254971,330927 C 255745,331108 256770,332152 257337,333336 L 257833,334371 L 257388,334973 C 257002,335496 256945,335815 256957,337389 L 256971,339202 L 256235,339909 C 255831,340298 255259,340667 254964,340730 C 254669,340793 254219,341067 253964,341340 L 253500,341835 L 254050,342275 C 255206,343200 253459,345600 251629,345600 C 251477,345600 250834,345915 250200,346300 C 248877,347103 248500,347160 248200,346600 C 248082,346380 247857,346200 247700,346200 C 247542,346200 247095,346048 246706,345863 C 246034,345542 245985,345543 245730,345893 C 245440,346290 245000,346162 245000,345681 C 245000,345284 243057,345515 242530,345975 C 242185,346277 242130,346259 241691,345709 C 241228,345128 241214,345125 240806,345494 C 240400,345862 240380,345861 239804,345435 C 239132,344937 238940,344909 238424,345231 C 238148,345403 237574,345408 236172,345249 C 234813,345094 234013,345096 233295,345256 C 232748,345378 231805,345461 231200,345441 C 230277,345410 230047,345475 229769,345843 C 229506,346190 229215,346287 228369,346308 C 227781,346323 227045,346440 226734,346569 C 226187,346794 225424,346852 223286,346827 C 222245,346815 221960,346991 220750,348394 C 220145,349096 218880,348704 219021,347858 C 219089,347448 218980,347189 218788,347307 C 218671,347380 218630,347682 218697,347984 C 218763,348285 218720,348785 218601,349096 L 218386,349662 L 215562,349533 C 213462,349438 212651,349327 212403,349102 C 211940,348684 211543,348724 211233,349222 C 211036,349537 210834,349617 210435,349537 C 210141,349479 209744,349545 209554,349684 C 209311,349863 208927,349892 208254,349781 C 207729,349695 206799,349618 206186,349612 C 205256,349602 205001,349518 204638,349101 C 204226,348626 204167,348615 203452,348872 C 202062,349372 201274,349600 200933,349600 C 200747,349600 200426,349705 200220,349834 C 199528,350266 195891,349689 195019,349008 C 193658,347945 191400,348116 191400,349281 C 191400,350658 193328,351035 200038,350969 C 205144,350920 205606,350944 205975,351277 C 206309,351580 206484,351604 207037,351428 C 208511,350957 211062,350920 212045,351355 C 213616,352050 213593,353761 212016,353510 C 210896,353331 210576,353664 211233,354322 C 211819,354910 213920,355082 214511,354591 C 214727,354412 214992,354457 215684,354792 C 216362,355121 216671,355176 216961,355021 C 217261,354860 217488,354922 218011,355308 C 218378,355579 218766,355800 218873,355800 C 218981,355800 219234,355950 219436,356132 C 219846,356504 220398,356835 221326,357268 C 221670,357428 222012,357658 222087,357780 C 222162,357901 222383,358000 222577,358000 C 222771,358000 223142,358225 223400,358500 C 223972,359109 224192,359121 224882,358579 C 225435,358144 225656,358144 227300,358579 C 228892,359000 230233,358858 230880,358198 C 231215,357856 231763,357556 232180,357486 C 233421,357278 233561,357199 233773,356592 C 234001,355938 234584,355799 235000,356300 C 235375,356752 235662,356663 236054,355976 C 236319,355511 236509,355382 236816,355462 C 237102,355537 237385,355388 237762,354965 C 238579,354048 238880,353948 239460,354404 C 239737,354622 240151,354800 240382,354800 C 240819,354800 240944,354513 240600,354300 C 240490,354232 240400,354047 240400,353888 C 240400,353422 242034,353512 242672,354014 C 243034,354299 243336,354384 243640,354287 C 244286,354082 247842,354042 248236,354235 C 248569,354397 249200,353981 249200,353598 C 249200,353212 250830,353451 251385,353918 C 251862,354319 252041,354360 252605,354199 C 252969,354094 253481,354063 253744,354129 C 254079,354213 254363,354117 254692,353807 C 255025,353495 255360,353383 255838,353424 C 256237,353459 256715,353342 257002,353141 C 257270,352954 257831,352800 258249,352800 C 258854,352800 259045,352707 259183,352350 C 259278,352103 259693,351630 260104,351300 C 260516,350970 261156,350401 261526,350036 C 262005,349564 262312,349409 262591,349497 C 262861,349583 263063,349493 263240,349211 C 263388,348973 263708,348800 264001,348800 C 264325,348800 264576,348645 264703,348364 C 264811,348124 265170,347832 265500,347714 C 266527,347348 267194,346779 267362,346127 C 267490,345628 267643,345487 268112,345434 C 268435,345398 268886,345195 269113,344984 C 269607,344525 270801,344437 271849,344783 C 272721,345071 273000,344954 273000,344300 C 273000,343715 273322,343486 273701,343801 C 274017,344063 275400,343726 275400,343386 C 275400,343286 275657,342955 275972,342652 C 276287,342348 276694,341808 276876,341452 C 277059,341095 277431,340658 277704,340479 C 278354,340053 278333,339816 277650,339862 C 277150,339897 277104,339843 277148,339271 C 277209,338470 277033,338406 274738,338381 C 273281,338365 272799,338284 272373,337981 C 272079,337771 271756,337600 271657,337600 C 270936,337600 270364,336424 270473,335169 C 270534,334471 270592,333724 270601,333509 C 270630,332873 270980,332606 271617,332733 C 272127,332835 272202,332791 272216,332375 C 272225,332114 272446,331540 272708,331100 C 272969,330660 273359,329929 273573,329476 C 273840,328913 274131,328610 274494,328519 C 274815,328439 275119,328163 275263,327822 C 275538,327169 276615,326200 277067,326200 C 277238,326200 277961,325705 278674,325100 C 279387,324495 280095,324000 280248,324000 C 280400,324000 280790,323723 281113,323384 C 282117,322331 283620,321736 284607,322002 C 285523,322249 285882,322099 287051,320982 C 287385,320662 287815,320400 288005,320400 C 288195,320400 288458,320271 288589,320113 C 288955,319673 289882,319549 290785,319819 C 291429,320012 291774,320011 292429,319815 C 293791,319407 294517,320283 294452,322255 C 294385,324296 294740,325589 295477,325986 C 295797,326159 296201,326458 296374,326650 C 296547,326843 296781,327004 296894,327009 C 297125,327020 298519,328926 298465,329158 C 298446,329240 298369,329553 298294,329854 C 298195,330248 298232,330400 298428,330401 C 298578,330402 298940,330528 299234,330681 C 299527,330834 300157,331024 300634,331102 C 301110,331181 301590,331317 301700,331404 C 301810,331491 303065,331652 304488,331762 C 306463,331914 307132,332037 307310,332280 C 307439,332456 307626,332600 307725,332600 C 307825,332600 308220,332768 308604,332974 C 308988,333180 309686,333413 310155,333492 C 310624,333572 311135,333763 311290,333918 C 311445,334073 311833,334200 312154,334200 C 312570,334200 312797,334333 312949,334668 C 313067,334926 313486,335290 313881,335478 C 314277,335665 314600,335901 314600,336002 C 314600,336103 314889,336515 315243,336918 L 315885,337650 L 317193,337505 C 317912,337425 318680,337372 318900,337386 C 319120,337400 320078,337432 321029,337456 C 322351,337490 322849,337582 323145,337850 C 323413,338093 323864,338200 324621,338200 C 325328,338200 325884,338321 326202,338544 C 326472,338733 327144,338910 327696,338938 C 330755,339092 331048,339136 331233,339466 C 331336,339650 331601,339800 331823,339800 C 333886,339800 332971,341873 330665,342424 C 330134,342551 329581,342687 329435,342727 C 328927,342865 329298,343474 330000,343655 C 330385,343755 330800,343918 330922,344019 C 331247,344287 332787,343547 333651,342708 C 334618,341769 336056,341819 337132,342830 C 337813,343470 337723,343929 336825,344387 C 335627,344998 335439,345893 336394,346437 C 337225,346909 337404,347742 336779,348223 C 336256,348625 335495,348716 335300,348400 C 335232,348290 334777,348200 334288,348200 C 333675,348200 333280,348080 333011,347811 C 332797,347597 332280,347362 331861,347289 C 331443,347215 330901,347030 330657,346878 C 330169,346572 329400,346504 329400,346768 C 329400,346860 329890,347175 330489,347468 C 331087,347761 331633,348091 331700,348201 C 331768,348310 332088,348400 332412,348400 C 332735,348400 333180,348580 333400,348800 C 334003,349403 337509,349403 337700,348800 C 337834,348377 338292,348263 338500,348600 C 338568,348710 338900,348800 339239,348800 C 340416,348800 342316,351049 342487,352646 L 342625,353934 L 341729,354617 C 340093,355864 340358,356956 342215,356620 C 344179,356265 344095,356257 344160,356816 C 344274,357795 343605,358298 342233,358267 C 341057,358240 341020,358255 340813,358849 C 340507,359728 340548,360000 340988,360000 C 341202,360000 341435,360096 341508,360212 C 341580,360329 341855,360507 342119,360607 C 342740,360843 342843,362527 342250,362736 C 342058,362804 341585,362993 341200,363156 L 340500,363454 L 341284,363631 C 343385,364106 343047,365600 340838,365600 C 339281,365600 338590,365398 338351,364872 C 338133,364394 337275,364230 336516,364521 C 336017,364713 336081,366430 336600,366754 C 337107,367070 337112,367637 336611,368090 C 336397,368283 336195,368635 336161,368871 C 336102,369284 336019,369298 333867,369242 C 332476,369207 331585,369263 331505,369392 C 331341,369658 330288,369661 329795,369397 C 329378,369174 329168,369428 328924,370450 L 328792,371000 L 330869,371000 C 332643,371000 333020,371058 333455,371400 C 334092,371901 334299,371901 334802,371398 C 335207,370993 338541,370946 340515,371316 C 340951,371398 341341,371308 341818,371017 C 342329,370706 342836,370601 343838,370601 C 344574,370600 345232,370510 345300,370400 C 345368,370290 345742,370200 346130,370200 C 346534,370200 347055,370029 347345,369800 C 347676,369540 348157,369400 348717,369400 C 349198,369400 349651,369287 349740,369146 C 350051,368651 350921,368473 352700,368542 C 353690,368580 354703,368610 354950,368609 C 355927,368605 356381,368611 358546,368655 C 360641,368697 360813,368731 361116,369163 C 361295,369418 361566,369579 361717,369521 C 361869,369463 362366,369547 362822,369708 C 363780,370046 364600,370088 364600,369800 C 364600,369690 364372,369600 364094,369600 C 363518,369600 363199,369050 363621,368783 C 364061,368504 364988,368570 365584,368922 C 366241,369310 367257,368890 368606,367671 L 369394,366959 L 372047,367000 C 376611,367070 382479,366787 382653,366487 C 382770,366286 383725,366218 386753,366199 C 392993,366157 393850,366195 394367,366529 C 394838,366834 395503,366827 398657,366487 C 399381,366409 399912,366444 400077,366581 C 400255,366728 402499,366803 407009,366811 C 412766,366821 413752,366867 414223,367145 C 414713,367435 414814,367437 415234,367162 C 415636,366898 417019,366857 425300,366864 C 433853,366871 434969,366836 435530,366541 C 436065,366260 436855,366212 440761,366220 C 443291,366226 445758,366171 446245,366098 C 446731,366025 447482,366060 447914,366175 C 448416,366309 448987,366319 449494,366203 C 450158,366052 450402,366092 450976,366447 C 451663,366872 451676,366872 466905,366826 C 482661,366779 483787,366828 484190,367581 C 484347,367875 484822,367902 488633,367832 C 493804,367736 493371,367732 495200,367902 C 496025,367979 499715,368075 503400,368114 C 508711,368171 510266,368248 510900,368484 C 511829,368830 512639,368881 512910,368610 C 513030,368490 513992,368486 515496,368600 C 517556,368755 517938,368737 518235,368468 C 518518,368212 519230,368151 522207,368128 L 525835,368100 L 526437,367350 C 526768,366938 527163,366600 527315,366600 C 527467,366600 527736,366379 527913,366108 C 528091,365837 528430,365557 528668,365485 C 528906,365413 529298,365173 529539,364953 C 529850,364668 530127,364588 530487,364679 C 530766,364749 531167,364699 531378,364567 C 531684,364376 531855,364390 532233,364637 C 532625,364895 532920,364912 533982,364741 C 534906,364592 535428,364598 535865,364763 C 536221,364898 536558,364919 536685,364815 C 536974,364577 539370,364590 539518,364830 C 539589,364944 539748,364926 539918,364785 C 540083,364648 540458,364602 540817,364673 C 541156,364741 541603,364705 541812,364594 C 542078,364451 542306,364463 542579,364633 C 542872,364816 543035,364820 543244,364646 C 543631,364326 544323,364552 544695,365121 C 545091,365725 545540,365730 546008,365136 C 546452,364570 548866,364474 549495,364996 C 549693,365160 550344,365309 550974,365335 C 551593,365361 552505,365532 553000,365716 C 554027,366098 556738,366225 563300,366197 C 565610,366187 567590,366186 567700,366194 C 567810,366202 568530,366206 569300,366203 C 570070,366199 571015,366203 571400,366212 C 574742,366285 575534,366332 575760,366474 C 575907,366566 576298,366514 576660,366355 C 577187,366123 578062,366103 581600,366243 C 587032,366458 592033,366290 592260,365885 C 592348,365728 592697,365600 593036,365600 C 593374,365600 594138,365322 594732,364981 C 595757,364395 595839,364380 596300,364681 C 597037,365165 597519,365080 597793,364418 L 598034,363835 L 599667,363907 C 601694,363995 604709,364355 605477,364601 C 605842,364718 606190,364712 606427,364586 C 606684,364448 606936,364459 607238,364620 C 607695,364865 611233,364557 612100,364197 C 612789,363911 614117,363838 614517,364063 C 616402,365128 620294,364222 620095,362766 C 619941,361643 620293,361317 621900,361090 C 623098,360921 623406,360775 624676,359771 C 625213,359347 625779,359000 625933,359000 C 626088,359000 626454,358843 626748,358650 C 627141,358393 627693,358300 628834,358300 C 630223,358300 630410,358254 630619,357865 C 630906,357329 631668,357115 632227,357414 C 632460,357539 632925,357581 633273,357508 C 634259,357302 636378,357021 637800,356907 C 640198,356714 640690,356592 641392,356013 C 641997,355513 642058,355383 641876,354971 C 641320,353707 643349,352583 643997,353795 C 644159,354096 644397,354203 644860,354180 C 645541,354148 646595,354386 647900,354868 C 648537,355103 649188,355132 651100,355011 C 652420,354928 653681,354926 653902,355006 C 654123,355087 654944,355108 655726,355052 C 656999,354961 657216,355000 657791,355425 C 658776,356153 663434,356149 664024,355420 C 664389,354969 664427,354962 664788,355289 C 665021,355500 665577,355655 666233,355692 C 666820,355725 667619,355816 668009,355895 C 668645,356024 668743,355985 668957,355515 L 669196,354991 L 671913,355039 C 673407,355065 674674,355157 674727,355243 C 674986,355662 675621,355257 677134,353705 C 678044,352773 679009,351955 679279,351887 C 679549,351820 679926,351592 680116,351382 C 680589,350860 681237,350903 681881,351500 C 682709,352268 684652,352045 684217,351233 C 683611,350099 684127,348600 685124,348600 C 685592,348600 685800,348507 685800,348300 C 685800,347932 685555,347965 688848,347888 L 691597,347823 L 692698,348873 C 693903,350022 693992,350340 693417,351467 C 692857,352564 692612,352800 692026,352801 C 691298,352803 690179,353147 689700,353517 C 689210,353896 689960,354703 690611,354496 C 690806,354434 691024,354477 691095,354592 C 691307,354935 695935,354852 697206,354482 C 697808,354307 698525,354168 698800,354173 C 706740,354321 707676,354219 707561,353221 L 707500,352700 L 704524,352692 C 702471,352687 701395,352764 701052,352942 C 700253,353356 699823,353265 699677,352650 C 699474,351795 699024,351386 698446,351531 C 698172,351600 697985,351576 698030,351478 C 698717,349995 698779,349970 701370,350140 C 702918,350242 703298,350210 703479,349964 C 703896,349399 713649,349059 714286,349589 C 714479,349749 714708,349748 715126,349586 C 715442,349464 716420,349338 717300,349307 C 718284,349273 719127,349129 719491,348933 C 719930,348697 720379,348646 721238,348735 C 721904,348805 722900,348749 723591,348602 C 724509,348407 724921,348401 725347,348578 C 726006,348851 725448,348834 733676,348824 C 740704,348814 742028,348658 742298,347805 C 742535,347060 742915,346955 743528,347464 C 744408,348197 746400,348359 746400,347699 C 746400,346963 745973,346998 755196,346984 C 758309,346980 759156,346921 759412,346689 C 759588,346530 759927,346400 760166,346400 C 760405,346400 760600,346311 760600,346202 C 760600,346093 761049,345486 761599,344852 C 762148,344218 762733,343543 762899,343350 C 763064,343158 763200,342690 763200,342312 C 763200,341933 763290,341568 763400,341500 C 764205,341002 762994,340834 762038,341311 C 761221,341719 752754,341508 751900,341058 C 751680,340943 751209,340892 750853,340946 C 749710,341120 749240,340880 748972,339986 C 748650,338911 747611,338393 746769,338888 C 746477,339060 746131,339200 746001,339200 C 745870,339200 745534,339380 745255,339600 C 744975,339820 744615,340000 744455,340000 C 744294,340000 743954,340165 743698,340366 C 743264,340707 742686,340730 734977,340715 L 726720,340699 L 725810,341620 C 725310,342126 724785,342688 724644,342868 C 724504,343048 724144,343245 723844,343305 C 723545,343365 722895,343547 722400,343708 C 721007,344163 717995,344101 717147,343601 C 716162,343020 709463,342901 708852,343453 C 708503,343769 708391,343777 707802,343529 C 707248,343296 707059,343295 706621,343520 C 706334,343668 705594,343841 704976,343905 C 703959,344011 703808,344091 703376,344749 C 702841,345567 702081,345866 700984,345691 C 700472,345609 700195,345665 700010,345888 C 699685,346279 698625,346282 698112,345894 C 697898,345732 697558,345600 697355,345600 C 697152,345600 696533,345370 695978,345089 C 694854,344520 694400,344647 694400,345531 C 694400,345815 694257,346056 694050,346120 C 693858,346179 693308,346405 692828,346622 C 692141,346932 691822,346975 691328,346824 C 690983,346718 689367,346592 687738,346545 L 684776,346457 L 684029,345729 C 683619,345328 683174,345000 683040,345000 C 682907,345000 682602,344775 682363,344500 C 682124,344225 681778,344000 681595,344000 C 681411,344000 681054,343820 680800,343600 C 680268,343138 680211,343130 679484,343406 C 679107,343550 678742,343546 678280,343393 C 677609,343172 676607,343620 676140,344350 C 675919,344695 675412,344664 675271,344297 C 675123,343911 672744,344104 672045,344557 C 671638,344821 671550,344817 671215,344514 C 670935,344260 670657,344209 670117,344310 C 668952,344529 666824,344224 666374,343774 C 665569,342969 662282,342899 661190,343665 C 660926,343849 660544,344000 660340,344000 C 659310,344000 658484,345666 659106,346488 C 659722,347302 659131,348200 657980,348200 C 657688,348200 657337,348335 657200,348500 C 656852,348919 656329,348874 655887,348386 C 655493,347950 654408,347981 653848,348444 C 653710,348558 653188,348606 652688,348549 C 652069,348479 651461,348567 650787,348823 C 649472,349323 649373,349307 648860,348516 C 648522,347993 648200,347782 647460,347600 C 645865,347207 643544,347031 643155,347274 C 642891,347440 642664,347406 642202,347133 C 641510,346724 640490,346940 639652,347674 C 639249,348026 639127,348040 638431,347810 C 637532,347513 636911,347659 636309,348309 C 635919,348730 635656,348782 633390,348888 C 632021,348952 630765,349012 630600,349022 C 630435,349032 629760,348944 629100,348827 C 627660,348572 625784,348787 625308,349264 C 624794,349778 622666,349732 622094,349194 C 621680,348805 621000,348822 621000,349221 C 621000,349581 620107,349325 618719,348566 C 618509,348451 617789,348328 617119,348292 C 616448,348257 615394,348090 614776,347923 C 613227,347504 611731,347834 611640,348615 C 611587,349074 611652,349133 612240,349149 C 613240,349176 614846,349494 615337,349761 C 615577,349893 616156,350000 616624,350000 C 617214,350000 617612,350129 617925,350423 C 618204,350685 618741,350885 619338,350947 C 620004,351017 620485,351214 620900,351587 C 621230,351883 621748,352230 622050,352358 C 622621,352600 622724,352895 622411,353389 C 622267,353616 622126,353631 621746,353457 C 621073,353151 620754,353417 620833,354222 L 620900,354900 L 619237,355038 C 618080,355134 617350,355308 616837,355611 C 616229,355970 615906,356026 614991,355930 C 613881,355815 612922,356013 611356,356682 C 610947,356857 610317,357003 609956,357006 C 609595,357010 609125,357145 608912,357306 C 608352,357729 605389,357708 604551,357275 C 604205,357096 603294,356912 602527,356867 C 601362,356798 601056,356703 600675,356292 C 600424,356021 600129,355800 600020,355800 C 599910,355800 599403,355519 598894,355175 C 598056,354609 597921,354575 597473,354815 C 597061,355035 596870,355034 596339,354811 C 595951,354647 594853,354533 593545,354521 L 591390,354500 L 590683,355249 C 589535,356466 588124,356350 586219,354882 C 585546,354363 585275,354255 585071,354424 C 584541,354864 581808,353986 581187,353176 C 580891,352790 580670,352769 576987,352779 C 572138,352792 570268,352206 569589,350460 C 569344,349831 568276,349622 565700,349697 C 564490,349733 563399,349679 563275,349577 C 563151,349476 562656,349395 562175,349397 C 558220,349419 557739,349386 557185,349059 C 555891,348295 556489,346937 558162,346839 L 559204,346779 L 558668,346076 C 558077,345301 557490,345276 556700,345992 C 555580,347007 551662,346603 550566,345359 C 550033,344754 550028,344753 548988,345003 L 547945,345253 L 547298,344483 C 546702,343773 546614,343732 546176,343966 C 544818,344690 544587,344851 544395,345210 C 543466,346946 541326,344783 542112,342903 C 542394,342228 542394,342125 542112,341813 C 541521,341160 541756,340137 542596,339702 C 543334,339320 543733,338351 543428,337682 C 543303,337406 543200,336976 543200,336726 C 543200,336294 541884,335200 541364,335200 C 541253,335200 540934,335020 540655,334800 C 540375,334580 539888,334400 539573,334400 C 539258,334400 538820,334220 538600,334000 C 538080,333480 537200,333461 537200,333969 C 537200,334432 537735,334907 538447,335076 C 538749,335148 539154,335450 539347,335748 C 539541,336047 539955,336519 540267,336799 L 540834,337308 L 540493,338160 C 540305,338628 539983,339102 539776,339213 C 539523,339348 539400,339633 539400,340086 C 539400,340524 539286,340801 539072,340883 C 538796,340989 538762,341215 538862,342288 C 538952,343245 538913,343624 538707,343795 C 538251,344173 538106,345565 538480,345978 C 539230,346807 538581,347400 536925,347400 C 536458,347400 535902,347532 535688,347694 C 535112,348129 533933,348079 533500,347600 C 533301,347380 532897,347200 532602,347200 C 532113,347200 530800,345945 530800,345477 C 530800,345066 530119,344626 529628,344720 C 528731,344892 527928,343667 528042,342299 C 528145,341056 528988,339839 529763,339814 C 530514,339791 531000,339428 531000,338889 C 531000,337830 529488,337839 527043,338912 C 526682,339070 526230,339200 526038,339200 C 525846,339200 525510,339325 525292,339478 C 525074,339631 524094,339823 523114,339905 C 521909,340005 521115,340182 520658,340452 C 520167,340741 519766,340821 519192,340744 C 518758,340686 517797,340714 517057,340805 C 515106,341047 514705,340916 514024,339809 C 513055,338234 511633,337808 510319,338700 C 509479,339270 508379,339357 507986,338884 C 507769,338621 507482,338593 506312,338718 C 504677,338892 504625,338890 503300,338602 C 502750,338483 502064,338389 501776,338394 C 501487,338399 501139,338267 501001,338101 C 500673,337705 500440,337721 499500,338200 C 498580,338669 498026,338700 497142,338330 C 496761,338171 496334,338125 496098,338216 C 495244,338550 493190,338421 492655,338000 C 492322,337738 491843,337600 491271,337600 C 490644,337600 490299,337487 490054,337200 C 489813,336919 489464,336800 488883,336800 C 488360,336800 487868,336654 487551,336404 C 487274,336186 486834,335915 486574,335801 C 486313,335687 485703,335370 485219,335097 C 484734,334823 484120,334600 483855,334600 C 483590,334600 483200,334507 482987,334393 C 482103,333920 481155,335978 482012,336508 C 483259,337278 482412,338400 480584,338400 C 478584,338400 477578,336260 478894,334807 C 479868,333730 477618,333124 475900,334000 C 474848,334536 473811,334317 472600,333302 C 472435,333164 471949,332988 471520,332911 C 470700,332764 469600,331857 469600,331330 C 469600,330883 468660,330222 468198,330343 C 467979,330400 467553,330282 467250,330080 C 466948,329879 466533,329741 466328,329773 C 466123,329806 465689,329578 465364,329266 C 464674,328608 462494,328480 461836,329060 C 461651,329222 461188,329422 460808,329503 C 459806,329716 458870,330551 458396,331655 C 457918,332766 457482,333000 455897,333000 C 455203,333000 454763,333096 454660,333271 C 454504,333536 453759,334000 453491,334000 C 453270,334000 453607,332927 453947,332550 C 454240,332224 454220,332200 453662,332200 C 453316,332200 452909,332031 452700,331800 C 452172,331217 451725,331274 451883,331904 C 452052,332578 451541,332770 450777,332318 C 450141,331943 449800,332033 449800,332579 C 449800,333145 450846,333923 451971,334193 C 452668,334360 453081,334583 453229,334871 C 453351,335107 453620,335488 453829,335717 C 454037,335946 454183,336351 454154,336616 C 454072,337348 454928,337415 455201,336698 C 455373,336244 455484,336187 455978,336295 C 456490,336408 456578,336352 456774,335788 C 456978,335202 457046,335164 457674,335282 C 458178,335376 458383,335332 458468,335111 C 458637,334671 459769,334262 461537,334000 C 462397,333873 463486,333641 463957,333485 C 465035,333127 469607,333087 469952,333432 C 470080,333560 470615,333813 471142,333994 C 472313,334398 472704,335926 471760,336412 C 471507,336542 471075,336852 470800,337100 C 470420,337443 469976,337576 468950,337653 C 468177,337711 467380,337898 467084,338092 C 466709,338338 466357,338394 465792,338299 C 465126,338186 464940,338242 464498,338684 C 464113,339069 463776,339200 463173,339200 C 462583,339200 462269,339318 462011,339636 C 461692,340030 461598,340048 461051,339821 C 460562,339619 460364,339619 460038,339823 C 459709,340028 459573,340026 459316,339813 C 459061,339602 458941,339600 458696,339803 C 458483,339980 458083,340011 457346,339908 C 455692,339675 454863,339803 453969,340428 C 453529,340737 453013,340805 450919,340835 C 449534,340854 448400,340911 448400,340961 C 448400,341012 448589,341358 448819,341731 C 449291,342495 449209,343000 448613,343000 C 448394,343000 448118,343180 448000,343400 C 447745,343877 447400,343926 447400,343485 C 447400,343225 447310,343242 446873,343585 C 446075,344213 443576,344192 443153,343554 C 442859,343111 442820,343108 438189,343154 C 433861,343196 433466,343170 432755,342800 C 432333,342580 431717,342400 431386,342400 C 431055,342400 430431,342220 430000,342000 C 429341,341664 428821,341600 426739,341600 C 424516,341600 424225,341559 423900,341200 C 423667,340943 423284,340800 422827,340800 C 422260,340800 421941,340629 421256,339957 C 420471,339187 420315,339117 419461,339154 C 418340,339203 417887,338867 417591,337768 C 417478,337346 417302,337000 417200,337000 C 417099,337000 416518,336595 415911,336100 C 415303,335605 414692,335200 414553,335199 C 414414,335199 414005,335019 413645,334799 C 413285,334580 412874,334400 412731,334400 C 412588,334400 412011,333825 411448,333122 C 410874,332406 410089,331681 409662,331472 C 408960,331129 408892,331022 408800,330104 L 408700,329107 L 407725,328945 C 407178,328854 406439,328545 406041,328241 C 405370,327729 403726,327241 402577,327213 C 402289,327206 401825,327020 401545,326800 C 401232,326554 400734,326400 400249,326400 C 399716,326400 399345,326271 399100,326000 C 398901,325780 398526,325600 398267,325600 C 398008,325600 397642,325420 397454,325200 C 397265,324980 396974,324797 396806,324794 C 395048,324760 394267,320693 395615,318591 C 395788,318321 395983,317954 396049,317776 C 396114,317597 396417,317389 396721,317312 C 397026,317236 397376,317035 397500,316866 C 397625,316695 398160,316513 398712,316454 C 399255,316396 399844,316224 400021,316070 C 400551,315609 402100,315853 403094,316553 C 403566,316886 404165,317223 404426,317304 C 404687,317384 405061,317618 405258,317825 C 406119,318727 408400,317848 408400,316614 C 408400,316384 408670,315914 409000,315569 C 409330,315223 409600,314815 409600,314661 C 409600,314507 409809,314183 410065,313940 C 411502,312581 411435,311766 409857,311368 C 409245,311214 408917,311006 408800,310700 C 408707,310455 408489,310200 408315,310134 C 407798,309935 407953,309632 408792,309204 C 409787,308697 409654,308660 410289,309620 C 410798,310388 410878,310433 411566,310322 C 413920,309944 413944,309944 414329,310327 C 415133,311125 416833,311830 417630,311695 C 418966,311469 419865,312380 419723,313816 C 419515,315929 420582,317679 422415,318228 C 424451,318838 424709,319972 423044,320998 C 421402,322009 421200,322198 421200,322728 C 421200,323008 421380,323466 421600,323745 C 421820,324025 422002,324444 422005,324677 C 422008,324939 422323,325328 422834,325700 C 423287,326030 424013,326593 424448,326950 C 425017,327418 425442,327601 425969,327603 C 426371,327605 426925,327737 427200,327898 C 427475,328058 427982,328324 428327,328488 C 428723,328676 429003,328990 429090,329343 C 429437,330754 432624,332947 433986,332712 C 434378,332645 435150,332520 435700,332435 C 437157,332209 437957,331610 437684,330950 C 437543,330611 435927,329600 435524,329600 C 435346,329600 435016,329416 434792,329192 C 434568,328968 434185,328698 433942,328592 C 433699,328487 433365,328316 433200,328212 C 433035,328109 432665,327975 432379,327915 C 430710,327568 429770,325811 430385,324190 C 430621,323571 430730,322921 430665,322523 C 430455,321231 433398,319378 435163,319689 C 435568,319761 436530,319889 437300,319975 C 438070,320060 438953,320236 439263,320365 C 439573,320494 440273,320600 440819,320600 C 441496,320600 441848,320691 441922,320886 C 442145,321466 444937,321364 445499,320757 C 446277,319914 446267,319623 445446,319253 C 445036,319067 444543,318787 444352,318629 C 443795,318170 441496,318304 440973,318827 C 440656,319144 440415,319210 439930,319110 C 439584,319039 438838,318989 438273,319000 C 437354,319018 435515,318553 434850,318134 C 434402,317852 434585,317242 435400,316300 C 436295,315266 436284,315301 435979,314426 C 435647,313473 435110,313271 434567,313895 C 434326,314173 433975,314400 433788,314400 C 433602,314400 433337,314535 433200,314700 C 432088,316039 428979,313391 429060,311173 C 429105,309935 428815,309400 428100,309400 C 427852,309400 427537,309265 427400,309100 C 427263,308935 427034,308800 426891,308800 C 426748,308800 426363,308575 426036,308300 C 425266,307652 424535,307646 424244,308284 C 423850,309148 419794,309139 419462,308273 C 419408,308134 418947,307957 418437,307880 C 417756,307778 417336,307563 416858,307070 C 416500,306702 416168,306400 416120,306400 C 415817,306400 414200,307220 414200,307374 C 414200,308246 411565,308946 410718,308300 C 410357,308025 409867,307800 409628,307800 C 409390,307800 409025,307694 408817,307564 C 407998,307053 406179,309402 406919,310016 C 407154,310211 407207,310479 407119,311028 C 407051,311449 407087,311830 407200,311900 C 407644,312174 407416,313540 406820,314179 C 406082,314969 405443,314975 404700,314200 C 404384,313870 403929,313600 403690,313600 C 403450,313600 403025,313420 402745,313200 C 402466,312980 402145,312800 402032,312800 C 401576,312800 401593,311949 402071,310750 C 403117,308128 402892,307000 401323,307000 C 400830,307000 400173,306898 399863,306773 C 399553,306648 398940,306473 398500,306385 C 396212,305925 395793,305738 394985,304815 C 393886,303560 393493,303159 392959,302746 C 392149,302120 391017,301600 390464,301600 C 389708,301600 387449,300207 387308,299653 C 387238,299378 386983,299156 386647,299076 C 386346,299005 385965,298834 385800,298697 C 385635,298560 385275,298380 385000,298299 C 384725,298217 384337,297979 384137,297770 C 383838,297456 383605,297412 382800,297519 C 381749,297658 380681,297207 379963,296320 C 379653,295937 379456,295909 377519,295971 L 375412,296038 L 375073,295329 C 374720,294587 374908,294000 375500,294000 C 375638,294000 375863,293865 376000,293700 C 376174,293490 376636,293400 377534,293400 C 378855,293400 380200,292587 380200,291789 C 380200,291641 380463,291245 380784,290910 C 382115,289519 382589,288153 382000,287400 C 381744,287073 381607,286584 381604,285986 C 381600,285136 381541,285032 380774,284530 L 379948,283989 L 379111,284395 C 378347,284764 377884,284800 373846,284800 C 370840,284800 369250,284877 368895,285039 C 368488,285224 368284,285224 367988,285039 C 367778,284907 367429,284800 367212,284800 C 366277,284800 365302,282531 365820,281562 C 365985,281254 365977,281030 365788,280677 C 365572,280273 365588,280145 365898,279802 C 366230,279435 366235,279370 365947,279050 C 365773,278858 365566,278430 365486,278100 C 365406,277770 365084,277172 364770,276771 C 363990,275774 364001,274865 364804,274096 C 365137,273777 365508,273185 365630,272780 C 366077,271287 366589,270901 368131,270893 C 369614,270886 370814,270300 371286,269352 C 371706,268510 372504,268240 373052,268755 C 373313,269000 373675,269200 373858,269200 C 374041,269200 374338,269425 374518,269700 C 374775,270092 375015,270200 375626,270200 C 376055,270200 376579,270309 376792,270441 C 377109,270640 377250,270617 377585,270313 C 378267,269697 379693,270012 380702,271002 C 381149,271441 381647,271801 381808,271802 C 382363,271806 383463,273161 383488,273871 C 383500,274236 383658,274759 383838,275033 C 384052,275360 384103,275631 383986,275816 C 383712,276249 383724,276271 384900,277456 C 385505,278066 386000,278694 386000,278852 C 386000,279409 386714,279834 387430,279702 C 387959,279604 388245,279686 388789,280089 C 389168,280370 389637,280600 389832,280600 C 390603,280600 391556,282676 390900,282928 C 390487,283086 390522,283788 390950,283921 C 391143,283980 391570,284145 391900,284287 C 392345,284478 392913,284500 394100,284372 C 397056,284055 399271,284240 399959,284863 C 400164,285049 400565,285200 400850,285200 C 401136,285200 401637,285425 401964,285700 C 403087,286645 405111,286337 406045,285078 C 407065,283704 408372,282415 408875,282288 C 409169,282215 409520,282007 409656,281827 C 410137,281187 411737,280268 413527,279604 C 413871,279476 414405,279107 414714,278785 C 415022,278463 415399,278200 415552,278200 C 415854,278200 417495,277306 418039,276845 C 418622,276352 418679,275495 418187,274620 C 417648,273661 417776,273200 418581,273200 C 420357,273200 421851,275433 420924,276702 C 420681,277034 420708,277172 421154,277846 C 421831,278869 420718,280600 419383,280600 C 419259,280600 418881,280833 418542,281118 C 418074,281512 417788,281608 417346,281519 C 416580,281366 415422,282278 413371,284650 C 412843,285260 412388,285600 412098,285600 C 410951,285600 410322,288263 411412,288503 C 411737,288574 412096,288805 412209,289016 C 412498,289556 412835,289495 413513,288781 C 413836,288441 414522,287947 415039,287684 C 415621,287387 416214,286862 416598,286302 C 416940,285806 417314,285400 417431,285400 C 417547,285400 417917,285169 418253,284886 C 418677,284529 419004,284408 419324,284488 C 419656,284572 419844,284492 419999,284202 C 420140,283939 420418,283800 420802,283800 C 421209,283800 421492,283646 421718,283300 C 421957,282936 422223,282800 422699,282800 C 423057,282800 423463,282665 423600,282500 C 423737,282335 424013,282200 424213,282200 C 425163,282200 425703,281323 425651,279866 C 425577,277817 427296,275392 428815,275402 C 428972,275403 429354,275110 429664,274752 C 429976,274392 430270,274199 430321,274322 C 430806,275476 431987,275332 432201,274093 C 432341,273287 433200,273279 433200,274084 C 433200,275664 434076,277961 434742,278128 C 435000,278193 435301,278416 435412,278623 C 435537,278857 435830,279000 436183,279000 C 436495,279000 436863,279135 437000,279300 C 437317,279682 437683,279682 438000,279300 C 438170,279096 438624,279000 439424,279000 C 440680,279000 440859,278810 440359,278008 C 440161,277692 440182,277552 440471,277232 C 440680,277001 440874,276367 440944,275684 C 441027,274884 441240,274265 441632,273684 C 441944,273221 442200,272740 442200,272614 C 442200,272061 444461,270258 445388,270072 C 445713,270007 446133,269784 446321,269577 C 446809,269037 447854,269098 448796,269721 C 449601,270254 452195,270293 452514,269778 C 453167,268721 455686,268531 456676,269464 C 457614,270349 459606,270417 460474,269593 C 461245,268861 461262,266225 460500,265563 C 460163,265270 460000,264921 460000,264495 C 460000,264146 459820,263654 459600,263400 C 459372,263137 459200,262652 459200,262269 C 459200,261901 459105,261600 458990,261600 C 458874,261600 458643,261308 458476,260950 C 457807,259519 457573,259252 456556,258769 C 455603,258315 454041,258163 452563,258380 C 452488,258391 452370,258580 452300,258800 C 452130,259334 451419,259316 450465,258753 C 449193,258002 444526,257951 443662,258678 C 443081,259167 442912,259200 440969,259200 C 439165,259200 438866,259248 438664,259572 C 438512,259815 438087,259990 437437,260076 C 436890,260149 436332,260341 436197,260504 C 436062,260667 435711,260800 435418,260800 C 434826,260800 433743,261301 432898,261965 C 432210,262507 431514,262519 430855,262000 C 430488,261712 430043,261600 429260,261600 C 428038,261600 427400,261345 427400,260856 C 427400,260674 427202,260315 426960,260058 C 426559,259631 426541,259514 426752,258745 C 427225,257018 425412,256272 423852,257550 C 422964,258278 422889,258300 421318,258305 C 419460,258311 418383,258794 416861,260305 C 416394,260768 415597,261290 415061,261482 C 414533,261671 413860,261956 413566,262115 C 413206,262310 412547,262387 411534,262352 C 410043,262300 410032,262304 409285,263050 C 408775,263559 408353,263800 407974,263800 C 406866,263800 406368,264712 407100,265400 C 407375,265658 407600,265959 407600,266069 C 407600,266179 407749,266433 407931,266634 C 408239,266975 408239,267025 407931,267366 C 407749,267567 407599,267949 407599,268216 C 407597,269223 407177,270139 406286,271083 L 405365,272058 L 404874,271529 C 404604,271238 404244,271000 404073,271000 C 403903,271000 403528,270815 403241,270589 C 402664,270135 401240,270207 400951,270704 C 400658,271210 398430,271298 397926,270824 C 397207,270149 396283,270063 395551,270605 C 394642,271277 392175,271429 391541,270852 C 391180,270522 390728,270431 389036,270343 C 387546,270266 386874,270148 386620,269918 C 386427,269743 386040,269600 385761,269600 C 385482,269600 385039,269433 384777,269229 C 384515,269025 383971,268797 383569,268724 C 383167,268650 382788,268457 382726,268295 C 382663,268133 382490,268000 382341,268000 C 382192,268000 381852,267764 381585,267475 L 381100,266950 L 378256,267069 C 375823,267171 375388,267143 375241,266880 C 375056,266549 373695,267165 373340,267741 C 373085,268155 372275,268044 371949,267550 C 371785,267303 371413,266862 371120,266571 C 370828,266281 370343,265678 370044,265232 C 369547,264493 367551,263210 366885,263203 C 366767,263201 366458,262975 366200,262700 C 365942,262425 365617,262200 365479,262200 C 365116,262200 364000,260465 364000,259900 C 364000,259636 363843,259331 363650,259223 C 363356,259058 363300,258729 363300,257151 C 363300,254988 362683,253600 361722,253600 C 361462,253600 361139,253467 361004,253305 C 360870,253143 360451,252953 360074,252882 C 359698,252811 359298,252584 359188,252377 C 359039,252100 358763,252000 358143,251999 C 357110,251998 356116,251178 355431,249763 C 355175,249235 354514,248433 353905,247913 C 353233,247339 352783,246777 352703,246411 C 352632,246090 352445,245720 352287,245589 C 352129,245458 352000,245101 352000,244797 C 352000,244382 351696,243945 350801,243071 C 349824,242116 349602,241780 349601,241250 C 349601,240893 349522,240600 349427,240600 C 349332,240600 348785,239836 348212,238901 L 347171,237203 L 347599,236601 C 347835,236271 348089,235999 348164,235999 C 348614,235994 349173,234656 349062,233846 C 348980,233237 349033,232892 349247,232646 C 349559,232287 349847,231322 349797,230800 C 349782,230635 349742,229777 349708,228894 C 349663,227688 349542,227115 349225,226594 C 348992,226212 348801,225755 348801,225579 C 348800,225402 348485,224845 348100,224341 C 347307,223303 347217,222645 347800,222146 C 348020,221958 348200,221678 348200,221523 C 348200,221369 348347,221186 348527,221117 C 348787,221018 348829,220816 348735,220126 C 348546,218753 348876,217937 349928,217170 C 350975,216408 351172,216219 353100,214133 C 355378,211668 356000,210879 356000,210458 C 356000,210036 358132,207200 358449,207200 C 358552,207200 359019,206805 359488,206323 C 359957,205841 360556,205379 360820,205297 C 361084,205215 361795,204758 362400,204282 C 364524,202609 365406,202000 365703,202000 C 365868,202000 366198,201775 366437,201500 C 366676,201225 367076,201000 367324,201000 C 367573,201000 367832,200910 367900,200800 C 368140,200412 369370,200571 369611,201021 C 369788,201351 369962,201418 370409,201328 C 370856,201239 371064,201318 371358,201692 C 371713,202143 371861,202171 374017,202193 C 375273,202205 376660,202223 377100,202231 C 378207,202253 379052,202005 379361,201569 C 379727,201052 380446,201110 381000,201700 C 381323,202044 381683,202200 382153,202200 C 382534,202200 383062,202377 383345,202600 C 383625,202820 383963,203000 384096,203000 C 384229,203000 384501,203180 384700,203400 C 384922,203646 385316,203800 385720,203800 C 386158,203800 386474,203938 386667,204214 C 386929,204588 387139,204624 388829,204590 C 389858,204569 391306,204654 392047,204779 C 393484,205022 394091,204860 394307,204177 C 394364,203999 394588,203692 394805,203495 C 395022,203299 395204,202994 395208,202819 C 395256,200878 398525,199955 401167,201137 C 403006,201959 405315,199759 405070,197417 C 404985,196598 405022,196115 405185,195918 C 405377,195687 405357,195520 405089,195111 C 404839,194730 404775,194310 404841,193504 C 404921,192549 404874,192362 404466,192008 C 404179,191759 404000,191381 404000,191026 C 404000,190709 403865,190337 403700,190200 C 402988,189609 405192,185819 407350,183923 C 407598,183706 407800,183420 407800,183288 C 407800,183157 407937,182935 408104,182796 C 408906,182131 410345,179624 410448,178714 C 410512,178149 410722,177596 410977,177325 C 411210,177077 411400,176687 411400,176459 C 411400,176230 411535,175991 411700,175928 C 411885,175857 412000,175553 412000,175136 C 412000,174764 412100,174173 412222,173822 C 412384,173359 412385,172953 412227,172342 C 412038,171610 412061,171430 412400,170964 C 412615,170670 412849,170066 412919,169624 C 412990,169181 413217,168665 413424,168478 C 414308,167678 413960,166248 412500,164692 C 411785,163930 411200,163184 411200,163035 C 411200,162885 411020,162534 410800,162255 C 410563,161954 410400,161443 410400,161004 C 410400,160541 410263,160138 410037,159934 C 409741,159666 409667,159251 409634,157665 C 409605,156276 409509,155631 409297,155396 C 408664,154698 409509,152173 411028,150223 C 411233,149961 411400,149530 411400,149267 C 411400,149003 411527,148739 411682,148679 C 412001,148557 413600,146302 413600,145975 C 413600,145859 413780,145534 414000,145255 C 414220,144975 414400,144536 414400,144280 C 414400,144019 414576,143720 414800,143600 C 415162,143406 415200,143181 415200,141205 C 415200,139961 415286,138970 415401,138900 C 415511,138831 415546,138555 415478,138285 C 415411,138015 415444,137683 415552,137547 C 415659,137411 415794,136867 415851,136338 C 415914,135744 416116,135203 416377,134925 C 416648,134636 416800,134212 416800,133744 C 416800,133130 417055,132696 418400,131024 C 419463,129703 420000,128864 420000,128525 C 420000,128220 420160,127928 420398,127801 C 420616,127684 420850,127370 420917,127102 C 420984,126835 421165,126512 421320,126384 C 421474,126256 421600,125870 421600,125526 C 421600,125050 421768,124766 422302,124340 C 423555,123340 423649,123059 423169,121756 C 422661,120376 422777,119741 423597,119401 C 423929,119264 424204,119050 424208,118926 C 424220,118607 425215,117500 425734,117230 C 426352,116907 427974,117163 428265,117629 C 428453,117930 428748,118000 429840,118000 C 430959,118000 431252,118072 431586,118431 C 432018,118895 435301,118881 436179,118411 C 436438,118273 436784,118297 437325,118491 C 438969,119083 440202,119400 440858,119400 C 441770,119400 442717,119748 443694,120442 C 444137,120757 444860,121247 445300,121530 C 445740,121814 446306,122238 446557,122473 C 446809,122708 447579,123395 448269,124000 C 449036,124672 449748,125528 450101,126200 C 450644,127234 451073,127857 452007,128967 C 452223,129224 452400,129550 452400,129693 C 452400,129835 452661,130059 452979,130191 C 453834,130546 454786,133211 454647,134861 C 454562,135862 454607,136077 454974,136419 C 455208,136637 455400,136902 455400,137008 C 455400,137114 455602,137200 455848,137200 C 456522,137200 459040,138511 459710,139211 C 460560,140097 460684,144756 459879,145502 C 459616,145746 459400,146081 459400,146246 C 459400,146411 459210,146788 458978,147083 C 458588,147579 458580,147647 458878,147975 C 459055,148171 459200,148437 459200,148567 C 459200,148826 463731,153400 463987,153400 C 464074,153400 464386,153589 464680,153820 C 465049,154111 465367,154201 465712,154115 C 466087,154021 466325,154114 466678,154495 C 466935,154773 467289,155000 467463,155000 C 467899,155000 469551,156140 469911,156689 C 470073,156936 470422,157237 470685,157357 C 470949,157477 471227,157770 471303,158008 C 471378,158246 471656,158760 471920,159149 C 472505,160010 472532,160531 472000,160700 C 471538,160847 471301,161573 471505,162217 C 471612,162553 471531,162750 471179,163016 C 470720,163362 470718,163378 471082,163781 C 471985,164777 471427,169600 470409,169600 C 470312,169600 470075,170027 469883,170550 C 469690,171073 469402,171654 469242,171842 C 469043,172077 468994,172403 469084,172886 C 469172,173354 469113,173787 468909,174183 C 468715,174557 468675,174823 468801,174900 C 469160,175122 469016,176395 468562,177008 C 468088,177650 467959,181020 468404,181168 C 468878,181326 469224,181878 469116,182307 C 469032,182641 469135,182842 469517,183093 C 469963,183385 470014,183526 469907,184165 C 469794,184838 471614,187000 472295,187000 C 472859,187000 474023,188196 473887,188635 C 473792,188938 474289,189486 477000,192065 C 477165,192222 477872,192946 478570,193675 C 479539,194685 479972,195000 480396,195000 C 480701,195000 481063,195135 481200,195300 C 481337,195465 481660,195600 481917,195600 C 482182,195600 482480,195775 482601,196002 C 482719,196223 483657,197235 484685,198252 C 485713,199268 486691,200370 486860,200700 C 487028,201030 487429,201593 487752,201952 C 488075,202310 488479,202895 488650,203252 C 490364,206818 490884,207821 491122,208018 C 491275,208145 491400,208428 491400,208646 C 491400,208864 491625,209219 491900,209436 C 492175,209652 492400,209921 492400,210033 C 492400,210145 492580,210466 492800,210745 C 493045,211057 493200,211557 493200,212034 C 493200,212463 493347,213039 493527,213313 C 493712,213596 493897,214405 493952,215175 L 494049,216537 L 493315,216991 C 492659,217396 492544,217413 492240,217147 C 492053,216983 491540,216737 491100,216601 C 490660,216464 489998,216225 489630,216070 C 489143,215864 488560,215823 487501,215919 C 486089,216047 486027,216034 485571,215509 C 485141,215014 485014,214978 484100,215091 C 483346,215184 482805,215109 481900,214786 C 479612,213970 479371,214001 477877,215312 C 476390,216618 476217,216903 476651,217337 C 476981,217667 476054,219400 475548,219400 C 475293,219400 472400,222350 472400,222609 C 472400,222703 471932,223014 471360,223301 C 470789,223588 470136,224002 469910,224220 C 469685,224438 469239,224823 468919,225074 C 468406,225479 468332,225675 468287,226750 C 468217,228426 466519,231177 465536,231207 C 464768,231231 464144,232992 464249,234839 C 464340,236435 464309,236682 463976,236967 C 463769,237144 463600,237457 463600,237663 C 463600,238121 463053,238851 461550,240397 C 460686,241286 460400,241725 460400,242160 C 460400,242811 459639,244361 459012,244988 C 458785,245215 458600,245577 458600,245793 C 458600,246009 458420,246282 458200,246400 C 457980,246518 457800,246771 457800,246963 C 457800,247154 457673,247492 457518,247714 C 456443,249249 456877,251800 458214,251800 C 458813,251800 460800,249683 460800,249043 C 460800,248685 461760,247189 462149,246940 C 462287,246852 462400,246529 462400,246221 C 462400,245914 462580,245499 462800,245300 C 463020,245101 463200,244769 463200,244562 C 463200,244106 464462,242800 464904,242800 C 465078,242800 465343,242506 465494,242146 C 465644,241786 465954,241322 466183,241115 C 466413,240908 466600,240499 466600,240207 C 466600,239915 466732,239502 466894,239288 C 467062,239066 467190,238456 467194,237862 C 467197,237291 467299,236762 467420,236687 C 467542,236612 467767,236249 467921,235880 C 468085,235488 468471,235073 468851,234881 C 470359,234118 471419,232980 472138,231350 C 472271,231048 472471,230800 472582,230800 C 472693,230800 473030,230373 473332,229850 C 473633,229328 473997,228828 474140,228740 C 474283,228652 474400,228239 474400,227821 C 474400,227316 474534,226941 474800,226700 C 475066,226459 475200,226084 475200,225581 C 475200,225164 475290,224768 475400,224700 C 475510,224632 475600,224309 475600,223982 C 475600,223655 475735,223064 475900,222669 C 476065,222274 476200,221793 476200,221600 C 476200,221407 476335,221137 476500,221000 C 476673,220857 476800,220421 476800,219973 C 476800,217907 480885,217917 481992,219985 C 482158,220296 482430,220353 483702,220345 C 484909,220337 485323,220415 485757,220735 C 486056,220954 486745,221195 487289,221269 C 487846,221344 488462,221577 488702,221801 C 488935,222021 489401,222200 489738,222200 C 490075,222200 490455,222325 490582,222478 C 490708,222631 491214,222857 491706,222981 C 492198,223104 492600,223294 492600,223403 C 492600,223511 492886,223600 493235,223600 C 493960,223600 495924,224845 496107,225421 C 496307,226051 497827,227026 498410,226898 C 498750,226823 499092,226914 499413,227164 C 499681,227373 500320,227606 500834,227682 C 501347,227758 501881,227956 502019,228123 C 502158,228290 502525,228558 502835,228718 C 503146,228879 503400,229133 503400,229283 C 503400,229434 503648,229618 503950,229693 C 504252,229768 504841,230183 505258,230615 C 505675,231048 506319,231528 506689,231682 C 507059,231837 507419,232143 507488,232363 C 507558,232583 507747,232814 507908,232875 C 508068,232937 508200,233222 508200,233508 C 508200,234090 509287,235799 509660,235802 C 510094,235807 512200,238020 512200,238473 C 512200,239858 510042,242550 509118,242317 C 508908,242264 508514,242396 508241,242610 C 507969,242825 507500,243000 507199,243000 C 506533,243000 505074,244483 504898,245338 C 504452,247510 503963,247441 501086,244799 C 500348,244122 499126,243748 497500,243701 C 496840,243682 496014,243597 495665,243511 C 495069,243365 495019,243396 494837,244028 C 494731,244398 494585,244841 494514,245014 C 494425,245231 494549,245404 494913,245569 C 495468,245822 495481,246697 494934,247045 C 494586,247266 492843,247231 492700,247000 C 492343,246423 491782,246801 491918,247527 C 492049,248223 491997,248311 490677,249631 C 488724,251585 488200,252188 488200,252486 C 488200,252629 488011,252987 487779,253281 C 487304,253885 487378,255005 487924,255451 C 488091,255588 488402,255857 488614,256050 C 489391,256755 490215,256411 491944,254660 C 492619,253976 492947,253494 492871,253296 C 492801,253114 492955,252803 493248,252531 C 493520,252279 493778,251982 493821,251871 C 493865,251760 494547,251249 495337,250736 C 496128,250223 496827,249719 496890,249617 C 496953,249514 497266,249373 497586,249303 C 497905,249233 498213,249055 498269,248908 C 498326,248760 498761,248575 499236,248496 C 499711,248417 500326,248237 500602,248096 C 501013,247886 501197,247887 501608,248103 C 501885,248248 502694,248469 503406,248594 C 505246,248917 505400,248980 505400,249420 C 505400,249906 505976,250159 506219,249779 C 506342,249587 506274,249415 505999,249226 C 505442,248842 505492,248080 506100,247682 C 506375,247501 506601,247252 506601,247127 C 506604,246684 507968,245925 508286,246189 C 508483,246352 508690,246366 508937,246234 C 509380,245998 512559,245597 512913,245733 C 513053,245786 513398,245679 513680,245495 C 514069,245240 514422,245191 515146,245291 C 515671,245363 516595,245413 517200,245402 C 518681,245374 519959,245752 520338,246330 C 520735,246936 521000,246929 521000,246312 C 521000,245780 521297,245472 521498,245797 C 521686,246101 522350,246042 522914,245672 C 523368,245375 523485,245373 524193,245651 C 524823,245898 525042,245909 525336,245708 C 525536,245572 525945,245400 526244,245328 C 526602,245241 527011,244850 527444,244183 C 527924,243442 528434,242983 529348,242469 C 530035,242083 530757,241564 530952,241316 C 531148,241067 531531,240746 531804,240602 C 532444,240264 532593,240026 532597,239337 C 532600,238695 532859,238141 533415,237585 C 533627,237373 533800,237117 533800,237015 C 533800,236807 535894,235800 536324,235800 C 536476,235800 536960,236160 537400,236600 C 538341,237541 538842,237601 539503,236850 C 540083,236191 540102,236044 539664,235560 C 539367,235232 539357,235072 539581,234200 C 539720,233656 539775,232941 539702,232611 C 539612,232199 539734,231550 540091,230545 C 540377,229739 540688,228385 540784,227536 C 540879,226688 541076,225849 541222,225673 C 541535,225296 541993,224046 541997,223557 C 541999,223368 542179,223118 542398,223001 C 542962,222699 543400,221753 543400,220835 C 543400,220055 543928,218652 544500,217912 C 544665,217698 544800,217371 544800,217185 C 544800,216998 545025,216699 545300,216518 C 545575,216338 545800,216027 545800,215826 C 545800,215626 545976,215303 546191,215109 C 546477,214849 546550,214600 546464,214172 C 546388,213791 546454,213470 546655,213245 C 546824,213055 547061,212530 547182,212078 C 547750,209943 550202,208558 551070,209883 C 551244,210148 551740,210521 552172,210712 C 552870,211020 553800,212264 553800,212890 C 553800,212970 553994,213193 554231,213385 C 554591,213676 554678,214003 554756,215359 C 554829,216612 554936,217061 555225,217323 C 555431,217509 555600,217881 555600,218149 C 555600,218418 555780,218866 556000,219145 C 556540,219832 556503,220447 555877,221190 C 555390,221770 555364,221900 555494,223114 L 555633,224415 L 556718,225027 C 557314,225364 557869,225748 557951,225882 C 558206,226297 559069,226800 559525,226800 C 559811,226800 560103,227041 560375,227503 C 560603,227890 561032,228298 561328,228410 C 561623,228523 562863,229638 564082,230889 C 565864,232716 566463,233207 567127,233383 C 567581,233504 568065,233737 568201,233901 C 568337,234066 568522,234200 568612,234200 C 569123,234200 570046,235389 569922,235885 C 569638,237016 571123,238122 572082,237493 C 572520,237207 572630,237208 573331,237505 C 573754,237684 574505,237905 575000,237995 C 576306,238233 578400,239045 579223,239633 C 579806,240050 580200,239693 580200,238746 C 580200,238270 580300,237780 580423,237657 C 580546,237534 580748,237259 580873,237045 C 581642,235729 582234,235035 582684,234922 C 582998,234843 583240,234608 583315,234312 C 583382,234046 583608,233674 583818,233484 C 584028,233294 584200,232936 584200,232689 C 584200,232442 584568,231759 585017,231170 L 585835,230100 L 585725,228300 C 585617,226521 585623,226492 586215,225800 L 586813,225100 L 587557,225525 C 587966,225759 588674,226013 589132,226090 C 589590,226167 590121,226403 590313,226615 C 591397,227812 593082,226167 592854,224137 C 592772,223409 592836,223117 593175,222686 C 593476,222304 593600,221862 593600,221175 C 593600,220420 593689,220148 594000,219954 C 594618,219568 594618,211859 594000,211300 C 593344,210706 593527,210243 595016,208735 C 595795,207946 596574,207030 596746,206700 C 596918,206370 597361,205731 597730,205279 C 598284,204601 598401,204289 598406,203479 C 598410,202941 598541,202330 598698,202123 C 598855,201916 599043,201331 599116,200823 C 599189,200315 599370,199761 599519,199591 C 599919,199132 600714,197579 600870,196950 C 600980,196512 601123,196400 601573,196400 C 601892,196400 602303,196218 602516,195983 C 603152,195279 604552,194427 605303,194286 C 606574,194048 607350,195440 606418,196284 C 606208,196474 605976,196870 605902,197165 C 605829,197459 605635,197848 605472,198030 C 605223,198306 605211,198559 605401,199607 C 605796,201785 602589,206400 600681,206400 C 599508,206400 598424,207730 598701,208831 C 598821,209309 598648,209599 597452,210919 C 597206,211191 596949,211632 596882,211899 C 596816,212165 596635,212488 596480,212616 C 596116,212918 596124,213288 596502,213601 C 596668,213739 596858,214193 596925,214610 C 596994,215046 597249,215544 597523,215783 C 598003,216200 598061,216516 598090,218900 C 598105,220101 599015,220150 600207,219016 C 600674,218572 601215,218159 601410,218097 C 601604,218035 601873,217853 602006,217692 C 602140,217532 602401,217400 602586,217400 C 602933,217400 604994,215218 605234,214598 C 605309,214405 605678,214192 606064,214120 C 606447,214048 606870,213857 607004,213695 C 607139,213533 607371,213400 607519,213400 C 607977,213400 608449,212272 608174,211833 C 607608,210927 608706,209736 609661,210221 C 610222,210505 611956,212347 612105,212816 C 612167,213012 612477,213229 612793,213298 C 613109,213368 613568,213599 613814,213812 C 614060,214026 614467,214200 614719,214200 C 614970,214200 615231,214288 615297,214395 C 615363,214502 615766,214683 616193,214798 C 616840,214972 616994,215116 617112,215654 C 617190,216009 617407,216407 617595,216539 C 618099,216892 617922,221790 617373,222691 C 617169,223026 617001,223550 617001,223856 C 617000,224439 614344,227264 613564,227512 C 613364,227575 613148,227839 613082,228099 C 613017,228358 612792,228726 612582,228916 C 612372,229106 612200,229472 612200,229728 C 612200,230050 611953,230358 611400,230724 C 609773,231800 610259,233502 612922,236050 L 614332,237400 L 615975,237400 C 618248,237400 618924,236789 618380,235229 C 618241,234829 617984,234553 617679,234477 C 616521,234186 615644,231984 616411,231290 C 617227,230552 620200,230699 620200,231478 C 620200,231623 620426,231985 620701,232283 C 621204,232825 621322,234984 620906,236026 C 620675,236604 621672,237464 622442,237351 C 622801,237299 623253,237355 623447,237476 C 623709,237639 623903,237632 624199,237447 C 624536,237237 624660,237260 624999,237599 C 625220,237820 625603,238000 625850,238001 C 626455,238002 629094,239042 629559,239463 C 629806,239687 630276,239800 630954,239800 C 631741,239800 632040,239890 632249,240189 C 632399,240402 632967,240807 633511,241087 C 634055,241367 634811,241913 635190,242298 C 635570,242684 636047,243000 636250,243000 C 636453,243000 636772,243270 636959,243601 C 637147,243931 637477,244258 637693,244328 C 638826,244693 640418,246640 640289,247503 L 640165,248331 L 641879,249916 C 642822,250787 643595,251606 643597,251736 C 643599,251866 643863,252160 644185,252389 C 644506,252618 644826,253065 644896,253382 C 644966,253699 645198,254117 645411,254310 C 645977,254822 645896,255143 645000,255947 C 644068,256784 643885,257817 644600,258200 C 645348,258601 644961,259569 643423,261142 C 642952,261624 642600,262177 642600,262435 C 642600,262682 642375,263113 642099,263392 C 639256,266275 639180,266391 639769,266950 C 641766,268846 642289,269281 642593,269303 C 642882,269324 643697,269889 645070,271020 C 645435,271321 644983,272000 644418,272000 C 644112,272000 643699,272180 643500,272400 C 642940,273019 641317,272965 640891,272314 C 640058,271043 638000,271335 638000,272724 C 638000,273222 637799,273400 636900,273700 C 636101,273966 636031,274863 636800,274968 C 637075,275006 637458,275178 637651,275350 C 638045,275702 638609,276040 639500,276457 C 639830,276612 640225,276889 640378,277074 C 640542,277271 640806,277361 641020,277294 C 641257,277218 641473,277323 641642,277595 C 642113,278354 643603,278940 643929,278494 C 644333,277941 644259,277471 643684,276938 C 642296,275650 643928,274645 645875,275588 C 646343,275815 647008,276000 647351,276000 C 647695,276000 648032,276090 648100,276200 C 648305,276531 650139,276447 650272,276100 C 650336,275935 650583,275800 650822,275800 C 651229,275800 651249,275732 651140,274680 C 650985,273174 651218,272600 651985,272600 C 652333,272600 652658,272461 652767,272266 C 652870,272082 653256,271789 653624,271615 C 654429,271235 654594,270673 654018,270270 C 653470,269886 653491,269561 654111,268823 C 654649,268184 654599,267780 653911,267209 C 653559,266917 653497,265765 653803,265194 C 654205,264444 655481,264313 656510,264916 C 657218,265331 657581,265423 658159,265334 C 659028,265200 659203,265315 660353,266776 C 661299,267978 661316,268034 660914,268657 C 660757,268901 660525,269682 660398,270392 C 660248,271231 660015,271832 659734,272105 C 658797,273013 657991,274065 657873,274535 C 657805,274806 657581,275133 657375,275262 C 656449,275841 657981,277400 659476,277400 C 659661,277400 659863,277532 659925,277692 C 659986,277853 660217,278042 660437,278112 C 660657,278181 660965,278522 661121,278869 C 661278,279216 661495,279658 661603,279850 C 661711,280043 661876,280358 661970,280550 C 662063,280743 662341,281003 662589,281128 C 662836,281253 663367,281665 663769,282042 C 664171,282420 664760,282902 665078,283114 C 665396,283326 665782,283590 665936,283700 C 666143,283847 666309,283779 666565,283442 C 667119,282715 669968,282627 670617,283318 C 670876,283594 671298,283800 671604,283800 C 671991,283800 672444,284116 673254,284950 C 676253,288041 677186,288918 678059,289469 C 678366,289662 678698,290032 678796,290290 C 678894,290548 679142,290881 679347,291030 C 679551,291178 679930,291660 680189,292100 C 680722,293006 681814,294113 682345,294284 C 683240,294574 683600,295597 683600,297849 C 683600,300436 683739,300841 685043,302050 C 686456,303360 687600,303324 687600,301969 C 687600,301667 687704,301190 687832,300909 C 688003,300535 688006,300272 687845,299919 C 687686,299569 687687,299240 687848,298713 C 688049,298059 688028,297957 687635,297682 C 687086,297297 687010,295541 687519,294979 C 687813,294654 687803,294532 687401,293463 C 686535,291166 686865,290293 688406,290802 C 689931,291305 690344,292191 689632,293429 C 689152,294262 689078,294998 689436,295356 C 689566,295486 689723,295976 689786,296446 C 689897,297277 689923,297303 690754,297414 C 692148,297600 692335,298865 691145,300055 C 690948,300252 690468,300911 690080,301518 C 689691,302126 689244,302672 689087,302733 C 688661,302896 688738,303369 689300,304036 C 690611,305595 688938,306811 687424,305400 C 686312,304363 686159,304386 685413,305707 C 685070,306316 684589,306891 684344,306984 C 684100,307078 683729,307344 683519,307577 C 683109,308032 681926,308166 681690,307783 C 681616,307664 681183,307395 680728,307186 C 680273,306976 679747,306694 679559,306559 C 679276,306355 679137,306389 678746,306757 C 678487,307001 678036,307200 677744,307200 C 677426,307200 677132,307354 677009,307584 C 676896,307795 676553,308022 676248,308090 C 675942,308157 675424,308434 675096,308705 L 674500,309198 L 674975,309602 C 675237,309824 675687,310063 675975,310134 C 676264,310205 676869,310564 677321,310932 C 677772,311299 678328,311600 678556,311600 C 678784,311600 679148,311825 679364,312100 C 679581,312375 679830,312600 679918,312600 C 680006,312600 680309,312821 680591,313091 C 681086,313566 682404,314376 683369,314799 C 683627,314912 684212,315301 684669,315663 C 685126,316026 685750,316429 686056,316559 C 686361,316690 686663,316932 686727,317098 C 686794,317274 687092,317400 687440,317400 C 687768,317400 688269,317583 688553,317806 C 688881,318064 689330,318200 689785,318180 C 690178,318163 690725,318239 691000,318349 C 692066,318778 694390,318871 694799,318501 C 695318,318031 701416,317982 701959,318444 C 702784,319145 704065,319603 704390,319313 C 704561,319160 705150,318970 705700,318891 C 706250,318811 706939,318578 707231,318373 C 707523,318168 707819,318000 707889,318000 C 707959,318000 708215,317813 708458,317585 C 708923,317147 710179,317168 710727,317622 C 710862,317735 711289,317866 711675,317914 C 712844,318059 713387,318359 713721,319045 C 714079,319780 715726,321200 716220,321200 C 716398,321200 716974,321530 717502,321933 C 719487,323448 720051,323640 722667,323689 L 725034,323733 L 725967,322669 C 727032,321455 727207,321414 728419,322097 C 728903,322371 729435,322653 729600,322723 C 731035,323337 732075,323926 732267,324233 C 732619,324796 734400,324763 734400,324194 C 734400,323970 734268,323737 734108,323675 C 733947,323614 733759,323386 733691,323170 C 733509,322599 732034,321600 731372,321600 C 731020,321600 730708,321448 730554,321200 C 730409,320969 730087,320800 729791,320800 C 729483,320800 728971,320519 728510,320097 C 728088,319710 727508,319336 727221,319266 C 726934,319196 726485,318973 726223,318770 C 725961,318566 725625,318400 725478,318400 C 725330,318400 725062,318175 724882,317900 C 724701,317625 724402,317400 724217,317400 C 724032,317400 723794,317315 723690,317210 C 723337,316858 721581,316000 721213,316000 C 721013,316000 720327,315595 719689,315100 C 719052,314605 718451,314200 718355,314200 C 718258,314200 718048,313885 717887,313500 C 717726,313115 717508,312800 717402,312800 C 717148,312800 716600,311725 716600,311226 C 716600,311010 716446,310564 716258,310237 C 715958,309715 715952,309599 716206,309293 C 716365,309101 716468,308740 716436,308491 C 716403,308242 716472,307979 716588,307907 C 716705,307835 716800,307270 716800,306651 C 716800,305826 716901,305415 717178,305113 C 717386,304886 717656,304224 717778,303643 C 718325,301027 719985,300551 721717,302513 C 723879,304961 724107,305199 724284,305200 C 724385,305200 724989,305737 725625,306394 C 726820,307626 727833,308200 728813,308200 C 729462,308200 729552,308310 730117,309800 C 730452,310684 730676,310968 731259,311248 C 732484,311836 732908,315248 731843,315954 C 731002,316513 731170,316833 733399,318918 C 734292,319753 734414,319808 735032,319646 C 735477,319530 735987,319558 736561,319730 C 737145,319904 738017,319949 739261,319869 C 740964,319759 741128,319781 741481,320175 C 741691,320409 741953,320600 742065,320600 C 742177,320600 742427,320744 742622,320920 C 743084,321338 743400,321122 743400,320388 C 743400,319556 744037,319595 744414,320450 C 744687,321070 745600,321508 745600,321018 C 745600,320205 747514,319874 748619,320497 C 749873,321204 750364,321400 750874,321400 C 751576,321400 753856,322213 754313,322627 C 754542,322834 755032,323003 755413,323007 C 755791,323011 756325,323143 756600,323300 C 756875,323457 757348,323589 757650,323593 C 757953,323597 758383,323783 758606,324006 C 758830,324230 759282,324466 759610,324532 C 759939,324598 760257,324730 760316,324826 C 760375,324922 760586,325000 760785,325000 C 760984,325000 761381,325185 761667,325410 C 762090,325743 762267,325778 762606,325597 C 762836,325474 763280,325430 763593,325498 C 763915,325569 764219,325532 764293,325412 C 764365,325295 764758,325200 765167,325200 C 767059,325200 767441,326802 765877,328178 C 764408,329472 764826,330191 767050,330197 L 768000,330200 L 768000,357100 L 768000,384000 L 384000,384000 L 0,384000 L 0,357500 z M 320860,371872 C 320948,371722 321158,371600 321327,371600 C 321899,371600 321473,371100 320848,371038 C 320380,370992 320170,371082 319998,371404 C 319858,371665 319652,371786 319467,371715 C 319301,371651 318927,371786 318636,372015 L 318108,372430 L 319404,372287 C 320150,372204 320768,372028 320860,371872 z M 327114,371984 C 327389,371681 327641,371598 328045,371679 C 328759,371822 328762,371499 328050,371158 C 327723,371002 327500,370733 327500,370497 C 327500,370032 327249,369807 326724,369803 C 326399,369800 326366,369905 326475,370588 C 326547,371041 326516,371428 326400,371500 C 326103,371684 326158,372400 326469,372400 C 326617,372400 326907,372213 327114,371984 z M 324877,371687 C 325186,370883 324033,369723 323040,369838 C 322171,369938 322248,371075 323129,371161 C 323475,371195 323916,371397 324110,371611 C 324536,372082 324719,372100 324877,371687 z M 307911,371583 C 307985,371463 307955,371275 307844,371164 C 307596,370916 306731,371327 306906,371610 C 307066,371869 307745,371850 307911,371583 z M 309600,371512 C 309600,371353 309516,371172 309414,371109 C 309176,370962 308937,371336 309100,371600 C 309284,371898 309600,371842 309600,371512 z M 317410,371288 C 317552,371117 317968,370852 318334,370699 C 319053,370398 319209,369923 318657,369711 C 318412,369617 318097,369820 317562,370417 C 316488,371617 315042,371700 314231,370610 C 313575,369729 313353,369567 313122,369798 C 312935,369985 313294,370666 313901,371272 C 314357,371728 317034,371741 317410,371288 z M 357634,371269 C 358047,370895 358121,370400 357763,370400 C 357488,370400 356600,371190 356600,371435 C 356600,371720 357252,371615 357634,371269 z M 360563,371250 C 360481,370823 359600,370643 359600,371053 C 359600,371435 359795,371600 360248,371600 C 360503,371600 360607,371484 360563,371250 z M 347533,371267 C 347460,371193 347340,371193 347267,371267 C 347193,371340 347253,371400 347400,371400 C 347547,371400 347607,371340 347533,371267 z M 306400,370721 C 306400,370314 305942,370200 304311,370200 C 303147,370200 302749,370118 302335,369792 C 301781,369356 297885,369175 296139,369505 C 295208,369681 295073,370566 296000,370422 C 297529,370185 300925,370324 301500,370647 C 302303,371098 306400,371160 306400,370721 z M 366900,370600 C 366968,370490 366889,370400 366724,370400 C 366559,370400 366368,370490 366300,370600 C 366232,370710 366311,370800 366476,370800 C 366641,370800 366832,370710 366900,370600 z M 371000,369629 C 371000,368976 369997,368392 369403,368698 C 368611,369108 368642,369285 369550,369539 C 370524,369812 371000,369842 371000,369629 z M 327300,367367 C 328842,367463 329267,366879 328150,366198 C 327702,365924 327143,365801 326350,365801 L 325200,365800 L 325200,366722 L 325200,367645 L 325950,367487 C 326363,367401 326970,367347 327300,367367 z M 330611,366671 L 330812,366142 L 331256,366553 C 332141,367373 333420,367088 334491,365833 C 335486,364667 335507,364349 334579,364534 C 334137,364623 333817,364540 333395,364228 C 332674,363695 332197,363687 331545,364200 C 331266,364420 330948,364600 330840,364600 C 330731,364600 330590,364736 330527,364903 C 330463,365070 330183,365292 329905,365398 C 329397,365591 329247,366169 329521,366884 C 329716,367392 330387,367261 330611,366671 z M 335733,363667 C 335660,363593 335600,363653 335600,363800 C 335600,363947 335660,364007 335733,363933 C 335807,363860 335807,363740 335733,363667 z M 234933,357867 C 234860,357793 234740,357793 234667,357867 C 234593,357940 234653,358000 234800,358000 C 234947,358000 235007,357940 234933,357867 z M 608600,356200 C 608600,356090 608460,356000 608288,356000 C 608117,356000 608032,356090 608100,356200 C 608168,356310 608308,356400 608412,356400 C 608515,356400 608600,356310 608600,356200 z M 118735,353050 C 119582,351987 119502,351464 118375,350683 C 117583,350134 117580,350127 117708,349106 C 117828,348141 117806,348067 117318,347845 C 116331,347395 116661,345200 117716,345200 C 117955,345200 118263,345065 118400,344900 C 118537,344735 118916,344600 119242,344600 C 119601,344600 119968,344436 120170,344187 C 120473,343814 120709,343776 122603,343797 C 123756,343809 125082,343820 125548,343819 C 126186,343819 126448,343916 126606,344211 C 126766,344510 127015,344599 127658,344586 C 128121,344577 129005,344631 129621,344707 C 130536,344819 130794,344784 131021,344513 C 131175,344330 131421,344073 131568,343940 C 131716,343808 132185,343363 132610,342950 C 133097,342478 133575,342200 133898,342200 C 134213,342200 134455,342064 134523,341850 C 134684,341335 134953,340783 135405,340037 C 136047,338977 135601,338647 134681,339500 C 134291,339861 133918,340000 133337,340000 C 132873,340000 132379,340138 132172,340326 C 131894,340577 131355,340657 129822,340676 C 128083,340697 127773,340754 127366,341130 C 126736,341711 121942,341738 121521,341163 C 121056,340527 120216,340486 119672,341073 C 119026,341770 117160,341851 116754,341200 C 116245,340386 115131,340655 113856,341900 C 112583,343143 110883,343502 110414,342626 C 110000,341852 109063,341649 105456,341552 C 103562,341501 101897,341369 101756,341259 C 100855,340552 99208,340568 98609,341289 C 98261,341708 98111,341684 97491,341109 C 97091,340738 96821,340646 96391,340732 C 95947,340821 95545,340665 94563,340023 C 93123,339082 92859,339039 92118,339621 C 91678,339968 91424,340019 90693,339909 C 89899,339790 89750,339833 89311,340307 C 88886,340766 88714,340821 88050,340708 C 87430,340604 87170,340666 86710,341028 C 86189,341438 85915,341479 83603,341494 C 81516,341507 80969,341574 80517,341870 C 80027,342191 79400,342234 74725,342265 C 70106,342296 69419,342342 68948,342650 C 68654,342843 68073,343003 67657,343006 C 66839,343013 65800,343731 65800,344290 C 65800,344720 66766,344693 67255,344250 C 67959,343613 73889,343559 74737,344182 C 75263,344569 75591,344598 79700,344624 C 83674,344650 84146,344689 84579,345028 C 84959,345326 85337,345393 86407,345352 C 87463,345311 87841,345376 88144,345650 C 88682,346136 93407,346174 93804,345695 C 94030,345423 94100,345429 94450,345745 C 94795,346058 95329,346104 98960,346137 C 102960,346173 103089,346187 103414,346618 C 103623,346895 103869,347016 104069,346940 C 104955,346600 106000,347563 106000,348719 C 106000,349442 106926,350186 107836,350194 C 108240,350197 108706,350335 108871,350500 C 109051,350680 109541,350800 110095,350800 C 110818,350800 111129,350911 111528,351310 C 111931,351713 112262,351829 113112,351863 C 113703,351887 114298,352018 114433,352153 C 114569,352289 114919,352400 115210,352400 C 115502,352400 116047,352617 116420,352883 C 117240,353465 118340,353545 118735,353050 z M 715745,353000 C 716149,352683 716557,352600 717715,352600 C 718519,352600 719232,352510 719300,352400 C 719701,351751 715899,351538 715321,352177 C 715133,352384 714714,352607 714390,352672 C 714046,352741 713800,352917 713800,353095 C 713800,353554 715123,353489 715745,353000 z M 122850,352103 C 123471,351557 123544,351243 123090,351068 C 122703,350920 121800,351736 121800,352235 C 121800,352732 122191,352683 122850,352103 z M 686703,350876 C 686490,350551 686227,350397 685953,350438 C 685304,350534 685315,350931 685972,351160 C 686297,351273 686635,351576 686724,351833 L 686885,352300 L 686958,351838 C 686998,351585 686883,351152 686703,350876 z M 689600,350200 C 689600,350090 689510,350000 689400,350000 C 689290,350000 689200,350090 689200,350200 C 689200,350310 689290,350400 689400,350400 C 689510,350400 689600,350310 689600,350200 z M 214200,348312 C 214200,347933 213914,347769 213518,347921 C 213011,348115 213141,348600 213700,348600 C 214002,348600 214200,348486 214200,348312 z M 224600,345112 C 224600,344733 224259,344534 223868,344685 C 223615,344782 223602,344862 223802,345102 C 224117,345482 224600,345488 224600,345112 z M 447733,342667 C 447660,342593 447600,342653 447600,342800 C 447600,342947 447660,343007 447733,342933 C 447807,342860 447807,342740 447733,342667 z M 211362,339595 C 212446,339072 212425,338800 211300,338800 C 210433,338800 210400,338822 210400,339400 C 210400,340113 210324,340097 211362,339595 z M 141800,338550 C 142099,338180 142371,338099 143332,338088 C 144111,338080 144686,337954 145059,337709 C 145711,337281 145704,336693 145047,336714 C 144801,336722 143831,336745 142891,336764 C 141304,336797 141146,336839 140677,337350 C 140399,337653 139996,338085 139781,338312 C 139279,338841 139457,339000 140551,339000 C 141227,339000 141522,338894 141800,338550 z M 153234,337869 C 154037,337143 153321,336358 152150,336680 C 151494,336861 150526,337719 150686,337978 C 150906,338333 152812,338252 153234,337869 z M 127991,333911 C 128660,333104 127467,331882 126510,332395 C 126050,332641 125952,332625 125536,332234 C 125282,331995 124887,331800 124659,331800 C 124430,331800 124191,331665 124128,331500 C 123980,331114 123400,331108 123400,331493 C 123400,331654 123580,331882 123800,332000 C 124033,332124 124200,332419 124200,332703 C 124200,333071 124337,333226 124750,333327 C 125053,333401 125614,333628 125997,333831 C 126833,334273 127662,334307 127991,333911 z M 214294,334010 C 214358,333906 214229,333722 214006,333603 C 213548,333358 213476,332809 213850,332421 C 214052,332211 214024,332175 213700,332232 C 213212,332319 213001,333751 213436,334027 C 213788,334250 214150,334243 214294,334010 z M 447237,325397 C 448008,325392 448382,325030 447916,324740 C 447705,324608 447199,324208 446792,323850 C 446385,323493 445865,323200 445638,323200 C 445410,323200 445168,323110 445100,323000 C 445032,322890 444802,322800 444588,322800 C 443836,322800 444121,323667 445100,324357 C 445669,324759 446000,325143 446000,325403 C 446000,325747 446063,325781 446387,325607 C 446600,325493 446982,325399 447237,325397 z M 437152,324023 C 437643,323358 437565,323200 436749,323200 C 436164,323200 435420,323837 435407,324350 C 435393,324879 436700,324634 437152,324023 z M 460684,324479 C 461044,324340 461119,323297 460784,323090 C 460508,322920 459324,324116 459495,324393 C 459638,324623 460200,324664 460684,324479 z M 451388,323423 C 451499,323216 451826,322987 452115,322914 C 453576,322547 454154,321593 453210,321105 C 451855,320405 449800,321017 449800,322122 C 449800,323216 450981,324184 451388,323423 z M 96533,315067 C 96460,314993 96400,315053 96400,315200 C 96400,315347 96460,315407 96533,315333 C 96607,315260 96607,315140 96533,315067 z M 98300,314800 C 98368,314690 98233,314600 98000,314600 C 97767,314600 97632,314690 97700,314800 C 97768,314910 97903,315000 98000,315000 C 98097,315000 98232,314910 98300,314800 z M 175620,305579 C 176260,304894 176297,304755 175992,304185 C 175736,303706 174400,304841 174400,305537 C 174400,306391 174847,306406 175620,305579 z M 121561,295450 C 121527,294928 121410,294500 121300,294500 C 121190,294500 121073,294928 121039,295450 C 120990,296215 121041,296400 121300,296400 C 121559,296400 121610,296215 121561,295450 z M 200174,294859 C 202784,293415 203313,292726 202426,291924 C 201795,291353 198525,291400 197539,291994 C 196638,292537 194269,292505 193645,291941 C 192947,291311 190800,291944 190800,292780 C 190800,293313 191181,293558 192414,293817 C 193011,293942 193648,294175 193829,294335 C 194010,294494 194757,294833 195490,295089 C 196222,295345 196878,295611 196947,295680 C 197240,295973 198944,295540 200174,294859 z M 465763,290814 C 465825,289949 464865,288600 464189,288600 C 464085,288600 464000,288250 464000,287821 C 464000,287031 464223,286800 464985,286800 C 465179,286800 465501,286620 465700,286400 C 465899,286180 466253,286000 466486,286000 C 466965,286000 467769,285501 468161,284960 C 468305,284762 468627,284600 468876,284600 C 469126,284600 469542,284375 469800,284100 C 470058,283825 470437,283600 470641,283600 C 471267,283600 473004,281759 472868,281240 C 472805,280998 472687,280800 472606,280800 C 472525,280800 472221,280580 471931,280311 L 471403,279822 L 466883,279894 C 462629,279962 462335,279991 461918,280383 C 461674,280612 461265,280800 461009,280800 C 460753,280800 460429,280958 460288,281150 C 460076,281439 459714,281500 458220,281500 C 456568,281500 456380,281540 456093,281950 C 455684,282534 455054,282523 454583,281924 C 454264,281518 454081,281463 453342,281546 C 452571,281633 452436,281585 452126,281112 C 451868,280718 451673,280613 451372,280709 C 451102,280795 450815,280696 450515,280414 C 449814,279756 446056,279644 445797,280274 C 445700,280508 445304,280925 444916,281200 C 444046,281817 443854,283487 444600,283954 C 444888,284133 445000,284420 445000,284976 C 445000,285753 448401,289575 450049,290650 C 450798,291138 451926,291112 452200,290600 C 452327,290362 452619,290200 452920,290200 C 453403,290200 454029,289633 454800,288495 C 455349,287685 456418,286943 457255,286790 C 458640,286537 460086,288582 459100,289400 C 458601,289814 458742,290200 459393,290200 C 459781,290200 460060,290338 460200,290600 C 460367,290912 460622,291001 461357,291004 C 461990,291007 462464,291139 462800,291405 C 463194,291717 463554,291790 464500,291751 L 465700,291700 L 465763,290814 z M 495094,291207 C 495440,290824 495418,290783 494319,289727 C 491433,286954 491346,286423 493446,284396 C 494242,283628 494962,283000 495046,283000 C 495131,283000 495200,282506 495200,281902 C 495200,281020 495279,280754 495600,280554 C 495936,280344 496000,280087 496000,278960 C 496000,277649 496019,277598 496800,276876 C 497694,276048 497788,275632 497200,275100 C 496687,274636 496674,273681 497177,273412 C 497384,273301 497615,272966 497690,272668 C 497765,272369 497970,272020 498146,271891 C 498595,271562 498321,271000 497711,271000 C 497435,271000 496915,270820 496555,270601 C 495650,270049 494095,270049 493800,270600 C 493682,270820 493495,271000 493385,271000 C 492971,271000 490685,272181 490300,272594 C 490080,272830 489698,273230 489450,273484 C 488893,274055 488876,274519 489400,274800 C 489692,274956 489800,275219 489800,275775 C 489800,276392 489894,276579 490300,276764 C 490910,277042 491061,278912 490491,279131 C 490322,279196 490015,279576 489810,279975 C 489605,280374 489246,280880 489013,281100 C 488780,281320 488344,281763 488045,282084 C 487745,282404 487298,282848 487050,283070 C 486802,283291 486600,283579 486600,283709 C 486600,283839 486420,284175 486200,284455 C 485980,284734 485800,285230 485800,285557 C 485800,285947 485649,286251 485362,286442 C 484778,286830 486476,288600 487431,288600 C 487802,288600 488097,288763 488308,289084 C 488482,289350 489014,289750 489489,289974 C 489965,290197 490654,290655 491021,290990 C 491880,291775 494456,291911 495094,291207 z M 201560,289160 C 201972,288748 201826,288198 201129,287537 C 200017,286482 199468,285013 199990,284490 C 200932,283547 199806,281064 198557,281329 C 195888,281895 197980,289388 200810,289398 C 201091,289399 201428,289292 201560,289160 z M 208350,288967 C 209088,288750 209347,288767 210309,289094 C 212433,289816 213638,288408 211786,287369 C 211271,287080 210691,286497 210277,285850 C 209480,284605 209035,284516 207976,285389 C 206532,286579 205905,289757 207200,289319 C 207365,289263 207883,289105 208350,288967 z M 514119,288679 L 514500,287957 L 514000,287631 C 513725,287452 513261,287056 512970,286753 C 512301,286056 510412,285937 509961,286563 C 509818,286763 509543,286985 509350,287057 C 508917,287218 508896,287573 509310,287731 C 509487,287800 509745,287690 509915,287475 C 510195,287120 510265,287160 511251,288250 C 512587,289727 513492,289862 514119,288679 z M 212360,282160 C 212731,281789 212658,281641 211850,281135 C 210343,280189 209114,280295 209238,281359 C 209342,282250 211672,282848 212360,282160 z M 445760,279067 C 445848,278470 445340,278168 444365,278238 C 443267,278317 443193,278801 444234,279094 C 444637,279207 445037,279369 445121,279454 C 445368,279701 445695,279503 445760,279067 z M 509600,247633 C 509600,247373 509362,247200 509169,247319 C 508962,247447 509140,247800 509412,247800 C 509515,247800 509600,247725 509600,247633 z M 455320,191520 C 455379,191365 455736,191181 456114,191111 C 456962,190951 457141,189797 456381,189390 C 456032,189203 455984,189048 456093,188468 C 456246,187654 455962,187200 455300,187200 C 455052,187200 454706,186998 454531,186750 L 454214,186300 L 453607,186953 C 452582,188056 452710,189481 453950,190771 C 454985,191848 455158,191942 455320,191520 z M 229400,101207 C 229400,100366 229146,100104 228200,99970 C 227768,99910 227709,99968 227764,100400 C 227799,100675 227835,101148 227843,101450 C 227871,102496 229400,102257 229400,101207 z"
+ id="path5770"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348128,366700 C 348063,366531 347765,366400 347446,366400 C 346454,366400 345920,365051 346750,364642 C 347429,364307 350385,364598 350611,365021 C 350780,365336 351044,365400 352167,365400 C 354053,365400 354501,365858 353326,366584 C 352452,367124 348326,367216 348128,366700 z"
+ id="path5772"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 507933,365909 C 507701,365733 507313,365672 506878,365742 C 506391,365821 506081,365755 505815,365513 C 505459,365191 505392,365196 504612,365594 C 504158,365826 503685,365952 503560,365875 C 503436,365799 502745,365715 502025,365689 C 500883,365649 500663,365576 500301,365121 C 500008,364754 499695,364600 499242,364600 C 498428,364600 498389,364142 499137,363361 C 499862,362604 501049,362861 501950,363969 C 502168,364236 502200,364219 502200,363838 C 502200,363462 502310,363400 502987,363400 C 503420,363400 504023,363305 504326,363190 C 505268,362832 507590,362784 508219,363110 C 509020,363524 509383,363471 509598,362906 C 509966,361936 511410,362177 513025,363477 C 513313,363710 513831,364053 514175,364241 C 515670,365056 514635,365619 511604,365639 C 510196,365648 509354,365743 509057,365927 C 508513,366262 508397,366261 507933,365909 z"
+ id="path5774"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 521634,365425 C 521483,365329 521396,365007 521434,364678 C 521524,363889 522297,363756 522624,364474 C 523026,365354 522428,365928 521634,365425 z"
+ id="path5776"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488824,365050 C 488679,364792 488263,364734 486573,364741 C 484110,364751 483469,364347 484177,363230 C 484376,362917 486704,362787 488347,362998 C 489283,363118 489441,363082 489840,362658 C 490397,362065 491075,362124 491167,362773 C 491226,363194 491312,363234 491927,363134 C 492695,363010 493030,363382 492609,363889 C 492425,364111 492445,364282 492697,364668 C 493120,365313 493033,365346 490851,365357 C 489364,365365 488966,365304 488824,365050 z"
+ id="path5778"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 587016,365119 C 586828,364892 586674,364856 586503,364998 C 586258,365201 584677,365144 583437,364888 C 583018,364801 582408,364380 581780,363742 L 580787,362732 L 581440,362058 C 582037,361442 582115,361414 582344,361727 C 582700,362214 585195,362243 585728,361767 C 585933,361584 586460,361369 586900,361291 C 587340,361212 587792,361075 587905,360987 C 588456,360554 590137,360549 590537,360978 L 590930,361400 L 592161,360900 C 593465,360371 594114,360288 594594,360592 C 594795,360719 595087,360655 595518,360389 C 596316,359896 596258,359887 597093,360621 C 598721,362050 596755,363964 594851,362803 C 594318,362478 594114,362448 593707,362633 C 593327,362807 593140,362799 592901,362601 C 592486,362256 592372,362412 592251,363487 C 592124,364616 591992,364724 590393,365004 C 587866,365448 587305,365467 587016,365119 z"
+ id="path5780"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 426597,363794 C 426434,363691 426108,363605 425873,363603 C 425638,363601 425188,363466 424873,363301 C 424558,363137 424119,363002 423897,363001 C 423675,363001 423169,362826 422773,362613 C 422129,362268 422006,362258 421633,362520 C 421327,362734 421118,362757 420857,362606 C 420661,362493 420251,362312 419946,362204 C 419642,362096 419312,361794 419212,361533 C 418971,360899 416371,361349 415554,362166 C 415115,362605 413937,362438 413196,361831 C 412367,361154 411028,361151 410851,361825 C 410686,362458 409796,362271 408835,361401 C 407793,360459 407731,359742 408682,359634 C 409002,359597 409462,359438 409704,359279 C 410092,359025 410175,359029 410414,359316 C 410932,359941 411570,360034 412190,359576 C 412652,359234 412869,359190 413330,359344 C 413906,359537 415416,358317 416087,357119 C 416491,356396 420730,356482 421426,357228 C 421764,357590 422163,357800 422511,357800 C 422814,357800 423357,358025 423718,358300 C 424078,358575 424462,358800 424571,358800 C 424680,358800 425037,359025 425365,359301 C 425692,359577 426239,359858 426580,359926 C 427279,360066 427405,360508 426800,360700 C 426263,360870 426296,361088 426900,361364 C 427175,361489 427400,361728 427400,361896 C 427400,362342 427952,362267 428100,361800 C 428241,361355 428792,361272 429160,361640 C 429347,361827 429453,361827 429640,361640 C 429772,361508 430209,361400 430610,361400 C 431012,361400 431631,361299 431986,361175 C 432449,361014 432764,361011 433100,361164 C 433458,361327 433623,361313 433795,361106 C 433985,360877 434106,360879 434560,361116 C 434857,361271 435254,361398 435443,361399 C 435632,361399 435882,361580 436000,361800 C 436284,362331 436645,362304 437364,361700 C 438025,361144 438733,361061 439297,361473 C 439910,361921 439369,362994 438527,363001 C 438182,363003 437450,363051 436900,363107 C 435243,363276 433250,363056 432761,362651 C 432209,362192 431064,362278 430625,362810 L 430221,363300 L 429379,362826 C 428560,362365 428529,362362 428219,362727 C 427474,363602 426896,363983 426597,363794 z M 417400,357800 C 417400,357690 417265,357600 417100,357600 C 416935,357600 416800,357690 416800,357800 C 416800,357910 416935,358000 417100,358000 C 417265,358000 417400,357910 417400,357800 z"
+ id="path5782"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 599418,360757 C 597679,359342 597936,358900 600500,358900 C 603541,358900 604532,359565 603503,360913 C 602667,362010 600874,361942 599418,360757 z"
+ id="path5784"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 428540,360474 C 428267,360200 428406,359973 428808,360036 C 429032,360071 429217,360190 429218,360300 C 429222,360543 428735,360668 428540,360474 z"
+ id="path5786"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430056,359750 C 429196,358639 430569,356741 431768,357383 C 432377,357709 432591,357650 432800,357100 C 433049,356445 433715,356435 433878,357084 C 434006,357595 433860,358200 433608,358200 C 433526,358200 433216,358425 432919,358700 C 432622,358975 432269,359200 432134,359200 C 431999,359200 431735,359380 431546,359600 C 431162,360049 430350,360130 430056,359750 z"
+ id="path5788"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 526718,356645 C 526398,356602 525937,356437 525693,356277 C 525450,356118 524767,355931 524175,355862 C 523584,355793 522920,355623 522700,355484 C 522418,355305 520999,355210 517877,355162 C 515103,355119 513350,355013 513177,354876 C 513025,354757 512090,354550 511100,354416 C 509903,354254 509166,354050 508900,353807 C 508680,353606 507960,353289 507300,353103 C 505860,352696 504291,351921 503584,351267 C 503300,351005 502589,350615 502004,350402 C 500549,349870 498820,348804 498430,348200 C 497901,347381 496969,346585 496160,346261 C 494816,345723 495939,343741 497575,343764 C 498050,343770 498472,343654 498620,343476 C 499281,342679 502176,342448 503612,343077 C 503800,343159 504228,343007 504691,342693 C 505380,342226 505489,342204 505765,342479 C 506178,342893 505788,343800 505197,343800 C 504970,343800 504316,344255 503742,344811 L 502700,345822 L 503700,346707 C 504250,347193 504845,347594 505023,347596 C 505201,347598 505561,347761 505823,347958 C 506085,348155 506550,348424 506856,348556 C 507161,348688 507463,348932 507527,349098 C 507591,349264 507844,349400 508090,349400 C 508337,349400 508701,349580 508900,349800 C 509099,350020 509432,350200 509639,350200 C 509847,350200 510260,350376 510558,350591 C 510856,350806 511818,351167 512697,351393 C 513808,351680 514439,351962 514773,352322 C 515213,352796 515342,352828 516324,352706 C 517538,352554 518200,352696 518200,353107 C 518200,353336 518594,353371 520348,353294 C 522534,353199 523698,353392 524121,353921 C 524289,354131 524765,354178 526097,354115 C 527737,354037 528800,354236 528800,354620 C 528800,354705 529199,354835 529687,354908 C 530633,355050 530873,355339 530681,356104 C 530525,356728 528942,356944 526718,356645 z"
+ id="path5790"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 621486,355534 C 621243,354901 621778,354151 622407,354244 C 622742,354293 623098,354223 623211,354087 C 623467,353779 624134,353939 624290,354345 C 624477,354834 624033,355197 623401,355070 C 622963,354983 622787,355051 622611,355379 C 622361,355847 621644,355947 621486,355534 z"
+ id="path5792"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 623519,352821 C 623160,352425 623101,351885 623396,351703 C 623746,351486 624400,351997 624400,352486 C 624400,353093 623928,353273 623519,352821 z"
+ id="path5794"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 272400,342800 C 272400,342690 272490,342600 272600,342600 C 272710,342600 272800,342690 272800,342800 C 272800,342910 272710,343000 272600,343000 C 272490,343000 272400,342910 272400,342800 z"
+ id="path5796"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 274592,342690 C 274405,342465 274421,342379 274668,342285 C 275005,342155 275400,342320 275400,342590 C 275400,342905 274829,342976 274592,342690 z"
+ id="path5798"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 268850,342206 C 268237,341943 268269,341834 269281,340731 L 270163,339771 L 270932,340257 C 271783,340794 272383,341697 272086,341994 C 271810,342269 269370,342428 268850,342206 z"
+ id="path5800"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348848,333293 C 348489,332651 347211,332363 346657,332798 C 346190,333165 345396,333086 344700,332603 C 344590,332527 343825,332482 343000,332504 C 342045,332530 341344,332448 341070,332281 C 340834,332136 339819,331955 338814,331880 C 336921,331737 336480,331529 337103,331073 C 337408,330850 337430,330726 337239,330306 C 336911,329585 337133,329200 337877,329200 C 338335,329200 338718,328999 339254,328479 C 339987,327767 340013,327759 341448,327829 C 342752,327893 342947,327853 343365,327435 C 343929,326871 345316,326976 345774,327617 C 345937,327844 346286,328000 346631,328000 C 346952,328000 347438,328147 347711,328326 C 348053,328550 348457,328618 349005,328545 C 349808,328437 350171,328506 352676,329241 C 354022,329636 355402,330310 355398,330570 C 355390,330943 353778,332373 353229,332494 C 352883,332570 352479,332805 352331,333016 C 352122,333314 351841,333395 351081,333375 C 350541,333361 349862,333414 349571,333494 C 349174,333602 348993,333552 348848,333293 z"
+ id="path5802"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 206048,326168 C 205406,325526 206090,324400 207123,324400 C 207889,324400 209062,325425 208953,326000 C 208878,326395 206418,326538 206048,326168 z"
+ id="path5804"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 28872,320700 C 28694,320235 28945,319800 29394,319800 C 29851,319800 29950,320370 29560,320760 C 29238,321082 29011,321062 28872,320700 z"
+ id="path5806"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 373639,316030 C 373342,315717 372932,315401 372728,315328 C 372445,315227 372377,315050 372444,314589 C 372493,314255 372458,313936 372367,313879 C 372170,313758 372168,312039 372364,311586 C 372616,311004 375127,308899 376306,308281 C 378065,307360 378393,306001 376896,305833 C 376201,305755 375681,305337 375254,304510 C 375086,304185 374825,303796 374674,303645 C 374233,303205 374344,302321 374900,301837 C 375503,301313 375529,300979 375005,300505 C 374612,300149 374612,300145 375019,299574 C 375494,298906 376262,298813 376855,299350 C 377246,299704 378112,299781 382700,299871 C 385537,299927 387600,301031 387600,302495 C 387600,302700 387743,303027 387918,303220 C 388363,303712 388114,304309 387343,304597 C 386142,305046 385301,305566 385073,306000 C 384772,306577 383576,307799 383311,307803 C 383066,307805 381380,309686 381026,310350 C 380894,310598 380496,310923 380143,311073 C 378844,311623 378633,312108 379365,312864 C 380508,314043 380169,315200 378679,315200 C 378011,315200 377666,315344 377000,315900 C 375863,316850 374465,316904 373639,316030 z"
+ id="path5808"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 55350,315184 C 54964,314959 54880,314298 55211,314093 C 55583,313863 56400,314187 56400,314564 C 56400,315239 55926,315519 55350,315184 z"
+ id="path5810"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 366475,309203 C 365829,308544 365125,308004 364911,308003 C 363820,307995 363037,306336 363750,305542 C 364085,305169 364081,305140 363650,304852 C 363403,304686 363200,304399 363200,304214 C 363200,304028 363068,303702 362906,303488 C 362466,302907 362536,302511 363204,301795 C 363923,301026 365265,301022 365774,301787 C 365947,302047 366265,302200 366631,302200 C 366952,302200 367447,302353 367732,302539 C 368017,302726 368549,302858 368915,302834 C 369422,302799 369636,302893 369814,303226 C 370020,303610 370398,303999 371360,304814 C 371541,304967 371580,305300 371488,305908 C 371381,306622 371435,306881 371779,307318 C 372526,308268 371870,309800 370716,309800 C 370459,309800 369926,309935 369531,310100 C 368216,310650 367765,310517 366475,309203 z"
+ id="path5812"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 27504,306804 C 27306,306586 26835,306350 26457,306279 C 25708,306138 25376,305668 25821,305378 C 26307,305061 28752,305736 29035,306265 C 29509,307152 28227,307603 27504,306804 z"
+ id="path5814"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 100933,307067 C 100376,306509 101674,304522 102335,304920 C 102911,305268 102930,306486 102366,306881 C 101899,307209 101170,307303 100933,307067 z"
+ id="path5816"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 5036,302550 C 5071,302303 5235,302100 5400,302100 C 5565,302100 5729,302303 5764,302550 C 5813,302896 5729,303000 5400,303000 C 5071,303000 4987,302896 5036,302550 z"
+ id="path5818"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 686888,288516 C 686569,288282 686497,287971 686480,286766 C 686454,284827 686458,284845 686017,284705 C 685806,284638 685542,284323 685431,284004 C 685270,283540 685075,283398 684465,283296 C 683238,283092 683200,283060 683200,282228 C 683200,281018 684137,280814 685169,281800 C 685618,282229 685993,282400 686486,282400 C 686866,282400 687232,282490 687300,282600 C 687503,282929 688113,282827 688500,282400 C 689007,281840 689903,281886 690437,282500 C 690676,282775 690968,283002 691086,283003 C 691204,283005 691512,283230 691771,283503 C 692290,284051 692622,284115 693169,283773 C 693688,283449 694723,283966 694639,284508 C 694550,285074 693847,285600 693179,285600 C 691821,285600 690170,286409 689042,287628 C 687916,288844 687545,288997 686888,288516 z"
+ id="path5820"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 403164,282500 C 402889,281897 403213,281000 403706,281000 C 404132,281000 405200,281566 405200,281792 C 405200,283002 403639,283544 403164,282500 z"
+ id="path5822"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 684210,279146 C 683870,278974 683633,278591 683438,277899 C 682487,274517 681877,273367 680584,272516 C 680153,272232 679461,271777 679047,271505 C 678465,271123 678131,271036 677585,271125 C 676758,271259 675816,270605 675295,269534 C 674479,267858 674417,267840 669328,267816 C 668904,267814 668454,267732 668328,267634 C 668203,267536 667832,267391 667503,267312 C 665333,266792 663597,263397 665673,263734 C 666269,263831 666410,263760 666897,263122 C 667421,262435 668119,262183 668482,262550 C 668563,262633 669141,262790 669765,262900 C 670801,263083 670932,263165 671266,263850 C 671756,264851 672203,264813 673291,263677 L 674176,262753 L 675427,264027 L 676678,265300 L 677933,265259 C 678716,265233 679397,265327 679744,265507 C 680050,265667 680397,265798 680515,265799 C 680633,265799 680942,266025 681200,266300 C 681458,266575 681823,266800 682010,266800 C 682198,266800 682468,266941 682611,267113 C 682762,267296 683043,267382 683287,267321 C 683938,267158 684800,268170 684800,269098 C 684800,269273 684995,269795 685233,270258 C 685471,270721 685685,271505 685709,272000 C 685750,272862 685967,273553 686400,274200 C 686510,274365 686690,274725 686800,275000 C 686909,275275 687110,275656 687247,275847 C 687447,276129 687431,276317 687161,276847 C 686977,277206 686773,277695 686705,277934 C 686347,279208 685319,279707 684210,279146 z"
+ id="path5824"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 402714,278886 C 402287,278459 402314,277023 402760,276444 C 403296,275747 404207,275756 404448,276461 C 404981,278014 403672,279844 402714,278886 z"
+ id="path5826"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 434118,274138 C 433593,273754 433885,273400 434726,273400 C 435339,273400 435420,273457 435364,273850 C 435287,274389 434660,274534 434118,274138 z"
+ id="path5828"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 412750,273439 C 411866,273382 411800,273341 411803,272839 C 411807,272089 411945,271943 413235,271318 C 413859,271016 414419,270640 414478,270484 C 414591,270191 415691,270094 416289,270323 C 417252,270693 417909,273380 417050,273435 C 416058,273499 413719,273501 412750,273439 z"
+ id="path5830"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430967,272508 C 430648,271807 431193,271000 431987,271000 C 432638,271000 433600,271964 433600,272615 C 433600,273273 431273,273179 430967,272508 z"
+ id="path5832"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 454917,266367 C 454464,265915 454388,265732 454574,265546 C 454950,265170 455885,265782 455963,266456 C 456045,267159 455680,267128 454917,266367 z"
+ id="path5834"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 663300,263222 C 662457,263093 662115,262298 662530,261431 C 662617,261249 662691,260700 662694,260211 C 662708,258083 664603,258606 665339,260940 C 665651,261931 665651,262048 665340,262701 C 664986,263442 664899,263465 663300,263222 z"
+ id="path5836"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641991,244650 C 641527,244128 641027,243418 640881,243074 C 640735,242730 640477,242395 640307,242331 C 639743,242114 640228,240840 641404,239450 C 641967,238785 644200,240474 644200,241564 C 644200,241838 644425,242357 644700,242718 C 646233,244727 643677,246550 641991,244650 z"
+ id="path5838"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 210066,241308 C 208341,240558 209769,238628 212075,238594 C 212309,238590 212675,238455 212888,238294 C 213102,238132 213572,238000 213933,238000 C 214295,238000 214885,237820 215245,237601 C 215605,237381 216021,237201 216169,237201 C 216316,237200 216984,236705 217653,236100 C 218321,235495 219010,234997 219184,234993 C 219358,234989 219759,234774 220075,234515 C 220529,234144 220812,234066 221412,234147 C 221993,234225 222303,234148 222714,233825 C 223720,233033 224414,233504 224392,234963 C 224378,235872 222203,237624 221131,237590 C 220331,237564 219177,238033 217985,238868 C 217725,239050 217365,239200 217186,239200 C 217008,239200 216699,239380 216500,239600 C 216301,239820 215896,240000 215600,240000 C 215304,240000 214899,240180 214700,240400 C 214501,240620 214104,240800 213817,240800 C 213513,240800 213192,240966 213046,241200 C 212743,241686 211074,241747 210066,241308 z"
+ id="path5840"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 205853,240656 C 205101,240562 204600,239960 204600,239149 C 204600,238312 205078,238271 206500,238985 C 209077,240280 208790,241021 205853,240656 z"
+ id="path5842"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 51801,234101 C 51484,233719 52027,232800 52570,232800 C 53065,232800 53879,233704 53732,234090 C 53574,234501 52139,234509 51801,234101 z"
+ id="path5844"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 231685,234117 C 231364,233892 231114,233879 230471,234050 C 228986,234447 228581,233654 229323,231801 C 229989,230136 232951,229406 234936,230418 C 235858,230888 236266,230897 236931,230461 C 237422,230139 237463,230141 237724,230499 C 238295,231280 237795,232600 236928,232600 C 236680,232600 236173,232825 235800,233100 C 235427,233375 235041,233600 234943,233600 C 234844,233600 234534,233780 234255,234000 C 233651,234475 232284,234537 231685,234117 z"
+ id="path5846"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 642865,231332 C 642005,230911 641600,230330 641600,229515 C 641600,229259 641457,228930 641283,228786 C 641066,228606 641002,228339 641081,227945 C 641165,227524 641068,227197 640722,226734 C 639813,225518 639837,224319 640793,223186 C 641592,222237 641616,222168 641633,220694 C 641646,219619 641740,219089 641956,218872 C 643141,217688 644703,218306 644160,219745 C 643719,220913 644182,221070 645732,220277 C 646458,219904 647194,219600 647365,219600 C 647537,219600 647923,219365 648223,219078 C 648898,218431 649200,218592 649200,219598 C 649200,220455 648909,220740 647148,221605 C 646624,221862 646052,222232 645876,222427 C 645649,222677 645385,222747 644978,222666 C 644379,222546 644231,222751 644630,223150 C 644803,223323 644778,223504 644530,223883 C 644024,224655 644123,225101 645100,226443 C 646282,228067 646324,228887 645280,229960 C 644884,230367 644432,230948 644275,231250 C 643949,231878 643979,231876 642865,231332 z"
+ id="path5848"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 218682,230126 C 218532,229735 218737,229400 219126,229400 C 219322,229400 219405,229552 219364,229834 C 219286,230362 218845,230551 218682,230126 z"
+ id="path5850"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 498800,218631 C 498800,218231 499389,217600 499762,217600 C 500036,217600 500294,218487 500107,218789 C 499869,219173 498800,219044 498800,218631 z"
+ id="path5852"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649912,216545 C 650110,213843 648921,213585 647179,215951 C 646497,216877 645852,217001 645266,216319 C 644677,215634 644625,214405 645172,214064 C 645392,213926 645600,213480 645682,212968 C 646008,210932 648376,210613 649232,212490 C 649451,212972 650480,213600 651049,213600 C 651704,213600 652059,214405 652329,216503 C 652475,217630 651772,218400 650597,218400 L 649776,218400 L 649912,216545 z"
+ id="path5854"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 652210,212350 C 652097,212213 651545,211538 650985,210850 L 649966,209600 L 648592,209728 C 646444,209928 645600,209423 645600,207938 C 645600,206985 646121,206558 646584,207131 C 647473,208228 648417,207954 648919,206452 C 649818,203760 651428,202983 652548,204700 C 652998,205389 653450,205807 654004,206043 L 654808,206387 L 654774,208293 C 654750,209657 654661,210267 654459,210434 C 654304,210563 654046,210981 653886,211364 C 653439,212435 652658,212894 652210,212350 z"
+ id="path5856"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 555062,211047 C 554374,210192 554145,207629 554699,207000 C 554844,206835 555062,206328 555183,205873 C 555546,204509 557270,203809 557805,204809 C 557939,205060 558357,205548 558734,205892 C 559373,206478 559508,207200 558979,207200 C 558880,207200 558800,207502 558800,207872 C 558800,208259 558588,208857 558300,209281 C 558025,209686 557800,210156 557800,210324 C 557800,211633 555929,212126 555062,211047 z"
+ id="path5858"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 632589,205750 C 632322,205393 631877,204775 631601,204378 C 630972,203472 629825,202472 629300,202371 C 629076,202328 628746,201966 628549,201547 C 628310,201040 628064,200800 627785,200800 C 627106,200800 626640,200439 626500,199802 C 626428,199471 626289,199200 626191,199200 C 626094,199200 625706,198930 625331,198600 C 624907,198228 624427,198000 624066,198000 C 623027,198000 621729,197190 621502,196400 C 621145,195163 621094,195135 619443,195260 C 617340,195419 615455,192655 617011,191693 C 617127,191622 617446,191054 617720,190432 C 617994,189809 618439,189094 618709,188842 C 619028,188545 619200,188164 619200,187759 C 619200,186932 620094,185430 620657,185310 C 620901,185258 621616,185116 622247,184994 C 622877,184873 623442,184694 623502,184597 C 623562,184500 624364,184473 625283,184538 C 626823,184647 626985,184622 627322,184228 C 627524,183993 627881,183800 628117,183800 C 628352,183800 628876,183575 629281,183300 C 630488,182481 632600,183387 632600,184724 C 632600,184883 632743,185233 632919,185500 C 633146,185848 633200,186210 633106,186767 C 632982,187500 633024,187589 633815,188266 C 634996,189277 635400,190024 635400,191197 C 635400,192296 635779,192812 636950,193305 C 637760,193647 637758,193718 636901,195140 C 636516,195778 636201,196421 636201,196568 C 636200,196716 636020,197066 635800,197345 C 635078,198263 635256,199203 636350,200247 C 639230,202993 639392,203536 637484,204046 C 636815,204225 636393,204504 635958,205053 C 634779,206541 633395,206828 632589,205750 z"
+ id="path5860"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 588070,203094 C 587978,202855 588075,202623 588367,202387 C 588605,202194 588800,201900 588800,201734 C 588800,201568 589321,200907 589958,200266 C 590595,199625 591966,198155 593004,197000 C 594042,195845 594947,194855 595016,194800 C 595403,194489 595617,193694 595500,193002 C 595374,192253 595395,192219 596385,191571 C 597157,191066 597428,190754 597519,190269 C 597585,189919 597890,189407 598198,189133 C 598506,188859 598868,188289 599003,187867 C 599139,187445 599408,186920 599602,186700 C 599795,186480 600012,186107 600084,185871 C 600287,185199 604180,181436 604817,181296 C 605169,181219 605670,180787 606193,180109 C 607025,179030 607413,178810 608500,178800 C 609394,178791 609568,178591 609637,177496 C 609700,176505 609704,176500 610439,176439 C 610995,176392 611336,176198 611812,175655 L 612446,174934 L 614952,174872 C 616781,174826 617545,174732 617779,174522 C 617970,174350 618318,174276 618637,174338 C 618936,174396 619461,174299 619818,174121 C 620172,173944 620653,173800 620886,173800 C 621120,173800 621518,173655 621770,173478 C 622162,173204 622358,173192 623092,173398 C 623702,173569 624067,173578 624344,173430 C 624738,173219 628530,173063 628717,173250 C 629486,174019 628430,175081 627063,174914 C 626325,174823 626219,174861 626163,175235 C 626128,175468 625965,175727 625800,175810 C 625635,175893 624895,176244 624156,176590 C 623417,176936 622759,177305 622694,177410 C 622449,177805 620782,177620 620203,177133 C 619308,176380 618073,176534 616860,177550 C 615985,178282 615788,178359 614739,178371 C 613306,178388 612264,178571 611560,178927 C 611263,179077 610838,179200 610615,179200 C 610263,179200 610235,179267 610405,179713 C 610512,179995 610600,180794 610600,181489 C 610600,182395 610689,182825 610916,183013 C 611102,183168 611195,183468 611143,183743 C 611077,184088 611204,184318 611627,184619 C 612480,185226 612282,186593 611247,187244 C 610946,187434 610557,187694 610381,187823 C 610126,188012 609941,187968 609447,187603 C 608739,187080 608476,187200 607273,188600 C 606250,189790 606000,190263 606000,191005 C 606000,191910 605039,193268 604076,193725 C 603695,193906 603140,194311 602842,194627 C 602545,194942 602104,195200 601862,195200 C 601620,195200 601305,195368 601161,195573 C 601018,195778 600623,196007 600285,196081 C 599947,196156 599223,196640 598677,197158 C 597574,198204 596198,199200 595856,199200 C 595582,199200 594031,200930 593739,201561 C 593440,202207 591885,203210 591237,203175 C 590942,203159 590139,203214 589453,203298 C 588358,203432 588190,203408 588070,203094 z"
+ id="path5862"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 657263,196648 C 656385,196072 655514,190041 656225,189469 C 656925,188907 657368,188958 657718,189640 C 657904,190003 658120,190345 658198,190400 C 658614,190693 658807,191413 658582,191834 C 658381,192210 658420,192319 658875,192651 C 659486,193096 659512,193286 659077,194100 C 658901,194430 658699,195150 658628,195700 C 658497,196724 657953,197101 657263,196648 z"
+ id="path5864"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649336,194591 C 649030,194153 645708,193979 643961,194309 C 642028,194674 639428,192852 640440,191840 C 640790,191490 641133,191545 641575,192019 C 641942,192413 642205,192442 645933,192501 C 648115,192535 650008,192572 650141,192582 C 650273,192592 650441,192916 650514,193302 C 650586,193688 650725,194054 650823,194114 C 650920,194174 651000,194398 651000,194612 C 651000,195174 649733,195158 649336,194591 z"
+ id="path5866"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 189327,191385 C 188683,190879 188652,190326 189245,189911 C 190170,189263 191000,189636 191000,190700 C 191000,191815 190259,192119 189327,191385 z"
+ id="path5868"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662650,190868 C 661852,190545 664040,187800 665095,187800 C 665910,187800 667298,186246 667312,185319 C 667330,184108 668254,182708 668830,183016 C 669142,183183 669379,183183 669748,183014 C 670022,182890 670423,182844 670640,182913 C 670897,182994 671192,182889 671488,182611 C 671738,182376 672293,182131 672721,182065 C 673150,181999 673647,181819 673826,181663 C 674029,181488 674345,181429 674662,181508 C 675246,181655 677015,180855 677686,180139 C 677914,179897 678325,179519 678600,179299 C 680152,178060 680514,177017 679799,175845 C 679040,174600 679632,173798 681095,174089 C 681985,174267 683553,173620 684583,172650 C 685079,172183 685579,171792 685693,171783 C 685807,171774 686484,171725 687199,171674 C 687913,171624 688583,171497 688689,171391 C 688999,171081 689602,171172 689747,171550 C 689820,171743 690087,172215 690340,172600 C 691522,174399 692805,175046 694173,174532 C 694683,174341 695269,174146 695476,174099 C 695684,174051 696114,173717 696434,173356 C 698203,171357 699699,170000 700134,170000 C 700390,170000 700600,169921 700600,169824 C 700600,169495 701696,169233 703550,169119 C 705541,168996 705767,169141 705209,170183 C 704904,170754 702293,172800 701870,172800 C 701243,172800 699202,175457 699201,176276 C 699200,176483 699386,176954 699614,177323 C 700070,178061 700064,178773 699600,179017 C 698712,179484 697898,179800 697585,179800 C 697079,179800 696146,180643 695690,181512 C 695333,182193 691864,184200 691044,184200 C 690937,184200 690737,184335 690600,184500 C 690445,184687 690002,184801 689426,184802 C 688149,184806 686501,185275 685618,185887 C 684821,186440 684324,186513 683503,186201 C 682976,186001 681613,186493 681302,186997 C 681233,187109 680788,187200 680313,187200 C 679789,187200 679351,187318 679200,187500 C 678879,187887 677427,187883 676912,187494 C 676698,187332 676266,187200 675951,187200 C 675499,187200 675337,187078 675176,186616 C 675064,186295 674664,185823 674287,185566 C 673911,185310 673602,185033 673601,184950 C 673601,184868 673392,184800 673138,184800 C 672308,184800 671087,186831 671309,187842 C 671660,189440 667600,191905 666600,190700 C 666280,190315 665066,190316 664327,190701 C 663758,190998 663128,191061 662650,190868 z"
+ id="path5870"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639272,189610 C 639207,189286 638984,188867 638777,188679 C 638511,188438 638400,188065 638400,187407 C 638400,186895 638268,186302 638106,186088 C 637651,185486 637745,184963 638451,184182 C 638808,183787 639299,183187 639543,182850 L 639986,182236 L 639579,181718 C 639064,181064 639152,180450 639833,179944 C 641250,178890 642450,180929 641594,182937 C 641340,183531 641354,183600 641811,183980 C 642534,184582 643000,184523 643000,183830 C 643000,183133 643377,182000 643609,182000 C 643702,182000 643896,181756 644039,181458 C 644183,181161 644495,180868 644734,180808 C 644973,180749 645362,180453 645599,180150 C 646147,179449 646419,179457 646962,180192 C 647481,180893 647558,182152 647093,182330 C 646709,182478 646000,183916 646000,184547 C 646000,184806 645782,185237 645515,185504 C 643919,187100 644337,188479 646466,188640 C 647685,188732 648042,188987 647951,189700 C 647882,190242 646526,190376 645993,189894 C 645715,189642 645430,189593 644832,189695 C 644235,189796 643844,189729 643244,189423 L 642449,189017 L 641674,189603 C 640570,190438 639438,190442 639272,189610 z"
+ id="path5872"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 595325,189093 C 594967,188160 595549,187263 596133,187848 C 596374,188088 596403,188292 596257,188730 C 596041,189377 595513,189583 595325,189093 z"
+ id="path5874"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 654446,185366 C 654076,184996 654150,184307 654605,183896 C 655149,183404 655445,183727 655364,184722 C 655297,185539 654898,185818 654446,185366 z"
+ id="path5876"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 708589,183136 C 708210,182771 707630,182154 707300,181765 C 706487,180807 704962,180135 704293,180440 C 703896,180620 703731,180600 703435,180332 C 703233,180148 702737,180000 702328,180000 C 700829,180000 701228,178443 702805,178138 C 703297,178043 703786,177883 703890,177782 C 704144,177538 704945,177550 705100,177800 C 705168,177910 705583,178000 706021,178000 C 706602,178000 706939,178128 707260,178472 C 707502,178732 707903,179008 708152,179086 C 708401,179164 708737,179486 708900,179800 C 709063,180114 709354,180423 709548,180485 C 710074,180655 711400,181936 711400,182274 C 711400,183621 709650,184158 708589,183136 z"
+ id="path5878"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 714600,179325 C 714600,178669 716253,176800 716834,176800 C 717474,176800 717550,177111 717174,178188 C 716861,179087 714600,180086 714600,179325 z"
+ id="path5880"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 719107,175612 C 718549,174709 720926,172112 721550,172943 C 722013,173561 721860,174766 721250,175303 C 720686,175800 719343,175993 719107,175612 z"
+ id="path5882"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 723343,175076 C 723073,174807 723200,174187 723550,174063 C 723743,173995 724060,173802 724255,173634 C 724738,173219 725047,173563 724965,174425 C 724901,175093 723802,175535 723343,175076 z"
+ id="path5884"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 653295,174131 C 652700,173726 651019,173364 650380,173504 C 649881,173614 649800,173563 649692,173064 C 649487,172123 649142,171580 648557,171278 C 647829,170901 647818,170173 648531,169611 C 649197,169087 649633,169208 650746,170226 C 651211,170652 651722,171000 651881,171000 C 652041,171000 652295,171123 652445,171274 C 652596,171424 652939,171611 653209,171690 C 655169,172258 655847,173136 654932,173924 C 654303,174464 653865,174520 653295,174131 z"
+ id="path5886"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641607,173813 C 641348,173329 641337,172600 641590,172600 C 641694,172600 642022,172375 642319,172100 C 643124,171354 644200,171883 644200,173026 C 644200,173900 642009,174565 641607,173813 z"
+ id="path5888"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 633000,173300 C 632308,173051 632064,172644 632276,172092 C 632409,171744 633000,171931 633000,172321 C 633000,172709 633386,172668 634155,172199 C 634838,171783 635698,171673 635886,171978 C 635947,172076 636245,172216 636548,172289 C 638213,172691 638600,172840 638600,173081 C 638600,173616 634342,173783 633000,173300 z"
+ id="path5890"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 725445,172289 C 724856,171877 724866,171125 725463,170853 C 726694,170292 728699,171333 728314,172334 C 728166,172721 726013,172687 725445,172289 z"
+ id="path5892"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639544,171277 C 639242,170975 639405,170225 639800,170100 C 640020,170030 640200,169899 640200,169808 C 640200,169517 640817,169395 641214,169608 C 641597,169812 641769,170877 641450,171065 C 641134,171252 639680,171414 639544,171277 z"
+ id="path5894"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 687750,168108 C 687396,167682 687200,167211 687200,166788 C 687200,166427 687071,165989 686914,165815 C 686757,165642 686584,164990 686531,164367 C 686463,163581 686307,163107 686019,162819 C 685572,162372 685598,159625 686055,159046 C 686194,158869 686156,158683 685928,158431 C 685712,158192 685600,157710 685600,157018 C 685600,154979 682907,153223 681926,154623 C 681584,155111 680521,155800 680110,155800 C 679955,155800 679652,156025 679436,156300 C 679197,156604 678839,156800 678523,156800 C 678220,156800 677899,156967 677754,157200 C 677611,157428 677287,157600 677000,157600 C 676713,157600 676389,157772 676246,158000 C 676109,158220 675811,158400 675585,158400 C 674750,158400 673800,159370 673800,160224 C 673800,160651 673871,161000 673957,161000 C 674043,161000 674286,161293 674496,161650 C 674706,162008 674995,162419 675139,162564 C 675282,162710 675400,162943 675400,163083 C 675400,163223 675580,163501 675800,163700 C 676570,164397 675782,166297 674800,166112 C 674525,166060 673892,165941 673393,165847 C 672894,165753 672369,165604 672226,165516 C 672061,165414 671760,165555 671397,165903 C 670942,166339 670692,166429 670163,166351 C 669645,166274 669404,166356 669060,166726 C 668340,167500 666866,167243 666422,166268 C 666128,165624 664849,165073 664359,165379 C 663834,165707 663442,165648 663306,165218 C 663239,165009 663057,164788 662901,164728 C 662746,164668 662424,164233 662187,163760 C 661950,163287 661529,162658 661252,162362 C 660922,162009 660784,161682 660854,161414 C 661310,159673 659205,159437 657297,161016 L 655777,162273 L 655208,161936 C 654895,161751 654464,161600 654250,161600 C 654037,161600 653699,161420 653500,161200 C 653301,160980 652978,160800 652783,160800 C 652588,160800 652305,160677 652155,160526 C 652004,160375 651592,160103 651240,159921 C 650882,159736 650600,159432 650600,159232 C 650600,158494 647792,156000 646961,156000 C 645713,156000 644800,155038 644800,153724 C 644800,152235 642767,149600 641619,149600 C 641386,149600 641042,149420 640854,149200 C 640570,148869 640264,148800 639083,148800 C 637994,148800 637540,148711 637177,148428 C 636667,148030 635755,147788 634560,147734 C 634154,147715 633708,147588 633570,147450 C 633433,147313 633117,147200 632870,147200 C 632622,147200 632348,147087 632260,146949 C 632010,146556 630657,145600 630352,145600 C 630200,145600 629902,145468 629688,145306 C 629475,145145 629132,145010 628927,145006 C 628465,144998 627200,143650 627200,143166 C 627200,142970 627020,142515 626801,142155 C 626581,141795 626401,141174 626401,140774 C 626400,140374 626265,139937 626100,139800 C 625735,139497 625712,139076 626050,138860 C 626188,138772 626508,138403 626763,138040 L 627226,137381 L 626813,136527 C 626284,135434 626291,134842 626841,134256 C 627136,133942 627289,133516 627302,132969 C 627315,132450 627447,132061 627661,131903 C 627848,131767 628000,131460 628000,131220 C 628000,130801 628389,130142 629346,128940 C 629731,128455 629775,128224 629672,127233 C 629564,126197 629602,126028 630076,125465 C 630364,125122 630600,124709 630600,124546 C 630600,124382 630729,124142 630887,124011 C 631642,123384 631444,121816 630417,120295 C 629443,118851 629885,117860 631750,117307 C 631998,117233 632200,117099 632200,117008 C 632200,115897 636876,116213 638189,117413 C 639163,118303 639346,118385 640900,118632 C 643423,119032 643749,119043 644229,118742 C 644932,118302 647137,118509 647422,119042 C 647833,119809 648478,120400 648905,120400 C 649143,120400 649491,120569 649678,120775 C 649864,120982 650323,121200 650697,121261 C 651071,121321 651637,121563 651955,121798 C 652460,122172 652837,122231 654944,122270 C 656621,122301 657455,122396 657681,122584 C 658189,123006 659512,123249 661800,123341 C 662955,123387 663986,123509 664090,123613 C 664397,123915 664842,123830 665325,123377 C 665608,123110 666131,122919 666738,122861 C 667758,122763 668993,122267 669261,121848 C 669350,121710 669733,121466 670113,121308 C 670820,121012 672985,118844 673244,118173 C 673418,117720 673547,117715 674915,118113 C 675922,118406 676800,119171 676800,119756 C 676800,119863 676929,120058 677087,120189 C 677554,120577 678044,119645 677887,118667 C 677767,117911 677796,117857 678731,117159 C 680397,115914 681767,114709 681784,114474 C 681793,114350 681935,114137 682100,114000 C 682297,113836 682400,113390 682400,112695 C 682400,110947 685103,108731 686817,109073 C 687220,109154 687595,109081 687939,108856 C 688826,108275 690999,108302 691888,108904 C 692750,109490 693844,109554 694353,109050 C 695818,107599 696963,107613 698474,109100 C 699088,109705 699677,110200 699781,110200 C 699886,110200 700100,110329 700258,110487 C 700481,110709 700804,110738 701709,110615 C 703873,110321 705295,111769 705171,114137 L 705100,115492 L 705850,115848 C 706412,116114 706600,116324 706600,116687 C 706600,116954 706721,117292 706868,117440 C 707352,117923 707565,118495 707462,119033 C 707383,119447 707500,119685 708003,120131 C 709533,121486 711029,124439 711535,127100 C 711597,127430 711778,127848 711936,128029 C 712557,128739 712532,131813 711898,132565 C 711352,133215 711345,133254 711450,135305 C 711549,137246 711528,137411 711128,137778 C 710893,137995 710130,138696 709434,139336 C 707027,141548 706614,142004 706735,142320 C 706893,142732 705698,143947 704979,144105 C 704445,144222 703453,145647 702675,147417 C 702427,147980 701493,148800 701100,148800 C 700965,148800 700632,148974 700361,149188 C 700090,149401 699646,149631 699375,149699 C 698175,150000 697000,151351 697000,152430 C 697000,153393 696458,154679 695650,155634 C 695440,155882 695402,156250 695504,157066 C 695628,158052 695599,158187 695221,158389 C 694962,158528 694800,158810 694800,159125 C 694800,159948 693848,160800 692928,160800 C 691585,160800 690620,162071 690747,163673 C 690835,164788 690796,164951 690322,165460 C 689944,165866 689800,166236 689800,166803 C 689800,167372 689694,167642 689414,167793 C 689201,167907 688970,168180 688900,168400 C 688722,168962 688388,168877 687750,168108 z"
+ id="path5896"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662602,167303 C 662275,166909 662472,166450 663088,166169 C 663702,165889 664200,166218 664200,166903 C 664200,167599 663081,167879 662602,167303 z"
+ id="path5898"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488746,164848 C 488446,164535 488200,164097 488200,163875 C 488200,163646 487810,163133 487300,162689 C 486759,162218 486400,161736 486400,161480 C 486400,161019 484802,159291 484200,159100 C 484000,159037 483786,158853 483725,158692 C 483663,158532 483444,158400 483237,158400 C 483031,158400 482699,158220 482500,158000 C 482245,157718 481884,157600 481279,157600 C 479732,157600 478199,155673 478176,153700 C 478158,152117 478498,150452 478925,150042 C 479522,149466 479519,149323 478900,148836 C 478625,148619 478400,148245 478400,148003 C 478400,147761 478220,147334 478000,147055 C 477780,146775 477600,146401 477599,146223 C 477599,146045 477417,145603 477196,145239 C 476626,144305 476653,139995 477232,139471 C 477434,139288 477600,139015 477600,138865 C 477600,137272 481381,135734 482800,136750 C 483069,136943 483742,137325 484295,137600 C 484862,137882 485400,138318 485530,138600 C 486433,140560 486600,140989 486600,141341 C 486600,141559 486780,141901 487000,142100 C 487297,142369 487400,142716 487400,143452 C 487400,144213 487514,144578 487893,145029 C 488269,145475 488359,145757 488269,146207 C 488203,146533 488238,146912 488345,147050 C 488671,147470 489200,149334 489200,150063 C 489200,150441 489335,150863 489500,151000 C 489665,151137 489800,151462 489800,151723 C 489800,151983 489980,152309 490200,152446 C 490528,152651 490600,152913 490600,153904 C 490600,154690 490712,155271 490922,155571 C 491122,155857 491202,156240 491133,156586 C 491070,156898 491126,157246 491261,157381 C 491717,157837 491633,163554 491165,163882 C 490952,164031 490709,164411 490626,164727 C 490404,165561 489486,165620 488746,164848 z"
+ id="path5900"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 739994,159386 C 739689,158650 739904,158135 740557,158038 C 741170,157946 741493,158652 741158,159351 C 740784,160131 740308,160145 739994,159386 z"
+ id="path5902"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 741733,157667 C 741456,157389 741616,156448 742000,156100 C 742220,155901 742400,155569 742400,155363 C 742400,154877 742917,154682 743319,155016 C 743708,155338 743535,156910 743051,157450 C 742740,157798 741988,157922 741733,157667 z"
+ id="path5904"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 766953,157401 C 766360,157222 765509,156436 764932,155535 C 764604,155021 764498,154982 763773,155105 C 761786,155440 761716,154096 763605,151850 C 764171,151178 765487,152112 766740,154073 C 767012,154498 767407,154891 767617,154947 C 767944,155032 768000,155234 768000,156323 C 768000,157680 767973,157708 766953,157401 z"
+ id="path5906"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 732995,150087 C 732562,148948 732773,148381 733920,147608 C 736027,146185 736734,146389 735804,148151 C 734630,150377 733422,151209 732995,150087 z"
+ id="path5908"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 753799,116698 C 753406,116225 754716,114510 756768,112812 C 757672,112064 757990,110593 757306,110330 C 757144,110268 756851,109913 756656,109542 C 756460,109170 756124,108533 755909,108125 C 755435,107225 755731,106512 756795,105988 C 757594,105595 757802,105260 757667,104584 C 757444,103471 758529,102432 759523,102807 C 760233,103075 760983,103953 760993,104527 C 760997,104762 761233,105107 761519,105294 C 761887,105535 762007,105752 761931,106043 C 761788,106587 762725,107752 763431,107907 C 764568,108157 765383,109537 764760,110160 C 764378,110542 762910,110453 762372,110016 C 761945,109669 761867,109662 761558,109940 C 761370,110109 760920,110310 760558,110387 C 759969,110512 759905,110592 759949,111152 C 759976,111496 759909,111833 759799,111900 C 759690,111968 759600,112249 759600,112525 C 759600,113101 757929,114883 756800,115511 C 756415,115725 755804,116147 755443,116450 C 754707,117066 754171,117147 753799,116698 z"
+ id="path5910"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 698855,103696 C 698616,103529 698166,103411 697855,103435 C 697543,103459 697178,103410 697043,103326 C 696907,103243 696183,103323 695433,103506 C 693119,104068 692548,103722 693493,102330 C 693772,101919 694000,101417 694000,101215 C 694000,100996 694242,100748 694600,100600 C 694930,100463 695200,100237 695200,100098 C 695200,99423 695909,98970 697138,98859 L 698369,98747 L 699303,99762 C 701640,102298 701286,105399 698855,103696 z"
+ id="path5912"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 751478,103268 C 751089,102845 750636,102230 750471,101900 C 749230,99406 749065,99208 748227,99203 C 747933,99201 747303,98783 746567,98101 C 745914,97497 745137,96944 744840,96873 C 743663,96591 741600,95083 741600,94504 C 741600,94366 741411,94014 741181,93721 C 740184,92454 745551,90836 746592,92090 C 746724,92249 747235,92575 747727,92813 C 748745,93306 749217,93916 749386,94957 C 749479,95530 749730,95856 750602,96540 C 756622,101262 757580,103530 753710,103893 L 752186,104035 L 751478,103268 z"
+ id="path5914"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 224300,93200 C 224137,92936 224376,92562 224614,92709 C 224857,92859 224855,93400 224612,93400 C 224508,93400 224368,93310 224300,93200 z"
+ id="path5916"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 531865,87061 C 530341,86764 531072,84599 532695,84601 C 534616,84603 535211,86198 533549,86892 C 532809,87202 532664,87216 531865,87061 z"
+ id="path5918"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 223440,86160 C 222858,85578 223662,83800 224508,83800 C 224996,83800 224912,85926 224413,86193 C 223914,86460 223734,86454 223440,86160 z"
+ id="path5920"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 255750,81803 C 255087,81107 255030,80305 255621,79989 C 256463,79538 259026,79647 259750,80164 C 261132,81150 260237,82049 258198,81723 C 257544,81618 257380,81664 257201,81999 C 256904,82554 256400,82485 255750,81803 z"
+ id="path5922"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 304872,74900 C 304671,74376 304962,74000 305569,74000 C 306227,74000 306702,74445 306529,74897 C 306372,75306 305029,75308 304872,74900 z"
+ id="path5924"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 600400,55870 C 600235,55815 599920,55691 599700,55594 C 599480,55497 598985,55281 598600,55113 C 598215,54945 597738,54694 597539,54554 C 597237,54341 597147,54356 596984,54642 C 596877,54830 596480,55042 596102,55113 C 595724,55184 595310,55367 595183,55521 C 594779,56008 593144,55375 591993,54287 C 591714,54023 591195,53749 590839,53678 C 590070,53524 589000,52285 589000,51548 C 589000,50788 587573,49857 586886,50170 C 586083,50536 585658,50443 585200,49800 C 584614,48977 584100,49034 582510,50101 L 581167,51001 L 579234,51041 C 577595,51075 577258,51139 577025,51460 C 576682,51933 575184,51774 574434,51184 C 573948,50801 573776,50824 573160,51352 C 572668,51774 570322,51888 570004,51505 C 569870,51343 569447,51152 569064,51080 C 568681,51008 568324,50835 568270,50694 C 568216,50554 567866,50382 567492,50312 C 567117,50241 566728,50036 566627,49855 C 566394,49439 564463,49481 563987,49912 C 563565,50294 561041,50305 560495,49928 C 560229,49745 559192,49621 557332,49552 C 554922,49463 554491,49395 553991,49025 C 553604,48739 553120,48600 552513,48600 C 551167,48600 550818,48005 551287,46514 C 551619,45459 551468,44600 550952,44600 C 550868,44600 550636,44436 550436,44236 C 549166,42966 546110,42944 544991,44196 C 544730,44489 544294,44543 542159,44546 L 539635,44551 L 538818,45434 L 538000,46318 L 535750,46276 C 534043,46244 533337,46310 532827,46550 C 532206,46843 532139,46841 531967,46534 C 531724,46100 531034,46107 530546,46549 C 530231,46834 529751,46901 527930,46918 C 518640,47003 514708,47208 514116,47638 C 513636,47986 513435,48025 512988,47857 C 512379,47627 509025,49095 508143,49977 C 508020,50100 507809,50200 507673,50200 C 507537,50200 507173,50311 506863,50447 C 506268,50709 506098,50717 500057,50787 C 495642,50838 494200,50630 493397,49828 C 493107,49538 492516,49129 492085,48920 C 491653,48710 491054,48414 490754,48261 C 490354,48057 490103,48038 489817,48191 C 489233,48504 488576,48444 488113,48037 C 487255,47282 485251,47008 480000,46930 C 477006,46885 476392,46740 475329,45821 C 475124,45644 474629,45500 474229,45500 C 473684,45500 473454,45396 473318,45087 C 473145,44692 472999,44675 470018,44716 C 468137,44742 466639,44671 466242,44536 C 465773,44378 465485,44375 465242,44527 C 465045,44650 463661,44750 461975,44762 C 459366,44782 458971,44830 458323,45213 C 457559,45664 456800,45627 456200,45111 C 455427,44445 453264,43982 452630,44346 C 452057,44675 452000,44671 451145,44244 C 450656,44000 450083,43800 449870,43800 C 449658,43800 449128,43617 448692,43393 C 448213,43147 447713,43032 447426,43103 C 447154,43170 446814,43102 446626,42944 C 445797,42243 444525,42000 441682,42000 C 439525,42000 438787,41932 438488,41706 C 437989,41329 436719,41316 436412,41685 C 436167,41981 433600,42152 427900,42254 C 425748,42292 425233,42360 424912,42650 C 424662,42876 424200,43000 423609,43000 C 423072,43000 422382,43167 421937,43406 C 421083,43863 417545,43958 417029,43537 C 416880,43416 416168,43255 415447,43181 C 414509,43084 414045,42935 413818,42658 C 413531,42309 413274,42278 411200,42334 C 409935,42368 407730,42309 406300,42203 C 403192,41973 400160,41942 398454,42123 C 397344,42240 397170,42209 396854,41836 C 396345,41234 391903,41115 391481,41692 C 391034,42303 383825,42443 382458,41867 C 382012,41679 381001,41528 380000,41500 C 378971,41471 377905,41308 377300,41088 C 376664,40857 375718,40720 374700,40712 C 373820,40706 372988,40627 372850,40538 C 372713,40449 372489,40445 372352,40530 C 371984,40757 368339,40774 368053,40549 C 367916,40442 367646,40427 367453,40514 C 366829,40795 364922,40784 364600,40498 C 364000,39964 362536,39606 361468,39731 C 360559,39836 360403,39800 360169,39425 C 360023,39191 359719,39000 359494,39000 C 359269,39000 358732,38820 358300,38600 C 357868,38380 357223,38200 356865,38200 C 356414,38200 356147,38074 355995,37790 C 355836,37494 355660,37417 355359,37513 C 354958,37640 354119,37451 352563,36883 C 352073,36704 351216,36640 350011,36692 C 348381,36762 348177,36731 347992,36385 C 347858,36135 347573,36000 347180,36000 C 346846,36000 346420,35918 346232,35817 C 346021,35704 345527,35718 344933,35854 L 343975,36073 L 343237,35274 C 342398,34363 340730,32979 340026,32609 C 339684,32430 339009,32399 337605,32500 C 335949,32618 335640,32593 335539,32331 C 335474,32161 335100,31962 334707,31888 C 333966,31749 332000,30144 332000,29678 C 332000,29505 331600,29440 330650,29458 C 329176,29487 328210,29111 327129,28086 C 326584,27569 326490,27550 324990,27653 C 323494,27756 323405,27738 323103,27277 C 322847,26886 322714,26832 322406,26997 C 321833,27304 321216,27243 320516,26810 C 320004,26493 319469,26412 317692,26379 C 315742,26343 315445,26290 315000,25895 C 314632,25567 314132,25414 313104,25315 C 312279,25235 311566,25050 311359,24863 C 311065,24596 310600,24561 308455,24644 C 306784,24708 305781,24667 305551,24523 C 305290,24360 305093,24371 304781,24566 C 304385,24813 302767,24774 301190,24481 C 300840,24415 300501,24539 300113,24872 C 299418,25469 297033,25493 295722,24914 C 294673,24452 288253,24588 287488,25090 C 286960,25436 286149,25493 285637,25221 C 285435,25114 284859,25123 284200,25244 C 283595,25355 282680,25459 282166,25473 C 281483,25493 281096,25628 280726,25975 C 280331,26347 280098,26420 279660,26309 C 279352,26231 278920,26176 278700,26187 C 276148,26312 275745,26365 275604,26594 C 275411,26906 273510,27235 272853,27070 C 272573,27000 272246,27072 272042,27248 C 271579,27648 270480,28000 269695,28000 C 269340,28000 268948,28122 268824,28271 C 268689,28434 267951,28597 266983,28677 C 266095,28751 265172,28940 264932,29097 C 264693,29254 264318,29386 264098,29391 C 262610,29422 261943,29551 261783,29837 C 261648,30079 261241,30164 260102,30192 C 257778,30248 257539,30285 256948,30680 C 256558,30940 256209,31012 255765,30923 C 255004,30771 254015,31295 254379,31659 C 254500,31780 254600,32017 254600,32185 C 254600,32487 256151,33999 256461,34000 C 256737,34000 257408,35742 257282,36131 C 256925,37232 256725,37600 256484,37600 C 256134,37600 255200,39203 255200,39805 C 255200,40063 255002,40485 254760,40743 C 253774,41792 254506,43268 256594,44441 C 257468,44932 257364,45438 256184,46433 C 255274,47201 255181,47353 255289,47895 C 255555,49226 258913,53200 259772,53200 C 260257,53200 262200,54340 262200,54624 C 262200,55728 261044,56043 259352,55400 C 258576,55105 258053,55033 257358,55125 C 256606,55224 256272,55164 255697,54825 C 255301,54591 254785,54400 254549,54400 C 254314,54400 253767,54154 253333,53854 C 252667,53392 252356,53312 251323,53336 C 250352,53359 250026,53286 249742,52983 C 249502,52726 249114,52600 248560,52600 C 247797,52600 246600,51742 246600,51196 C 246600,51124 245832,51053 244893,51039 C 242990,51012 242853,50966 242591,50277 C 242490,50011 242188,49709 241920,49608 C 241652,49506 241351,49277 241252,49099 C 241099,48827 240988,48814 240536,49020 C 238675,49868 236370,47474 237133,45487 C 237491,44554 235278,43469 234503,44197 C 234130,44548 233799,44595 231690,44595 C 230376,44595 228931,44596 228481,44597 C 227914,44599 227550,44476 227300,44200 C 227101,43980 226814,43800 226662,43800 C 226367,43800 225926,43549 224230,42415 C 223642,42022 222922,41576 222630,41425 C 220618,40380 220448,38400 222370,38400 C 222856,38400 223063,38281 223235,37903 C 223622,37053 224362,36714 225900,36681 C 228281,36630 228633,36485 228478,35624 C 228308,34685 228304,34682 227531,34962 C 227168,35093 226681,35200 226448,35200 C 226214,35200 225975,35279 225915,35376 C 225855,35473 225107,35611 224253,35683 C 223399,35755 222160,35938 221500,36090 C 218669,36740 218260,36789 216900,36646 L 215500,36499 L 215518,35636 C 215536,34795 215523,34777 215018,34936 C 213925,35282 211745,35094 211435,34628 C 211279,34392 211034,34200 210890,34200 C 210747,34200 210465,33993 210265,33741 C 209712,33045 209493,32975 208871,33300 C 208557,33464 208184,33598 208043,33599 C 207902,33599 207587,33724 207343,33876 C 206726,34261 205326,34438 204720,34208 C 204298,34047 204105,34106 203571,34555 C 202959,35070 202832,35094 200914,35066 C 199549,35046 198803,35117 198600,35288 C 198225,35602 196696,35983 195900,35960 C 195570,35950 194940,36104 194500,36302 C 193788,36622 192990,36665 187257,36690 C 180907,36717 180807,36724 180344,37159 C 180086,37401 179699,37600 179485,37600 C 179271,37600 178990,37770 178860,37978 C 178724,38196 178301,38403 177862,38466 C 177443,38527 176560,38684 175900,38815 C 175240,38946 173845,39041 172800,39026 C 171755,39010 170376,38999 169736,39001 C 169035,39002 168406,38887 168155,38711 C 167865,38508 167630,38477 167384,38609 C 166961,38835 165066,37989 163150,36719 C 162295,36152 162792,34421 163934,33987 C 164683,33702 164694,33285 163976,32429 C 163426,31775 163241,31671 162875,31810 C 162632,31902 161297,31923 159906,31858 C 157519,31745 157373,31760 157277,32126 C 157167,32549 154165,34213 153529,34205 C 153325,34202 152890,34425 152564,34700 C 152114,35078 151740,35200 151029,35200 C 150512,35200 149903,35330 149675,35490 C 148885,36043 147357,35123 147437,34142 C 147539,32894 144698,32063 143661,33037 C 143226,33445 142987,33476 140047,33504 C 137925,33524 136742,33617 136420,33789 C 136060,33982 135765,33993 135221,33832 C 133949,33458 132870,33396 131772,33637 C 131182,33766 130174,33851 129531,33827 C 128808,33799 128243,33881 128050,34041 C 127846,34210 127109,34301 125919,34303 C 124699,34306 123935,34402 123600,34597 C 123268,34789 122427,34898 121100,34922 C 118604,34966 117285,35157 116984,35519 C 116583,36003 113288,35907 112854,35400 C 112665,35180 112317,35000 112079,35000 C 111821,35000 111434,34720 111116,34303 C 110329,33272 110112,33211 107900,33400 C 106810,33493 105778,33498 105609,33410 C 105439,33322 104805,33336 104200,33442 C 102361,33762 101887,33714 101122,33130 C 100278,32487 96850,32305 94300,32769 C 93530,32909 92495,33072 92000,33131 C 91505,33190 91014,33320 90910,33419 C 90642,33674 89451,33645 89287,33380 C 88932,32805 87731,32584 84851,32562 C 81966,32541 81917,32533 81108,31963 C 80362,31437 80055,31366 77694,31172 C 75961,31030 74991,30862 74770,30667 C 74445,30379 73225,30287 67500,30122 C 65954,30077 65302,29968 64629,29640 C 63846,29259 61921,28889 60000,28750 C 59451,28711 59287,28605 59238,28262 C 59070,27086 57036,26045 55994,26603 C 55735,26742 55184,26736 54257,26585 C 53217,26416 52760,26422 52300,26610 C 51215,27055 49219,27003 48766,26519 C 48400,26128 48361,26123 48177,26450 C 47957,26841 46124,26962 45900,26600 C 45832,26490 45584,26400 45349,26400 C 45114,26400 44563,26153 44125,25850 L 43328,25300 L 39586,25300 C 36389,25300 35790,25252 35472,24969 C 35162,24694 34792,24657 33262,24746 C 31630,24842 31344,24806 30701,24427 C 29567,23758 7765,23755 6915,24424 C 6467,24776 6212,24827 5415,24721 C 4690,24625 4394,24666 4207,24891 C 3942,25211 3468,25313 1350,25508 L 0,25632 L 0,12816 L 0,0 L 384000,0 L 768000,0 L 768000,12476 L 768000,24951 L 767350,25225 C 766877,25424 765724,25494 763124,25484 C 759602,25471 759540,25478 759065,25953 C 758512,26506 756721,26446 756261,25859 C 755910,25410 754277,25270 753845,25652 C 753169,26249 748811,26593 748000,26113 C 746758,25378 746554,25352 745636,25811 C 745077,26090 744393,26246 743732,26245 C 743114,26245 742402,26396 741958,26622 C 741550,26830 741037,27000 740819,27000 C 739603,27000 739535,28520 740700,29669 C 741195,30157 741600,30696 741600,30868 C 741600,31131 741902,31175 743524,31151 C 745062,31128 745494,31185 745677,31435 C 745967,31831 747115,32099 747293,31812 C 747499,31479 747972,31563 748346,32000 C 748535,32220 748844,32400 749033,32400 C 749222,32400 749432,32490 749500,32600 C 749574,32720 750054,32750 750694,32675 C 751644,32563 751795,32597 752031,32975 C 752187,33225 752503,33400 752798,33400 C 753086,33400 753627,33691 754067,34083 C 754489,34458 755101,34876 755427,35011 C 757089,35700 757030,38200 755352,38200 C 755135,38200 754510,38425 753963,38700 C 753415,38975 752651,39200 752265,39200 C 751857,39200 751342,39374 751035,39615 C 750620,39942 750283,40017 749462,39965 C 748643,39914 748362,39976 748159,40254 C 747952,40536 747533,40623 746100,40683 C 745047,40726 743885,40908 743300,41119 C 742464,41422 741640,41483 738271,41491 C 734766,41499 734193,41544 733866,41840 C 733659,42028 733087,42244 732595,42321 C 732103,42397 731485,42627 731223,42830 C 730686,43246 730158,43299 729586,42992 C 729302,42841 728946,42870 728260,43103 C 727706,43291 727030,43376 726611,43309 C 726220,43247 725773,43278 725618,43379 C 725443,43493 725158,43481 724863,43347 C 724515,43188 724327,43193 724155,43365 C 724026,43494 723702,43600 723436,43600 C 723170,43600 722645,43870 722269,44200 C 721894,44530 721387,44801 721143,44801 C 720899,44802 720442,44937 720127,45101 C 719419,45471 719216,45474 718816,45124 C 718164,44553 717659,44554 717126,45128 C 716690,45599 716555,45644 716142,45455 C 715852,45323 715552,45308 715382,45416 C 715227,45514 714735,45595 714288,45597 C 713842,45599 713302,45732 713088,45894 C 712875,46055 712518,46190 712295,46194 C 712071,46197 711672,46352 711408,46537 C 710709,47027 708094,47036 707655,46550 C 707237,46089 706746,46107 706300,46600 C 706101,46820 705738,47000 705493,47000 C 705249,47000 704931,47142 704788,47315 C 704005,48258 702674,48573 701933,47990 C 701536,47678 701322,47628 701038,47780 C 700833,47890 700467,47928 700226,47865 C 699960,47795 699643,47880 699422,48080 C 699029,48436 693047,48926 691964,48691 C 691566,48604 691376,48671 691228,48949 C 691052,49277 690753,49326 688784,49353 C 686642,49381 686514,49407 685981,49918 C 685459,50418 685341,50445 684221,50318 C 683298,50214 682705,50275 681660,50584 C 680225,51007 677596,51049 674181,50701 C 672471,50528 670883,50900 670462,51575 C 670263,51893 670036,51938 668964,51869 C 665477,51647 663877,51727 662964,52169 C 661943,52663 661581,52701 661231,52351 C 661095,52215 660379,52042 659641,51969 C 658904,51895 657895,51744 657400,51634 C 656672,51471 656436,51491 656163,51736 C 655903,51969 655558,52009 654663,51909 C 654023,51837 653029,51781 652454,51784 C 651620,51787 651366,51710 651200,51400 C 651045,51110 650854,51039 650445,51121 C 649967,51217 649828,51117 649329,50329 C 648466,48964 647389,49042 645850,50581 C 644765,51666 644108,51426 644070,49930 C 644035,48516 641996,47324 641117,48203 C 641008,48312 640688,48400 640405,48400 C 638977,48400 638617,49441 639918,49805 C 641020,50114 641399,50704 641024,51528 C 640725,52182 638715,52103 637758,51399 C 637066,50890 636835,50897 636246,51450 C 635558,52095 632192,52050 631486,51387 C 631084,51009 630896,50979 629710,51106 C 628594,51226 628323,51193 627995,50896 C 627629,50564 627544,50563 626553,50871 C 624552,51495 621730,50908 620692,49651 C 620287,49162 617640,49267 616900,49802 C 616556,50050 614125,50768 613600,50776 C 611922,50801 610098,51205 609784,51621 C 609543,51941 609327,52025 608971,51936 C 608620,51847 608420,51922 608242,52207 C 608101,52433 607777,52600 607480,52600 C 607123,52600 606929,52730 606853,53019 C 606779,53304 606217,53690 605103,54221 C 603993,54751 603389,55166 603235,55502 C 603011,55995 601411,56203 600400,55870 z"
+ id="path5926"
+ style="fill:#729fcf;fill-opacity:1;stroke:#729fcf;stroke-width:798.75201416;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="Land">
+ <g
+ transform="matrix(6.1000977e-4,0,0,-6.1064454e-4,-0.24375,234.24376)"
+ id="g6"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+ <path
+ d="M 0,357500 L 0,331000 L 450,331003 C 698,331005 1123,331241 1395,331528 C 2302,332484 2614,332605 3562,332364 C 4142,332217 4565,332211 4861,332345 C 5753,332748 7593,332400 8946,331572 C 9737,331088 10453,330800 10865,330800 C 11227,330800 11698,330668 11912,330506 C 12125,330345 12475,330210 12689,330206 C 12903,330203 13331,329958 13640,329661 L 14202,329123 L 15114,330061 C 15616,330578 16145,331000 16289,331000 C 16433,331000 16662,331133 16797,331296 C 17187,331766 18123,332159 18632,332066 C 19222,331959 20200,332833 20200,333468 C 20200,334118 19827,334400 18967,334400 C 18456,334400 18153,334512 18024,334750 C 17702,335344 16464,335902 16114,335612 C 15785,335338 15400,335484 15400,335881 C 15400,336022 15220,336301 15000,336500 C 14780,336699 14600,336989 14600,337144 C 14600,337829 13575,339587 12801,340231 C 12015,340883 11978,340961 12146,341611 C 12386,342545 13670,342713 14598,341933 C 15276,341362 16765,341139 18800,341302 C 19515,341360 20712,341399 21459,341389 C 23473,341362 24911,342835 24091,344085 C 23791,344544 23805,344567 24641,344969 C 26590,345908 26985,345817 28565,344075 C 29195,343380 38688,343427 39640,344130 C 39991,344388 40420,344600 40594,344600 C 40769,344600 41113,344742 41360,344915 C 41935,345317 46754,345357 47382,344965 C 47709,344761 47843,344777 48155,345059 C 48731,345581 49035,345482 50068,344433 C 51214,343269 51011,342538 49784,343411 C 49176,343844 49135,343848 48572,343515 C 47992,343173 46000,342948 46000,343226 C 46000,343956 44454,344252 44046,343600 C 43903,343371 43580,343200 43290,343200 C 43012,343200 42450,343032 42042,342828 C 41605,342608 40809,342441 40106,342421 C 39227,342396 38801,342283 38493,341993 C 38263,341777 37880,341600 37643,341600 C 37395,341600 37022,341343 36763,340993 C 36451,340571 35990,340292 35247,340076 C 34660,339905 33949,339646 33667,339500 C 33385,339354 32602,339171 31927,339093 C 30657,338947 29600,338397 29600,337881 C 29600,337443 30594,337122 31230,337355 C 31676,337519 31839,337470 32267,337042 C 32639,336670 32967,336541 33496,336561 C 33973,336579 34256,336486 34333,336287 C 34517,335806 35807,335357 36633,335485 C 37482,335617 39059,334755 38955,334215 C 38787,333341 35672,333196 34353,334001 C 33504,334518 33105,334502 31929,333906 C 31157,333514 30778,333438 30078,333534 C 29322,333638 29131,333587 28735,333177 C 28482,332915 28109,332606 27908,332491 C 26940,331940 29604,329452 30707,329875 C 30877,329940 31185,329888 31391,329759 C 31681,329578 31987,329585 32733,329790 C 33655,330043 34680,330093 36367,329966 C 36963,329922 37279,330031 37782,330455 C 38583,331128 38839,331132 39932,330492 C 41386,329640 41053,328763 38975,327977 C 37142,327283 36747,327200 35282,327200 L 33861,327200 L 32803,326121 C 32220,325527 31464,324962 31122,324865 C 29952,324531 30775,322200 32063,322200 C 32230,322200 32723,321795 33158,321300 C 33724,320658 34103,320400 34482,320400 C 34775,320400 35241,320251 35519,320069 C 35990,319761 36073,319761 36719,320069 C 37854,320610 38609,319986 39078,318118 C 39271,317346 40028,317110 41471,317371 C 42306,317523 42913,317521 43589,317365 C 44283,317204 44878,317207 45818,317375 C 47153,317614 47996,317167 47999,316218 C 48001,315768 46256,314291 45028,313703 C 42687,312584 42539,312434 43062,311718 C 43457,311178 44489,311426 45931,312405 C 46672,312908 47328,313199 47721,313200 C 48105,313200 48547,313390 48881,313700 C 49178,313975 49582,314200 49779,314200 C 49977,314200 50291,314369 50478,314576 C 50665,314783 51160,315007 51578,315073 C 51997,315140 52680,315466 53097,315797 C 53586,316186 54084,316400 54501,316400 C 55534,316400 56168,317040 56239,318156 C 56295,319021 56361,319130 57032,319458 C 57435,319655 58018,320150 58327,320558 C 59709,322380 61000,322464 61000,320733 C 61000,319325 64753,318950 66431,320191 C 66735,320416 67028,320600 67083,320600 C 67506,320600 68302,321813 68396,322600 C 68515,323607 68423,323584 70398,323093 C 71272,322875 71982,322535 72575,322049 C 73059,321653 73645,321306 73877,321279 C 74110,321251 74705,321127 75200,321003 C 76868,320584 78091,320460 79891,320526 C 81491,320586 81730,320547 82132,320170 C 82473,319849 82732,319776 83199,319870 C 83545,319939 83980,319891 84189,319761 C 84474,319583 84826,319587 85687,319780 C 86809,320031 86813,320030 87513,319416 C 87898,319077 88335,318800 88482,318800 C 88630,318800 88863,318665 89000,318500 C 89137,318335 89381,318200 89542,318200 C 89704,318200 90000,317998 90200,317750 C 90675,317164 92538,317101 93145,317650 C 93634,318093 94174,318099 94341,317664 C 94426,317444 94320,317230 94035,317040 C 93440,316645 93489,316053 94209,314918 L 94818,313957 L 95726,314093 C 96449,314202 96684,314162 96877,313898 C 97010,313715 97427,313503 97803,313426 C 98373,313310 98509,313177 98621,312627 C 98695,312265 98941,311839 99167,311680 C 99394,311522 99780,311034 100027,310595 C 100355,310010 100664,309745 101187,309600 C 102227,309312 102389,309346 102600,309900 C 102999,310950 105600,309236 105600,307923 C 105600,307203 107050,305747 108117,305394 C 108493,305270 108800,305044 108800,304891 C 108800,304738 109205,304157 109700,303600 C 110195,303043 110600,302507 110600,302409 C 110600,302312 110866,302173 111191,302102 C 111909,301944 112167,301317 111718,300820 C 111080,300115 111300,299200 112107,299200 C 112679,299200 112977,299033 113661,298330 C 114331,297640 114697,297431 115427,297321 C 116847,297108 118908,295088 119075,293747 C 119140,293222 119339,292510 119518,292165 C 119984,291265 120011,285968 119553,285451 C 118983,284806 118688,282901 119068,282321 C 119248,282046 119359,281704 119314,281560 C 118915,280280 119015,278012 119497,277440 C 119774,277111 120000,276665 120000,276448 C 120000,276231 120180,275825 120400,275545 C 120620,275266 120800,274953 120800,274850 C 120800,274747 121477,273955 122304,273090 C 123319,272027 123873,271270 124011,270758 C 124124,270341 124299,270000 124401,270000 C 124504,270000 124714,269757 124870,269460 C 125182,268865 126051,267832 127350,266514 C 127818,266040 128200,265540 128200,265404 C 128200,265230 128403,265194 128872,265282 C 129343,265370 129618,265320 129789,265114 C 129923,264952 130453,264758 130966,264682 C 131488,264605 132150,264336 132465,264072 C 132776,263812 133112,263600 133212,263600 C 133311,263600 133454,263353 133530,263050 C 133740,262206 134556,260768 135002,260456 C 135282,260260 135367,260039 135286,259717 C 135216,259438 135291,259138 135476,258953 C 135643,258785 135840,258410 135913,258119 C 135986,257828 136205,257504 136400,257400 C 136595,257296 136809,256993 136875,256728 C 136942,256462 137335,255958 137748,255608 C 138162,255259 138680,254814 138900,254621 C 139120,254428 139593,254100 139950,253892 C 140628,253498 140758,253048 140373,252431 C 139959,251769 140338,249849 140962,249445 C 141254,249255 141660,248935 141864,248733 C 142123,248476 142389,248404 142746,248494 C 143620,248713 144556,247615 144718,246181 C 144844,245069 145825,243800 146559,243800 C 146659,243800 146984,243575 147281,243300 C 147578,243025 147945,242800 148097,242800 C 148249,242800 148565,242530 148800,242200 C 149227,241600 150225,241355 150491,241785 C 150691,242109 150148,243005 149680,243123 C 149393,243195 149038,243611 148704,244268 C 148415,244836 147813,245705 147366,246200 C 146919,246695 146301,247640 145994,248300 C 145686,248960 145157,249809 144817,250186 C 144478,250563 144200,250992 144200,251138 C 144200,251284 144011,251561 143779,251752 C 143548,251943 143138,252444 142868,252864 C 142597,253285 142112,253721 141788,253834 C 141465,253947 141200,254153 141200,254293 C 141200,254432 141026,254768 140812,255039 C 140599,255310 140363,255778 140287,256080 C 140212,256381 139981,256733 139775,256862 C 138931,257389 139982,259000 141169,259000 C 142060,259000 143000,258132 143000,257309 C 143000,256949 143164,256439 143365,256177 C 143566,255915 144034,255160 144406,254500 C 145059,253340 145642,252724 146488,252296 C 146710,252184 146984,251914 147096,251696 C 147404,251097 148303,250274 149260,249713 C 150343,249078 150916,248306 151138,247183 C 151276,246484 151436,246242 151906,246020 C 152233,245867 152815,245507 153200,245220 C 153585,244934 154339,244475 154876,244200 C 155550,243855 155938,243497 156131,243045 C 156284,242685 156753,242055 157173,241645 C 157593,241235 157993,240668 158063,240385 C 158133,240102 158436,239517 158736,239085 C 159230,238375 159280,238142 159259,236640 C 159240,235209 159290,234947 159619,234742 C 159836,234606 160000,234279 160000,233979 C 160000,233412 161201,232400 161874,232400 C 162067,232400 162444,232141 162710,231825 C 163240,231195 164901,230320 166000,230093 C 166385,230014 166878,229825 167095,229674 C 167311,229524 167747,229400 168063,229400 C 168379,229400 168866,229220 169145,229000 C 169425,228780 169824,228600 170031,228600 C 170239,228600 170799,228240 171277,227800 C 171754,227360 172285,227000 172457,227000 C 172629,227000 173040,226772 173372,226493 C 173825,226111 174104,226018 174498,226117 C 174889,226216 175146,226133 175509,225792 C 176224,225119 178959,224959 179554,225554 C 180886,226886 184761,226235 186000,224471 C 186275,224080 186660,223611 186855,223430 C 187050,223248 187420,222898 187678,222650 C 187935,222403 188227,222200 188327,222200 C 188426,222200 188837,221976 189240,221702 C 189767,221344 190131,221236 190541,221318 C 190960,221402 191208,221323 191486,221016 C 191696,220784 192109,220600 192421,220600 C 192739,220600 193211,220385 193517,220101 C 193997,219657 194170,219617 195112,219727 C 196463,219886 197125,219715 197445,219124 C 197768,218528 200932,215800 201301,215800 C 201754,215800 201854,215412 201529,214915 C 200945,214025 201704,212303 202594,212499 C 202976,212583 203227,212501 203493,212208 C 203696,211983 204025,211800 204224,211800 C 204423,211800 204676,211632 204785,211427 C 204895,211223 205244,210947 205561,210816 C 205887,210681 206260,210299 206419,209939 C 206689,209324 206753,209296 208111,209200 C 209406,209108 209588,209038 210311,208352 C 210745,207940 211259,207603 211453,207602 C 211647,207601 211990,207488 212215,207350 C 212712,207047 213195,207553 213207,208388 C 213242,210833 216022,210680 217266,208164 C 217665,207359 218067,206565 218162,206400 C 219047,204847 219154,204303 218786,203245 C 218611,202744 218636,202530 218921,202096 C 219255,201586 219254,201532 218904,200882 C 218555,200233 218554,200182 218887,199815 C 219429,199216 218513,197600 217631,197600 C 217206,197600 216000,196403 216000,195981 C 216000,195597 215577,195030 214152,193501 C 213401,192696 212959,192033 212875,191585 C 212803,191208 212637,190765 212506,190600 C 211501,189341 211197,187979 211747,187195 C 213035,185357 213098,184486 212010,183555 C 211042,182727 210703,181955 211034,181337 C 211163,181097 211255,180397 211238,179781 L 211207,178662 L 212823,177089 C 213727,176210 214669,175072 214959,174508 C 215245,173954 215586,173434 215716,173353 C 215847,173272 216015,172794 216091,172291 C 216166,171788 216357,171327 216514,171267 C 216693,171198 216800,170871 216800,170390 C 216800,169835 216917,169541 217223,169326 C 217718,168980 218400,167919 218400,167497 C 218400,167335 218580,167091 218800,166954 C 219042,166803 219200,166487 219200,166157 C 219200,165794 219368,165499 219696,165284 C 220434,164801 220985,163796 220862,163159 C 220790,162791 220892,162446 221178,162082 C 221410,161787 221600,161426 221600,161279 C 221600,160623 225067,157577 226111,157315 C 226433,157234 226742,157097 226798,157010 C 226854,156922 227583,156532 228418,156142 C 230649,155101 233600,152651 233600,151840 C 233600,151560 233726,151189 233880,151016 C 234276,150570 234614,149204 234423,148821 C 234335,148645 234288,147524 234317,146331 C 234363,144482 234314,144069 233986,143531 C 233775,143184 233601,142538 233601,142095 C 233600,141651 233456,141084 233281,140833 C 233033,140480 232973,139963 233015,138539 C 233044,137527 232997,136362 232911,135948 C 232803,135430 232834,135100 233009,134889 C 233201,134657 233207,134527 233032,134352 C 232904,134224 232800,133888 232800,133604 C 232800,133321 232614,132930 232387,132736 C 232009,132411 231979,132194 232028,130097 C 232077,127978 232049,127778 231641,127343 C 231398,127085 231197,126700 231193,126487 C 231189,126274 231063,125878 230913,125607 C 230673,125173 230684,125056 231004,124649 C 231291,124285 231347,123961 231264,123142 C 231170,122207 231212,122050 231679,121615 C 232339,121001 232346,120276 231702,119403 C 231421,119022 231149,118310 231077,117767 C 231007,117239 230826,116704 230675,116579 C 230524,116454 230400,116097 230400,115787 C 230400,115477 230303,115163 230183,115090 C 230064,115016 229797,114560 229590,114077 C 229383,113594 228796,112793 228287,112297 C 227407,111442 227366,111354 227474,110548 C 227537,110082 227667,109115 227762,108400 C 227857,107685 228001,106951 228082,106768 C 228181,106543 227997,106124 227512,105468 C 227117,104936 226657,104185 226488,103800 C 226320,103415 226083,102902 225963,102660 C 225800,102333 225807,102065 225993,101617 C 226205,101105 226194,100966 225921,100693 C 225536,100308 225509,99796 225850,99349 C 226166,98935 227112,98695 227290,98984 C 227499,99323 227764,99240 228097,98733 C 228555,98033 228161,97079 227232,96641 C 226435,96265 226275,95915 226091,94151 C 225996,93239 225851,92881 225386,92417 C 224684,91715 224640,91276 225250,91089 C 226494,90706 226710,89713 225699,89024 C 225314,88763 225000,88425 225000,88274 C 225000,88123 224817,88000 224594,88000 C 224127,88000 223848,87472 224153,87167 C 224296,87024 224482,87082 224751,87351 C 225240,87840 226200,88111 226200,87761 C 226200,87626 225953,87318 225651,87077 C 225111,86646 225108,86633 225478,86225 C 225945,85708 225836,84117 225306,83729 C 224689,83278 224973,82288 225700,82355 C 226373,82417 227664,80277 227841,78805 C 227874,78527 228103,78209 228364,78080 C 229203,77663 229501,77043 229085,76583 C 228846,76319 228796,76124 228931,75989 C 229192,75728 229800,75960 229800,76321 C 229800,76616 230042,76691 230267,76466 C 230341,76393 230255,76171 230076,75974 C 229599,75447 229865,74997 230644,75013 C 232292,75048 233401,74766 233522,74283 C 233710,73534 234140,73284 234569,73672 C 235093,74146 235365,74077 235437,73450 C 235523,72702 236383,72584 236990,73236 C 237261,73527 237470,73617 237559,73483 C 238048,72747 241251,72613 241570,73314 C 241748,73705 241884,73751 242588,73656 C 243641,73515 243726,74059 242716,74481 C 242339,74638 241880,74997 241696,75278 C 241491,75591 241096,75839 240677,75917 C 239894,76064 238901,76909 238609,77677 C 238488,77995 238257,78200 238019,78200 C 237443,78200 237037,78702 237147,79278 C 237207,79592 237085,79999 236821,80370 C 236335,81053 236269,81907 236690,82068 C 236849,82129 237075,82522 237192,82940 C 237363,83546 237575,83781 238242,84100 C 238898,84414 239216,84758 239714,85694 C 240211,86627 240483,86922 240960,87046 C 242727,87504 244166,90003 242850,90328 C 242548,90403 241985,90674 241600,90932 C 241215,91189 240563,91626 240150,91902 C 238956,92704 239096,93258 240673,93973 C 241373,94291 242008,94651 242085,94775 C 242161,94899 242614,95000 243091,95000 C 244168,95000 245320,95920 245134,96631 C 245055,96933 245166,97173 245511,97444 C 245795,97668 246000,98037 246000,98326 C 246000,98734 246192,98907 247082,99300 C 248757,100041 248814,100667 247275,101412 C 246138,101963 245810,102580 246276,103292 C 246715,103961 247611,103965 248482,103300 C 249433,102575 249993,102654 250960,103650 C 251413,104118 251923,104616 252092,104758 C 252445,105054 252495,105849 252195,106409 C 251753,107236 252323,107597 254098,107613 C 255596,107627 256988,107689 257537,107767 C 257667,107785 257832,107984 257903,108210 C 258016,108565 258143,108603 258867,108495 C 260180,108299 260795,108673 262785,110880 C 263755,111956 263908,113534 263113,114270 C 262712,114642 262569,114981 262540,115633 L 262500,116500 L 265400,116502 C 268552,116503 269611,116877 269917,118096 C 269978,118340 270308,118666 270649,118820 C 270991,118974 271367,119267 271485,119471 C 271603,119675 271937,120101 272228,120418 C 272518,120735 272810,121212 272877,121478 C 273083,122299 274364,124068 275061,124495 C 276160,125167 276729,125684 277059,126307 C 277232,126633 277997,127548 278759,128340 C 279870,129493 280172,129943 280276,130598 C 280352,131071 280542,131467 280728,131538 C 280995,131641 281028,131871 280923,132894 C 280765,134428 281051,136003 281641,136851 C 282323,137834 283250,138800 283511,138800 C 283639,138800 284153,139160 284653,139600 C 285357,140220 285725,140400 286289,140400 C 286689,140400 287283,140580 287608,140800 C 287934,141020 288451,141369 288759,141576 C 289419,142019 291098,142313 292500,142231 C 293619,142166 296400,143731 296400,144426 C 296400,144608 296535,144809 296700,144872 C 296865,144936 297000,145201 297000,145463 C 297000,145724 297180,146101 297400,146300 C 297620,146499 297800,146823 297800,147019 C 297800,147216 297885,147429 297989,147493 C 298264,147663 299400,149383 299400,149628 C 299400,149742 299603,150000 299850,150200 C 300125,150423 300310,150805 300325,151182 C 300339,151522 300361,152115 300375,152500 C 300391,152951 300499,153200 300677,153200 C 301041,153200 301187,153812 301056,154786 C 300975,155395 301047,155697 301375,156114 C 301870,156743 301930,157644 301500,158000 C 301119,158316 301115,158880 301491,159192 C 301707,159372 301771,159833 301741,160980 C 301701,162482 301719,162546 302350,163179 C 302708,163537 303000,163919 303000,164026 C 303000,164133 303270,164315 303600,164430 C 304070,164594 304200,164758 304200,165189 C 304200,165491 304378,165899 304595,166095 C 304812,166292 305182,166851 305418,167337 C 305653,167823 306083,168374 306373,168560 C 307070,169010 309000,170906 309000,171142 C 309000,171244 309225,171524 309500,171763 C 309817,172038 310000,172408 310000,172774 C 310000,173091 310125,173455 310278,173582 C 310828,174038 310885,175587 310377,176273 C 310050,176716 309917,177179 309906,177919 C 309879,179687 308335,181393 307023,181105 C 306697,181033 306237,181109 305888,181291 C 305564,181460 305139,181598 304941,181599 C 304744,181599 304069,182112 303441,182738 C 302814,183365 301895,184091 301400,184352 C 300905,184613 300383,184978 300241,185163 C 300028,185441 299616,185500 297909,185500 C 296072,185500 295766,185551 295226,185950 C 294711,186330 294363,186400 292990,186400 C 291668,186400 291264,186476 290832,186803 C 290539,187025 290120,187341 289900,187505 C 289680,187669 289217,188028 288871,188302 C 288525,188576 288044,188800 287803,188800 C 287561,188800 287134,188980 286855,189200 C 286575,189420 286147,189600 285904,189600 C 285661,189600 285296,189783 285094,190007 C 284776,190358 284506,190409 283134,190380 C 281741,190350 281502,190397 281221,190758 C 281019,191018 280554,191221 279967,191305 C 278340,191541 277377,193062 278308,193925 C 278869,194445 278720,195154 278009,195340 C 277452,195485 276200,197115 276200,197694 C 276200,197979 276065,198264 275900,198328 C 275716,198398 275600,198701 275600,199109 C 275600,199914 273612,202200 272911,202200 C 272671,202200 272411,202391 272297,202650 C 272185,202906 271884,203129 271600,203168 C 271325,203205 270916,203405 270692,203613 C 270438,203848 270022,203981 269591,203965 C 268961,203941 268094,204150 266841,204626 C 266065,204920 265212,204821 264594,204364 L 264003,203927 L 263539,204364 C 263283,204604 262934,204800 262762,204800 C 262590,204800 262342,204929 262211,205087 C 262080,205245 261731,205429 261436,205496 C 260702,205663 259640,206664 259478,207342 C 259242,208332 257313,209600 256044,209600 C 254898,209600 254431,210583 254351,213162 C 254320,214166 254217,214800 254085,214800 C 253770,214800 253051,213964 252968,213500 C 252860,212899 252062,212875 251523,213456 C 249850,215261 246800,215417 246800,213697 L 246800,213269 L 244750,213753 C 242165,214364 240590,214516 240019,214210 C 239642,214009 239503,214054 239001,214538 C 236558,216900 234812,217461 233580,216281 C 232812,215545 232201,215758 232197,216763 C 232193,217616 232069,217851 231450,218177 C 231001,218413 230200,218194 230200,217834 C 230200,217437 228595,216000 228152,216000 C 227885,216000 227472,215770 227222,215482 C 226801,214998 226693,214973 225599,215100 C 224231,215259 223218,214501 223206,213311 C 223198,212483 222295,211253 221581,211096 C 221262,211026 220888,210812 220750,210621 C 220222,209888 219138,210011 218411,210887 C 218268,211059 217983,211200 217777,211200 C 217572,211200 217291,211380 217154,211600 C 216812,212146 215037,212144 213828,211596 C 213349,211378 212758,211200 212516,211200 C 212274,211200 211902,211068 211688,210906 C 210866,210284 210147,210554 208445,212124 C 207925,212604 207439,212997 207364,212998 C 206564,213010 205515,216304 206018,217222 C 206284,217707 206526,219232 206715,221609 C 206825,222988 205898,224800 205083,224800 C 204918,224800 204540,224979 204242,225198 C 203757,225554 203342,225601 200300,225637 C 196394,225684 195247,226160 196511,227209 C 197117,227712 197230,228162 196906,228788 C 196403,229761 196688,231280 197557,232257 C 197764,232489 197858,232919 197829,233491 C 197793,234170 197881,234460 198215,234771 C 199556,236021 198485,238400 196581,238400 C 195820,238400 195548,238311 195354,238000 C 195151,237676 194887,237600 193964,237600 C 193337,237600 192762,237501 192687,237380 C 192612,237258 192259,237037 191902,236888 C 191239,236611 190871,235768 191126,235105 C 191189,234941 191029,234547 190770,234231 C 190512,233914 190165,233452 190000,233203 C 189190,231980 189117,231937 187782,231900 C 187077,231881 186185,231724 185800,231552 C 184394,230924 182576,230891 181938,231482 C 181631,231767 181167,232000 180908,232000 C 180349,232000 178670,233882 178759,234408 C 178790,234593 178587,234893 178308,235076 C 178029,235259 177800,235534 177800,235687 C 177800,236022 176791,237600 176577,237600 C 176493,237600 176365,238000 176291,238488 C 176218,238976 175988,239530 175779,239719 C 175290,240161 175298,240708 175803,241349 C 176181,241830 176185,241885 175872,242231 C 175561,242574 175561,242625 175869,242966 C 176081,243200 176200,243679 176200,244297 C 176200,245011 176326,245428 176686,245899 C 177149,246507 177164,246617 177012,248291 C 176839,250185 177050,251372 177590,251540 C 178364,251781 178825,252112 179246,252730 C 179496,253097 179864,253398 180064,253399 C 180264,253399 180996,253805 181690,254300 C 183047,255269 183542,255365 185199,254983 C 186005,254797 186131,254819 186431,255188 C 186961,255844 188772,255442 189754,254450 C 190243,253957 190508,253889 190705,254208 C 190776,254323 191010,254360 191226,254292 C 191761,254122 192222,254543 192087,255079 C 191940,255667 193072,256115 193906,255798 C 194376,255619 194533,255655 194934,256031 C 195557,256617 199748,256690 200371,256126 C 200569,255947 201052,255800 201443,255800 C 201981,255800 202234,255678 202482,255300 C 202891,254675 203609,254649 204542,255226 L 205231,255652 L 205808,255226 C 206125,254992 206470,254800 206576,254800 C 207080,254800 207668,253365 207431,252711 C 207118,251845 207140,251066 207481,250935 C 207636,250876 207821,250560 207892,250234 C 207964,249908 208198,249483 208411,249290 C 208625,249096 208800,248852 208800,248748 C 208800,248643 209003,248310 209250,248007 C 209498,247704 209835,247259 210000,247019 C 210525,246253 211513,245790 212148,246012 C 213556,246503 214471,248845 213502,249480 C 213134,249721 213015,249934 213100,250200 C 213166,250408 213036,250937 212810,251381 C 212584,251823 212399,252300 212398,252442 C 212397,252584 212175,253150 211904,253700 C 211634,254250 211410,254980 211406,255323 C 211403,255666 211209,256189 210975,256486 C 210572,256998 210567,257063 210864,257763 C 211036,258168 211227,258680 211288,258900 C 211440,259449 213238,261400 213592,261400 C 213998,261400 215381,262380 216069,263155 C 216449,263584 216770,263773 216995,263702 C 217197,263637 217536,263782 217819,264054 C 218084,264307 218525,264627 218800,264765 C 221972,266356 222988,267803 222410,269911 C 221817,272072 221848,272324 222731,272533 C 223512,272718 224237,273491 224277,274181 C 224289,274408 224863,275173 225550,275880 C 226348,276701 226802,277334 226805,277633 C 226811,278159 227937,278800 228858,278800 C 229147,278800 229565,278994 229786,279231 C 230171,279644 231293,279850 233033,279826 C 233886,279814 234825,281849 234097,282129 C 233138,282497 234325,284400 235513,284400 C 235672,284400 235998,284625 236237,284900 C 236476,285175 236777,285400 236905,285400 C 237034,285400 237355,285588 237619,285817 C 237996,286144 238263,286209 238850,286115 C 239521,286008 239713,286087 240675,286871 C 242405,288280 245243,288353 243600,286946 C 243050,286476 243042,285099 243587,284807 C 244569,284281 246444,285154 247465,286611 C 247727,286985 247978,287045 249405,287078 C 250691,287107 251097,287189 251294,287458 C 251434,287650 251809,287800 252147,287800 C 254041,287800 256707,290204 255890,291175 C 255411,291745 254600,292034 254600,291636 C 254600,290678 251669,290113 250796,290903 C 250515,291158 250216,291222 249700,291139 C 248957,291018 247172,291756 246656,292397 C 246319,292817 246341,293872 246707,294747 C 247641,296982 244104,298914 242400,297100 C 241635,296285 241000,296421 241000,297400 C 241000,298079 241063,298200 241419,298200 C 241650,298200 242078,298371 242371,298579 C 243020,299042 246290,299130 246800,298698 C 246965,298559 247415,298378 247800,298297 C 248185,298215 248678,298025 248895,297874 C 249111,297724 249726,297600 250260,297600 L 251232,297600 L 251100,298200 C 250943,298915 250708,298868 254200,298811 L 256900,298766 L 257750,299426 C 258218,299789 258600,300156 258600,300243 C 258600,300329 258829,300400 259110,300400 C 259396,300400 259822,300619 260082,300900 C 260675,301539 261328,301536 261927,300890 C 262555,300212 262526,300058 261707,299716 C 261226,299515 260973,299254 260878,298863 C 260730,298253 260164,297348 259511,296679 C 259285,296448 258766,295901 258359,295465 L 257617,294671 L 258129,293951 L 258642,293231 L 261771,293222 L 264900,293213 L 265521,292507 C 266252,291676 266226,291680 267342,292220 C 268438,292751 269035,292612 269573,291701 C 269800,291316 270112,291000 270266,291000 C 270655,291000 271600,291773 271600,292090 C 271600,292234 271803,292487 272050,292653 L 272500,292955 L 272078,293531 C 271846,293848 271595,294300 271520,294536 C 271446,294771 271253,295073 271092,295206 C 270932,295340 270800,295609 270800,295805 C 270800,296468 269594,297600 268888,297600 C 268536,297600 268137,297735 268000,297900 C 267840,298093 267397,298200 266762,298200 C 264978,298200 264316,299333 265500,300363 C 266081,300868 266103,300988 265706,301512 C 265328,302012 265328,303388 265706,303888 C 266273,304637 264567,307200 263503,307200 C 263221,307200 262599,307625 261885,308306 C 260725,309412 260069,309746 259494,309526 C 259096,309373 256630,310302 256091,310808 C 255862,311024 255542,311200 255380,311200 C 254947,311200 253861,312710 253708,313526 C 253600,314101 252958,314842 250251,317516 C 246561,321160 246279,321314 245391,320165 C 244436,318931 242921,317600 242470,317600 C 242224,317600 241899,317424 241748,317208 C 241276,316534 239994,316465 239415,317083 C 239148,317367 238770,317600 238573,317600 C 237385,317600 235800,319434 235800,320808 C 235800,321658 234792,322400 233638,322400 C 232713,322400 232449,322476 232246,322800 C 232109,323020 231912,323200 231808,323200 C 231577,323200 229855,324349 229693,324611 C 229629,324715 229315,324800 228995,324800 C 228619,324800 228339,324941 228200,325200 C 227897,325766 226338,325766 225854,325200 C 225417,324690 225105,324695 224581,325219 C 224200,325600 224021,325626 222604,325500 C 221553,325407 221003,325434 220912,325581 C 220588,326104 219057,325826 218293,325107 L 217558,324413 L 217698,323021 C 217797,322033 217949,321527 218219,321283 C 218830,320730 218722,319714 217997,319198 C 216502,318133 216913,316848 219148,315602 C 219614,315342 220054,314944 220126,314718 C 220198,314492 220436,314065 220656,313767 C 221120,313139 221020,312120 220449,311664 C 219740,311097 218601,310400 218386,310400 C 218263,310400 217933,310219 217651,309998 C 217370,309776 216795,309540 216374,309473 C 215033,309258 214625,307292 215636,305914 C 217038,304002 215631,301547 213447,302095 C 212907,302231 211409,303389 211404,303676 C 211402,303773 211018,304234 210550,304701 C 208973,306278 208987,306252 209125,307253 C 209416,309379 208045,310326 204600,310376 C 203047,310399 202601,310477 202158,310802 C 201793,311070 201300,311200 200646,311200 C 200103,311200 199506,311329 199288,311494 C 199075,311655 198710,311790 198477,311794 C 198244,311797 197839,311967 197577,312172 C 196572,312956 194468,313825 193911,313685 C 193511,313585 193279,313655 192992,313962 C 192549,314438 191107,314713 190150,314503 C 188400,314120 186800,314757 186800,315837 C 186800,316547 185574,317552 184267,317915 C 182640,318365 181967,319151 182473,320009 C 182653,320313 182800,320673 182800,320808 C 182800,321363 186786,325590 187314,325595 C 187938,325602 189671,326213 189912,326512 C 190029,326656 190374,326836 190678,326912 C 190983,326989 191326,327259 191442,327512 C 191739,328165 192424,328365 194633,328446 L 196566,328517 L 197591,329509 C 198154,330054 198667,330705 198731,330955 C 198866,331488 199366,331800 200087,331800 C 200661,331800 200770,331390 200300,331000 C 200135,330863 200000,330596 200000,330406 C 200000,330216 199816,329849 199590,329589 C 198879,328768 199115,327734 200049,327584 C 200461,327518 200956,327326 201149,327158 C 201462,326886 202353,326591 202900,326580 C 203624,326564 204761,327076 205410,327710 C 206292,328571 208420,328806 209172,328125 C 209370,327946 209609,327800 209705,327800 C 209800,327800 210137,327553 210453,327250 L 211028,326700 L 211608,327400 C 212426,328385 212195,328979 210988,328994 C 209650,329010 209093,330602 210287,330996 C 210832,331176 211084,331179 211289,331009 C 211461,330866 211924,330828 212532,330906 C 213064,330974 214040,330942 214700,330834 C 215657,330679 215964,330696 216216,330919 C 216783,331424 217302,331242 217978,330301 C 218364,329763 218840,329350 219162,329273 C 219458,329203 219803,329064 219929,328966 C 220168,328778 221414,329249 222038,329763 C 222329,330002 222468,329996 223019,329720 C 223822,329320 225199,329306 225712,329694 C 226257,330106 226875,330069 227300,329600 C 227499,329380 227821,329200 228016,329200 C 228210,329200 228782,328885 229286,328500 C 229791,328115 230376,327800 230586,327800 C 230797,327800 231273,327445 231645,327010 C 232463,326054 233167,325758 234222,325927 C 234969,326046 235619,325855 236800,325167 C 239232,323750 242808,324685 240788,326209 C 240541,326395 240405,326647 240483,326773 C 240713,327145 241369,327031 241612,326577 C 241798,326230 241964,326174 242536,326267 C 242920,326329 243721,326290 244316,326180 C 245366,325986 245422,325999 246194,326619 L 246989,327258 L 246644,327854 C 246455,328183 245993,328687 245618,328976 C 245243,329264 244568,329825 244118,330223 C 243668,330620 242873,331133 242350,331362 C 241704,331644 241400,331897 241400,332151 C 241400,332667 242173,333453 242541,333312 C 243066,333110 243975,332313 244107,331937 C 244299,331392 245403,330200 245716,330200 C 245866,330200 246125,329937 246291,329617 C 246689,328849 247682,328527 249700,328512 C 251425,328499 251722,328623 253629,330151 C 254075,330510 254679,330859 254971,330927 C 255745,331108 256770,332152 257337,333336 L 257833,334371 L 257388,334973 C 257002,335496 256945,335815 256957,337389 L 256971,339202 L 256235,339909 C 255831,340298 255259,340667 254964,340730 C 254669,340793 254219,341067 253964,341340 L 253500,341835 L 254050,342275 C 255206,343200 253459,345600 251629,345600 C 251477,345600 250834,345915 250200,346300 C 248877,347103 248500,347160 248200,346600 C 248082,346380 247857,346200 247700,346200 C 247542,346200 247095,346048 246706,345863 C 246034,345542 245985,345543 245730,345893 C 245440,346290 245000,346162 245000,345681 C 245000,345284 243057,345515 242530,345975 C 242185,346277 242130,346259 241691,345709 C 241228,345128 241214,345125 240806,345494 C 240400,345862 240380,345861 239804,345435 C 239132,344937 238940,344909 238424,345231 C 238148,345403 237574,345408 236172,345249 C 234813,345094 234013,345096 233295,345256 C 232748,345378 231805,345461 231200,345441 C 230277,345410 230047,345475 229769,345843 C 229506,346190 229215,346287 228369,346308 C 227781,346323 227045,346440 226734,346569 C 226187,346794 225424,346852 223286,346827 C 222245,346815 221960,346991 220750,348394 C 220145,349096 218880,348704 219021,347858 C 219089,347448 218980,347189 218788,347307 C 218671,347380 218630,347682 218697,347984 C 218763,348285 218720,348785 218601,349096 L 218386,349662 L 215562,349533 C 213462,349438 212651,349327 212403,349102 C 211940,348684 211543,348724 211233,349222 C 211036,349537 210834,349617 210435,349537 C 210141,349479 209744,349545 209554,349684 C 209311,349863 208927,349892 208254,349781 C 207729,349695 206799,349618 206186,349612 C 205256,349602 205001,349518 204638,349101 C 204226,348626 204167,348615 203452,348872 C 202062,349372 201274,349600 200933,349600 C 200747,349600 200426,349705 200220,349834 C 199528,350266 195891,349689 195019,349008 C 193658,347945 191400,348116 191400,349281 C 191400,350658 193328,351035 200038,350969 C 205144,350920 205606,350944 205975,351277 C 206309,351580 206484,351604 207037,351428 C 208511,350957 211062,350920 212045,351355 C 213616,352050 213593,353761 212016,353510 C 210896,353331 210576,353664 211233,354322 C 211819,354910 213920,355082 214511,354591 C 214727,354412 214992,354457 215684,354792 C 216362,355121 216671,355176 216961,355021 C 217261,354860 217488,354922 218011,355308 C 218378,355579 218766,355800 218873,355800 C 218981,355800 219234,355950 219436,356132 C 219846,356504 220398,356835 221326,357268 C 221670,357428 222012,357658 222087,357780 C 222162,357901 222383,358000 222577,358000 C 222771,358000 223142,358225 223400,358500 C 223972,359109 224192,359121 224882,358579 C 225435,358144 225656,358144 227300,358579 C 228892,359000 230233,358858 230880,358198 C 231215,357856 231763,357556 232180,357486 C 233421,357278 233561,357199 233773,356592 C 234001,355938 234584,355799 235000,356300 C 235375,356752 235662,356663 236054,355976 C 236319,355511 236509,355382 236816,355462 C 237102,355537 237385,355388 237762,354965 C 238579,354048 238880,353948 239460,354404 C 239737,354622 240151,354800 240382,354800 C 240819,354800 240944,354513 240600,354300 C 240490,354232 240400,354047 240400,353888 C 240400,353422 242034,353512 242672,354014 C 243034,354299 243336,354384 243640,354287 C 244286,354082 247842,354042 248236,354235 C 248569,354397 249200,353981 249200,353598 C 249200,353212 250830,353451 251385,353918 C 251862,354319 252041,354360 252605,354199 C 252969,354094 253481,354063 253744,354129 C 254079,354213 254363,354117 254692,353807 C 255025,353495 255360,353383 255838,353424 C 256237,353459 256715,353342 257002,353141 C 257270,352954 257831,352800 258249,352800 C 258854,352800 259045,352707 259183,352350 C 259278,352103 259693,351630 260104,351300 C 260516,350970 261156,350401 261526,350036 C 262005,349564 262312,349409 262591,349497 C 262861,349583 263063,349493 263240,349211 C 263388,348973 263708,348800 264001,348800 C 264325,348800 264576,348645 264703,348364 C 264811,348124 265170,347832 265500,347714 C 266527,347348 267194,346779 267362,346127 C 267490,345628 267643,345487 268112,345434 C 268435,345398 268886,345195 269113,344984 C 269607,344525 270801,344437 271849,344783 C 272721,345071 273000,344954 273000,344300 C 273000,343715 273322,343486 273701,343801 C 274017,344063 275400,343726 275400,343386 C 275400,343286 275657,342955 275972,342652 C 276287,342348 276694,341808 276876,341452 C 277059,341095 277431,340658 277704,340479 C 278354,340053 278333,339816 277650,339862 C 277150,339897 277104,339843 277148,339271 C 277209,338470 277033,338406 274738,338381 C 273281,338365 272799,338284 272373,337981 C 272079,337771 271756,337600 271657,337600 C 270936,337600 270364,336424 270473,335169 C 270534,334471 270592,333724 270601,333509 C 270630,332873 270980,332606 271617,332733 C 272127,332835 272202,332791 272216,332375 C 272225,332114 272446,331540 272708,331100 C 272969,330660 273359,329929 273573,329476 C 273840,328913 274131,328610 274494,328519 C 274815,328439 275119,328163 275263,327822 C 275538,327169 276615,326200 277067,326200 C 277238,326200 277961,325705 278674,325100 C 279387,324495 280095,324000 280248,324000 C 280400,324000 280790,323723 281113,323384 C 282117,322331 283620,321736 284607,322002 C 285523,322249 285882,322099 287051,320982 C 287385,320662 287815,320400 288005,320400 C 288195,320400 288458,320271 288589,320113 C 288955,319673 289882,319549 290785,319819 C 291429,320012 291774,320011 292429,319815 C 293791,319407 294517,320283 294452,322255 C 294385,324296 294740,325589 295477,325986 C 295797,326159 296201,326458 296374,326650 C 296547,326843 296781,327004 296894,327009 C 297125,327020 298519,328926 298465,329158 C 298446,329240 298369,329553 298294,329854 C 298195,330248 298232,330400 298428,330401 C 298578,330402 298940,330528 299234,330681 C 299527,330834 300157,331024 300634,331102 C 301110,331181 301590,331317 301700,331404 C 301810,331491 303065,331652 304488,331762 C 306463,331914 307132,332037 307310,332280 C 307439,332456 307626,332600 307725,332600 C 307825,332600 308220,332768 308604,332974 C 308988,333180 309686,333413 310155,333492 C 310624,333572 311135,333763 311290,333918 C 311445,334073 311833,334200 312154,334200 C 312570,334200 312797,334333 312949,334668 C 313067,334926 313486,335290 313881,335478 C 314277,335665 314600,335901 314600,336002 C 314600,336103 314889,336515 315243,336918 L 315885,337650 L 317193,337505 C 317912,337425 318680,337372 318900,337386 C 319120,337400 320078,337432 321029,337456 C 322351,337490 322849,337582 323145,337850 C 323413,338093 323864,338200 324621,338200 C 325328,338200 325884,338321 326202,338544 C 326472,338733 327144,338910 327696,338938 C 330755,339092 331048,339136 331233,339466 C 331336,339650 331601,339800 331823,339800 C 333886,339800 332971,341873 330665,342424 C 330134,342551 329581,342687 329435,342727 C 328927,342865 329298,343474 330000,343655 C 330385,343755 330800,343918 330922,344019 C 331247,344287 332787,343547 333651,342708 C 334618,341769 336056,341819 337132,342830 C 337813,343470 337723,343929 336825,344387 C 335627,344998 335439,345893 336394,346437 C 337225,346909 337404,347742 336779,348223 C 336256,348625 335495,348716 335300,348400 C 335232,348290 334777,348200 334288,348200 C 333675,348200 333280,348080 333011,347811 C 332797,347597 332280,347362 331861,347289 C 331443,347215 330901,347030 330657,346878 C 330169,346572 329400,346504 329400,346768 C 329400,346860 329890,347175 330489,347468 C 331087,347761 331633,348091 331700,348201 C 331768,348310 332088,348400 332412,348400 C 332735,348400 333180,348580 333400,348800 C 334003,349403 337509,349403 337700,348800 C 337834,348377 338292,348263 338500,348600 C 338568,348710 338900,348800 339239,348800 C 340416,348800 342316,351049 342487,352646 L 342625,353934 L 341729,354617 C 340093,355864 340358,356956 342215,356620 C 344179,356265 344095,356257 344160,356816 C 344274,357795 343605,358298 342233,358267 C 341057,358240 341020,358255 340813,358849 C 340507,359728 340548,360000 340988,360000 C 341202,360000 341435,360096 341508,360212 C 341580,360329 341855,360507 342119,360607 C 342740,360843 342843,362527 342250,362736 C 342058,362804 341585,362993 341200,363156 L 340500,363454 L 341284,363631 C 343385,364106 343047,365600 340838,365600 C 339281,365600 338590,365398 338351,364872 C 338133,364394 337275,364230 336516,364521 C 336017,364713 336081,366430 336600,366754 C 337107,367070 337112,367637 336611,368090 C 336397,368283 336195,368635 336161,368871 C 336102,369284 336019,369298 333867,369242 C 332476,369207 331585,369263 331505,369392 C 331341,369658 330288,369661 329795,369397 C 329378,369174 329168,369428 328924,370450 L 328792,371000 L 330869,371000 C 332643,371000 333020,371058 333455,371400 C 334092,371901 334299,371901 334802,371398 C 335207,370993 338541,370946 340515,371316 C 340951,371398 341341,371308 341818,371017 C 342329,370706 342836,370601 343838,370601 C 344574,370600 345232,370510 345300,370400 C 345368,370290 345742,370200 346130,370200 C 346534,370200 347055,370029 347345,369800 C 347676,369540 348157,369400 348717,369400 C 349198,369400 349651,369287 349740,369146 C 350051,368651 350921,368473 352700,368542 C 353690,368580 354703,368610 354950,368609 C 355927,368605 356381,368611 358546,368655 C 360641,368697 360813,368731 361116,369163 C 361295,369418 361566,369579 361717,369521 C 361869,369463 362366,369547 362822,369708 C 363780,370046 364600,370088 364600,369800 C 364600,369690 364372,369600 364094,369600 C 363518,369600 363199,369050 363621,368783 C 364061,368504 364988,368570 365584,368922 C 366241,369310 367257,368890 368606,367671 L 369394,366959 L 372047,367000 C 376611,367070 382479,366787 382653,366487 C 382770,366286 383725,366218 386753,366199 C 392993,366157 393850,366195 394367,366529 C 394838,366834 395503,366827 398657,366487 C 399381,366409 399912,366444 400077,366581 C 400255,366728 402499,366803 407009,366811 C 412766,366821 413752,366867 414223,367145 C 414713,367435 414814,367437 415234,367162 C 415636,366898 417019,366857 425300,366864 C 433853,366871 434969,366836 435530,366541 C 436065,366260 436855,366212 440761,366220 C 443291,366226 445758,366171 446245,366098 C 446731,366025 447482,366060 447914,366175 C 448416,366309 448987,366319 449494,366203 C 450158,366052 450402,366092 450976,366447 C 451663,366872 451676,366872 466905,366826 C 482661,366779 483787,366828 484190,367581 C 484347,367875 484822,367902 488633,367832 C 493804,367736 493371,367732 495200,367902 C 496025,367979 499715,368075 503400,368114 C 508711,368171 510266,368248 510900,368484 C 511829,368830 512639,368881 512910,368610 C 513030,368490 513992,368486 515496,368600 C 517556,368755 517938,368737 518235,368468 C 518518,368212 519230,368151 522207,368128 L 525835,368100 L 526437,367350 C 526768,366938 527163,366600 527315,366600 C 527467,366600 527736,366379 527913,366108 C 528091,365837 528430,365557 528668,365485 C 528906,365413 529298,365173 529539,364953 C 529850,364668 530127,364588 530487,364679 C 530766,364749 531167,364699 531378,364567 C 531684,364376 531855,364390 532233,364637 C 532625,364895 532920,364912 533982,364741 C 534906,364592 535428,364598 535865,364763 C 536221,364898 536558,364919 536685,364815 C 536974,364577 539370,364590 539518,364830 C 539589,364944 539748,364926 539918,364785 C 540083,364648 540458,364602 540817,364673 C 541156,364741 541603,364705 541812,364594 C 542078,364451 542306,364463 542579,364633 C 542872,364816 543035,364820 543244,364646 C 543631,364326 544323,364552 544695,365121 C 545091,365725 545540,365730 546008,365136 C 546452,364570 548866,364474 549495,364996 C 549693,365160 550344,365309 550974,365335 C 551593,365361 552505,365532 553000,365716 C 554027,366098 556738,366225 563300,366197 C 565610,366187 567590,366186 567700,366194 C 567810,366202 568530,366206 569300,366203 C 570070,366199 571015,366203 571400,366212 C 574742,366285 575534,366332 575760,366474 C 575907,366566 576298,366514 576660,366355 C 577187,366123 578062,366103 581600,366243 C 587032,366458 592033,366290 592260,365885 C 592348,365728 592697,365600 593036,365600 C 593374,365600 594138,365322 594732,364981 C 595757,364395 595839,364380 596300,364681 C 597037,365165 597519,365080 597793,364418 L 598034,363835 L 599667,363907 C 601694,363995 604709,364355 605477,364601 C 605842,364718 606190,364712 606427,364586 C 606684,364448 606936,364459 607238,364620 C 607695,364865 611233,364557 612100,364197 C 612789,363911 614117,363838 614517,364063 C 616402,365128 620294,364222 620095,362766 C 619941,361643 620293,361317 621900,361090 C 623098,360921 623406,360775 624676,359771 C 625213,359347 625779,359000 625933,359000 C 626088,359000 626454,358843 626748,358650 C 627141,358393 627693,358300 628834,358300 C 630223,358300 630410,358254 630619,357865 C 630906,357329 631668,357115 632227,357414 C 632460,357539 632925,357581 633273,357508 C 634259,357302 636378,357021 637800,356907 C 640198,356714 640690,356592 641392,356013 C 641997,355513 642058,355383 641876,354971 C 641320,353707 643349,352583 643997,353795 C 644159,354096 644397,354203 644860,354180 C 645541,354148 646595,354386 647900,354868 C 648537,355103 649188,355132 651100,355011 C 652420,354928 653681,354926 653902,355006 C 654123,355087 654944,355108 655726,355052 C 656999,354961 657216,355000 657791,355425 C 658776,356153 663434,356149 664024,355420 C 664389,354969 664427,354962 664788,355289 C 665021,355500 665577,355655 666233,355692 C 666820,355725 667619,355816 668009,355895 C 668645,356024 668743,355985 668957,355515 L 669196,354991 L 671913,355039 C 673407,355065 674674,355157 674727,355243 C 674986,355662 675621,355257 677134,353705 C 678044,352773 679009,351955 679279,351887 C 679549,351820 679926,351592 680116,351382 C 680589,350860 681237,350903 681881,351500 C 682709,352268 684652,352045 684217,351233 C 683611,350099 684127,348600 685124,348600 C 685592,348600 685800,348507 685800,348300 C 685800,347932 685555,347965 688848,347888 L 691597,347823 L 692698,348873 C 693903,350022 693992,350340 693417,351467 C 692857,352564 692612,352800 692026,352801 C 691298,352803 690179,353147 689700,353517 C 689210,353896 689960,354703 690611,354496 C 690806,354434 691024,354477 691095,354592 C 691307,354935 695935,354852 697206,354482 C 697808,354307 698525,354168 698800,354173 C 706740,354321 707676,354219 707561,353221 L 707500,352700 L 704524,352692 C 702471,352687 701395,352764 701052,352942 C 700253,353356 699823,353265 699677,352650 C 699474,351795 699024,351386 698446,351531 C 698172,351600 697985,351576 698030,351478 C 698717,349995 698779,349970 701370,350140 C 702918,350242 703298,350210 703479,349964 C 703896,349399 713649,349059 714286,349589 C 714479,349749 714708,349748 715126,349586 C 715442,349464 716420,349338 717300,349307 C 718284,349273 719127,349129 719491,348933 C 719930,348697 720379,348646 721238,348735 C 721904,348805 722900,348749 723591,348602 C 724509,348407 724921,348401 725347,348578 C 726006,348851 725448,348834 733676,348824 C 740704,348814 742028,348658 742298,347805 C 742535,347060 742915,346955 743528,347464 C 744408,348197 746400,348359 746400,347699 C 746400,346963 745973,346998 755196,346984 C 758309,346980 759156,346921 759412,346689 C 759588,346530 759927,346400 760166,346400 C 760405,346400 760600,346311 760600,346202 C 760600,346093 761049,345486 761599,344852 C 762148,344218 762733,343543 762899,343350 C 763064,343158 763200,342690 763200,342312 C 763200,341933 763290,341568 763400,341500 C 764205,341002 762994,340834 762038,341311 C 761221,341719 752754,341508 751900,341058 C 751680,340943 751209,340892 750853,340946 C 749710,341120 749240,340880 748972,339986 C 748650,338911 747611,338393 746769,338888 C 746477,339060 746131,339200 746001,339200 C 745870,339200 745534,339380 745255,339600 C 744975,339820 744615,340000 744455,340000 C 744294,340000 743954,340165 743698,340366 C 743264,340707 742686,340730 734977,340715 L 726720,340699 L 725810,341620 C 725310,342126 724785,342688 724644,342868 C 724504,343048 724144,343245 723844,343305 C 723545,343365 722895,343547 722400,343708 C 721007,344163 717995,344101 717147,343601 C 716162,343020 709463,342901 708852,343453 C 708503,343769 708391,343777 707802,343529 C 707248,343296 707059,343295 706621,343520 C 706334,343668 705594,343841 704976,343905 C 703959,344011 703808,344091 703376,344749 C 702841,345567 702081,345866 700984,345691 C 700472,345609 700195,345665 700010,345888 C 699685,346279 698625,346282 698112,345894 C 697898,345732 697558,345600 697355,345600 C 697152,345600 696533,345370 695978,345089 C 694854,344520 694400,344647 694400,345531 C 694400,345815 694257,346056 694050,346120 C 693858,346179 693308,346405 692828,346622 C 692141,346932 691822,346975 691328,346824 C 690983,346718 689367,346592 687738,346545 L 684776,346457 L 684029,345729 C 683619,345328 683174,345000 683040,345000 C 682907,345000 682602,344775 682363,344500 C 682124,344225 681778,344000 681595,344000 C 681411,344000 681054,343820 680800,343600 C 680268,343138 680211,343130 679484,343406 C 679107,343550 678742,343546 678280,343393 C 677609,343172 676607,343620 676140,344350 C 675919,344695 675412,344664 675271,344297 C 675123,343911 672744,344104 672045,344557 C 671638,344821 671550,344817 671215,344514 C 670935,344260 670657,344209 670117,344310 C 668952,344529 666824,344224 666374,343774 C 665569,342969 662282,342899 661190,343665 C 660926,343849 660544,344000 660340,344000 C 659310,344000 658484,345666 659106,346488 C 659722,347302 659131,348200 657980,348200 C 657688,348200 657337,348335 657200,348500 C 656852,348919 656329,348874 655887,348386 C 655493,347950 654408,347981 653848,348444 C 653710,348558 653188,348606 652688,348549 C 652069,348479 651461,348567 650787,348823 C 649472,349323 649373,349307 648860,348516 C 648522,347993 648200,347782 647460,347600 C 645865,347207 643544,347031 643155,347274 C 642891,347440 642664,347406 642202,347133 C 641510,346724 640490,346940 639652,347674 C 639249,348026 639127,348040 638431,347810 C 637532,347513 636911,347659 636309,348309 C 635919,348730 635656,348782 633390,348888 C 632021,348952 630765,349012 630600,349022 C 630435,349032 629760,348944 629100,348827 C 627660,348572 625784,348787 625308,349264 C 624794,349778 622666,349732 622094,349194 C 621680,348805 621000,348822 621000,349221 C 621000,349581 620107,349325 618719,348566 C 618509,348451 617789,348328 617119,348292 C 616448,348257 615394,348090 614776,347923 C 613227,347504 611731,347834 611640,348615 C 611587,349074 611652,349133 612240,349149 C 613240,349176 614846,349494 615337,349761 C 615577,349893 616156,350000 616624,350000 C 617214,350000 617612,350129 617925,350423 C 618204,350685 618741,350885 619338,350947 C 620004,351017 620485,351214 620900,351587 C 621230,351883 621748,352230 622050,352358 C 622621,352600 622724,352895 622411,353389 C 622267,353616 622126,353631 621746,353457 C 621073,353151 620754,353417 620833,354222 L 620900,354900 L 619237,355038 C 618080,355134 617350,355308 616837,355611 C 616229,355970 615906,356026 614991,355930 C 613881,355815 612922,356013 611356,356682 C 610947,356857 610317,357003 609956,357006 C 609595,357010 609125,357145 608912,357306 C 608352,357729 605389,357708 604551,357275 C 604205,357096 603294,356912 602527,356867 C 601362,356798 601056,356703 600675,356292 C 600424,356021 600129,355800 600020,355800 C 599910,355800 599403,355519 598894,355175 C 598056,354609 597921,354575 597473,354815 C 597061,355035 596870,355034 596339,354811 C 595951,354647 594853,354533 593545,354521 L 591390,354500 L 590683,355249 C 589535,356466 588124,356350 586219,354882 C 585546,354363 585275,354255 585071,354424 C 584541,354864 581808,353986 581187,353176 C 580891,352790 580670,352769 576987,352779 C 572138,352792 570268,352206 569589,350460 C 569344,349831 568276,349622 565700,349697 C 564490,349733 563399,349679 563275,349577 C 563151,349476 562656,349395 562175,349397 C 558220,349419 557739,349386 557185,349059 C 555891,348295 556489,346937 558162,346839 L 559204,346779 L 558668,346076 C 558077,345301 557490,345276 556700,345992 C 555580,347007 551662,346603 550566,345359 C 550033,344754 550028,344753 548988,345003 L 547945,345253 L 547298,344483 C 546702,343773 546614,343732 546176,343966 C 544818,344690 544587,344851 544395,345210 C 543466,346946 541326,344783 542112,342903 C 542394,342228 542394,342125 542112,341813 C 541521,341160 541756,340137 542596,339702 C 543334,339320 543733,338351 543428,337682 C 543303,337406 543200,336976 543200,336726 C 543200,336294 541884,335200 541364,335200 C 541253,335200 540934,335020 540655,334800 C 540375,334580 539888,334400 539573,334400 C 539258,334400 538820,334220 538600,334000 C 538080,333480 537200,333461 537200,333969 C 537200,334432 537735,334907 538447,335076 C 538749,335148 539154,335450 539347,335748 C 539541,336047 539955,336519 540267,336799 L 540834,337308 L 540493,338160 C 540305,338628 539983,339102 539776,339213 C 539523,339348 539400,339633 539400,340086 C 539400,340524 539286,340801 539072,340883 C 538796,340989 538762,341215 538862,342288 C 538952,343245 538913,343624 538707,343795 C 538251,344173 538106,345565 538480,345978 C 539230,346807 538581,347400 536925,347400 C 536458,347400 535902,347532 535688,347694 C 535112,348129 533933,348079 533500,347600 C 533301,347380 532897,347200 532602,347200 C 532113,347200 530800,345945 530800,345477 C 530800,345066 530119,344626 529628,344720 C 528731,344892 527928,343667 528042,342299 C 528145,341056 528988,339839 529763,339814 C 530514,339791 531000,339428 531000,338889 C 531000,337830 529488,337839 527043,338912 C 526682,339070 526230,339200 526038,339200 C 525846,339200 525510,339325 525292,339478 C 525074,339631 524094,339823 523114,339905 C 521909,340005 521115,340182 520658,340452 C 520167,340741 519766,340821 519192,340744 C 518758,340686 517797,340714 517057,340805 C 515106,341047 514705,340916 514024,339809 C 513055,338234 511633,337808 510319,338700 C 509479,339270 508379,339357 507986,338884 C 507769,338621 507482,338593 506312,338718 C 504677,338892 504625,338890 503300,338602 C 502750,338483 502064,338389 501776,338394 C 501487,338399 501139,338267 501001,338101 C 500673,337705 500440,337721 499500,338200 C 498580,338669 498026,338700 497142,338330 C 496761,338171 496334,338125 496098,338216 C 495244,338550 493190,338421 492655,338000 C 492322,337738 491843,337600 491271,337600 C 490644,337600 490299,337487 490054,337200 C 489813,336919 489464,336800 488883,336800 C 488360,336800 487868,336654 487551,336404 C 487274,336186 486834,335915 486574,335801 C 486313,335687 485703,335370 485219,335097 C 484734,334823 484120,334600 483855,334600 C 483590,334600 483200,334507 482987,334393 C 482103,333920 481155,335978 482012,336508 C 483259,337278 482412,338400 480584,338400 C 478584,338400 477578,336260 478894,334807 C 479868,333730 477618,333124 475900,334000 C 474848,334536 473811,334317 472600,333302 C 472435,333164 471949,332988 471520,332911 C 470700,332764 469600,331857 469600,331330 C 469600,330883 468660,330222 468198,330343 C 467979,330400 467553,330282 467250,330080 C 466948,329879 466533,329741 466328,329773 C 466123,329806 465689,329578 465364,329266 C 464674,328608 462494,328480 461836,329060 C 461651,329222 461188,329422 460808,329503 C 459806,329716 458870,330551 458396,331655 C 457918,332766 457482,333000 455897,333000 C 455203,333000 454763,333096 454660,333271 C 454504,333536 453759,334000 453491,334000 C 453270,334000 453607,332927 453947,332550 C 454240,332224 454220,332200 453662,332200 C 453316,332200 452909,332031 452700,331800 C 452172,331217 451725,331274 451883,331904 C 452052,332578 451541,332770 450777,332318 C 450141,331943 449800,332033 449800,332579 C 449800,333145 450846,333923 451971,334193 C 452668,334360 453081,334583 453229,334871 C 453351,335107 453620,335488 453829,335717 C 454037,335946 454183,336351 454154,336616 C 454072,337348 454928,337415 455201,336698 C 455373,336244 455484,336187 455978,336295 C 456490,336408 456578,336352 456774,335788 C 456978,335202 457046,335164 457674,335282 C 458178,335376 458383,335332 458468,335111 C 458637,334671 459769,334262 461537,334000 C 462397,333873 463486,333641 463957,333485 C 465035,333127 469607,333087 469952,333432 C 470080,333560 470615,333813 471142,333994 C 472313,334398 472704,335926 471760,336412 C 471507,336542 471075,336852 470800,337100 C 470420,337443 469976,337576 468950,337653 C 468177,337711 467380,337898 467084,338092 C 466709,338338 466357,338394 465792,338299 C 465126,338186 464940,338242 464498,338684 C 464113,339069 463776,339200 463173,339200 C 462583,339200 462269,339318 462011,339636 C 461692,340030 461598,340048 461051,339821 C 460562,339619 460364,339619 460038,339823 C 459709,340028 459573,340026 459316,339813 C 459061,339602 458941,339600 458696,339803 C 458483,339980 458083,340011 457346,339908 C 455692,339675 454863,339803 453969,340428 C 453529,340737 453013,340805 450919,340835 C 449534,340854 448400,340911 448400,340961 C 448400,341012 448589,341358 448819,341731 C 449291,342495 449209,343000 448613,343000 C 448394,343000 448118,343180 448000,343400 C 447745,343877 447400,343926 447400,343485 C 447400,343225 447310,343242 446873,343585 C 446075,344213 443576,344192 443153,343554 C 442859,343111 442820,343108 438189,343154 C 433861,343196 433466,343170 432755,342800 C 432333,342580 431717,342400 431386,342400 C 431055,342400 430431,342220 430000,342000 C 429341,341664 428821,341600 426739,341600 C 424516,341600 424225,341559 423900,341200 C 423667,340943 423284,340800 422827,340800 C 422260,340800 421941,340629 421256,339957 C 420471,339187 420315,339117 419461,339154 C 418340,339203 417887,338867 417591,337768 C 417478,337346 417302,337000 417200,337000 C 417099,337000 416518,336595 415911,336100 C 415303,335605 414692,335200 414553,335199 C 414414,335199 414005,335019 413645,334799 C 413285,334580 412874,334400 412731,334400 C 412588,334400 412011,333825 411448,333122 C 410874,332406 410089,331681 409662,331472 C 408960,331129 408892,331022 408800,330104 L 408700,329107 L 407725,328945 C 407178,328854 406439,328545 406041,328241 C 405370,327729 403726,327241 402577,327213 C 402289,327206 401825,327020 401545,326800 C 401232,326554 400734,326400 400249,326400 C 399716,326400 399345,326271 399100,326000 C 398901,325780 398526,325600 398267,325600 C 398008,325600 397642,325420 397454,325200 C 397265,324980 396974,324797 396806,324794 C 395048,324760 394267,320693 395615,318591 C 395788,318321 395983,317954 396049,317776 C 396114,317597 396417,317389 396721,317312 C 397026,317236 397376,317035 397500,316866 C 397625,316695 398160,316513 398712,316454 C 399255,316396 399844,316224 400021,316070 C 400551,315609 402100,315853 403094,316553 C 403566,316886 404165,317223 404426,317304 C 404687,317384 405061,317618 405258,317825 C 406119,318727 408400,317848 408400,316614 C 408400,316384 408670,315914 409000,315569 C 409330,315223 409600,314815 409600,314661 C 409600,314507 409809,314183 410065,313940 C 411502,312581 411435,311766 409857,311368 C 409245,311214 408917,311006 408800,310700 C 408707,310455 408489,310200 408315,310134 C 407798,309935 407953,309632 408792,309204 C 409787,308697 409654,308660 410289,309620 C 410798,310388 410878,310433 411566,310322 C 413920,309944 413944,309944 414329,310327 C 415133,311125 416833,311830 417630,311695 C 418966,311469 419865,312380 419723,313816 C 419515,315929 420582,317679 422415,318228 C 424451,318838 424709,319972 423044,320998 C 421402,322009 421200,322198 421200,322728 C 421200,323008 421380,323466 421600,323745 C 421820,324025 422002,324444 422005,324677 C 422008,324939 422323,325328 422834,325700 C 423287,326030 424013,326593 424448,326950 C 425017,327418 425442,327601 425969,327603 C 426371,327605 426925,327737 427200,327898 C 427475,328058 427982,328324 428327,328488 C 428723,328676 429003,328990 429090,329343 C 429437,330754 432624,332947 433986,332712 C 434378,332645 435150,332520 435700,332435 C 437157,332209 437957,331610 437684,330950 C 437543,330611 435927,329600 435524,329600 C 435346,329600 435016,329416 434792,329192 C 434568,328968 434185,328698 433942,328592 C 433699,328487 433365,328316 433200,328212 C 433035,328109 432665,327975 432379,327915 C 430710,327568 429770,325811 430385,324190 C 430621,323571 430730,322921 430665,322523 C 430455,321231 433398,319378 435163,319689 C 435568,319761 436530,319889 437300,319975 C 438070,320060 438953,320236 439263,320365 C 439573,320494 440273,320600 440819,320600 C 441496,320600 441848,320691 441922,320886 C 442145,321466 444937,321364 445499,320757 C 446277,319914 446267,319623 445446,319253 C 445036,319067 444543,318787 444352,318629 C 443795,318170 441496,318304 440973,318827 C 440656,319144 440415,319210 439930,319110 C 439584,319039 438838,318989 438273,319000 C 437354,319018 435515,318553 434850,318134 C 434402,317852 434585,317242 435400,316300 C 436295,315266 436284,315301 435979,314426 C 435647,313473 435110,313271 434567,313895 C 434326,314173 433975,314400 433788,314400 C 433602,314400 433337,314535 433200,314700 C 432088,316039 428979,313391 429060,311173 C 429105,309935 428815,309400 428100,309400 C 427852,309400 427537,309265 427400,309100 C 427263,308935 427034,308800 426891,308800 C 426748,308800 426363,308575 426036,308300 C 425266,307652 424535,307646 424244,308284 C 423850,309148 419794,309139 419462,308273 C 419408,308134 418947,307957 418437,307880 C 417756,307778 417336,307563 416858,307070 C 416500,306702 416168,306400 416120,306400 C 415817,306400 414200,307220 414200,307374 C 414200,308246 411565,308946 410718,308300 C 410357,308025 409867,307800 409628,307800 C 409390,307800 409025,307694 408817,307564 C 407998,307053 406179,309402 406919,310016 C 407154,310211 407207,310479 407119,311028 C 407051,311449 407087,311830 407200,311900 C 407644,312174 407416,313540 406820,314179 C 406082,314969 405443,314975 404700,314200 C 404384,313870 403929,313600 403690,313600 C 403450,313600 403025,313420 402745,313200 C 402466,312980 402145,312800 402032,312800 C 401576,312800 401593,311949 402071,310750 C 403117,308128 402892,307000 401323,307000 C 400830,307000 400173,306898 399863,306773 C 399553,306648 398940,306473 398500,306385 C 396212,305925 395793,305738 394985,304815 C 393886,303560 393493,303159 392959,302746 C 392149,302120 391017,301600 390464,301600 C 389708,301600 387449,300207 387308,299653 C 387238,299378 386983,299156 386647,299076 C 386346,299005 385965,298834 385800,298697 C 385635,298560 385275,298380 385000,298299 C 384725,298217 384337,297979 384137,297770 C 383838,297456 383605,297412 382800,297519 C 381749,297658 380681,297207 379963,296320 C 379653,295937 379456,295909 377519,295971 L 375412,296038 L 375073,295329 C 374720,294587 374908,294000 375500,294000 C 375638,294000 375863,293865 376000,293700 C 376174,293490 376636,293400 377534,293400 C 378855,293400 380200,292587 380200,291789 C 380200,291641 380463,291245 380784,290910 C 382115,289519 382589,288153 382000,287400 C 381744,287073 381607,286584 381604,285986 C 381600,285136 381541,285032 380774,284530 L 379948,283989 L 379111,284395 C 378347,284764 377884,284800 373846,284800 C 370840,284800 369250,284877 368895,285039 C 368488,285224 368284,285224 367988,285039 C 367778,284907 367429,284800 367212,284800 C 366277,284800 365302,282531 365820,281562 C 365985,281254 365977,281030 365788,280677 C 365572,280273 365588,280145 365898,279802 C 366230,279435 366235,279370 365947,279050 C 365773,278858 365566,278430 365486,278100 C 365406,277770 365084,277172 364770,276771 C 363990,275774 364001,274865 364804,274096 C 365137,273777 365508,273185 365630,272780 C 366077,271287 366589,270901 368131,270893 C 369614,270886 370814,270300 371286,269352 C 371706,268510 372504,268240 373052,268755 C 373313,269000 373675,269200 373858,269200 C 374041,269200 374338,269425 374518,269700 C 374775,270092 375015,270200 375626,270200 C 376055,270200 376579,270309 376792,270441 C 377109,270640 377250,270617 377585,270313 C 378267,269697 379693,270012 380702,271002 C 381149,271441 381647,271801 381808,271802 C 382363,271806 383463,273161 383488,273871 C 383500,274236 383658,274759 383838,275033 C 384052,275360 384103,275631 383986,275816 C 383712,276249 383724,276271 384900,277456 C 385505,278066 386000,278694 386000,278852 C 386000,279409 386714,279834 387430,279702 C 387959,279604 388245,279686 388789,280089 C 389168,280370 389637,280600 389832,280600 C 390603,280600 391556,282676 390900,282928 C 390487,283086 390522,283788 390950,283921 C 391143,283980 391570,284145 391900,284287 C 392345,284478 392913,284500 394100,284372 C 397056,284055 399271,284240 399959,284863 C 400164,285049 400565,285200 400850,285200 C 401136,285200 401637,285425 401964,285700 C 403087,286645 405111,286337 406045,285078 C 407065,283704 408372,282415 408875,282288 C 409169,282215 409520,282007 409656,281827 C 410137,281187 411737,280268 413527,279604 C 413871,279476 414405,279107 414714,278785 C 415022,278463 415399,278200 415552,278200 C 415854,278200 417495,277306 418039,276845 C 418622,276352 418679,275495 418187,274620 C 417648,273661 417776,273200 418581,273200 C 420357,273200 421851,275433 420924,276702 C 420681,277034 420708,277172 421154,277846 C 421831,278869 420718,280600 419383,280600 C 419259,280600 418881,280833 418542,281118 C 418074,281512 417788,281608 417346,281519 C 416580,281366 415422,282278 413371,284650 C 412843,285260 412388,285600 412098,285600 C 410951,285600 410322,288263 411412,288503 C 411737,288574 412096,288805 412209,289016 C 412498,289556 412835,289495 413513,288781 C 413836,288441 414522,287947 415039,287684 C 415621,287387 416214,286862 416598,286302 C 416940,285806 417314,285400 417431,285400 C 417547,285400 417917,285169 418253,284886 C 418677,284529 419004,284408 419324,284488 C 419656,284572 419844,284492 419999,284202 C 420140,283939 420418,283800 420802,283800 C 421209,283800 421492,283646 421718,283300 C 421957,282936 422223,282800 422699,282800 C 423057,282800 423463,282665 423600,282500 C 423737,282335 424013,282200 424213,282200 C 425163,282200 425703,281323 425651,279866 C 425577,277817 427296,275392 428815,275402 C 428972,275403 429354,275110 429664,274752 C 429976,274392 430270,274199 430321,274322 C 430806,275476 431987,275332 432201,274093 C 432341,273287 433200,273279 433200,274084 C 433200,275664 434076,277961 434742,278128 C 435000,278193 435301,278416 435412,278623 C 435537,278857 435830,279000 436183,279000 C 436495,279000 436863,279135 437000,279300 C 437317,279682 437683,279682 438000,279300 C 438170,279096 438624,279000 439424,279000 C 440680,279000 440859,278810 440359,278008 C 440161,277692 440182,277552 440471,277232 C 440680,277001 440874,276367 440944,275684 C 441027,274884 441240,274265 441632,273684 C 441944,273221 442200,272740 442200,272614 C 442200,272061 444461,270258 445388,270072 C 445713,270007 446133,269784 446321,269577 C 446809,269037 447854,269098 448796,269721 C 449601,270254 452195,270293 452514,269778 C 453167,268721 455686,268531 456676,269464 C 457614,270349 459606,270417 460474,269593 C 461245,268861 461262,266225 460500,265563 C 460163,265270 460000,264921 460000,264495 C 460000,264146 459820,263654 459600,263400 C 459372,263137 459200,262652 459200,262269 C 459200,261901 459105,261600 458990,261600 C 458874,261600 458643,261308 458476,260950 C 457807,259519 457573,259252 456556,258769 C 455603,258315 454041,258163 452563,258380 C 452488,258391 452370,258580 452300,258800 C 452130,259334 451419,259316 450465,258753 C 449193,258002 444526,257951 443662,258678 C 443081,259167 442912,259200 440969,259200 C 439165,259200 438866,259248 438664,259572 C 438512,259815 438087,259990 437437,260076 C 436890,260149 436332,260341 436197,260504 C 436062,260667 435711,260800 435418,260800 C 434826,260800 433743,261301 432898,261965 C 432210,262507 431514,262519 430855,262000 C 430488,261712 430043,261600 429260,261600 C 428038,261600 427400,261345 427400,260856 C 427400,260674 427202,260315 426960,260058 C 426559,259631 426541,259514 426752,258745 C 427225,257018 425412,256272 423852,257550 C 422964,258278 422889,258300 421318,258305 C 419460,258311 418383,258794 416861,260305 C 416394,260768 415597,261290 415061,261482 C 414533,261671 413860,261956 413566,262115 C 413206,262310 412547,262387 411534,262352 C 410043,262300 410032,262304 409285,263050 C 408775,263559 408353,263800 407974,263800 C 406866,263800 406368,264712 407100,265400 C 407375,265658 407600,265959 407600,266069 C 407600,266179 407749,266433 407931,266634 C 408239,266975 408239,267025 407931,267366 C 407749,267567 407599,267949 407599,268216 C 407597,269223 407177,270139 406286,271083 L 405365,272058 L 404874,271529 C 404604,271238 404244,271000 404073,271000 C 403903,271000 403528,270815 403241,270589 C 402664,270135 401240,270207 400951,270704 C 400658,271210 398430,271298 397926,270824 C 397207,270149 396283,270063 395551,270605 C 394642,271277 392175,271429 391541,270852 C 391180,270522 390728,270431 389036,270343 C 387546,270266 386874,270148 386620,269918 C 386427,269743 386040,269600 385761,269600 C 385482,269600 385039,269433 384777,269229 C 384515,269025 383971,268797 383569,268724 C 383167,268650 382788,268457 382726,268295 C 382663,268133 382490,268000 382341,268000 C 382192,268000 381852,267764 381585,267475 L 381100,266950 L 378256,267069 C 375823,267171 375388,267143 375241,266880 C 375056,266549 373695,267165 373340,267741 C 373085,268155 372275,268044 371949,267550 C 371785,267303 371413,266862 371120,266571 C 370828,266281 370343,265678 370044,265232 C 369547,264493 367551,263210 366885,263203 C 366767,263201 366458,262975 366200,262700 C 365942,262425 365617,262200 365479,262200 C 365116,262200 364000,260465 364000,259900 C 364000,259636 363843,259331 363650,259223 C 363356,259058 363300,258729 363300,257151 C 363300,254988 362683,253600 361722,253600 C 361462,253600 361139,253467 361004,253305 C 360870,253143 360451,252953 360074,252882 C 359698,252811 359298,252584 359188,252377 C 359039,252100 358763,252000 358143,251999 C 357110,251998 356116,251178 355431,249763 C 355175,249235 354514,248433 353905,247913 C 353233,247339 352783,246777 352703,246411 C 352632,246090 352445,245720 352287,245589 C 352129,245458 352000,245101 352000,244797 C 352000,244382 351696,243945 350801,243071 C 349824,242116 349602,241780 349601,241250 C 349601,240893 349522,240600 349427,240600 C 349332,240600 348785,239836 348212,238901 L 347171,237203 L 347599,236601 C 347835,236271 348089,235999 348164,235999 C 348614,235994 349173,234656 349062,233846 C 348980,233237 349033,232892 349247,232646 C 349559,232287 349847,231322 349797,230800 C 349782,230635 349742,229777 349708,228894 C 349663,227688 349542,227115 349225,226594 C 348992,226212 348801,225755 348801,225579 C 348800,225402 348485,224845 348100,224341 C 347307,223303 347217,222645 347800,222146 C 348020,221958 348200,221678 348200,221523 C 348200,221369 348347,221186 348527,221117 C 348787,221018 348829,220816 348735,220126 C 348546,218753 348876,217937 349928,217170 C 350975,216408 351172,216219 353100,214133 C 355378,211668 356000,210879 356000,210458 C 356000,210036 358132,207200 358449,207200 C 358552,207200 359019,206805 359488,206323 C 359957,205841 360556,205379 360820,205297 C 361084,205215 361795,204758 362400,204282 C 364524,202609 365406,202000 365703,202000 C 365868,202000 366198,201775 366437,201500 C 366676,201225 367076,201000 367324,201000 C 367573,201000 367832,200910 367900,200800 C 368140,200412 369370,200571 369611,201021 C 369788,201351 369962,201418 370409,201328 C 370856,201239 371064,201318 371358,201692 C 371713,202143 371861,202171 374017,202193 C 375273,202205 376660,202223 377100,202231 C 378207,202253 379052,202005 379361,201569 C 379727,201052 380446,201110 381000,201700 C 381323,202044 381683,202200 382153,202200 C 382534,202200 383062,202377 383345,202600 C 383625,202820 383963,203000 384096,203000 C 384229,203000 384501,203180 384700,203400 C 384922,203646 385316,203800 385720,203800 C 386158,203800 386474,203938 386667,204214 C 386929,204588 387139,204624 388829,204590 C 389858,204569 391306,204654 392047,204779 C 393484,205022 394091,204860 394307,204177 C 394364,203999 394588,203692 394805,203495 C 395022,203299 395204,202994 395208,202819 C 395256,200878 398525,199955 401167,201137 C 403006,201959 405315,199759 405070,197417 C 404985,196598 405022,196115 405185,195918 C 405377,195687 405357,195520 405089,195111 C 404839,194730 404775,194310 404841,193504 C 404921,192549 404874,192362 404466,192008 C 404179,191759 404000,191381 404000,191026 C 404000,190709 403865,190337 403700,190200 C 402988,189609 405192,185819 407350,183923 C 407598,183706 407800,183420 407800,183288 C 407800,183157 407937,182935 408104,182796 C 408906,182131 410345,179624 410448,178714 C 410512,178149 410722,177596 410977,177325 C 411210,177077 411400,176687 411400,176459 C 411400,176230 411535,175991 411700,175928 C 411885,175857 412000,175553 412000,175136 C 412000,174764 412100,174173 412222,173822 C 412384,173359 412385,172953 412227,172342 C 412038,171610 412061,171430 412400,170964 C 412615,170670 412849,170066 412919,169624 C 412990,169181 413217,168665 413424,168478 C 414308,167678 413960,166248 412500,164692 C 411785,163930 411200,163184 411200,163035 C 411200,162885 411020,162534 410800,162255 C 410563,161954 410400,161443 410400,161004 C 410400,160541 410263,160138 410037,159934 C 409741,159666 409667,159251 409634,157665 C 409605,156276 409509,155631 409297,155396 C 408664,154698 409509,152173 411028,150223 C 411233,149961 411400,149530 411400,149267 C 411400,149003 411527,148739 411682,148679 C 412001,148557 413600,146302 413600,145975 C 413600,145859 413780,145534 414000,145255 C 414220,144975 414400,144536 414400,144280 C 414400,144019 414576,143720 414800,143600 C 415162,143406 415200,143181 415200,141205 C 415200,139961 415286,138970 415401,138900 C 415511,138831 415546,138555 415478,138285 C 415411,138015 415444,137683 415552,137547 C 415659,137411 415794,136867 415851,136338 C 415914,135744 416116,135203 416377,134925 C 416648,134636 416800,134212 416800,133744 C 416800,133130 417055,132696 418400,131024 C 419463,129703 420000,128864 420000,128525 C 420000,128220 420160,127928 420398,127801 C 420616,127684 420850,127370 420917,127102 C 420984,126835 421165,126512 421320,126384 C 421474,126256 421600,125870 421600,125526 C 421600,125050 421768,124766 422302,124340 C 423555,123340 423649,123059 423169,121756 C 422661,120376 422777,119741 423597,119401 C 423929,119264 424204,119050 424208,118926 C 424220,118607 425215,117500 425734,117230 C 426352,116907 427974,117163 428265,117629 C 428453,117930 428748,118000 429840,118000 C 430959,118000 431252,118072 431586,118431 C 432018,118895 435301,118881 436179,118411 C 436438,118273 436784,118297 437325,118491 C 438969,119083 440202,119400 440858,119400 C 441770,119400 442717,119748 443694,120442 C 444137,120757 444860,121247 445300,121530 C 445740,121814 446306,122238 446557,122473 C 446809,122708 447579,123395 448269,124000 C 449036,124672 449748,125528 450101,126200 C 450644,127234 451073,127857 452007,128967 C 452223,129224 452400,129550 452400,129693 C 452400,129835 452661,130059 452979,130191 C 453834,130546 454786,133211 454647,134861 C 454562,135862 454607,136077 454974,136419 C 455208,136637 455400,136902 455400,137008 C 455400,137114 455602,137200 455848,137200 C 456522,137200 459040,138511 459710,139211 C 460560,140097 460684,144756 459879,145502 C 459616,145746 459400,146081 459400,146246 C 459400,146411 459210,146788 458978,147083 C 458588,147579 458580,147647 458878,147975 C 459055,148171 459200,148437 459200,148567 C 459200,148826 463731,153400 463987,153400 C 464074,153400 464386,153589 464680,153820 C 465049,154111 465367,154201 465712,154115 C 466087,154021 466325,154114 466678,154495 C 466935,154773 467289,155000 467463,155000 C 467899,155000 469551,156140 469911,156689 C 470073,156936 470422,157237 470685,157357 C 470949,157477 471227,157770 471303,158008 C 471378,158246 471656,158760 471920,159149 C 472505,160010 472532,160531 472000,160700 C 471538,160847 471301,161573 471505,162217 C 471612,162553 471531,162750 471179,163016 C 470720,163362 470718,163378 471082,163781 C 471985,164777 471427,169600 470409,169600 C 470312,169600 470075,170027 469883,170550 C 469690,171073 469402,171654 469242,171842 C 469043,172077 468994,172403 469084,172886 C 469172,173354 469113,173787 468909,174183 C 468715,174557 468675,174823 468801,174900 C 469160,175122 469016,176395 468562,177008 C 468088,177650 467959,181020 468404,181168 C 468878,181326 469224,181878 469116,182307 C 469032,182641 469135,182842 469517,183093 C 469963,183385 470014,183526 469907,184165 C 469794,184838 471614,187000 472295,187000 C 472859,187000 474023,188196 473887,188635 C 473792,188938 474289,189486 477000,192065 C 477165,192222 477872,192946 478570,193675 C 479539,194685 479972,195000 480396,195000 C 480701,195000 481063,195135 481200,195300 C 481337,195465 481660,195600 481917,195600 C 482182,195600 482480,195775 482601,196002 C 482719,196223 483657,197235 484685,198252 C 485713,199268 486691,200370 486860,200700 C 487028,201030 487429,201593 487752,201952 C 488075,202310 488479,202895 488650,203252 C 490364,206818 490884,207821 491122,208018 C 491275,208145 491400,208428 491400,208646 C 491400,208864 491625,209219 491900,209436 C 492175,209652 492400,209921 492400,210033 C 492400,210145 492580,210466 492800,210745 C 493045,211057 493200,211557 493200,212034 C 493200,212463 493347,213039 493527,213313 C 493712,213596 493897,214405 493952,215175 L 494049,216537 L 493315,216991 C 492659,217396 492544,217413 492240,217147 C 492053,216983 491540,216737 491100,216601 C 490660,216464 489998,216225 489630,216070 C 489143,215864 488560,215823 487501,215919 C 486089,216047 486027,216034 485571,215509 C 485141,215014 485014,214978 484100,215091 C 483346,215184 482805,215109 481900,214786 C 479612,213970 479371,214001 477877,215312 C 476390,216618 476217,216903 476651,217337 C 476981,217667 476054,219400 475548,219400 C 475293,219400 472400,222350 472400,222609 C 472400,222703 471932,223014 471360,223301 C 470789,223588 470136,224002 469910,224220 C 469685,224438 469239,224823 468919,225074 C 468406,225479 468332,225675 468287,226750 C 468217,228426 466519,231177 465536,231207 C 464768,231231 464144,232992 464249,234839 C 464340,236435 464309,236682 463976,236967 C 463769,237144 463600,237457 463600,237663 C 463600,238121 463053,238851 461550,240397 C 460686,241286 460400,241725 460400,242160 C 460400,242811 459639,244361 459012,244988 C 458785,245215 458600,245577 458600,245793 C 458600,246009 458420,246282 458200,246400 C 457980,246518 457800,246771 457800,246963 C 457800,247154 457673,247492 457518,247714 C 456443,249249 456877,251800 458214,251800 C 458813,251800 460800,249683 460800,249043 C 460800,248685 461760,247189 462149,246940 C 462287,246852 462400,246529 462400,246221 C 462400,245914 462580,245499 462800,245300 C 463020,245101 463200,244769 463200,244562 C 463200,244106 464462,242800 464904,242800 C 465078,242800 465343,242506 465494,242146 C 465644,241786 465954,241322 466183,241115 C 466413,240908 466600,240499 466600,240207 C 466600,239915 466732,239502 466894,239288 C 467062,239066 467190,238456 467194,237862 C 467197,237291 467299,236762 467420,236687 C 467542,236612 467767,236249 467921,235880 C 468085,235488 468471,235073 468851,234881 C 470359,234118 471419,232980 472138,231350 C 472271,231048 472471,230800 472582,230800 C 472693,230800 473030,230373 473332,229850 C 473633,229328 473997,228828 474140,228740 C 474283,228652 474400,228239 474400,227821 C 474400,227316 474534,226941 474800,226700 C 475066,226459 475200,226084 475200,225581 C 475200,225164 475290,224768 475400,224700 C 475510,224632 475600,224309 475600,223982 C 475600,223655 475735,223064 475900,222669 C 476065,222274 476200,221793 476200,221600 C 476200,221407 476335,221137 476500,221000 C 476673,220857 476800,220421 476800,219973 C 476800,217907 480885,217917 481992,219985 C 482158,220296 482430,220353 483702,220345 C 484909,220337 485323,220415 485757,220735 C 486056,220954 486745,221195 487289,221269 C 487846,221344 488462,221577 488702,221801 C 488935,222021 489401,222200 489738,222200 C 490075,222200 490455,222325 490582,222478 C 490708,222631 491214,222857 491706,222981 C 492198,223104 492600,223294 492600,223403 C 492600,223511 492886,223600 493235,223600 C 493960,223600 495924,224845 496107,225421 C 496307,226051 497827,227026 498410,226898 C 498750,226823 499092,226914 499413,227164 C 499681,227373 500320,227606 500834,227682 C 501347,227758 501881,227956 502019,228123 C 502158,228290 502525,228558 502835,228718 C 503146,228879 503400,229133 503400,229283 C 503400,229434 503648,229618 503950,229693 C 504252,229768 504841,230183 505258,230615 C 505675,231048 506319,231528 506689,231682 C 507059,231837 507419,232143 507488,232363 C 507558,232583 507747,232814 507908,232875 C 508068,232937 508200,233222 508200,233508 C 508200,234090 509287,235799 509660,235802 C 510094,235807 512200,238020 512200,238473 C 512200,239858 510042,242550 509118,242317 C 508908,242264 508514,242396 508241,242610 C 507969,242825 507500,243000 507199,243000 C 506533,243000 505074,244483 504898,245338 C 504452,247510 503963,247441 501086,244799 C 500348,244122 499126,243748 497500,243701 C 496840,243682 496014,243597 495665,243511 C 495069,243365 495019,243396 494837,244028 C 494731,244398 494585,244841 494514,245014 C 494425,245231 494549,245404 494913,245569 C 495468,245822 495481,246697 494934,247045 C 494586,247266 492843,247231 492700,247000 C 492343,246423 491782,246801 491918,247527 C 492049,248223 491997,248311 490677,249631 C 488724,251585 488200,252188 488200,252486 C 488200,252629 488011,252987 487779,253281 C 487304,253885 487378,255005 487924,255451 C 488091,255588 488402,255857 488614,256050 C 489391,256755 490215,256411 491944,254660 C 492619,253976 492947,253494 492871,253296 C 492801,253114 492955,252803 493248,252531 C 493520,252279 493778,251982 493821,251871 C 493865,251760 494547,251249 495337,250736 C 496128,250223 496827,249719 496890,249617 C 496953,249514 497266,249373 497586,249303 C 497905,249233 498213,249055 498269,248908 C 498326,248760 498761,248575 499236,248496 C 499711,248417 500326,248237 500602,248096 C 501013,247886 501197,247887 501608,248103 C 501885,248248 502694,248469 503406,248594 C 505246,248917 505400,248980 505400,249420 C 505400,249906 505976,250159 506219,249779 C 506342,249587 506274,249415 505999,249226 C 505442,248842 505492,248080 506100,247682 C 506375,247501 506601,247252 506601,247127 C 506604,246684 507968,245925 508286,246189 C 508483,246352 508690,246366 508937,246234 C 509380,245998 512559,245597 512913,245733 C 513053,245786 513398,245679 513680,245495 C 514069,245240 514422,245191 515146,245291 C 515671,245363 516595,245413 517200,245402 C 518681,245374 519959,245752 520338,246330 C 520735,246936 521000,246929 521000,246312 C 521000,245780 521297,245472 521498,245797 C 521686,246101 522350,246042 522914,245672 C 523368,245375 523485,245373 524193,245651 C 524823,245898 525042,245909 525336,245708 C 525536,245572 525945,245400 526244,245328 C 526602,245241 527011,244850 527444,244183 C 527924,243442 528434,242983 529348,242469 C 530035,242083 530757,241564 530952,241316 C 531148,241067 531531,240746 531804,240602 C 532444,240264 532593,240026 532597,239337 C 532600,238695 532859,238141 533415,237585 C 533627,237373 533800,237117 533800,237015 C 533800,236807 535894,235800 536324,235800 C 536476,235800 536960,236160 537400,236600 C 538341,237541 538842,237601 539503,236850 C 540083,236191 540102,236044 539664,235560 C 539367,235232 539357,235072 539581,234200 C 539720,233656 539775,232941 539702,232611 C 539612,232199 539734,231550 540091,230545 C 540377,229739 540688,228385 540784,227536 C 540879,226688 541076,225849 541222,225673 C 541535,225296 541993,224046 541997,223557 C 541999,223368 542179,223118 542398,223001 C 542962,222699 543400,221753 543400,220835 C 543400,220055 543928,218652 544500,217912 C 544665,217698 544800,217371 544800,217185 C 544800,216998 545025,216699 545300,216518 C 545575,216338 545800,216027 545800,215826 C 545800,215626 545976,215303 546191,215109 C 546477,214849 546550,214600 546464,214172 C 546388,213791 546454,213470 546655,213245 C 546824,213055 547061,212530 547182,212078 C 547750,209943 550202,208558 551070,209883 C 551244,210148 551740,210521 552172,210712 C 552870,211020 553800,212264 553800,212890 C 553800,212970 553994,213193 554231,213385 C 554591,213676 554678,214003 554756,215359 C 554829,216612 554936,217061 555225,217323 C 555431,217509 555600,217881 555600,218149 C 555600,218418 555780,218866 556000,219145 C 556540,219832 556503,220447 555877,221190 C 555390,221770 555364,221900 555494,223114 L 555633,224415 L 556718,225027 C 557314,225364 557869,225748 557951,225882 C 558206,226297 559069,226800 559525,226800 C 559811,226800 560103,227041 560375,227503 C 560603,227890 561032,228298 561328,228410 C 561623,228523 562863,229638 564082,230889 C 565864,232716 566463,233207 567127,233383 C 567581,233504 568065,233737 568201,233901 C 568337,234066 568522,234200 568612,234200 C 569123,234200 570046,235389 569922,235885 C 569638,237016 571123,238122 572082,237493 C 572520,237207 572630,237208 573331,237505 C 573754,237684 574505,237905 575000,237995 C 576306,238233 578400,239045 579223,239633 C 579806,240050 580200,239693 580200,238746 C 580200,238270 580300,237780 580423,237657 C 580546,237534 580748,237259 580873,237045 C 581642,235729 582234,235035 582684,234922 C 582998,234843 583240,234608 583315,234312 C 583382,234046 583608,233674 583818,233484 C 584028,233294 584200,232936 584200,232689 C 584200,232442 584568,231759 585017,231170 L 585835,230100 L 585725,228300 C 585617,226521 585623,226492 586215,225800 L 586813,225100 L 587557,225525 C 587966,225759 588674,226013 589132,226090 C 589590,226167 590121,226403 590313,226615 C 591397,227812 593082,226167 592854,224137 C 592772,223409 592836,223117 593175,222686 C 593476,222304 593600,221862 593600,221175 C 593600,220420 593689,220148 594000,219954 C 594618,219568 594618,211859 594000,211300 C 593344,210706 593527,210243 595016,208735 C 595795,207946 596574,207030 596746,206700 C 596918,206370 597361,205731 597730,205279 C 598284,204601 598401,204289 598406,203479 C 598410,202941 598541,202330 598698,202123 C 598855,201916 599043,201331 599116,200823 C 599189,200315 599370,199761 599519,199591 C 599919,199132 600714,197579 600870,196950 C 600980,196512 601123,196400 601573,196400 C 601892,196400 602303,196218 602516,195983 C 603152,195279 604552,194427 605303,194286 C 606574,194048 607350,195440 606418,196284 C 606208,196474 605976,196870 605902,197165 C 605829,197459 605635,197848 605472,198030 C 605223,198306 605211,198559 605401,199607 C 605796,201785 602589,206400 600681,206400 C 599508,206400 598424,207730 598701,208831 C 598821,209309 598648,209599 597452,210919 C 597206,211191 596949,211632 596882,211899 C 596816,212165 596635,212488 596480,212616 C 596116,212918 596124,213288 596502,213601 C 596668,213739 596858,214193 596925,214610 C 596994,215046 597249,215544 597523,215783 C 598003,216200 598061,216516 598090,218900 C 598105,220101 599015,220150 600207,219016 C 600674,218572 601215,218159 601410,218097 C 601604,218035 601873,217853 602006,217692 C 602140,217532 602401,217400 602586,217400 C 602933,217400 604994,215218 605234,214598 C 605309,214405 605678,214192 606064,214120 C 606447,214048 606870,213857 607004,213695 C 607139,213533 607371,213400 607519,213400 C 607977,213400 608449,212272 608174,211833 C 607608,210927 608706,209736 609661,210221 C 610222,210505 611956,212347 612105,212816 C 612167,213012 612477,213229 612793,213298 C 613109,213368 613568,213599 613814,213812 C 614060,214026 614467,214200 614719,214200 C 614970,214200 615231,214288 615297,214395 C 615363,214502 615766,214683 616193,214798 C 616840,214972 616994,215116 617112,215654 C 617190,216009 617407,216407 617595,216539 C 618099,216892 617922,221790 617373,222691 C 617169,223026 617001,223550 617001,223856 C 617000,224439 614344,227264 613564,227512 C 613364,227575 613148,227839 613082,228099 C 613017,228358 612792,228726 612582,228916 C 612372,229106 612200,229472 612200,229728 C 612200,230050 611953,230358 611400,230724 C 609773,231800 610259,233502 612922,236050 L 614332,237400 L 615975,237400 C 618248,237400 618924,236789 618380,235229 C 618241,234829 617984,234553 617679,234477 C 616521,234186 615644,231984 616411,231290 C 617227,230552 620200,230699 620200,231478 C 620200,231623 620426,231985 620701,232283 C 621204,232825 621322,234984 620906,236026 C 620675,236604 621672,237464 622442,237351 C 622801,237299 623253,237355 623447,237476 C 623709,237639 623903,237632 624199,237447 C 624536,237237 624660,237260 624999,237599 C 625220,237820 625603,238000 625850,238001 C 626455,238002 629094,239042 629559,239463 C 629806,239687 630276,239800 630954,239800 C 631741,239800 632040,239890 632249,240189 C 632399,240402 632967,240807 633511,241087 C 634055,241367 634811,241913 635190,242298 C 635570,242684 636047,243000 636250,243000 C 636453,243000 636772,243270 636959,243601 C 637147,243931 637477,244258 637693,244328 C 638826,244693 640418,246640 640289,247503 L 640165,248331 L 641879,249916 C 642822,250787 643595,251606 643597,251736 C 643599,251866 643863,252160 644185,252389 C 644506,252618 644826,253065 644896,253382 C 644966,253699 645198,254117 645411,254310 C 645977,254822 645896,255143 645000,255947 C 644068,256784 643885,257817 644600,258200 C 645348,258601 644961,259569 643423,261142 C 642952,261624 642600,262177 642600,262435 C 642600,262682 642375,263113 642099,263392 C 639256,266275 639180,266391 639769,266950 C 641766,268846 642289,269281 642593,269303 C 642882,269324 643697,269889 645070,271020 C 645435,271321 644983,272000 644418,272000 C 644112,272000 643699,272180 643500,272400 C 642940,273019 641317,272965 640891,272314 C 640058,271043 638000,271335 638000,272724 C 638000,273222 637799,273400 636900,273700 C 636101,273966 636031,274863 636800,274968 C 637075,275006 637458,275178 637651,275350 C 638045,275702 638609,276040 639500,276457 C 639830,276612 640225,276889 640378,277074 C 640542,277271 640806,277361 641020,277294 C 641257,277218 641473,277323 641642,277595 C 642113,278354 643603,278940 643929,278494 C 644333,277941 644259,277471 643684,276938 C 642296,275650 643928,274645 645875,275588 C 646343,275815 647008,276000 647351,276000 C 647695,276000 648032,276090 648100,276200 C 648305,276531 650139,276447 650272,276100 C 650336,275935 650583,275800 650822,275800 C 651229,275800 651249,275732 651140,274680 C 650985,273174 651218,272600 651985,272600 C 652333,272600 652658,272461 652767,272266 C 652870,272082 653256,271789 653624,271615 C 654429,271235 654594,270673 654018,270270 C 653470,269886 653491,269561 654111,268823 C 654649,268184 654599,267780 653911,267209 C 653559,266917 653497,265765 653803,265194 C 654205,264444 655481,264313 656510,264916 C 657218,265331 657581,265423 658159,265334 C 659028,265200 659203,265315 660353,266776 C 661299,267978 661316,268034 660914,268657 C 660757,268901 660525,269682 660398,270392 C 660248,271231 660015,271832 659734,272105 C 658797,273013 657991,274065 657873,274535 C 657805,274806 657581,275133 657375,275262 C 656449,275841 657981,277400 659476,277400 C 659661,277400 659863,277532 659925,277692 C 659986,277853 660217,278042 660437,278112 C 660657,278181 660965,278522 661121,278869 C 661278,279216 661495,279658 661603,279850 C 661711,280043 661876,280358 661970,280550 C 662063,280743 662341,281003 662589,281128 C 662836,281253 663367,281665 663769,282042 C 664171,282420 664760,282902 665078,283114 C 665396,283326 665782,283590 665936,283700 C 666143,283847 666309,283779 666565,283442 C 667119,282715 669968,282627 670617,283318 C 670876,283594 671298,283800 671604,283800 C 671991,283800 672444,284116 673254,284950 C 676253,288041 677186,288918 678059,289469 C 678366,289662 678698,290032 678796,290290 C 678894,290548 679142,290881 679347,291030 C 679551,291178 679930,291660 680189,292100 C 680722,293006 681814,294113 682345,294284 C 683240,294574 683600,295597 683600,297849 C 683600,300436 683739,300841 685043,302050 C 686456,303360 687600,303324 687600,301969 C 687600,301667 687704,301190 687832,300909 C 688003,300535 688006,300272 687845,299919 C 687686,299569 687687,299240 687848,298713 C 688049,298059 688028,297957 687635,297682 C 687086,297297 687010,295541 687519,294979 C 687813,294654 687803,294532 687401,293463 C 686535,291166 686865,290293 688406,290802 C 689931,291305 690344,292191 689632,293429 C 689152,294262 689078,294998 689436,295356 C 689566,295486 689723,295976 689786,296446 C 689897,297277 689923,297303 690754,297414 C 692148,297600 692335,298865 691145,300055 C 690948,300252 690468,300911 690080,301518 C 689691,302126 689244,302672 689087,302733 C 688661,302896 688738,303369 689300,304036 C 690611,305595 688938,306811 687424,305400 C 686312,304363 686159,304386 685413,305707 C 685070,306316 684589,306891 684344,306984 C 684100,307078 683729,307344 683519,307577 C 683109,308032 681926,308166 681690,307783 C 681616,307664 681183,307395 680728,307186 C 680273,306976 679747,306694 679559,306559 C 679276,306355 679137,306389 678746,306757 C 678487,307001 678036,307200 677744,307200 C 677426,307200 677132,307354 677009,307584 C 676896,307795 676553,308022 676248,308090 C 675942,308157 675424,308434 675096,308705 L 674500,309198 L 674975,309602 C 675237,309824 675687,310063 675975,310134 C 676264,310205 676869,310564 677321,310932 C 677772,311299 678328,311600 678556,311600 C 678784,311600 679148,311825 679364,312100 C 679581,312375 679830,312600 679918,312600 C 680006,312600 680309,312821 680591,313091 C 681086,313566 682404,314376 683369,314799 C 683627,314912 684212,315301 684669,315663 C 685126,316026 685750,316429 686056,316559 C 686361,316690 686663,316932 686727,317098 C 686794,317274 687092,317400 687440,317400 C 687768,317400 688269,317583 688553,317806 C 688881,318064 689330,318200 689785,318180 C 690178,318163 690725,318239 691000,318349 C 692066,318778 694390,318871 694799,318501 C 695318,318031 701416,317982 701959,318444 C 702784,319145 704065,319603 704390,319313 C 704561,319160 705150,318970 705700,318891 C 706250,318811 706939,318578 707231,318373 C 707523,318168 707819,318000 707889,318000 C 707959,318000 708215,317813 708458,317585 C 708923,317147 710179,317168 710727,317622 C 710862,317735 711289,317866 711675,317914 C 712844,318059 713387,318359 713721,319045 C 714079,319780 715726,321200 716220,321200 C 716398,321200 716974,321530 717502,321933 C 719487,323448 720051,323640 722667,323689 L 725034,323733 L 725967,322669 C 727032,321455 727207,321414 728419,322097 C 728903,322371 729435,322653 729600,322723 C 731035,323337 732075,323926 732267,324233 C 732619,324796 734400,324763 734400,324194 C 734400,323970 734268,323737 734108,323675 C 733947,323614 733759,323386 733691,323170 C 733509,322599 732034,321600 731372,321600 C 731020,321600 730708,321448 730554,321200 C 730409,320969 730087,320800 729791,320800 C 729483,320800 728971,320519 728510,320097 C 728088,319710 727508,319336 727221,319266 C 726934,319196 726485,318973 726223,318770 C 725961,318566 725625,318400 725478,318400 C 725330,318400 725062,318175 724882,317900 C 724701,317625 724402,317400 724217,317400 C 724032,317400 723794,317315 723690,317210 C 723337,316858 721581,316000 721213,316000 C 721013,316000 720327,315595 719689,315100 C 719052,314605 718451,314200 718355,314200 C 718258,314200 718048,313885 717887,313500 C 717726,313115 717508,312800 717402,312800 C 717148,312800 716600,311725 716600,311226 C 716600,311010 716446,310564 716258,310237 C 715958,309715 715952,309599 716206,309293 C 716365,309101 716468,308740 716436,308491 C 716403,308242 716472,307979 716588,307907 C 716705,307835 716800,307270 716800,306651 C 716800,305826 716901,305415 717178,305113 C 717386,304886 717656,304224 717778,303643 C 718325,301027 719985,300551 721717,302513 C 723879,304961 724107,305199 724284,305200 C 724385,305200 724989,305737 725625,306394 C 726820,307626 727833,308200 728813,308200 C 729462,308200 729552,308310 730117,309800 C 730452,310684 730676,310968 731259,311248 C 732484,311836 732908,315248 731843,315954 C 731002,316513 731170,316833 733399,318918 C 734292,319753 734414,319808 735032,319646 C 735477,319530 735987,319558 736561,319730 C 737145,319904 738017,319949 739261,319869 C 740964,319759 741128,319781 741481,320175 C 741691,320409 741953,320600 742065,320600 C 742177,320600 742427,320744 742622,320920 C 743084,321338 743400,321122 743400,320388 C 743400,319556 744037,319595 744414,320450 C 744687,321070 745600,321508 745600,321018 C 745600,320205 747514,319874 748619,320497 C 749873,321204 750364,321400 750874,321400 C 751576,321400 753856,322213 754313,322627 C 754542,322834 755032,323003 755413,323007 C 755791,323011 756325,323143 756600,323300 C 756875,323457 757348,323589 757650,323593 C 757953,323597 758383,323783 758606,324006 C 758830,324230 759282,324466 759610,324532 C 759939,324598 760257,324730 760316,324826 C 760375,324922 760586,325000 760785,325000 C 760984,325000 761381,325185 761667,325410 C 762090,325743 762267,325778 762606,325597 C 762836,325474 763280,325430 763593,325498 C 763915,325569 764219,325532 764293,325412 C 764365,325295 764758,325200 765167,325200 C 767059,325200 767441,326802 765877,328178 C 764408,329472 764826,330191 767050,330197 L 768000,330200 L 768000,357100 L 768000,384000 L 384000,384000 L 0,384000 L 0,357500 z M 320860,371872 C 320948,371722 321158,371600 321327,371600 C 321899,371600 321473,371100 320848,371038 C 320380,370992 320170,371082 319998,371404 C 319858,371665 319652,371786 319467,371715 C 319301,371651 318927,371786 318636,372015 L 318108,372430 L 319404,372287 C 320150,372204 320768,372028 320860,371872 z M 327114,371984 C 327389,371681 327641,371598 328045,371679 C 328759,371822 328762,371499 328050,371158 C 327723,371002 327500,370733 327500,370497 C 327500,370032 327249,369807 326724,369803 C 326399,369800 326366,369905 326475,370588 C 326547,371041 326516,371428 326400,371500 C 326103,371684 326158,372400 326469,372400 C 326617,372400 326907,372213 327114,371984 z M 324877,371687 C 325186,370883 324033,369723 323040,369838 C 322171,369938 322248,371075 323129,371161 C 323475,371195 323916,371397 324110,371611 C 324536,372082 324719,372100 324877,371687 z M 307911,371583 C 307985,371463 307955,371275 307844,371164 C 307596,370916 306731,371327 306906,371610 C 307066,371869 307745,371850 307911,371583 z M 309600,371512 C 309600,371353 309516,371172 309414,371109 C 309176,370962 308937,371336 309100,371600 C 309284,371898 309600,371842 309600,371512 z M 317410,371288 C 317552,371117 317968,370852 318334,370699 C 319053,370398 319209,369923 318657,369711 C 318412,369617 318097,369820 317562,370417 C 316488,371617 315042,371700 314231,370610 C 313575,369729 313353,369567 313122,369798 C 312935,369985 313294,370666 313901,371272 C 314357,371728 317034,371741 317410,371288 z M 357634,371269 C 358047,370895 358121,370400 357763,370400 C 357488,370400 356600,371190 356600,371435 C 356600,371720 357252,371615 357634,371269 z M 360563,371250 C 360481,370823 359600,370643 359600,371053 C 359600,371435 359795,371600 360248,371600 C 360503,371600 360607,371484 360563,371250 z M 347533,371267 C 347460,371193 347340,371193 347267,371267 C 347193,371340 347253,371400 347400,371400 C 347547,371400 347607,371340 347533,371267 z M 306400,370721 C 306400,370314 305942,370200 304311,370200 C 303147,370200 302749,370118 302335,369792 C 301781,369356 297885,369175 296139,369505 C 295208,369681 295073,370566 296000,370422 C 297529,370185 300925,370324 301500,370647 C 302303,371098 306400,371160 306400,370721 z M 366900,370600 C 366968,370490 366889,370400 366724,370400 C 366559,370400 366368,370490 366300,370600 C 366232,370710 366311,370800 366476,370800 C 366641,370800 366832,370710 366900,370600 z M 371000,369629 C 371000,368976 369997,368392 369403,368698 C 368611,369108 368642,369285 369550,369539 C 370524,369812 371000,369842 371000,369629 z M 327300,367367 C 328842,367463 329267,366879 328150,366198 C 327702,365924 327143,365801 326350,365801 L 325200,365800 L 325200,366722 L 325200,367645 L 325950,367487 C 326363,367401 326970,367347 327300,367367 z M 330611,366671 L 330812,366142 L 331256,366553 C 332141,367373 333420,367088 334491,365833 C 335486,364667 335507,364349 334579,364534 C 334137,364623 333817,364540 333395,364228 C 332674,363695 332197,363687 331545,364200 C 331266,364420 330948,364600 330840,364600 C 330731,364600 330590,364736 330527,364903 C 330463,365070 330183,365292 329905,365398 C 329397,365591 329247,366169 329521,366884 C 329716,367392 330387,367261 330611,366671 z M 335733,363667 C 335660,363593 335600,363653 335600,363800 C 335600,363947 335660,364007 335733,363933 C 335807,363860 335807,363740 335733,363667 z M 234933,357867 C 234860,357793 234740,357793 234667,357867 C 234593,357940 234653,358000 234800,358000 C 234947,358000 235007,357940 234933,357867 z M 608600,356200 C 608600,356090 608460,356000 608288,356000 C 608117,356000 608032,356090 608100,356200 C 608168,356310 608308,356400 608412,356400 C 608515,356400 608600,356310 608600,356200 z M 118735,353050 C 119582,351987 119502,351464 118375,350683 C 117583,350134 117580,350127 117708,349106 C 117828,348141 117806,348067 117318,347845 C 116331,347395 116661,345200 117716,345200 C 117955,345200 118263,345065 118400,344900 C 118537,344735 118916,344600 119242,344600 C 119601,344600 119968,344436 120170,344187 C 120473,343814 120709,343776 122603,343797 C 123756,343809 125082,343820 125548,343819 C 126186,343819 126448,343916 126606,344211 C 126766,344510 127015,344599 127658,344586 C 128121,344577 129005,344631 129621,344707 C 130536,344819 130794,344784 131021,344513 C 131175,344330 131421,344073 131568,343940 C 131716,343808 132185,343363 132610,342950 C 133097,342478 133575,342200 133898,342200 C 134213,342200 134455,342064 134523,341850 C 134684,341335 134953,340783 135405,340037 C 136047,338977 135601,338647 134681,339500 C 134291,339861 133918,340000 133337,340000 C 132873,340000 132379,340138 132172,340326 C 131894,340577 131355,340657 129822,340676 C 128083,340697 127773,340754 127366,341130 C 126736,341711 121942,341738 121521,341163 C 121056,340527 120216,340486 119672,341073 C 119026,341770 117160,341851 116754,341200 C 116245,340386 115131,340655 113856,341900 C 112583,343143 110883,343502 110414,342626 C 110000,341852 109063,341649 105456,341552 C 103562,341501 101897,341369 101756,341259 C 100855,340552 99208,340568 98609,341289 C 98261,341708 98111,341684 97491,341109 C 97091,340738 96821,340646 96391,340732 C 95947,340821 95545,340665 94563,340023 C 93123,339082 92859,339039 92118,339621 C 91678,339968 91424,340019 90693,339909 C 89899,339790 89750,339833 89311,340307 C 88886,340766 88714,340821 88050,340708 C 87430,340604 87170,340666 86710,341028 C 86189,341438 85915,341479 83603,341494 C 81516,341507 80969,341574 80517,341870 C 80027,342191 79400,342234 74725,342265 C 70106,342296 69419,342342 68948,342650 C 68654,342843 68073,343003 67657,343006 C 66839,343013 65800,343731 65800,344290 C 65800,344720 66766,344693 67255,344250 C 67959,343613 73889,343559 74737,344182 C 75263,344569 75591,344598 79700,344624 C 83674,344650 84146,344689 84579,345028 C 84959,345326 85337,345393 86407,345352 C 87463,345311 87841,345376 88144,345650 C 88682,346136 93407,346174 93804,345695 C 94030,345423 94100,345429 94450,345745 C 94795,346058 95329,346104 98960,346137 C 102960,346173 103089,346187 103414,346618 C 103623,346895 103869,347016 104069,346940 C 104955,346600 106000,347563 106000,348719 C 106000,349442 106926,350186 107836,350194 C 108240,350197 108706,350335 108871,350500 C 109051,350680 109541,350800 110095,350800 C 110818,350800 111129,350911 111528,351310 C 111931,351713 112262,351829 113112,351863 C 113703,351887 114298,352018 114433,352153 C 114569,352289 114919,352400 115210,352400 C 115502,352400 116047,352617 116420,352883 C 117240,353465 118340,353545 118735,353050 z M 715745,353000 C 716149,352683 716557,352600 717715,352600 C 718519,352600 719232,352510 719300,352400 C 719701,351751 715899,351538 715321,352177 C 715133,352384 714714,352607 714390,352672 C 714046,352741 713800,352917 713800,353095 C 713800,353554 715123,353489 715745,353000 z M 122850,352103 C 123471,351557 123544,351243 123090,351068 C 122703,350920 121800,351736 121800,352235 C 121800,352732 122191,352683 122850,352103 z M 686703,350876 C 686490,350551 686227,350397 685953,350438 C 685304,350534 685315,350931 685972,351160 C 686297,351273 686635,351576 686724,351833 L 686885,352300 L 686958,351838 C 686998,351585 686883,351152 686703,350876 z M 689600,350200 C 689600,350090 689510,350000 689400,350000 C 689290,350000 689200,350090 689200,350200 C 689200,350310 689290,350400 689400,350400 C 689510,350400 689600,350310 689600,350200 z M 214200,348312 C 214200,347933 213914,347769 213518,347921 C 213011,348115 213141,348600 213700,348600 C 214002,348600 214200,348486 214200,348312 z M 224600,345112 C 224600,344733 224259,344534 223868,344685 C 223615,344782 223602,344862 223802,345102 C 224117,345482 224600,345488 224600,345112 z M 447733,342667 C 447660,342593 447600,342653 447600,342800 C 447600,342947 447660,343007 447733,342933 C 447807,342860 447807,342740 447733,342667 z M 211362,339595 C 212446,339072 212425,338800 211300,338800 C 210433,338800 210400,338822 210400,339400 C 210400,340113 210324,340097 211362,339595 z M 141800,338550 C 142099,338180 142371,338099 143332,338088 C 144111,338080 144686,337954 145059,337709 C 145711,337281 145704,336693 145047,336714 C 144801,336722 143831,336745 142891,336764 C 141304,336797 141146,336839 140677,337350 C 140399,337653 139996,338085 139781,338312 C 139279,338841 139457,339000 140551,339000 C 141227,339000 141522,338894 141800,338550 z M 153234,337869 C 154037,337143 153321,336358 152150,336680 C 151494,336861 150526,337719 150686,337978 C 150906,338333 152812,338252 153234,337869 z M 127991,333911 C 128660,333104 127467,331882 126510,332395 C 126050,332641 125952,332625 125536,332234 C 125282,331995 124887,331800 124659,331800 C 124430,331800 124191,331665 124128,331500 C 123980,331114 123400,331108 123400,331493 C 123400,331654 123580,331882 123800,332000 C 124033,332124 124200,332419 124200,332703 C 124200,333071 124337,333226 124750,333327 C 125053,333401 125614,333628 125997,333831 C 126833,334273 127662,334307 127991,333911 z M 214294,334010 C 214358,333906 214229,333722 214006,333603 C 213548,333358 213476,332809 213850,332421 C 214052,332211 214024,332175 213700,332232 C 213212,332319 213001,333751 213436,334027 C 213788,334250 214150,334243 214294,334010 z M 447237,325397 C 448008,325392 448382,325030 447916,324740 C 447705,324608 447199,324208 446792,323850 C 446385,323493 445865,323200 445638,323200 C 445410,323200 445168,323110 445100,323000 C 445032,322890 444802,322800 444588,322800 C 443836,322800 444121,323667 445100,324357 C 445669,324759 446000,325143 446000,325403 C 446000,325747 446063,325781 446387,325607 C 446600,325493 446982,325399 447237,325397 z M 437152,324023 C 437643,323358 437565,323200 436749,323200 C 436164,323200 435420,323837 435407,324350 C 435393,324879 436700,324634 437152,324023 z M 460684,324479 C 461044,324340 461119,323297 460784,323090 C 460508,322920 459324,324116 459495,324393 C 459638,324623 460200,324664 460684,324479 z M 451388,323423 C 451499,323216 451826,322987 452115,322914 C 453576,322547 454154,321593 453210,321105 C 451855,320405 449800,321017 449800,322122 C 449800,323216 450981,324184 451388,323423 z M 96533,315067 C 96460,314993 96400,315053 96400,315200 C 96400,315347 96460,315407 96533,315333 C 96607,315260 96607,315140 96533,315067 z M 98300,314800 C 98368,314690 98233,314600 98000,314600 C 97767,314600 97632,314690 97700,314800 C 97768,314910 97903,315000 98000,315000 C 98097,315000 98232,314910 98300,314800 z M 175620,305579 C 176260,304894 176297,304755 175992,304185 C 175736,303706 174400,304841 174400,305537 C 174400,306391 174847,306406 175620,305579 z M 121561,295450 C 121527,294928 121410,294500 121300,294500 C 121190,294500 121073,294928 121039,295450 C 120990,296215 121041,296400 121300,296400 C 121559,296400 121610,296215 121561,295450 z M 200174,294859 C 202784,293415 203313,292726 202426,291924 C 201795,291353 198525,291400 197539,291994 C 196638,292537 194269,292505 193645,291941 C 192947,291311 190800,291944 190800,292780 C 190800,293313 191181,293558 192414,293817 C 193011,293942 193648,294175 193829,294335 C 194010,294494 194757,294833 195490,295089 C 196222,295345 196878,295611 196947,295680 C 197240,295973 198944,295540 200174,294859 z M 465763,290814 C 465825,289949 464865,288600 464189,288600 C 464085,288600 464000,288250 464000,287821 C 464000,287031 464223,286800 464985,286800 C 465179,286800 465501,286620 465700,286400 C 465899,286180 466253,286000 466486,286000 C 466965,286000 467769,285501 468161,284960 C 468305,284762 468627,284600 468876,284600 C 469126,284600 469542,284375 469800,284100 C 470058,283825 470437,283600 470641,283600 C 471267,283600 473004,281759 472868,281240 C 472805,280998 472687,280800 472606,280800 C 472525,280800 472221,280580 471931,280311 L 471403,279822 L 466883,279894 C 462629,279962 462335,279991 461918,280383 C 461674,280612 461265,280800 461009,280800 C 460753,280800 460429,280958 460288,281150 C 460076,281439 459714,281500 458220,281500 C 456568,281500 456380,281540 456093,281950 C 455684,282534 455054,282523 454583,281924 C 454264,281518 454081,281463 453342,281546 C 452571,281633 452436,281585 452126,281112 C 451868,280718 451673,280613 451372,280709 C 451102,280795 450815,280696 450515,280414 C 449814,279756 446056,279644 445797,280274 C 445700,280508 445304,280925 444916,281200 C 444046,281817 443854,283487 444600,283954 C 444888,284133 445000,284420 445000,284976 C 445000,285753 448401,289575 450049,290650 C 450798,291138 451926,291112 452200,290600 C 452327,290362 452619,290200 452920,290200 C 453403,290200 454029,289633 454800,288495 C 455349,287685 456418,286943 457255,286790 C 458640,286537 460086,288582 459100,289400 C 458601,289814 458742,290200 459393,290200 C 459781,290200 460060,290338 460200,290600 C 460367,290912 460622,291001 461357,291004 C 461990,291007 462464,291139 462800,291405 C 463194,291717 463554,291790 464500,291751 L 465700,291700 L 465763,290814 z M 495094,291207 C 495440,290824 495418,290783 494319,289727 C 491433,286954 491346,286423 493446,284396 C 494242,283628 494962,283000 495046,283000 C 495131,283000 495200,282506 495200,281902 C 495200,281020 495279,280754 495600,280554 C 495936,280344 496000,280087 496000,278960 C 496000,277649 496019,277598 496800,276876 C 497694,276048 497788,275632 497200,275100 C 496687,274636 496674,273681 497177,273412 C 497384,273301 497615,272966 497690,272668 C 497765,272369 497970,272020 498146,271891 C 498595,271562 498321,271000 497711,271000 C 497435,271000 496915,270820 496555,270601 C 495650,270049 494095,270049 493800,270600 C 493682,270820 493495,271000 493385,271000 C 492971,271000 490685,272181 490300,272594 C 490080,272830 489698,273230 489450,273484 C 488893,274055 488876,274519 489400,274800 C 489692,274956 489800,275219 489800,275775 C 489800,276392 489894,276579 490300,276764 C 490910,277042 491061,278912 490491,279131 C 490322,279196 490015,279576 489810,279975 C 489605,280374 489246,280880 489013,281100 C 488780,281320 488344,281763 488045,282084 C 487745,282404 487298,282848 487050,283070 C 486802,283291 486600,283579 486600,283709 C 486600,283839 486420,284175 486200,284455 C 485980,284734 485800,285230 485800,285557 C 485800,285947 485649,286251 485362,286442 C 484778,286830 486476,288600 487431,288600 C 487802,288600 488097,288763 488308,289084 C 488482,289350 489014,289750 489489,289974 C 489965,290197 490654,290655 491021,290990 C 491880,291775 494456,291911 495094,291207 z M 201560,289160 C 201972,288748 201826,288198 201129,287537 C 200017,286482 199468,285013 199990,284490 C 200932,283547 199806,281064 198557,281329 C 195888,281895 197980,289388 200810,289398 C 201091,289399 201428,289292 201560,289160 z M 208350,288967 C 209088,288750 209347,288767 210309,289094 C 212433,289816 213638,288408 211786,287369 C 211271,287080 210691,286497 210277,285850 C 209480,284605 209035,284516 207976,285389 C 206532,286579 205905,289757 207200,289319 C 207365,289263 207883,289105 208350,288967 z M 514119,288679 L 514500,287957 L 514000,287631 C 513725,287452 513261,287056 512970,286753 C 512301,286056 510412,285937 509961,286563 C 509818,286763 509543,286985 509350,287057 C 508917,287218 508896,287573 509310,287731 C 509487,287800 509745,287690 509915,287475 C 510195,287120 510265,287160 511251,288250 C 512587,289727 513492,289862 514119,288679 z M 212360,282160 C 212731,281789 212658,281641 211850,281135 C 210343,280189 209114,280295 209238,281359 C 209342,282250 211672,282848 212360,282160 z M 445760,279067 C 445848,278470 445340,278168 444365,278238 C 443267,278317 443193,278801 444234,279094 C 444637,279207 445037,279369 445121,279454 C 445368,279701 445695,279503 445760,279067 z M 509600,247633 C 509600,247373 509362,247200 509169,247319 C 508962,247447 509140,247800 509412,247800 C 509515,247800 509600,247725 509600,247633 z M 455320,191520 C 455379,191365 455736,191181 456114,191111 C 456962,190951 457141,189797 456381,189390 C 456032,189203 455984,189048 456093,188468 C 456246,187654 455962,187200 455300,187200 C 455052,187200 454706,186998 454531,186750 L 454214,186300 L 453607,186953 C 452582,188056 452710,189481 453950,190771 C 454985,191848 455158,191942 455320,191520 z M 229400,101207 C 229400,100366 229146,100104 228200,99970 C 227768,99910 227709,99968 227764,100400 C 227799,100675 227835,101148 227843,101450 C 227871,102496 229400,102257 229400,101207 z"
+ id="path8"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348128,366700 C 348063,366531 347765,366400 347446,366400 C 346454,366400 345920,365051 346750,364642 C 347429,364307 350385,364598 350611,365021 C 350780,365336 351044,365400 352167,365400 C 354053,365400 354501,365858 353326,366584 C 352452,367124 348326,367216 348128,366700 z"
+ id="path10"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 507933,365909 C 507701,365733 507313,365672 506878,365742 C 506391,365821 506081,365755 505815,365513 C 505459,365191 505392,365196 504612,365594 C 504158,365826 503685,365952 503560,365875 C 503436,365799 502745,365715 502025,365689 C 500883,365649 500663,365576 500301,365121 C 500008,364754 499695,364600 499242,364600 C 498428,364600 498389,364142 499137,363361 C 499862,362604 501049,362861 501950,363969 C 502168,364236 502200,364219 502200,363838 C 502200,363462 502310,363400 502987,363400 C 503420,363400 504023,363305 504326,363190 C 505268,362832 507590,362784 508219,363110 C 509020,363524 509383,363471 509598,362906 C 509966,361936 511410,362177 513025,363477 C 513313,363710 513831,364053 514175,364241 C 515670,365056 514635,365619 511604,365639 C 510196,365648 509354,365743 509057,365927 C 508513,366262 508397,366261 507933,365909 z"
+ id="path12"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 521634,365425 C 521483,365329 521396,365007 521434,364678 C 521524,363889 522297,363756 522624,364474 C 523026,365354 522428,365928 521634,365425 z"
+ id="path14"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488824,365050 C 488679,364792 488263,364734 486573,364741 C 484110,364751 483469,364347 484177,363230 C 484376,362917 486704,362787 488347,362998 C 489283,363118 489441,363082 489840,362658 C 490397,362065 491075,362124 491167,362773 C 491226,363194 491312,363234 491927,363134 C 492695,363010 493030,363382 492609,363889 C 492425,364111 492445,364282 492697,364668 C 493120,365313 493033,365346 490851,365357 C 489364,365365 488966,365304 488824,365050 z"
+ id="path16"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 587016,365119 C 586828,364892 586674,364856 586503,364998 C 586258,365201 584677,365144 583437,364888 C 583018,364801 582408,364380 581780,363742 L 580787,362732 L 581440,362058 C 582037,361442 582115,361414 582344,361727 C 582700,362214 585195,362243 585728,361767 C 585933,361584 586460,361369 586900,361291 C 587340,361212 587792,361075 587905,360987 C 588456,360554 590137,360549 590537,360978 L 590930,361400 L 592161,360900 C 593465,360371 594114,360288 594594,360592 C 594795,360719 595087,360655 595518,360389 C 596316,359896 596258,359887 597093,360621 C 598721,362050 596755,363964 594851,362803 C 594318,362478 594114,362448 593707,362633 C 593327,362807 593140,362799 592901,362601 C 592486,362256 592372,362412 592251,363487 C 592124,364616 591992,364724 590393,365004 C 587866,365448 587305,365467 587016,365119 z"
+ id="path18"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 426597,363794 C 426434,363691 426108,363605 425873,363603 C 425638,363601 425188,363466 424873,363301 C 424558,363137 424119,363002 423897,363001 C 423675,363001 423169,362826 422773,362613 C 422129,362268 422006,362258 421633,362520 C 421327,362734 421118,362757 420857,362606 C 420661,362493 420251,362312 419946,362204 C 419642,362096 419312,361794 419212,361533 C 418971,360899 416371,361349 415554,362166 C 415115,362605 413937,362438 413196,361831 C 412367,361154 411028,361151 410851,361825 C 410686,362458 409796,362271 408835,361401 C 407793,360459 407731,359742 408682,359634 C 409002,359597 409462,359438 409704,359279 C 410092,359025 410175,359029 410414,359316 C 410932,359941 411570,360034 412190,359576 C 412652,359234 412869,359190 413330,359344 C 413906,359537 415416,358317 416087,357119 C 416491,356396 420730,356482 421426,357228 C 421764,357590 422163,357800 422511,357800 C 422814,357800 423357,358025 423718,358300 C 424078,358575 424462,358800 424571,358800 C 424680,358800 425037,359025 425365,359301 C 425692,359577 426239,359858 426580,359926 C 427279,360066 427405,360508 426800,360700 C 426263,360870 426296,361088 426900,361364 C 427175,361489 427400,361728 427400,361896 C 427400,362342 427952,362267 428100,361800 C 428241,361355 428792,361272 429160,361640 C 429347,361827 429453,361827 429640,361640 C 429772,361508 430209,361400 430610,361400 C 431012,361400 431631,361299 431986,361175 C 432449,361014 432764,361011 433100,361164 C 433458,361327 433623,361313 433795,361106 C 433985,360877 434106,360879 434560,361116 C 434857,361271 435254,361398 435443,361399 C 435632,361399 435882,361580 436000,361800 C 436284,362331 436645,362304 437364,361700 C 438025,361144 438733,361061 439297,361473 C 439910,361921 439369,362994 438527,363001 C 438182,363003 437450,363051 436900,363107 C 435243,363276 433250,363056 432761,362651 C 432209,362192 431064,362278 430625,362810 L 430221,363300 L 429379,362826 C 428560,362365 428529,362362 428219,362727 C 427474,363602 426896,363983 426597,363794 z M 417400,357800 C 417400,357690 417265,357600 417100,357600 C 416935,357600 416800,357690 416800,357800 C 416800,357910 416935,358000 417100,358000 C 417265,358000 417400,357910 417400,357800 z"
+ id="path20"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 599418,360757 C 597679,359342 597936,358900 600500,358900 C 603541,358900 604532,359565 603503,360913 C 602667,362010 600874,361942 599418,360757 z"
+ id="path22"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 428540,360474 C 428267,360200 428406,359973 428808,360036 C 429032,360071 429217,360190 429218,360300 C 429222,360543 428735,360668 428540,360474 z"
+ id="path24"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430056,359750 C 429196,358639 430569,356741 431768,357383 C 432377,357709 432591,357650 432800,357100 C 433049,356445 433715,356435 433878,357084 C 434006,357595 433860,358200 433608,358200 C 433526,358200 433216,358425 432919,358700 C 432622,358975 432269,359200 432134,359200 C 431999,359200 431735,359380 431546,359600 C 431162,360049 430350,360130 430056,359750 z"
+ id="path26"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 526718,356645 C 526398,356602 525937,356437 525693,356277 C 525450,356118 524767,355931 524175,355862 C 523584,355793 522920,355623 522700,355484 C 522418,355305 520999,355210 517877,355162 C 515103,355119 513350,355013 513177,354876 C 513025,354757 512090,354550 511100,354416 C 509903,354254 509166,354050 508900,353807 C 508680,353606 507960,353289 507300,353103 C 505860,352696 504291,351921 503584,351267 C 503300,351005 502589,350615 502004,350402 C 500549,349870 498820,348804 498430,348200 C 497901,347381 496969,346585 496160,346261 C 494816,345723 495939,343741 497575,343764 C 498050,343770 498472,343654 498620,343476 C 499281,342679 502176,342448 503612,343077 C 503800,343159 504228,343007 504691,342693 C 505380,342226 505489,342204 505765,342479 C 506178,342893 505788,343800 505197,343800 C 504970,343800 504316,344255 503742,344811 L 502700,345822 L 503700,346707 C 504250,347193 504845,347594 505023,347596 C 505201,347598 505561,347761 505823,347958 C 506085,348155 506550,348424 506856,348556 C 507161,348688 507463,348932 507527,349098 C 507591,349264 507844,349400 508090,349400 C 508337,349400 508701,349580 508900,349800 C 509099,350020 509432,350200 509639,350200 C 509847,350200 510260,350376 510558,350591 C 510856,350806 511818,351167 512697,351393 C 513808,351680 514439,351962 514773,352322 C 515213,352796 515342,352828 516324,352706 C 517538,352554 518200,352696 518200,353107 C 518200,353336 518594,353371 520348,353294 C 522534,353199 523698,353392 524121,353921 C 524289,354131 524765,354178 526097,354115 C 527737,354037 528800,354236 528800,354620 C 528800,354705 529199,354835 529687,354908 C 530633,355050 530873,355339 530681,356104 C 530525,356728 528942,356944 526718,356645 z"
+ id="path28"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 621486,355534 C 621243,354901 621778,354151 622407,354244 C 622742,354293 623098,354223 623211,354087 C 623467,353779 624134,353939 624290,354345 C 624477,354834 624033,355197 623401,355070 C 622963,354983 622787,355051 622611,355379 C 622361,355847 621644,355947 621486,355534 z"
+ id="path30"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 623519,352821 C 623160,352425 623101,351885 623396,351703 C 623746,351486 624400,351997 624400,352486 C 624400,353093 623928,353273 623519,352821 z"
+ id="path32"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 272400,342800 C 272400,342690 272490,342600 272600,342600 C 272710,342600 272800,342690 272800,342800 C 272800,342910 272710,343000 272600,343000 C 272490,343000 272400,342910 272400,342800 z"
+ id="path34"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 274592,342690 C 274405,342465 274421,342379 274668,342285 C 275005,342155 275400,342320 275400,342590 C 275400,342905 274829,342976 274592,342690 z"
+ id="path36"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 268850,342206 C 268237,341943 268269,341834 269281,340731 L 270163,339771 L 270932,340257 C 271783,340794 272383,341697 272086,341994 C 271810,342269 269370,342428 268850,342206 z"
+ id="path38"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 348848,333293 C 348489,332651 347211,332363 346657,332798 C 346190,333165 345396,333086 344700,332603 C 344590,332527 343825,332482 343000,332504 C 342045,332530 341344,332448 341070,332281 C 340834,332136 339819,331955 338814,331880 C 336921,331737 336480,331529 337103,331073 C 337408,330850 337430,330726 337239,330306 C 336911,329585 337133,329200 337877,329200 C 338335,329200 338718,328999 339254,328479 C 339987,327767 340013,327759 341448,327829 C 342752,327893 342947,327853 343365,327435 C 343929,326871 345316,326976 345774,327617 C 345937,327844 346286,328000 346631,328000 C 346952,328000 347438,328147 347711,328326 C 348053,328550 348457,328618 349005,328545 C 349808,328437 350171,328506 352676,329241 C 354022,329636 355402,330310 355398,330570 C 355390,330943 353778,332373 353229,332494 C 352883,332570 352479,332805 352331,333016 C 352122,333314 351841,333395 351081,333375 C 350541,333361 349862,333414 349571,333494 C 349174,333602 348993,333552 348848,333293 z"
+ id="path40"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 206048,326168 C 205406,325526 206090,324400 207123,324400 C 207889,324400 209062,325425 208953,326000 C 208878,326395 206418,326538 206048,326168 z"
+ id="path42"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 28872,320700 C 28694,320235 28945,319800 29394,319800 C 29851,319800 29950,320370 29560,320760 C 29238,321082 29011,321062 28872,320700 z"
+ id="path44"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 373639,316030 C 373342,315717 372932,315401 372728,315328 C 372445,315227 372377,315050 372444,314589 C 372493,314255 372458,313936 372367,313879 C 372170,313758 372168,312039 372364,311586 C 372616,311004 375127,308899 376306,308281 C 378065,307360 378393,306001 376896,305833 C 376201,305755 375681,305337 375254,304510 C 375086,304185 374825,303796 374674,303645 C 374233,303205 374344,302321 374900,301837 C 375503,301313 375529,300979 375005,300505 C 374612,300149 374612,300145 375019,299574 C 375494,298906 376262,298813 376855,299350 C 377246,299704 378112,299781 382700,299871 C 385537,299927 387600,301031 387600,302495 C 387600,302700 387743,303027 387918,303220 C 388363,303712 388114,304309 387343,304597 C 386142,305046 385301,305566 385073,306000 C 384772,306577 383576,307799 383311,307803 C 383066,307805 381380,309686 381026,310350 C 380894,310598 380496,310923 380143,311073 C 378844,311623 378633,312108 379365,312864 C 380508,314043 380169,315200 378679,315200 C 378011,315200 377666,315344 377000,315900 C 375863,316850 374465,316904 373639,316030 z"
+ id="path46"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 55350,315184 C 54964,314959 54880,314298 55211,314093 C 55583,313863 56400,314187 56400,314564 C 56400,315239 55926,315519 55350,315184 z"
+ id="path48"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 366475,309203 C 365829,308544 365125,308004 364911,308003 C 363820,307995 363037,306336 363750,305542 C 364085,305169 364081,305140 363650,304852 C 363403,304686 363200,304399 363200,304214 C 363200,304028 363068,303702 362906,303488 C 362466,302907 362536,302511 363204,301795 C 363923,301026 365265,301022 365774,301787 C 365947,302047 366265,302200 366631,302200 C 366952,302200 367447,302353 367732,302539 C 368017,302726 368549,302858 368915,302834 C 369422,302799 369636,302893 369814,303226 C 370020,303610 370398,303999 371360,304814 C 371541,304967 371580,305300 371488,305908 C 371381,306622 371435,306881 371779,307318 C 372526,308268 371870,309800 370716,309800 C 370459,309800 369926,309935 369531,310100 C 368216,310650 367765,310517 366475,309203 z"
+ id="path50"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 27504,306804 C 27306,306586 26835,306350 26457,306279 C 25708,306138 25376,305668 25821,305378 C 26307,305061 28752,305736 29035,306265 C 29509,307152 28227,307603 27504,306804 z"
+ id="path52"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 100933,307067 C 100376,306509 101674,304522 102335,304920 C 102911,305268 102930,306486 102366,306881 C 101899,307209 101170,307303 100933,307067 z"
+ id="path54"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 5036,302550 C 5071,302303 5235,302100 5400,302100 C 5565,302100 5729,302303 5764,302550 C 5813,302896 5729,303000 5400,303000 C 5071,303000 4987,302896 5036,302550 z"
+ id="path56"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 686888,288516 C 686569,288282 686497,287971 686480,286766 C 686454,284827 686458,284845 686017,284705 C 685806,284638 685542,284323 685431,284004 C 685270,283540 685075,283398 684465,283296 C 683238,283092 683200,283060 683200,282228 C 683200,281018 684137,280814 685169,281800 C 685618,282229 685993,282400 686486,282400 C 686866,282400 687232,282490 687300,282600 C 687503,282929 688113,282827 688500,282400 C 689007,281840 689903,281886 690437,282500 C 690676,282775 690968,283002 691086,283003 C 691204,283005 691512,283230 691771,283503 C 692290,284051 692622,284115 693169,283773 C 693688,283449 694723,283966 694639,284508 C 694550,285074 693847,285600 693179,285600 C 691821,285600 690170,286409 689042,287628 C 687916,288844 687545,288997 686888,288516 z"
+ id="path58"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 403164,282500 C 402889,281897 403213,281000 403706,281000 C 404132,281000 405200,281566 405200,281792 C 405200,283002 403639,283544 403164,282500 z"
+ id="path60"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 684210,279146 C 683870,278974 683633,278591 683438,277899 C 682487,274517 681877,273367 680584,272516 C 680153,272232 679461,271777 679047,271505 C 678465,271123 678131,271036 677585,271125 C 676758,271259 675816,270605 675295,269534 C 674479,267858 674417,267840 669328,267816 C 668904,267814 668454,267732 668328,267634 C 668203,267536 667832,267391 667503,267312 C 665333,266792 663597,263397 665673,263734 C 666269,263831 666410,263760 666897,263122 C 667421,262435 668119,262183 668482,262550 C 668563,262633 669141,262790 669765,262900 C 670801,263083 670932,263165 671266,263850 C 671756,264851 672203,264813 673291,263677 L 674176,262753 L 675427,264027 L 676678,265300 L 677933,265259 C 678716,265233 679397,265327 679744,265507 C 680050,265667 680397,265798 680515,265799 C 680633,265799 680942,266025 681200,266300 C 681458,266575 681823,266800 682010,266800 C 682198,266800 682468,266941 682611,267113 C 682762,267296 683043,267382 683287,267321 C 683938,267158 684800,268170 684800,269098 C 684800,269273 684995,269795 685233,270258 C 685471,270721 685685,271505 685709,272000 C 685750,272862 685967,273553 686400,274200 C 686510,274365 686690,274725 686800,275000 C 686909,275275 687110,275656 687247,275847 C 687447,276129 687431,276317 687161,276847 C 686977,277206 686773,277695 686705,277934 C 686347,279208 685319,279707 684210,279146 z"
+ id="path62"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 402714,278886 C 402287,278459 402314,277023 402760,276444 C 403296,275747 404207,275756 404448,276461 C 404981,278014 403672,279844 402714,278886 z"
+ id="path64"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 434118,274138 C 433593,273754 433885,273400 434726,273400 C 435339,273400 435420,273457 435364,273850 C 435287,274389 434660,274534 434118,274138 z"
+ id="path66"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 412750,273439 C 411866,273382 411800,273341 411803,272839 C 411807,272089 411945,271943 413235,271318 C 413859,271016 414419,270640 414478,270484 C 414591,270191 415691,270094 416289,270323 C 417252,270693 417909,273380 417050,273435 C 416058,273499 413719,273501 412750,273439 z"
+ id="path68"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 430967,272508 C 430648,271807 431193,271000 431987,271000 C 432638,271000 433600,271964 433600,272615 C 433600,273273 431273,273179 430967,272508 z"
+ id="path70"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 454917,266367 C 454464,265915 454388,265732 454574,265546 C 454950,265170 455885,265782 455963,266456 C 456045,267159 455680,267128 454917,266367 z"
+ id="path72"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 663300,263222 C 662457,263093 662115,262298 662530,261431 C 662617,261249 662691,260700 662694,260211 C 662708,258083 664603,258606 665339,260940 C 665651,261931 665651,262048 665340,262701 C 664986,263442 664899,263465 663300,263222 z"
+ id="path74"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641991,244650 C 641527,244128 641027,243418 640881,243074 C 640735,242730 640477,242395 640307,242331 C 639743,242114 640228,240840 641404,239450 C 641967,238785 644200,240474 644200,241564 C 644200,241838 644425,242357 644700,242718 C 646233,244727 643677,246550 641991,244650 z"
+ id="path76"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 210066,241308 C 208341,240558 209769,238628 212075,238594 C 212309,238590 212675,238455 212888,238294 C 213102,238132 213572,238000 213933,238000 C 214295,238000 214885,237820 215245,237601 C 215605,237381 216021,237201 216169,237201 C 216316,237200 216984,236705 217653,236100 C 218321,235495 219010,234997 219184,234993 C 219358,234989 219759,234774 220075,234515 C 220529,234144 220812,234066 221412,234147 C 221993,234225 222303,234148 222714,233825 C 223720,233033 224414,233504 224392,234963 C 224378,235872 222203,237624 221131,237590 C 220331,237564 219177,238033 217985,238868 C 217725,239050 217365,239200 217186,239200 C 217008,239200 216699,239380 216500,239600 C 216301,239820 215896,240000 215600,240000 C 215304,240000 214899,240180 214700,240400 C 214501,240620 214104,240800 213817,240800 C 213513,240800 213192,240966 213046,241200 C 212743,241686 211074,241747 210066,241308 z"
+ id="path78"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 205853,240656 C 205101,240562 204600,239960 204600,239149 C 204600,238312 205078,238271 206500,238985 C 209077,240280 208790,241021 205853,240656 z"
+ id="path80"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 51801,234101 C 51484,233719 52027,232800 52570,232800 C 53065,232800 53879,233704 53732,234090 C 53574,234501 52139,234509 51801,234101 z"
+ id="path82"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 231685,234117 C 231364,233892 231114,233879 230471,234050 C 228986,234447 228581,233654 229323,231801 C 229989,230136 232951,229406 234936,230418 C 235858,230888 236266,230897 236931,230461 C 237422,230139 237463,230141 237724,230499 C 238295,231280 237795,232600 236928,232600 C 236680,232600 236173,232825 235800,233100 C 235427,233375 235041,233600 234943,233600 C 234844,233600 234534,233780 234255,234000 C 233651,234475 232284,234537 231685,234117 z"
+ id="path84"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 642865,231332 C 642005,230911 641600,230330 641600,229515 C 641600,229259 641457,228930 641283,228786 C 641066,228606 641002,228339 641081,227945 C 641165,227524 641068,227197 640722,226734 C 639813,225518 639837,224319 640793,223186 C 641592,222237 641616,222168 641633,220694 C 641646,219619 641740,219089 641956,218872 C 643141,217688 644703,218306 644160,219745 C 643719,220913 644182,221070 645732,220277 C 646458,219904 647194,219600 647365,219600 C 647537,219600 647923,219365 648223,219078 C 648898,218431 649200,218592 649200,219598 C 649200,220455 648909,220740 647148,221605 C 646624,221862 646052,222232 645876,222427 C 645649,222677 645385,222747 644978,222666 C 644379,222546 644231,222751 644630,223150 C 644803,223323 644778,223504 644530,223883 C 644024,224655 644123,225101 645100,226443 C 646282,228067 646324,228887 645280,229960 C 644884,230367 644432,230948 644275,231250 C 643949,231878 643979,231876 642865,231332 z"
+ id="path86"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 218682,230126 C 218532,229735 218737,229400 219126,229400 C 219322,229400 219405,229552 219364,229834 C 219286,230362 218845,230551 218682,230126 z"
+ id="path88"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 498800,218631 C 498800,218231 499389,217600 499762,217600 C 500036,217600 500294,218487 500107,218789 C 499869,219173 498800,219044 498800,218631 z"
+ id="path90"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649912,216545 C 650110,213843 648921,213585 647179,215951 C 646497,216877 645852,217001 645266,216319 C 644677,215634 644625,214405 645172,214064 C 645392,213926 645600,213480 645682,212968 C 646008,210932 648376,210613 649232,212490 C 649451,212972 650480,213600 651049,213600 C 651704,213600 652059,214405 652329,216503 C 652475,217630 651772,218400 650597,218400 L 649776,218400 L 649912,216545 z"
+ id="path92"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 652210,212350 C 652097,212213 651545,211538 650985,210850 L 649966,209600 L 648592,209728 C 646444,209928 645600,209423 645600,207938 C 645600,206985 646121,206558 646584,207131 C 647473,208228 648417,207954 648919,206452 C 649818,203760 651428,202983 652548,204700 C 652998,205389 653450,205807 654004,206043 L 654808,206387 L 654774,208293 C 654750,209657 654661,210267 654459,210434 C 654304,210563 654046,210981 653886,211364 C 653439,212435 652658,212894 652210,212350 z"
+ id="path94"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 555062,211047 C 554374,210192 554145,207629 554699,207000 C 554844,206835 555062,206328 555183,205873 C 555546,204509 557270,203809 557805,204809 C 557939,205060 558357,205548 558734,205892 C 559373,206478 559508,207200 558979,207200 C 558880,207200 558800,207502 558800,207872 C 558800,208259 558588,208857 558300,209281 C 558025,209686 557800,210156 557800,210324 C 557800,211633 555929,212126 555062,211047 z"
+ id="path96"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 632589,205750 C 632322,205393 631877,204775 631601,204378 C 630972,203472 629825,202472 629300,202371 C 629076,202328 628746,201966 628549,201547 C 628310,201040 628064,200800 627785,200800 C 627106,200800 626640,200439 626500,199802 C 626428,199471 626289,199200 626191,199200 C 626094,199200 625706,198930 625331,198600 C 624907,198228 624427,198000 624066,198000 C 623027,198000 621729,197190 621502,196400 C 621145,195163 621094,195135 619443,195260 C 617340,195419 615455,192655 617011,191693 C 617127,191622 617446,191054 617720,190432 C 617994,189809 618439,189094 618709,188842 C 619028,188545 619200,188164 619200,187759 C 619200,186932 620094,185430 620657,185310 C 620901,185258 621616,185116 622247,184994 C 622877,184873 623442,184694 623502,184597 C 623562,184500 624364,184473 625283,184538 C 626823,184647 626985,184622 627322,184228 C 627524,183993 627881,183800 628117,183800 C 628352,183800 628876,183575 629281,183300 C 630488,182481 632600,183387 632600,184724 C 632600,184883 632743,185233 632919,185500 C 633146,185848 633200,186210 633106,186767 C 632982,187500 633024,187589 633815,188266 C 634996,189277 635400,190024 635400,191197 C 635400,192296 635779,192812 636950,193305 C 637760,193647 637758,193718 636901,195140 C 636516,195778 636201,196421 636201,196568 C 636200,196716 636020,197066 635800,197345 C 635078,198263 635256,199203 636350,200247 C 639230,202993 639392,203536 637484,204046 C 636815,204225 636393,204504 635958,205053 C 634779,206541 633395,206828 632589,205750 z"
+ id="path98"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 588070,203094 C 587978,202855 588075,202623 588367,202387 C 588605,202194 588800,201900 588800,201734 C 588800,201568 589321,200907 589958,200266 C 590595,199625 591966,198155 593004,197000 C 594042,195845 594947,194855 595016,194800 C 595403,194489 595617,193694 595500,193002 C 595374,192253 595395,192219 596385,191571 C 597157,191066 597428,190754 597519,190269 C 597585,189919 597890,189407 598198,189133 C 598506,188859 598868,188289 599003,187867 C 599139,187445 599408,186920 599602,186700 C 599795,186480 600012,186107 600084,185871 C 600287,185199 604180,181436 604817,181296 C 605169,181219 605670,180787 606193,180109 C 607025,179030 607413,178810 608500,178800 C 609394,178791 609568,178591 609637,177496 C 609700,176505 609704,176500 610439,176439 C 610995,176392 611336,176198 611812,175655 L 612446,174934 L 614952,174872 C 616781,174826 617545,174732 617779,174522 C 617970,174350 618318,174276 618637,174338 C 618936,174396 619461,174299 619818,174121 C 620172,173944 620653,173800 620886,173800 C 621120,173800 621518,173655 621770,173478 C 622162,173204 622358,173192 623092,173398 C 623702,173569 624067,173578 624344,173430 C 624738,173219 628530,173063 628717,173250 C 629486,174019 628430,175081 627063,174914 C 626325,174823 626219,174861 626163,175235 C 626128,175468 625965,175727 625800,175810 C 625635,175893 624895,176244 624156,176590 C 623417,176936 622759,177305 622694,177410 C 622449,177805 620782,177620 620203,177133 C 619308,176380 618073,176534 616860,177550 C 615985,178282 615788,178359 614739,178371 C 613306,178388 612264,178571 611560,178927 C 611263,179077 610838,179200 610615,179200 C 610263,179200 610235,179267 610405,179713 C 610512,179995 610600,180794 610600,181489 C 610600,182395 610689,182825 610916,183013 C 611102,183168 611195,183468 611143,183743 C 611077,184088 611204,184318 611627,184619 C 612480,185226 612282,186593 611247,187244 C 610946,187434 610557,187694 610381,187823 C 610126,188012 609941,187968 609447,187603 C 608739,187080 608476,187200 607273,188600 C 606250,189790 606000,190263 606000,191005 C 606000,191910 605039,193268 604076,193725 C 603695,193906 603140,194311 602842,194627 C 602545,194942 602104,195200 601862,195200 C 601620,195200 601305,195368 601161,195573 C 601018,195778 600623,196007 600285,196081 C 599947,196156 599223,196640 598677,197158 C 597574,198204 596198,199200 595856,199200 C 595582,199200 594031,200930 593739,201561 C 593440,202207 591885,203210 591237,203175 C 590942,203159 590139,203214 589453,203298 C 588358,203432 588190,203408 588070,203094 z"
+ id="path100"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 657263,196648 C 656385,196072 655514,190041 656225,189469 C 656925,188907 657368,188958 657718,189640 C 657904,190003 658120,190345 658198,190400 C 658614,190693 658807,191413 658582,191834 C 658381,192210 658420,192319 658875,192651 C 659486,193096 659512,193286 659077,194100 C 658901,194430 658699,195150 658628,195700 C 658497,196724 657953,197101 657263,196648 z"
+ id="path102"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 649336,194591 C 649030,194153 645708,193979 643961,194309 C 642028,194674 639428,192852 640440,191840 C 640790,191490 641133,191545 641575,192019 C 641942,192413 642205,192442 645933,192501 C 648115,192535 650008,192572 650141,192582 C 650273,192592 650441,192916 650514,193302 C 650586,193688 650725,194054 650823,194114 C 650920,194174 651000,194398 651000,194612 C 651000,195174 649733,195158 649336,194591 z"
+ id="path104"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 189327,191385 C 188683,190879 188652,190326 189245,189911 C 190170,189263 191000,189636 191000,190700 C 191000,191815 190259,192119 189327,191385 z"
+ id="path106"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662650,190868 C 661852,190545 664040,187800 665095,187800 C 665910,187800 667298,186246 667312,185319 C 667330,184108 668254,182708 668830,183016 C 669142,183183 669379,183183 669748,183014 C 670022,182890 670423,182844 670640,182913 C 670897,182994 671192,182889 671488,182611 C 671738,182376 672293,182131 672721,182065 C 673150,181999 673647,181819 673826,181663 C 674029,181488 674345,181429 674662,181508 C 675246,181655 677015,180855 677686,180139 C 677914,179897 678325,179519 678600,179299 C 680152,178060 680514,177017 679799,175845 C 679040,174600 679632,173798 681095,174089 C 681985,174267 683553,173620 684583,172650 C 685079,172183 685579,171792 685693,171783 C 685807,171774 686484,171725 687199,171674 C 687913,171624 688583,171497 688689,171391 C 688999,171081 689602,171172 689747,171550 C 689820,171743 690087,172215 690340,172600 C 691522,174399 692805,175046 694173,174532 C 694683,174341 695269,174146 695476,174099 C 695684,174051 696114,173717 696434,173356 C 698203,171357 699699,170000 700134,170000 C 700390,170000 700600,169921 700600,169824 C 700600,169495 701696,169233 703550,169119 C 705541,168996 705767,169141 705209,170183 C 704904,170754 702293,172800 701870,172800 C 701243,172800 699202,175457 699201,176276 C 699200,176483 699386,176954 699614,177323 C 700070,178061 700064,178773 699600,179017 C 698712,179484 697898,179800 697585,179800 C 697079,179800 696146,180643 695690,181512 C 695333,182193 691864,184200 691044,184200 C 690937,184200 690737,184335 690600,184500 C 690445,184687 690002,184801 689426,184802 C 688149,184806 686501,185275 685618,185887 C 684821,186440 684324,186513 683503,186201 C 682976,186001 681613,186493 681302,186997 C 681233,187109 680788,187200 680313,187200 C 679789,187200 679351,187318 679200,187500 C 678879,187887 677427,187883 676912,187494 C 676698,187332 676266,187200 675951,187200 C 675499,187200 675337,187078 675176,186616 C 675064,186295 674664,185823 674287,185566 C 673911,185310 673602,185033 673601,184950 C 673601,184868 673392,184800 673138,184800 C 672308,184800 671087,186831 671309,187842 C 671660,189440 667600,191905 666600,190700 C 666280,190315 665066,190316 664327,190701 C 663758,190998 663128,191061 662650,190868 z"
+ id="path108"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639272,189610 C 639207,189286 638984,188867 638777,188679 C 638511,188438 638400,188065 638400,187407 C 638400,186895 638268,186302 638106,186088 C 637651,185486 637745,184963 638451,184182 C 638808,183787 639299,183187 639543,182850 L 639986,182236 L 639579,181718 C 639064,181064 639152,180450 639833,179944 C 641250,178890 642450,180929 641594,182937 C 641340,183531 641354,183600 641811,183980 C 642534,184582 643000,184523 643000,183830 C 643000,183133 643377,182000 643609,182000 C 643702,182000 643896,181756 644039,181458 C 644183,181161 644495,180868 644734,180808 C 644973,180749 645362,180453 645599,180150 C 646147,179449 646419,179457 646962,180192 C 647481,180893 647558,182152 647093,182330 C 646709,182478 646000,183916 646000,184547 C 646000,184806 645782,185237 645515,185504 C 643919,187100 644337,188479 646466,188640 C 647685,188732 648042,188987 647951,189700 C 647882,190242 646526,190376 645993,189894 C 645715,189642 645430,189593 644832,189695 C 644235,189796 643844,189729 643244,189423 L 642449,189017 L 641674,189603 C 640570,190438 639438,190442 639272,189610 z"
+ id="path110"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 595325,189093 C 594967,188160 595549,187263 596133,187848 C 596374,188088 596403,188292 596257,188730 C 596041,189377 595513,189583 595325,189093 z"
+ id="path112"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 654446,185366 C 654076,184996 654150,184307 654605,183896 C 655149,183404 655445,183727 655364,184722 C 655297,185539 654898,185818 654446,185366 z"
+ id="path114"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 708589,183136 C 708210,182771 707630,182154 707300,181765 C 706487,180807 704962,180135 704293,180440 C 703896,180620 703731,180600 703435,180332 C 703233,180148 702737,180000 702328,180000 C 700829,180000 701228,178443 702805,178138 C 703297,178043 703786,177883 703890,177782 C 704144,177538 704945,177550 705100,177800 C 705168,177910 705583,178000 706021,178000 C 706602,178000 706939,178128 707260,178472 C 707502,178732 707903,179008 708152,179086 C 708401,179164 708737,179486 708900,179800 C 709063,180114 709354,180423 709548,180485 C 710074,180655 711400,181936 711400,182274 C 711400,183621 709650,184158 708589,183136 z"
+ id="path116"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 714600,179325 C 714600,178669 716253,176800 716834,176800 C 717474,176800 717550,177111 717174,178188 C 716861,179087 714600,180086 714600,179325 z"
+ id="path118"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 719107,175612 C 718549,174709 720926,172112 721550,172943 C 722013,173561 721860,174766 721250,175303 C 720686,175800 719343,175993 719107,175612 z"
+ id="path120"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 723343,175076 C 723073,174807 723200,174187 723550,174063 C 723743,173995 724060,173802 724255,173634 C 724738,173219 725047,173563 724965,174425 C 724901,175093 723802,175535 723343,175076 z"
+ id="path122"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 653295,174131 C 652700,173726 651019,173364 650380,173504 C 649881,173614 649800,173563 649692,173064 C 649487,172123 649142,171580 648557,171278 C 647829,170901 647818,170173 648531,169611 C 649197,169087 649633,169208 650746,170226 C 651211,170652 651722,171000 651881,171000 C 652041,171000 652295,171123 652445,171274 C 652596,171424 652939,171611 653209,171690 C 655169,172258 655847,173136 654932,173924 C 654303,174464 653865,174520 653295,174131 z"
+ id="path124"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 641607,173813 C 641348,173329 641337,172600 641590,172600 C 641694,172600 642022,172375 642319,172100 C 643124,171354 644200,171883 644200,173026 C 644200,173900 642009,174565 641607,173813 z"
+ id="path126"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 633000,173300 C 632308,173051 632064,172644 632276,172092 C 632409,171744 633000,171931 633000,172321 C 633000,172709 633386,172668 634155,172199 C 634838,171783 635698,171673 635886,171978 C 635947,172076 636245,172216 636548,172289 C 638213,172691 638600,172840 638600,173081 C 638600,173616 634342,173783 633000,173300 z"
+ id="path128"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 725445,172289 C 724856,171877 724866,171125 725463,170853 C 726694,170292 728699,171333 728314,172334 C 728166,172721 726013,172687 725445,172289 z"
+ id="path130"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 639544,171277 C 639242,170975 639405,170225 639800,170100 C 640020,170030 640200,169899 640200,169808 C 640200,169517 640817,169395 641214,169608 C 641597,169812 641769,170877 641450,171065 C 641134,171252 639680,171414 639544,171277 z"
+ id="path132"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 687750,168108 C 687396,167682 687200,167211 687200,166788 C 687200,166427 687071,165989 686914,165815 C 686757,165642 686584,164990 686531,164367 C 686463,163581 686307,163107 686019,162819 C 685572,162372 685598,159625 686055,159046 C 686194,158869 686156,158683 685928,158431 C 685712,158192 685600,157710 685600,157018 C 685600,154979 682907,153223 681926,154623 C 681584,155111 680521,155800 680110,155800 C 679955,155800 679652,156025 679436,156300 C 679197,156604 678839,156800 678523,156800 C 678220,156800 677899,156967 677754,157200 C 677611,157428 677287,157600 677000,157600 C 676713,157600 676389,157772 676246,158000 C 676109,158220 675811,158400 675585,158400 C 674750,158400 673800,159370 673800,160224 C 673800,160651 673871,161000 673957,161000 C 674043,161000 674286,161293 674496,161650 C 674706,162008 674995,162419 675139,162564 C 675282,162710 675400,162943 675400,163083 C 675400,163223 675580,163501 675800,163700 C 676570,164397 675782,166297 674800,166112 C 674525,166060 673892,165941 673393,165847 C 672894,165753 672369,165604 672226,165516 C 672061,165414 671760,165555 671397,165903 C 670942,166339 670692,166429 670163,166351 C 669645,166274 669404,166356 669060,166726 C 668340,167500 666866,167243 666422,166268 C 666128,165624 664849,165073 664359,165379 C 663834,165707 663442,165648 663306,165218 C 663239,165009 663057,164788 662901,164728 C 662746,164668 662424,164233 662187,163760 C 661950,163287 661529,162658 661252,162362 C 660922,162009 660784,161682 660854,161414 C 661310,159673 659205,159437 657297,161016 L 655777,162273 L 655208,161936 C 654895,161751 654464,161600 654250,161600 C 654037,161600 653699,161420 653500,161200 C 653301,160980 652978,160800 652783,160800 C 652588,160800 652305,160677 652155,160526 C 652004,160375 651592,160103 651240,159921 C 650882,159736 650600,159432 650600,159232 C 650600,158494 647792,156000 646961,156000 C 645713,156000 644800,155038 644800,153724 C 644800,152235 642767,149600 641619,149600 C 641386,149600 641042,149420 640854,149200 C 640570,148869 640264,148800 639083,148800 C 637994,148800 637540,148711 637177,148428 C 636667,148030 635755,147788 634560,147734 C 634154,147715 633708,147588 633570,147450 C 633433,147313 633117,147200 632870,147200 C 632622,147200 632348,147087 632260,146949 C 632010,146556 630657,145600 630352,145600 C 630200,145600 629902,145468 629688,145306 C 629475,145145 629132,145010 628927,145006 C 628465,144998 627200,143650 627200,143166 C 627200,142970 627020,142515 626801,142155 C 626581,141795 626401,141174 626401,140774 C 626400,140374 626265,139937 626100,139800 C 625735,139497 625712,139076 626050,138860 C 626188,138772 626508,138403 626763,138040 L 627226,137381 L 626813,136527 C 626284,135434 626291,134842 626841,134256 C 627136,133942 627289,133516 627302,132969 C 627315,132450 627447,132061 627661,131903 C 627848,131767 628000,131460 628000,131220 C 628000,130801 628389,130142 629346,128940 C 629731,128455 629775,128224 629672,127233 C 629564,126197 629602,126028 630076,125465 C 630364,125122 630600,124709 630600,124546 C 630600,124382 630729,124142 630887,124011 C 631642,123384 631444,121816 630417,120295 C 629443,118851 629885,117860 631750,117307 C 631998,117233 632200,117099 632200,117008 C 632200,115897 636876,116213 638189,117413 C 639163,118303 639346,118385 640900,118632 C 643423,119032 643749,119043 644229,118742 C 644932,118302 647137,118509 647422,119042 C 647833,119809 648478,120400 648905,120400 C 649143,120400 649491,120569 649678,120775 C 649864,120982 650323,121200 650697,121261 C 651071,121321 651637,121563 651955,121798 C 652460,122172 652837,122231 654944,122270 C 656621,122301 657455,122396 657681,122584 C 658189,123006 659512,123249 661800,123341 C 662955,123387 663986,123509 664090,123613 C 664397,123915 664842,123830 665325,123377 C 665608,123110 666131,122919 666738,122861 C 667758,122763 668993,122267 669261,121848 C 669350,121710 669733,121466 670113,121308 C 670820,121012 672985,118844 673244,118173 C 673418,117720 673547,117715 674915,118113 C 675922,118406 676800,119171 676800,119756 C 676800,119863 676929,120058 677087,120189 C 677554,120577 678044,119645 677887,118667 C 677767,117911 677796,117857 678731,117159 C 680397,115914 681767,114709 681784,114474 C 681793,114350 681935,114137 682100,114000 C 682297,113836 682400,113390 682400,112695 C 682400,110947 685103,108731 686817,109073 C 687220,109154 687595,109081 687939,108856 C 688826,108275 690999,108302 691888,108904 C 692750,109490 693844,109554 694353,109050 C 695818,107599 696963,107613 698474,109100 C 699088,109705 699677,110200 699781,110200 C 699886,110200 700100,110329 700258,110487 C 700481,110709 700804,110738 701709,110615 C 703873,110321 705295,111769 705171,114137 L 705100,115492 L 705850,115848 C 706412,116114 706600,116324 706600,116687 C 706600,116954 706721,117292 706868,117440 C 707352,117923 707565,118495 707462,119033 C 707383,119447 707500,119685 708003,120131 C 709533,121486 711029,124439 711535,127100 C 711597,127430 711778,127848 711936,128029 C 712557,128739 712532,131813 711898,132565 C 711352,133215 711345,133254 711450,135305 C 711549,137246 711528,137411 711128,137778 C 710893,137995 710130,138696 709434,139336 C 707027,141548 706614,142004 706735,142320 C 706893,142732 705698,143947 704979,144105 C 704445,144222 703453,145647 702675,147417 C 702427,147980 701493,148800 701100,148800 C 700965,148800 700632,148974 700361,149188 C 700090,149401 699646,149631 699375,149699 C 698175,150000 697000,151351 697000,152430 C 697000,153393 696458,154679 695650,155634 C 695440,155882 695402,156250 695504,157066 C 695628,158052 695599,158187 695221,158389 C 694962,158528 694800,158810 694800,159125 C 694800,159948 693848,160800 692928,160800 C 691585,160800 690620,162071 690747,163673 C 690835,164788 690796,164951 690322,165460 C 689944,165866 689800,166236 689800,166803 C 689800,167372 689694,167642 689414,167793 C 689201,167907 688970,168180 688900,168400 C 688722,168962 688388,168877 687750,168108 z"
+ id="path134"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 662602,167303 C 662275,166909 662472,166450 663088,166169 C 663702,165889 664200,166218 664200,166903 C 664200,167599 663081,167879 662602,167303 z"
+ id="path136"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 488746,164848 C 488446,164535 488200,164097 488200,163875 C 488200,163646 487810,163133 487300,162689 C 486759,162218 486400,161736 486400,161480 C 486400,161019 484802,159291 484200,159100 C 484000,159037 483786,158853 483725,158692 C 483663,158532 483444,158400 483237,158400 C 483031,158400 482699,158220 482500,158000 C 482245,157718 481884,157600 481279,157600 C 479732,157600 478199,155673 478176,153700 C 478158,152117 478498,150452 478925,150042 C 479522,149466 479519,149323 478900,148836 C 478625,148619 478400,148245 478400,148003 C 478400,147761 478220,147334 478000,147055 C 477780,146775 477600,146401 477599,146223 C 477599,146045 477417,145603 477196,145239 C 476626,144305 476653,139995 477232,139471 C 477434,139288 477600,139015 477600,138865 C 477600,137272 481381,135734 482800,136750 C 483069,136943 483742,137325 484295,137600 C 484862,137882 485400,138318 485530,138600 C 486433,140560 486600,140989 486600,141341 C 486600,141559 486780,141901 487000,142100 C 487297,142369 487400,142716 487400,143452 C 487400,144213 487514,144578 487893,145029 C 488269,145475 488359,145757 488269,146207 C 488203,146533 488238,146912 488345,147050 C 488671,147470 489200,149334 489200,150063 C 489200,150441 489335,150863 489500,151000 C 489665,151137 489800,151462 489800,151723 C 489800,151983 489980,152309 490200,152446 C 490528,152651 490600,152913 490600,153904 C 490600,154690 490712,155271 490922,155571 C 491122,155857 491202,156240 491133,156586 C 491070,156898 491126,157246 491261,157381 C 491717,157837 491633,163554 491165,163882 C 490952,164031 490709,164411 490626,164727 C 490404,165561 489486,165620 488746,164848 z"
+ id="path138"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 739994,159386 C 739689,158650 739904,158135 740557,158038 C 741170,157946 741493,158652 741158,159351 C 740784,160131 740308,160145 739994,159386 z"
+ id="path140"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 741733,157667 C 741456,157389 741616,156448 742000,156100 C 742220,155901 742400,155569 742400,155363 C 742400,154877 742917,154682 743319,155016 C 743708,155338 743535,156910 743051,157450 C 742740,157798 741988,157922 741733,157667 z"
+ id="path142"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 766953,157401 C 766360,157222 765509,156436 764932,155535 C 764604,155021 764498,154982 763773,155105 C 761786,155440 761716,154096 763605,151850 C 764171,151178 765487,152112 766740,154073 C 767012,154498 767407,154891 767617,154947 C 767944,155032 768000,155234 768000,156323 C 768000,157680 767973,157708 766953,157401 z"
+ id="path144"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 732995,150087 C 732562,148948 732773,148381 733920,147608 C 736027,146185 736734,146389 735804,148151 C 734630,150377 733422,151209 732995,150087 z"
+ id="path146"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 753799,116698 C 753406,116225 754716,114510 756768,112812 C 757672,112064 757990,110593 757306,110330 C 757144,110268 756851,109913 756656,109542 C 756460,109170 756124,108533 755909,108125 C 755435,107225 755731,106512 756795,105988 C 757594,105595 757802,105260 757667,104584 C 757444,103471 758529,102432 759523,102807 C 760233,103075 760983,103953 760993,104527 C 760997,104762 761233,105107 761519,105294 C 761887,105535 762007,105752 761931,106043 C 761788,106587 762725,107752 763431,107907 C 764568,108157 765383,109537 764760,110160 C 764378,110542 762910,110453 762372,110016 C 761945,109669 761867,109662 761558,109940 C 761370,110109 760920,110310 760558,110387 C 759969,110512 759905,110592 759949,111152 C 759976,111496 759909,111833 759799,111900 C 759690,111968 759600,112249 759600,112525 C 759600,113101 757929,114883 756800,115511 C 756415,115725 755804,116147 755443,116450 C 754707,117066 754171,117147 753799,116698 z"
+ id="path148"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 698855,103696 C 698616,103529 698166,103411 697855,103435 C 697543,103459 697178,103410 697043,103326 C 696907,103243 696183,103323 695433,103506 C 693119,104068 692548,103722 693493,102330 C 693772,101919 694000,101417 694000,101215 C 694000,100996 694242,100748 694600,100600 C 694930,100463 695200,100237 695200,100098 C 695200,99423 695909,98970 697138,98859 L 698369,98747 L 699303,99762 C 701640,102298 701286,105399 698855,103696 z"
+ id="path150"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 751478,103268 C 751089,102845 750636,102230 750471,101900 C 749230,99406 749065,99208 748227,99203 C 747933,99201 747303,98783 746567,98101 C 745914,97497 745137,96944 744840,96873 C 743663,96591 741600,95083 741600,94504 C 741600,94366 741411,94014 741181,93721 C 740184,92454 745551,90836 746592,92090 C 746724,92249 747235,92575 747727,92813 C 748745,93306 749217,93916 749386,94957 C 749479,95530 749730,95856 750602,96540 C 756622,101262 757580,103530 753710,103893 L 752186,104035 L 751478,103268 z"
+ id="path152"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 224300,93200 C 224137,92936 224376,92562 224614,92709 C 224857,92859 224855,93400 224612,93400 C 224508,93400 224368,93310 224300,93200 z"
+ id="path154"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 531865,87061 C 530341,86764 531072,84599 532695,84601 C 534616,84603 535211,86198 533549,86892 C 532809,87202 532664,87216 531865,87061 z"
+ id="path156"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 223440,86160 C 222858,85578 223662,83800 224508,83800 C 224996,83800 224912,85926 224413,86193 C 223914,86460 223734,86454 223440,86160 z"
+ id="path158"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 255750,81803 C 255087,81107 255030,80305 255621,79989 C 256463,79538 259026,79647 259750,80164 C 261132,81150 260237,82049 258198,81723 C 257544,81618 257380,81664 257201,81999 C 256904,82554 256400,82485 255750,81803 z"
+ id="path160"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 304872,74900 C 304671,74376 304962,74000 305569,74000 C 306227,74000 306702,74445 306529,74897 C 306372,75306 305029,75308 304872,74900 z"
+ id="path162"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ d="M 600400,55870 C 600235,55815 599920,55691 599700,55594 C 599480,55497 598985,55281 598600,55113 C 598215,54945 597738,54694 597539,54554 C 597237,54341 597147,54356 596984,54642 C 596877,54830 596480,55042 596102,55113 C 595724,55184 595310,55367 595183,55521 C 594779,56008 593144,55375 591993,54287 C 591714,54023 591195,53749 590839,53678 C 590070,53524 589000,52285 589000,51548 C 589000,50788 587573,49857 586886,50170 C 586083,50536 585658,50443 585200,49800 C 584614,48977 584100,49034 582510,50101 L 581167,51001 L 579234,51041 C 577595,51075 577258,51139 577025,51460 C 576682,51933 575184,51774 574434,51184 C 573948,50801 573776,50824 573160,51352 C 572668,51774 570322,51888 570004,51505 C 569870,51343 569447,51152 569064,51080 C 568681,51008 568324,50835 568270,50694 C 568216,50554 567866,50382 567492,50312 C 567117,50241 566728,50036 566627,49855 C 566394,49439 564463,49481 563987,49912 C 563565,50294 561041,50305 560495,49928 C 560229,49745 559192,49621 557332,49552 C 554922,49463 554491,49395 553991,49025 C 553604,48739 553120,48600 552513,48600 C 551167,48600 550818,48005 551287,46514 C 551619,45459 551468,44600 550952,44600 C 550868,44600 550636,44436 550436,44236 C 549166,42966 546110,42944 544991,44196 C 544730,44489 544294,44543 542159,44546 L 539635,44551 L 538818,45434 L 538000,46318 L 535750,46276 C 534043,46244 533337,46310 532827,46550 C 532206,46843 532139,46841 531967,46534 C 531724,46100 531034,46107 530546,46549 C 530231,46834 529751,46901 527930,46918 C 518640,47003 514708,47208 514116,47638 C 513636,47986 513435,48025 512988,47857 C 512379,47627 509025,49095 508143,49977 C 508020,50100 507809,50200 507673,50200 C 507537,50200 507173,50311 506863,50447 C 506268,50709 506098,50717 500057,50787 C 495642,50838 494200,50630 493397,49828 C 493107,49538 492516,49129 492085,48920 C 491653,48710 491054,48414 490754,48261 C 490354,48057 490103,48038 489817,48191 C 489233,48504 488576,48444 488113,48037 C 487255,47282 485251,47008 480000,46930 C 477006,46885 476392,46740 475329,45821 C 475124,45644 474629,45500 474229,45500 C 473684,45500 473454,45396 473318,45087 C 473145,44692 472999,44675 470018,44716 C 468137,44742 466639,44671 466242,44536 C 465773,44378 465485,44375 465242,44527 C 465045,44650 463661,44750 461975,44762 C 459366,44782 458971,44830 458323,45213 C 457559,45664 456800,45627 456200,45111 C 455427,44445 453264,43982 452630,44346 C 452057,44675 452000,44671 451145,44244 C 450656,44000 450083,43800 449870,43800 C 449658,43800 449128,43617 448692,43393 C 448213,43147 447713,43032 447426,43103 C 447154,43170 446814,43102 446626,42944 C 445797,42243 444525,42000 441682,42000 C 439525,42000 438787,41932 438488,41706 C 437989,41329 436719,41316 436412,41685 C 436167,41981 433600,42152 427900,42254 C 425748,42292 425233,42360 424912,42650 C 424662,42876 424200,43000 423609,43000 C 423072,43000 422382,43167 421937,43406 C 421083,43863 417545,43958 417029,43537 C 416880,43416 416168,43255 415447,43181 C 414509,43084 414045,42935 413818,42658 C 413531,42309 413274,42278 411200,42334 C 409935,42368 407730,42309 406300,42203 C 403192,41973 400160,41942 398454,42123 C 397344,42240 397170,42209 396854,41836 C 396345,41234 391903,41115 391481,41692 C 391034,42303 383825,42443 382458,41867 C 382012,41679 381001,41528 380000,41500 C 378971,41471 377905,41308 377300,41088 C 376664,40857 375718,40720 374700,40712 C 373820,40706 372988,40627 372850,40538 C 372713,40449 372489,40445 372352,40530 C 371984,40757 368339,40774 368053,40549 C 367916,40442 367646,40427 367453,40514 C 366829,40795 364922,40784 364600,40498 C 364000,39964 362536,39606 361468,39731 C 360559,39836 360403,39800 360169,39425 C 360023,39191 359719,39000 359494,39000 C 359269,39000 358732,38820 358300,38600 C 357868,38380 357223,38200 356865,38200 C 356414,38200 356147,38074 355995,37790 C 355836,37494 355660,37417 355359,37513 C 354958,37640 354119,37451 352563,36883 C 352073,36704 351216,36640 350011,36692 C 348381,36762 348177,36731 347992,36385 C 347858,36135 347573,36000 347180,36000 C 346846,36000 346420,35918 346232,35817 C 346021,35704 345527,35718 344933,35854 L 343975,36073 L 343237,35274 C 342398,34363 340730,32979 340026,32609 C 339684,32430 339009,32399 337605,32500 C 335949,32618 335640,32593 335539,32331 C 335474,32161 335100,31962 334707,31888 C 333966,31749 332000,30144 332000,29678 C 332000,29505 331600,29440 330650,29458 C 329176,29487 328210,29111 327129,28086 C 326584,27569 326490,27550 324990,27653 C 323494,27756 323405,27738 323103,27277 C 322847,26886 322714,26832 322406,26997 C 321833,27304 321216,27243 320516,26810 C 320004,26493 319469,26412 317692,26379 C 315742,26343 315445,26290 315000,25895 C 314632,25567 314132,25414 313104,25315 C 312279,25235 311566,25050 311359,24863 C 311065,24596 310600,24561 308455,24644 C 306784,24708 305781,24667 305551,24523 C 305290,24360 305093,24371 304781,24566 C 304385,24813 302767,24774 301190,24481 C 300840,24415 300501,24539 300113,24872 C 299418,25469 297033,25493 295722,24914 C 294673,24452 288253,24588 287488,25090 C 286960,25436 286149,25493 285637,25221 C 285435,25114 284859,25123 284200,25244 C 283595,25355 282680,25459 282166,25473 C 281483,25493 281096,25628 280726,25975 C 280331,26347 280098,26420 279660,26309 C 279352,26231 278920,26176 278700,26187 C 276148,26312 275745,26365 275604,26594 C 275411,26906 273510,27235 272853,27070 C 272573,27000 272246,27072 272042,27248 C 271579,27648 270480,28000 269695,28000 C 269340,28000 268948,28122 268824,28271 C 268689,28434 267951,28597 266983,28677 C 266095,28751 265172,28940 264932,29097 C 264693,29254 264318,29386 264098,29391 C 262610,29422 261943,29551 261783,29837 C 261648,30079 261241,30164 260102,30192 C 257778,30248 257539,30285 256948,30680 C 256558,30940 256209,31012 255765,30923 C 255004,30771 254015,31295 254379,31659 C 254500,31780 254600,32017 254600,32185 C 254600,32487 256151,33999 256461,34000 C 256737,34000 257408,35742 257282,36131 C 256925,37232 256725,37600 256484,37600 C 256134,37600 255200,39203 255200,39805 C 255200,40063 255002,40485 254760,40743 C 253774,41792 254506,43268 256594,44441 C 257468,44932 257364,45438 256184,46433 C 255274,47201 255181,47353 255289,47895 C 255555,49226 258913,53200 259772,53200 C 260257,53200 262200,54340 262200,54624 C 262200,55728 261044,56043 259352,55400 C 258576,55105 258053,55033 257358,55125 C 256606,55224 256272,55164 255697,54825 C 255301,54591 254785,54400 254549,54400 C 254314,54400 253767,54154 253333,53854 C 252667,53392 252356,53312 251323,53336 C 250352,53359 250026,53286 249742,52983 C 249502,52726 249114,52600 248560,52600 C 247797,52600 246600,51742 246600,51196 C 246600,51124 245832,51053 244893,51039 C 242990,51012 242853,50966 242591,50277 C 242490,50011 242188,49709 241920,49608 C 241652,49506 241351,49277 241252,49099 C 241099,48827 240988,48814 240536,49020 C 238675,49868 236370,47474 237133,45487 C 237491,44554 235278,43469 234503,44197 C 234130,44548 233799,44595 231690,44595 C 230376,44595 228931,44596 228481,44597 C 227914,44599 227550,44476 227300,44200 C 227101,43980 226814,43800 226662,43800 C 226367,43800 225926,43549 224230,42415 C 223642,42022 222922,41576 222630,41425 C 220618,40380 220448,38400 222370,38400 C 222856,38400 223063,38281 223235,37903 C 223622,37053 224362,36714 225900,36681 C 228281,36630 228633,36485 228478,35624 C 228308,34685 228304,34682 227531,34962 C 227168,35093 226681,35200 226448,35200 C 226214,35200 225975,35279 225915,35376 C 225855,35473 225107,35611 224253,35683 C 223399,35755 222160,35938 221500,36090 C 218669,36740 218260,36789 216900,36646 L 215500,36499 L 215518,35636 C 215536,34795 215523,34777 215018,34936 C 213925,35282 211745,35094 211435,34628 C 211279,34392 211034,34200 210890,34200 C 210747,34200 210465,33993 210265,33741 C 209712,33045 209493,32975 208871,33300 C 208557,33464 208184,33598 208043,33599 C 207902,33599 207587,33724 207343,33876 C 206726,34261 205326,34438 204720,34208 C 204298,34047 204105,34106 203571,34555 C 202959,35070 202832,35094 200914,35066 C 199549,35046 198803,35117 198600,35288 C 198225,35602 196696,35983 195900,35960 C 195570,35950 194940,36104 194500,36302 C 193788,36622 192990,36665 187257,36690 C 180907,36717 180807,36724 180344,37159 C 180086,37401 179699,37600 179485,37600 C 179271,37600 178990,37770 178860,37978 C 178724,38196 178301,38403 177862,38466 C 177443,38527 176560,38684 175900,38815 C 175240,38946 173845,39041 172800,39026 C 171755,39010 170376,38999 169736,39001 C 169035,39002 168406,38887 168155,38711 C 167865,38508 167630,38477 167384,38609 C 166961,38835 165066,37989 163150,36719 C 162295,36152 162792,34421 163934,33987 C 164683,33702 164694,33285 163976,32429 C 163426,31775 163241,31671 162875,31810 C 162632,31902 161297,31923 159906,31858 C 157519,31745 157373,31760 157277,32126 C 157167,32549 154165,34213 153529,34205 C 153325,34202 152890,34425 152564,34700 C 152114,35078 151740,35200 151029,35200 C 150512,35200 149903,35330 149675,35490 C 148885,36043 147357,35123 147437,34142 C 147539,32894 144698,32063 143661,33037 C 143226,33445 142987,33476 140047,33504 C 137925,33524 136742,33617 136420,33789 C 136060,33982 135765,33993 135221,33832 C 133949,33458 132870,33396 131772,33637 C 131182,33766 130174,33851 129531,33827 C 128808,33799 128243,33881 128050,34041 C 127846,34210 127109,34301 125919,34303 C 124699,34306 123935,34402 123600,34597 C 123268,34789 122427,34898 121100,34922 C 118604,34966 117285,35157 116984,35519 C 116583,36003 113288,35907 112854,35400 C 112665,35180 112317,35000 112079,35000 C 111821,35000 111434,34720 111116,34303 C 110329,33272 110112,33211 107900,33400 C 106810,33493 105778,33498 105609,33410 C 105439,33322 104805,33336 104200,33442 C 102361,33762 101887,33714 101122,33130 C 100278,32487 96850,32305 94300,32769 C 93530,32909 92495,33072 92000,33131 C 91505,33190 91014,33320 90910,33419 C 90642,33674 89451,33645 89287,33380 C 88932,32805 87731,32584 84851,32562 C 81966,32541 81917,32533 81108,31963 C 80362,31437 80055,31366 77694,31172 C 75961,31030 74991,30862 74770,30667 C 74445,30379 73225,30287 67500,30122 C 65954,30077 65302,29968 64629,29640 C 63846,29259 61921,28889 60000,28750 C 59451,28711 59287,28605 59238,28262 C 59070,27086 57036,26045 55994,26603 C 55735,26742 55184,26736 54257,26585 C 53217,26416 52760,26422 52300,26610 C 51215,27055 49219,27003 48766,26519 C 48400,26128 48361,26123 48177,26450 C 47957,26841 46124,26962 45900,26600 C 45832,26490 45584,26400 45349,26400 C 45114,26400 44563,26153 44125,25850 L 43328,25300 L 39586,25300 C 36389,25300 35790,25252 35472,24969 C 35162,24694 34792,24657 33262,24746 C 31630,24842 31344,24806 30701,24427 C 29567,23758 7765,23755 6915,24424 C 6467,24776 6212,24827 5415,24721 C 4690,24625 4394,24666 4207,24891 C 3942,25211 3468,25313 1350,25508 L 0,25632 L 0,12816 L 0,0 L 384000,0 L 768000,0 L 768000,12476 L 768000,24951 L 767350,25225 C 766877,25424 765724,25494 763124,25484 C 759602,25471 759540,25478 759065,25953 C 758512,26506 756721,26446 756261,25859 C 755910,25410 754277,25270 753845,25652 C 753169,26249 748811,26593 748000,26113 C 746758,25378 746554,25352 745636,25811 C 745077,26090 744393,26246 743732,26245 C 743114,26245 742402,26396 741958,26622 C 741550,26830 741037,27000 740819,27000 C 739603,27000 739535,28520 740700,29669 C 741195,30157 741600,30696 741600,30868 C 741600,31131 741902,31175 743524,31151 C 745062,31128 745494,31185 745677,31435 C 745967,31831 747115,32099 747293,31812 C 747499,31479 747972,31563 748346,32000 C 748535,32220 748844,32400 749033,32400 C 749222,32400 749432,32490 749500,32600 C 749574,32720 750054,32750 750694,32675 C 751644,32563 751795,32597 752031,32975 C 752187,33225 752503,33400 752798,33400 C 753086,33400 753627,33691 754067,34083 C 754489,34458 755101,34876 755427,35011 C 757089,35700 757030,38200 755352,38200 C 755135,38200 754510,38425 753963,38700 C 753415,38975 752651,39200 752265,39200 C 751857,39200 751342,39374 751035,39615 C 750620,39942 750283,40017 749462,39965 C 748643,39914 748362,39976 748159,40254 C 747952,40536 747533,40623 746100,40683 C 745047,40726 743885,40908 743300,41119 C 742464,41422 741640,41483 738271,41491 C 734766,41499 734193,41544 733866,41840 C 733659,42028 733087,42244 732595,42321 C 732103,42397 731485,42627 731223,42830 C 730686,43246 730158,43299 729586,42992 C 729302,42841 728946,42870 728260,43103 C 727706,43291 727030,43376 726611,43309 C 726220,43247 725773,43278 725618,43379 C 725443,43493 725158,43481 724863,43347 C 724515,43188 724327,43193 724155,43365 C 724026,43494 723702,43600 723436,43600 C 723170,43600 722645,43870 722269,44200 C 721894,44530 721387,44801 721143,44801 C 720899,44802 720442,44937 720127,45101 C 719419,45471 719216,45474 718816,45124 C 718164,44553 717659,44554 717126,45128 C 716690,45599 716555,45644 716142,45455 C 715852,45323 715552,45308 715382,45416 C 715227,45514 714735,45595 714288,45597 C 713842,45599 713302,45732 713088,45894 C 712875,46055 712518,46190 712295,46194 C 712071,46197 711672,46352 711408,46537 C 710709,47027 708094,47036 707655,46550 C 707237,46089 706746,46107 706300,46600 C 706101,46820 705738,47000 705493,47000 C 705249,47000 704931,47142 704788,47315 C 704005,48258 702674,48573 701933,47990 C 701536,47678 701322,47628 701038,47780 C 700833,47890 700467,47928 700226,47865 C 699960,47795 699643,47880 699422,48080 C 699029,48436 693047,48926 691964,48691 C 691566,48604 691376,48671 691228,48949 C 691052,49277 690753,49326 688784,49353 C 686642,49381 686514,49407 685981,49918 C 685459,50418 685341,50445 684221,50318 C 683298,50214 682705,50275 681660,50584 C 680225,51007 677596,51049 674181,50701 C 672471,50528 670883,50900 670462,51575 C 670263,51893 670036,51938 668964,51869 C 665477,51647 663877,51727 662964,52169 C 661943,52663 661581,52701 661231,52351 C 661095,52215 660379,52042 659641,51969 C 658904,51895 657895,51744 657400,51634 C 656672,51471 656436,51491 656163,51736 C 655903,51969 655558,52009 654663,51909 C 654023,51837 653029,51781 652454,51784 C 651620,51787 651366,51710 651200,51400 C 651045,51110 650854,51039 650445,51121 C 649967,51217 649828,51117 649329,50329 C 648466,48964 647389,49042 645850,50581 C 644765,51666 644108,51426 644070,49930 C 644035,48516 641996,47324 641117,48203 C 641008,48312 640688,48400 640405,48400 C 638977,48400 638617,49441 639918,49805 C 641020,50114 641399,50704 641024,51528 C 640725,52182 638715,52103 637758,51399 C 637066,50890 636835,50897 636246,51450 C 635558,52095 632192,52050 631486,51387 C 631084,51009 630896,50979 629710,51106 C 628594,51226 628323,51193 627995,50896 C 627629,50564 627544,50563 626553,50871 C 624552,51495 621730,50908 620692,49651 C 620287,49162 617640,49267 616900,49802 C 616556,50050 614125,50768 613600,50776 C 611922,50801 610098,51205 609784,51621 C 609543,51941 609327,52025 608971,51936 C 608620,51847 608420,51922 608242,52207 C 608101,52433 607777,52600 607480,52600 C 607123,52600 606929,52730 606853,53019 C 606779,53304 606217,53690 605103,54221 C 603993,54751 603389,55166 603235,55502 C 603011,55995 601411,56203 600400,55870 z"
+ id="path164"
+ style="fill:#ffffff;fill-opacity:1;stroke:#729fcf;stroke-width:0.79875207;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/applets/clock/set-timezone.c b/applets/clock/set-timezone.c
new file mode 100644
index 00000000..3b4f1e56
--- /dev/null
+++ b/applets/clock/set-timezone.c
@@ -0,0 +1,291 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 David Zeuthen <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/wait.h>
+
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include "set-timezone.h"
+
+
+static DBusGConnection *
+get_system_bus (void)
+{
+ GError *error;
+ static DBusGConnection *bus = NULL;
+
+ if (bus == NULL) {
+ error = NULL;
+ bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (bus == NULL) {
+ g_warning ("Couldn't connect to system bus: %s",
+ error->message);
+ g_error_free (error);
+ }
+ }
+
+ return bus;
+}
+
+#define CACHE_VALIDITY_SEC 2
+
+typedef void (*CanDoFunc) (gint value);
+
+static void
+notify_can_do (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ void *user_data)
+{
+ CanDoFunc callback = user_data;
+ GError *error = NULL;
+ gint value;
+
+ if (dbus_g_proxy_end_call (proxy, call,
+ &error,
+ G_TYPE_INT, &value,
+ G_TYPE_INVALID)) {
+ callback (value);
+ }
+}
+
+static void
+refresh_can_do (const gchar *action, CanDoFunc callback)
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+
+ bus = get_system_bus ();
+ if (bus == NULL)
+ return;
+
+ proxy = dbus_g_proxy_new_for_name (bus,
+ "org.mate.SettingsDaemon.DateTimeMechanism",
+ "/",
+ "org.mate.SettingsDaemon.DateTimeMechanism");
+
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ action,
+ notify_can_do,
+ callback, NULL,
+ INT_MAX,
+ G_TYPE_INVALID);
+}
+
+static gint settimezone_cache = 0;
+static time_t settimezone_stamp = 0;
+
+static void
+update_can_settimezone (gint res)
+{
+ settimezone_cache = res;
+ time (&settimezone_stamp);
+}
+
+gint
+can_set_system_timezone (void)
+{
+ time_t now;
+
+ time (&now);
+ if (ABS (now - settimezone_stamp) > CACHE_VALIDITY_SEC) {
+ refresh_can_do ("CanSetTimezone", update_can_settimezone);
+ settimezone_stamp = now;
+ }
+
+ return settimezone_cache;
+}
+
+static gint settime_cache = 0;
+static time_t settime_stamp = 0;
+
+static void
+update_can_settime (gint res)
+{
+ settime_cache = res;
+ time (&settime_stamp);
+}
+
+gint
+can_set_system_time (void)
+{
+ time_t now;
+
+ time (&now);
+ if (ABS (now - settime_stamp) > CACHE_VALIDITY_SEC) {
+ refresh_can_do ("CanSetTime", update_can_settime);
+ settime_stamp = now;
+ }
+
+ return settime_cache;
+}
+
+typedef struct {
+ gint ref_count;
+ gchar *call;
+ gint64 time;
+ gchar *filename;
+ GFunc callback;
+ gpointer data;
+ GDestroyNotify notify;
+} SetTimeCallbackData;
+
+static void
+free_data (gpointer d)
+{
+ SetTimeCallbackData *data = d;
+
+ data->ref_count--;
+ if (data->ref_count == 0) {
+ if (data->notify)
+ data->notify (data->data);
+ g_free (data->filename);
+ g_free (data);
+ }
+}
+
+static void
+set_time_notify (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ void *user_data)
+{
+ SetTimeCallbackData *data = user_data;
+ GError *error = NULL;
+
+ if (dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_INVALID)) {
+ if (data->callback)
+ data->callback (data->data, NULL);
+ }
+ else {
+ if (error->domain == DBUS_GERROR &&
+ error->code == DBUS_GERROR_NO_REPLY) {
+ /* these errors happen because dbus doesn't
+ * use monotonic clocks
+ */
+ g_warning ("ignoring no-reply error when setting time");
+ g_error_free (error);
+ if (data->callback)
+ data->callback (data->data, NULL);
+ }
+ else {
+ if (data->callback)
+ data->callback (data->data, error);
+ else
+ g_error_free (error);
+ }
+ }
+}
+
+static void
+set_time_async (SetTimeCallbackData *data)
+{
+ DBusGConnection *bus;
+ DBusGProxy *proxy;
+
+ bus = get_system_bus ();
+ if (bus == NULL)
+ return;
+
+ proxy = dbus_g_proxy_new_for_name (bus,
+ "org.mate.SettingsDaemon.DateTimeMechanism",
+ "/",
+ "org.mate.SettingsDaemon.DateTimeMechanism");
+
+ data->ref_count++;
+ if (strcmp (data->call, "SetTime") == 0)
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ "SetTime",
+ set_time_notify,
+ data, free_data,
+ INT_MAX,
+ /* parameters: */
+ G_TYPE_INT64, data->time,
+ G_TYPE_INVALID,
+ /* return values: */
+ G_TYPE_INVALID);
+ else
+ dbus_g_proxy_begin_call_with_timeout (proxy,
+ "SetTimezone",
+ set_time_notify,
+ data, free_data,
+ INT_MAX,
+ /* parameters: */
+ G_TYPE_STRING, data->filename,
+ G_TYPE_INVALID,
+ /* return values: */
+ G_TYPE_INVALID);
+}
+
+void
+set_system_time_async (gint64 time,
+ GFunc callback,
+ gpointer d,
+ GDestroyNotify notify)
+{
+ SetTimeCallbackData *data;
+
+ if (time == -1)
+ return;
+
+ data = g_new0 (SetTimeCallbackData, 1);
+ data->ref_count = 1;
+ data->call = "SetTime";
+ data->time = time;
+ data->filename = NULL;
+ data->callback = callback;
+ data->data = d;
+ data->notify = notify;
+
+ set_time_async (data);
+ free_data (data);
+}
+
+void
+set_system_timezone_async (const gchar *filename,
+ GFunc callback,
+ gpointer d,
+ GDestroyNotify notify)
+{
+ SetTimeCallbackData *data;
+
+ if (filename == NULL)
+ return;
+
+ data = g_new0 (SetTimeCallbackData, 1);
+ data->ref_count = 1;
+ data->call = "SetTimezone";
+ data->time = -1;
+ data->filename = g_strdup (filename);
+ data->callback = callback;
+ data->data = d;
+ data->notify = notify;
+
+ set_time_async (data);
+ free_data (data);
+}
diff --git a/applets/clock/set-timezone.h b/applets/clock/set-timezone.h
new file mode 100644
index 00000000..5280b079
--- /dev/null
+++ b/applets/clock/set-timezone.h
@@ -0,0 +1,40 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2007 David Zeuthen <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef __SET_SYSTEM_TIMEZONE_H__
+
+#include <glib.h>
+#include <time.h>
+
+gint can_set_system_timezone (void);
+
+gint can_set_system_time (void);
+
+void set_system_time_async (gint64 time,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify notify);
+
+void set_system_timezone_async (const gchar *filename,
+ GFunc callback,
+ gpointer data,
+ GDestroyNotify notify);
+
+#endif
diff --git a/applets/clock/system-timezone.c b/applets/clock/system-timezone.c
new file mode 100644
index 00000000..336f5a9f
--- /dev/null
+++ b/applets/clock/system-timezone.c
@@ -0,0 +1,1048 @@
+/* System timezone handling
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * Authors: Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Some code is based on previous code in clock-location.c and on code from
+ * tz.c (shipped with version <= 2.22.0). Those files were under the same
+ * license, with those authors and copyrights:
+ *
+ * clock-location.c:
+ * ================
+ * No header, but most of the work was done (AFAIK) by
+ * Federico Mena Quintero <[email protected]>
+ * Matthias Clasen <[email protected]>
+ *
+ * tz.c:
+ * ====
+ * Copyright (C) 2000-2001 Ximian, Inc.
+ * Copyright (C) 2004 Sun Microsystems, Inc.
+ *
+ * Authors: Hans Petter Jansson <[email protected]>
+ * additional functions by Erwann Chenede <[email protected]>
+ * reworked by Vincent Untz <[email protected]>
+ *
+ * Largely based on Michael Fulbright's work on Anaconda.
+ */
+
+/* FIXME: it'd be nice to filter out the timezones that we might get when
+ * parsing config files that are not in zone.tab. Note that it's also wrong
+ * in some cases: eg, in tzdata2008b, Asia/Calcutta got renamed to
+ * Asia/Kolkata and the old name is not in zone.tab. */
+
+#include <string.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <gio/gio.h>
+
+#include "system-timezone.h"
+
+/* Files that we look at and that should be monitored */
+#define CHECK_NB 5
+#define ETC_TIMEZONE "/etc/timezone"
+#define ETC_TIMEZONE_MAJ "/etc/TIMEZONE"
+#define ETC_RC_CONF "/etc/rc.conf"
+#define ETC_SYSCONFIG_CLOCK "/etc/sysconfig/clock"
+#define ETC_CONF_D_CLOCK "/etc/conf.d/clock"
+#define ETC_LOCALTIME "/etc/localtime"
+
+/* The first 4 characters in a timezone file, from tzfile.h */
+#define TZ_MAGIC "TZif"
+
+static char *files_to_check[CHECK_NB] = {
+ ETC_TIMEZONE,
+ ETC_TIMEZONE_MAJ,
+ ETC_SYSCONFIG_CLOCK,
+ ETC_CONF_D_CLOCK,
+ ETC_LOCALTIME
+};
+
+static GObject *systz_singleton = NULL;
+
+G_DEFINE_TYPE (SystemTimezone, system_timezone, G_TYPE_OBJECT)
+
+typedef struct {
+ char *tz;
+ char *env_tz;
+ GFileMonitor *monitors[CHECK_NB];
+} SystemTimezonePrivate;
+
+enum {
+ CHANGED,
+ LAST_SIGNAL
+};
+
+static guint system_timezone_signals[LAST_SIGNAL] = { 0 };
+
+static GObject *system_timezone_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties);
+static void system_timezone_finalize (GObject *obj);
+
+static void system_timezone_monitor_changed (GFileMonitor *handle,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event,
+ gpointer user_data);
+static char *system_timezone_find (void);
+
+#define PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezonePrivate))
+
+SystemTimezone *
+system_timezone_new (void)
+{
+ return g_object_new (SYSTEM_TIMEZONE_TYPE, NULL);
+}
+
+const char *
+system_timezone_get (SystemTimezone *systz)
+{
+ SystemTimezonePrivate *priv;
+
+ g_return_val_if_fail (IS_SYSTEM_TIMEZONE (systz), NULL);
+
+ priv = PRIVATE (systz);
+ return priv->tz;
+}
+
+const char *
+system_timezone_get_env (SystemTimezone *systz)
+{
+ SystemTimezonePrivate *priv;
+
+ g_return_val_if_fail (IS_SYSTEM_TIMEZONE (systz), NULL);
+
+ priv = PRIVATE (systz);
+ return priv->env_tz;
+}
+
+static void
+system_timezone_class_init (SystemTimezoneClass *class)
+{
+ GObjectClass *g_obj_class = G_OBJECT_CLASS (class);
+
+ g_obj_class->constructor = system_timezone_constructor;
+ g_obj_class->finalize = system_timezone_finalize;
+
+ system_timezone_signals[CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE (g_obj_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (SystemTimezoneClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ g_type_class_add_private (class, sizeof (SystemTimezonePrivate));
+}
+
+static void
+system_timezone_init (SystemTimezone *systz)
+{
+ int i;
+ SystemTimezonePrivate *priv = PRIVATE (systz);
+
+ priv->tz = NULL;
+ priv->env_tz = NULL;
+ for (i = 0; i < CHECK_NB; i++)
+ priv->monitors[i] = NULL;
+}
+
+static GObject *
+system_timezone_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GObject *obj;
+ SystemTimezonePrivate *priv;
+ int i;
+
+ /* This is a singleton, we don't need to have it per-applet */
+ if (systz_singleton)
+ return g_object_ref (systz_singleton);
+
+ obj = G_OBJECT_CLASS (system_timezone_parent_class)->constructor (
+ type,
+ n_construct_properties,
+ construct_properties);
+
+ priv = PRIVATE (obj);
+
+ priv->tz = system_timezone_find ();
+
+ priv->env_tz = g_strdup (g_getenv ("TZ"));
+
+ for (i = 0; i < CHECK_NB; i++) {
+ GFile *file;
+ GFile *parent;
+ GFileType parent_type;
+
+ file = g_file_new_for_path (files_to_check[i]);
+
+ parent = g_file_get_parent (file);
+ parent_type = g_file_query_file_type (parent, G_FILE_QUERY_INFO_NONE, NULL);
+ g_object_unref (parent);
+
+ /* We don't try to monitor the file if the parent directory
+ * doesn't exist: this means we're on a system where this file
+ * is not useful to determine the system timezone.
+ * Since gio does not monitor file in non-existing directories
+ * in a clever way (as of gio 2.22, it just polls every other
+ * seconds to see if the directory now exists), this avoids
+ * unnecessary wakeups. */
+ if (parent_type == G_FILE_TYPE_DIRECTORY)
+ priv->monitors[i] = g_file_monitor_file (file,
+ G_FILE_MONITOR_NONE,
+ NULL, NULL);
+ g_object_unref (file);
+
+ if (priv->monitors[i])
+ g_signal_connect (G_OBJECT (priv->monitors[i]),
+ "changed",
+ G_CALLBACK (system_timezone_monitor_changed),
+ obj);
+ }
+
+ systz_singleton = obj;
+
+ return systz_singleton;
+}
+
+static void
+system_timezone_finalize (GObject *obj)
+{
+ int i;
+ SystemTimezonePrivate *priv = PRIVATE (obj);
+
+ if (priv->tz) {
+ g_free (priv->tz);
+ priv->tz = NULL;
+ }
+
+ if (priv->env_tz) {
+ g_free (priv->env_tz);
+ priv->env_tz = NULL;
+ }
+
+ for (i = 0; i < CHECK_NB; i++) {
+ if (priv->monitors[i])
+ g_object_unref (priv->monitors[i]);
+ priv->monitors[i] = NULL;
+ }
+
+ G_OBJECT_CLASS (system_timezone_parent_class)->finalize (obj);
+
+ g_assert (obj == systz_singleton);
+
+ systz_singleton = NULL;
+}
+
+static void
+system_timezone_monitor_changed (GFileMonitor *handle,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event,
+ gpointer user_data)
+{
+ SystemTimezonePrivate *priv = PRIVATE (user_data);
+ char *new_tz;
+
+ if (event != G_FILE_MONITOR_EVENT_CHANGED &&
+ event != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT &&
+ event != G_FILE_MONITOR_EVENT_DELETED &&
+ event != G_FILE_MONITOR_EVENT_CREATED)
+ return;
+
+ new_tz = system_timezone_find ();
+
+ g_assert (priv->tz != NULL && new_tz != NULL);
+
+ if (strcmp (priv->tz, new_tz) != 0) {
+ g_free (priv->tz);
+ priv->tz = new_tz;
+
+ g_signal_emit (G_OBJECT (user_data),
+ system_timezone_signals[CHANGED],
+ 0, priv->tz);
+ } else
+ g_free (new_tz);
+}
+
+
+/*
+ * Code to deal with the system timezone on all distros.
+ * There's no dependency on the SystemTimezone GObject here.
+ *
+ * Here's what we know:
+ *
+ * + /etc/localtime contains the binary data of the timezone.
+ * It can be a symlink to the actual data file, a hard link to the data
+ * file, or just a copy. So we can determine the timezone with this
+ * (reading the symlink, comparing inodes, or comparing content).
+ *
+ * + However, most distributions also have the timezone setting
+ * configured somewhere else. This might be better to read it from there.
+ *
+ * Debian/Ubuntu/Gentoo (new): content of /etc/timezone
+ * Fedora/Mandriva: the ZONE key in /etc/sysconfig/clock
+ * openSUSE: the TIMEZONE key in /etc/sysconfig/clock
+ * Solaris/OpenSolaris: the TZ key in /etc/TIMEZONE
+ * Arch Linux: the TIMEZONE key in /etc/rc.conf
+ * Gentoo (old): the ZONE key in /etc/conf.d/clock
+ *
+ * FIXME: reading the system-tools-backends, it seems there's this too:
+ * Solaris: the TZ key in /etc/default/init
+ * /etc/TIMEZONE seems to be a link to /etc/default/init
+ *
+ * First, some functions to handle those system config files.
+ *
+ */
+
+/* This works for Debian and derivatives (including Ubuntu), and new Gentoo */
+static char *
+system_timezone_read_etc_timezone (void)
+{
+ FILE *etc_timezone;
+ GString *reading;
+ int c;
+
+ etc_timezone = g_fopen (ETC_TIMEZONE, "r");
+ if (!etc_timezone)
+ return NULL;
+
+ reading = g_string_new ("");
+
+ c = fgetc (etc_timezone);
+ /* only get the first line, we'll validate the value later */
+ while (c != EOF && !g_ascii_isspace (c)) {
+ reading = g_string_append_c (reading, c);
+ c = fgetc (etc_timezone);
+ }
+
+ fclose (etc_timezone);
+
+ if (reading->str && reading->str[0] != '\0')
+ return g_string_free (reading, FALSE);
+ else
+ g_string_free (reading, TRUE);
+
+ return NULL;
+}
+
+static gboolean
+system_timezone_write_etc_timezone (const char *tz,
+ GError **error)
+{
+ char *content;
+ GError *our_error;
+ gboolean retval;
+
+ if (!g_file_test (ETC_TIMEZONE, G_FILE_TEST_IS_REGULAR))
+ return TRUE;
+
+ content = g_strdup_printf ("%s\n", tz);
+
+ our_error = NULL;
+ retval = g_file_set_contents (ETC_TIMEZONE, content, -1, &our_error);
+ g_free (content);
+
+ if (!retval) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ ETC_TIMEZONE" cannot be overwritten: %s",
+ our_error->message);
+ g_error_free (our_error);
+ }
+
+ return retval;
+}
+
+
+/* Read a file that looks like a key-file (but there's no need for groups)
+ * and get the last value for a specific key */
+static char *
+system_timezone_read_key_file (const char *filename,
+ const char *key)
+{
+ GIOChannel *channel;
+ char *key_eq;
+ char *line;
+ char *retval;
+
+ if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+ return NULL;
+
+ channel = g_io_channel_new_file (filename, "r", NULL);
+ if (!channel)
+ return NULL;
+
+ key_eq = g_strdup_printf ("%s=", key);
+ retval = NULL;
+
+ while (g_io_channel_read_line (channel, &line, NULL,
+ NULL, NULL) == G_IO_STATUS_NORMAL) {
+ if (g_str_has_prefix (line, key_eq)) {
+ char *value;
+ int len;
+
+ value = line + strlen (key_eq);
+ g_strstrip (value);
+
+ len = strlen (value);
+
+ if (value[0] == '\"') {
+ if (value[len - 1] == '\"') {
+ if (retval)
+ g_free (retval);
+
+ retval = g_strndup (value + 1,
+ len - 2);
+ }
+ } else {
+ if (retval)
+ g_free (retval);
+
+ retval = g_strdup (line + strlen (key_eq));
+ }
+
+ g_strstrip (retval);
+ }
+
+ g_free (line);
+ }
+
+ g_free (key_eq);
+ g_io_channel_unref (channel);
+
+ return retval;
+}
+
+static gboolean
+system_timezone_write_key_file (const char *filename,
+ const char *key,
+ const char *value,
+ GError **error)
+{
+ GError *our_error;
+ char *content;
+ gsize len;
+ char *key_eq;
+ char **lines;
+ gboolean replaced;
+ gboolean retval;
+ int n;
+
+ if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR))
+ return TRUE;
+
+ our_error = NULL;
+
+ if (!g_file_get_contents (filename, &content, &len, &our_error)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ "%s cannot be read: %s",
+ filename, our_error->message);
+ g_error_free (our_error);
+ return FALSE;
+ }
+
+ lines = g_strsplit (content, "\n", 0);
+ g_free (content);
+
+ key_eq = g_strdup_printf ("%s=", key);
+ replaced = FALSE;
+
+ for (n = 0; lines[n] != NULL; n++) {
+ if (g_str_has_prefix (lines[n], key_eq)) {
+ char *old_value;
+ gboolean use_quotes;
+
+ old_value = lines[n] + strlen (key_eq);
+ g_strstrip (old_value);
+ use_quotes = old_value[0] == '\"';
+
+ g_free (lines[n]);
+
+ if (use_quotes)
+ lines[n] = g_strdup_printf ("%s\"%s\"",
+ key_eq, value);
+ else
+ lines[n] = g_strdup_printf ("%s%s",
+ key_eq, value);
+
+ replaced = TRUE;
+ }
+ }
+
+ g_free (key_eq);
+
+ if (!replaced) {
+ g_strfreev (lines);
+ return TRUE;
+ }
+
+ content = g_strjoinv ("\n", lines);
+ g_strfreev (lines);
+
+ retval = g_file_set_contents (filename, content, -1, &our_error);
+ g_free (content);
+
+ if (!retval) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ "%s cannot be overwritten: %s",
+ filename, our_error->message);
+ g_error_free (our_error);
+ }
+
+ return retval;
+}
+
+/* This works for Solaris/OpenSolaris */
+static char *
+system_timezone_read_etc_TIMEZONE (void)
+{
+ return system_timezone_read_key_file (ETC_TIMEZONE_MAJ,
+ "TZ");
+}
+
+static gboolean
+system_timezone_write_etc_TIMEZONE (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_TIMEZONE_MAJ,
+ "TZ", tz, error);
+}
+
+/* This works for Fedora and Mandriva */
+static char *
+system_timezone_read_etc_sysconfig_clock (void)
+{
+ return system_timezone_read_key_file (ETC_SYSCONFIG_CLOCK,
+ "ZONE");
+}
+
+static gboolean
+system_timezone_write_etc_sysconfig_clock (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_SYSCONFIG_CLOCK,
+ "ZONE", tz, error);
+}
+
+/* This works for openSUSE */
+static char *
+system_timezone_read_etc_sysconfig_clock_alt (void)
+{
+ return system_timezone_read_key_file (ETC_SYSCONFIG_CLOCK,
+ "TIMEZONE");
+}
+
+static gboolean
+system_timezone_write_etc_sysconfig_clock_alt (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_SYSCONFIG_CLOCK,
+ "TIMEZONE", tz, error);
+}
+
+/* This works for old Gentoo */
+static char *
+system_timezone_read_etc_conf_d_clock (void)
+{
+ return system_timezone_read_key_file (ETC_CONF_D_CLOCK,
+ "TIMEZONE");
+}
+
+static gboolean
+system_timezone_write_etc_conf_d_clock (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_CONF_D_CLOCK,
+ "TIMEZONE", tz, error);
+}
+
+/* This works for Arch Linux */
+static char *
+system_timezone_read_etc_rc_conf (void)
+{
+ return system_timezone_read_key_file (ETC_RC_CONF,
+ "TIMEZONE");
+}
+
+static gboolean
+system_timezone_write_etc_rc_conf (const char *tz,
+ GError **error)
+{
+ return system_timezone_write_key_file (ETC_RC_CONF,
+ "TIMEZONE", tz, error);
+}
+
+/*
+ *
+ * First, getting the timezone.
+ *
+ */
+
+static char *
+system_timezone_strip_path_if_valid (const char *filename)
+{
+ int skip;
+
+ if (!filename || !g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/"))
+ return NULL;
+
+ /* Timezone data files also live under posix/ and right/ for some
+ * reason.
+ * FIXME: make sure accepting those files is valid. I think "posix" is
+ * okay, not sure about "right" */
+ if (g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/posix/"))
+ skip = strlen (SYSTEM_ZONEINFODIR"/posix/");
+ else if (g_str_has_prefix (filename, SYSTEM_ZONEINFODIR"/right/"))
+ skip = strlen (SYSTEM_ZONEINFODIR"/right/");
+ else
+ skip = strlen (SYSTEM_ZONEINFODIR"/");
+
+ return g_strdup (filename + skip);
+}
+
+/* Read the soft symlink from /etc/localtime */
+static char *
+system_timezone_read_etc_localtime_softlink (void)
+{
+ char *file;
+ char *tz;
+
+ if (!g_file_test (ETC_LOCALTIME, G_FILE_TEST_IS_SYMLINK))
+ return NULL;
+
+ file = g_file_read_link (ETC_LOCALTIME, NULL);
+ tz = system_timezone_strip_path_if_valid (file);
+ g_free (file);
+
+ return tz;
+}
+
+typedef gboolean (*CompareFiles) (struct stat *a_stat,
+ struct stat *b_stat,
+ const char *a_content,
+ gsize a_content_len,
+ const char *b_filename);
+
+static char *
+recursive_compare (struct stat *localtime_stat,
+ const char *localtime_content,
+ gsize localtime_content_len,
+ char *file,
+ CompareFiles compare_func)
+{
+ struct stat file_stat;
+
+ if (g_stat (file, &file_stat) != 0)
+ return NULL;
+
+ if (S_ISREG (file_stat.st_mode)) {
+ if (compare_func (localtime_stat,
+ &file_stat,
+ localtime_content,
+ localtime_content_len,
+ file))
+ return system_timezone_strip_path_if_valid (file);
+ else
+ return NULL;
+ } else if (S_ISDIR (file_stat.st_mode)) {
+ GDir *dir = NULL;
+ char *ret = NULL;
+ const char *subfile = NULL;
+ char *subpath = NULL;
+
+ dir = g_dir_open (file, 0, NULL);
+ if (dir == NULL)
+ return NULL;
+
+ while ((subfile = g_dir_read_name (dir)) != NULL) {
+ subpath = g_build_filename (file, subfile, NULL);
+
+ ret = recursive_compare (localtime_stat,
+ localtime_content,
+ localtime_content_len,
+ subpath,
+ compare_func);
+
+ g_free (subpath);
+
+ if (ret != NULL)
+ break;
+ }
+
+ g_dir_close (dir);
+
+ return ret;
+ }
+
+ return NULL;
+}
+
+
+static gboolean
+files_are_identical_inode (struct stat *a_stat,
+ struct stat *b_stat,
+ const char *a_content,
+ gsize a_content_len,
+ const char *b_filename)
+{
+ return (a_stat->st_ino == b_stat->st_ino);
+}
+
+
+/* Determine if /etc/localtime is a hard link to some file, by looking at
+ * the inodes */
+static char *
+system_timezone_read_etc_localtime_hardlink (void)
+{
+ struct stat stat_localtime;
+
+ if (g_stat (ETC_LOCALTIME, &stat_localtime) != 0)
+ return NULL;
+
+ if (!S_ISREG (stat_localtime.st_mode))
+ return NULL;
+
+ return recursive_compare (&stat_localtime,
+ NULL,
+ 0,
+ SYSTEM_ZONEINFODIR,
+ files_are_identical_inode);
+}
+
+static gboolean
+files_are_identical_content (struct stat *a_stat,
+ struct stat *b_stat,
+ const char *a_content,
+ gsize a_content_len,
+ const char *b_filename)
+{
+ char *b_content = NULL;
+ gsize b_content_len = -1;
+ int cmp;
+
+ if (a_stat->st_size != b_stat->st_size)
+ return FALSE;
+
+ if (!g_file_get_contents (b_filename,
+ &b_content, &b_content_len, NULL))
+ return FALSE;
+
+ if (a_content_len != b_content_len) {
+ g_free (b_content);
+ return FALSE;
+ }
+
+ cmp = memcmp (a_content, b_content, a_content_len);
+ g_free (b_content);
+
+ return (cmp == 0);
+}
+
+/* Determine if /etc/localtime is a copy of a timezone file */
+static char *
+system_timezone_read_etc_localtime_content (void)
+{
+ struct stat stat_localtime;
+ char *localtime_content = NULL;
+ gsize localtime_content_len = -1;
+ char *retval;
+
+ if (g_stat (ETC_LOCALTIME, &stat_localtime) != 0)
+ return NULL;
+
+ if (!S_ISREG (stat_localtime.st_mode))
+ return NULL;
+
+ if (!g_file_get_contents (ETC_LOCALTIME,
+ &localtime_content,
+ &localtime_content_len,
+ NULL))
+ return NULL;
+
+ retval = recursive_compare (&stat_localtime,
+ localtime_content,
+ localtime_content_len,
+ SYSTEM_ZONEINFODIR,
+ files_are_identical_content);
+
+ g_free (localtime_content);
+
+ return retval;
+}
+
+typedef char * (*GetSystemTimezone) (void);
+/* The order of the functions here define the priority of the methods used
+ * to find the timezone. First method has higher priority. */
+static GetSystemTimezone get_system_timezone_methods[] = {
+ /* cheap and "more correct" than data from a config file */
+ system_timezone_read_etc_localtime_softlink,
+ /* reading various config files */
+ system_timezone_read_etc_timezone,
+ system_timezone_read_etc_sysconfig_clock,
+ system_timezone_read_etc_sysconfig_clock_alt,
+ system_timezone_read_etc_TIMEZONE,
+ system_timezone_read_etc_rc_conf,
+ /* reading deprecated config files */
+ system_timezone_read_etc_conf_d_clock,
+ /* reading /etc/timezone directly. Expensive since we have to stat
+ * many files */
+ system_timezone_read_etc_localtime_hardlink,
+ system_timezone_read_etc_localtime_content,
+ NULL
+};
+
+static gboolean
+system_timezone_is_valid (const char *tz)
+{
+ const char *c;
+
+ if (!tz)
+ return FALSE;
+
+ for (c = tz; *c != '\0'; c++) {
+ if (!(g_ascii_isalnum (*c) ||
+ *c == '/' || *c == '-' || *c == '_'))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static char *
+system_timezone_find (void)
+{
+ char *tz;
+ int i;
+
+ for (i = 0; get_system_timezone_methods[i] != NULL; i++) {
+ tz = get_system_timezone_methods[i] ();
+
+ if (system_timezone_is_valid (tz))
+ return tz;
+
+ g_free (tz);
+ }
+
+ return g_strdup ("UTC");
+}
+
+/*
+ *
+ * Now, setting the timezone.
+ *
+ */
+
+static gboolean
+system_timezone_is_zone_file_valid (const char *zone_file,
+ GError **error)
+{
+ GError *our_error;
+ GIOChannel *channel;
+ GIOStatus status;
+ char buffer[strlen (TZ_MAGIC)];
+ gsize read;
+
+ /* First, check the zone_file is properly rooted */
+ if (!g_str_has_prefix (zone_file, SYSTEM_ZONEINFODIR"/")) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "Timezone file needs to be under "SYSTEM_ZONEINFODIR);
+ return FALSE;
+ }
+
+ /* Second, check it's a regular file that exists */
+ if (!g_file_test (zone_file, G_FILE_TEST_IS_REGULAR)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "No such timezone file %s", zone_file);
+ return FALSE;
+ }
+
+ /* Third, check that it's a tzfile (see tzfile(5)). The file has a 4
+ * bytes header which is TZ_MAGIC.
+ *
+ * TODO: is there glibc API for this? */
+ our_error = NULL;
+ channel = g_io_channel_new_file (zone_file, "r", &our_error);
+ if (!our_error)
+ status = g_io_channel_read_chars (channel,
+ buffer, strlen (TZ_MAGIC),
+ &read, &our_error);
+ if (channel)
+ g_io_channel_unref (channel);
+
+ if (our_error) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "Timezone file %s cannot be read: %s",
+ zone_file, our_error->message);
+ g_error_free (our_error);
+ return FALSE;
+ }
+
+ if (read != strlen (TZ_MAGIC) || strncmp (buffer, TZ_MAGIC, strlen (TZ_MAGIC)) != 0) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ "%s is not a timezone file",
+ zone_file);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+system_timezone_set_etc_timezone (const char *zone_file,
+ GError **error)
+{
+ GError *our_error;
+ char *content;
+ gsize len;
+
+ if (!system_timezone_is_zone_file_valid (zone_file, error))
+ return FALSE;
+
+ /* If /etc/localtime is a symlink, write a symlink */
+ if (g_file_test (ETC_LOCALTIME, G_FILE_TEST_IS_SYMLINK)) {
+ if (g_unlink (ETC_LOCALTIME) == 0 &&
+ symlink (zone_file, ETC_LOCALTIME) == 0)
+ return TRUE;
+
+ /* If we couldn't symlink the file, we'll just fallback on
+ * copying it */
+ }
+
+ /* Else copy the file to /etc/localtime. We explicitly avoid doing
+ * hard links since they break with different partitions */
+ our_error = NULL;
+ if (!g_file_get_contents (zone_file, &content, &len, &our_error)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ "Timezone file %s cannot be read: %s",
+ zone_file, our_error->message);
+ g_error_free (our_error);
+ return FALSE;
+ }
+
+ if (!g_file_set_contents (ETC_LOCALTIME, content, len, &our_error)) {
+ g_set_error (error, SYSTEM_TIMEZONE_ERROR,
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ ETC_LOCALTIME" cannot be overwritten: %s",
+ our_error->message);
+ g_error_free (our_error);
+ g_free (content);
+ return FALSE;
+ }
+
+ g_free (content);
+
+ return TRUE;
+}
+
+typedef gboolean (*SetSystemTimezone) (const char *tz,
+ GError **error);
+/* The order here does not matter too much: we'll try to change all files
+ * that already have a timezone configured. It matters in case of error,
+ * since the process will be stopped and the last methods won't be called.
+ * So we use the same order as in get_system_timezone_methods */
+static SetSystemTimezone set_system_timezone_methods[] = {
+ /* writing various config files if they exist and have the
+ * setting already present */
+ system_timezone_write_etc_timezone,
+ system_timezone_write_etc_sysconfig_clock,
+ system_timezone_write_etc_sysconfig_clock_alt,
+ system_timezone_write_etc_TIMEZONE,
+ system_timezone_write_etc_rc_conf,
+ /* writing deprecated config files if they exist and have the
+ * setting already present */
+ system_timezone_write_etc_conf_d_clock,
+ NULL
+};
+
+static gboolean
+system_timezone_update_config (const char *tz,
+ GError **error)
+{
+ int i;
+
+ for (i = 0; set_system_timezone_methods[i] != NULL; i++) {
+ if (!set_system_timezone_methods[i] (tz, error))
+ return FALSE;
+ /* FIXME: maybe continue to change all config files if
+ * possible? */
+ }
+
+ return TRUE;
+}
+
+gboolean
+system_timezone_set_from_file (const char *zone_file,
+ GError **error)
+{
+ const char *tz;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ tz = zone_file + strlen (SYSTEM_ZONEINFODIR"/");
+
+ /* FIXME: is it right to return FALSE even when /etc/localtime was
+ * changed but not the config files? */
+ return (system_timezone_set_etc_timezone (zone_file, error) &&
+ system_timezone_update_config (tz, error));
+}
+
+gboolean
+system_timezone_set (const char *tz,
+ GError **error)
+{
+ char *zone_file;
+ gboolean retval;
+
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ zone_file = g_build_filename (SYSTEM_ZONEINFODIR, tz, NULL);
+
+ /* FIXME: is it right to return FALSE even when /etc/localtime was
+ * changed but not the config files? */
+ retval = system_timezone_set_etc_timezone (zone_file, error) &&
+ system_timezone_update_config (tz, error);
+
+ g_free (zone_file);
+
+ return retval;
+}
+
+GQuark
+system_timezone_error_quark (void)
+{
+ static GQuark ret = 0;
+
+ if (ret == 0) {
+ ret = g_quark_from_static_string ("system-timezone-error");
+ }
+
+ return ret;
+}
diff --git a/applets/clock/system-timezone.h b/applets/clock/system-timezone.h
new file mode 100644
index 00000000..c67b5d37
--- /dev/null
+++ b/applets/clock/system-timezone.h
@@ -0,0 +1,87 @@
+/* System timezone handling
+ *
+ * Copyright (C) 2008 Novell, Inc.
+ *
+ * Authors: Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __SYSTEM_TIMEZONE_H__
+#define __SYSTEM_TIMEZONE_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef HAVE_SOLARIS
+#define SYSTEM_ZONEINFODIR "/usr/share/lib/zoneinfo/tab"
+#else
+#define SYSTEM_ZONEINFODIR "/usr/share/zoneinfo"
+#endif
+
+
+#define SYSTEM_TIMEZONE_TYPE (system_timezone_get_type ())
+#define SYSTEM_TIMEZONE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezone))
+#define SYSTEM_TIMEZONE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), SYSTEM_TIMEZONE_TYPE, SystemTimezoneClass))
+#define IS_SYSTEM_TIMEZONE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SYSTEM_TIMEZONE_TYPE))
+#define IS_SYSTEM_TIMEZONE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), SYSTEM_TIMEZONE_TYPE))
+#define SYSTEM_TIMEZONE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), SYSTEM_TIMEZONE_TYPE, SystemTimezoneClass))
+
+typedef struct
+{
+ GObject g_object;
+} SystemTimezone;
+
+typedef struct
+{
+ GObjectClass g_object_class;
+
+ void (* changed) (SystemTimezone *systz,
+ const char *tz);
+} SystemTimezoneClass;
+
+GType system_timezone_get_type (void);
+
+SystemTimezone *system_timezone_new (void);
+
+const char *system_timezone_get (SystemTimezone *systz);
+const char *system_timezone_get_env (SystemTimezone *systz);
+
+/* Functions to set the timezone. They won't be used by the applet, but
+ * by a program with more privileges */
+
+#define SYSTEM_TIMEZONE_ERROR system_timezone_error_quark ()
+GQuark system_timezone_error_quark (void);
+
+typedef enum
+{
+ SYSTEM_TIMEZONE_ERROR_GENERAL,
+ SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE,
+ SYSTEM_TIMEZONE_NUM_ERRORS
+} SystemTimezoneError;
+
+gboolean system_timezone_set_from_file (const char *zone_file,
+ GError **error);
+gboolean system_timezone_set (const char *tz,
+ GError **error);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __SYSTEM_TIMEZONE_H__ */
diff --git a/applets/clock/test-system-timezone.c b/applets/clock/test-system-timezone.c
new file mode 100644
index 00000000..42a80611
--- /dev/null
+++ b/applets/clock/test-system-timezone.c
@@ -0,0 +1,122 @@
+/* Test for system timezone handling
+ *
+ * Copyright (C) 2008-2010 Novell, Inc.
+ *
+ * Authors: Vincent Untz <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <glib.h>
+#include "system-timezone.h"
+
+static void
+timezone_print (void)
+{
+ SystemTimezone *systz;
+
+ systz = system_timezone_new ();
+ g_print ("Current timezone: %s\n", system_timezone_get (systz));
+ g_object_unref (systz);
+}
+
+static int
+timezone_set (const char *new_tz)
+{
+ GError *error;
+
+ error = NULL;
+ if (!system_timezone_set (new_tz, &error)) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ return 1;
+ }
+
+ return 0;
+}
+
+static void
+timezone_changed (SystemTimezone *systz,
+ const char *new_tz,
+ gpointer data)
+{
+ g_print ("Timezone changed to: %s\n", new_tz);
+}
+
+static void
+timezone_monitor (void)
+{
+ SystemTimezone *systz;
+ GMainLoop *mainloop;
+
+ systz = system_timezone_new ();
+ g_signal_connect (systz, "changed",
+ G_CALLBACK (timezone_changed), NULL);
+
+ mainloop = g_main_loop_new (NULL, FALSE);
+ g_main_loop_run (mainloop);
+ g_main_loop_unref (mainloop);
+
+ g_object_unref (systz);
+}
+
+int
+main (int argc,
+ char **argv)
+{
+ int retval;
+
+ gboolean get = FALSE;
+ gboolean monitor = FALSE;
+ char *tz_set = NULL;
+
+ GError *error;
+ GOptionContext *context;
+ GOptionEntry options[] = {
+ { "get", 'g', 0, G_OPTION_ARG_NONE, &get, "Get the current timezone", NULL },
+ { "set", 's', 0, G_OPTION_ARG_STRING, &tz_set, "Set the timezone to TIMEZONE", "TIMEZONE" },
+ { "monitor", 'm', 0, G_OPTION_ARG_NONE, &monitor, "Monitor timezone changes", NULL },
+ { NULL, 0, 0, 0, NULL, NULL, NULL }
+ };
+
+ retval = 0;
+
+ g_type_init ();
+
+ context = g_option_context_new ("");
+ g_option_context_add_main_entries (context, options, NULL);
+
+ error = NULL;
+ if (!g_option_context_parse (context, &argc, &argv, &error)) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ g_option_context_free (context);
+
+ return 1;
+ }
+
+ g_option_context_free (context);
+
+ if (get || (!tz_set && !monitor))
+ timezone_print ();
+ else if (tz_set)
+ retval = timezone_set (tz_set);
+ else if (monitor)
+ timezone_monitor ();
+ else
+ g_assert_not_reached ();
+
+ return retval;
+}