+2005-12-07 [colin] 1.9.100cvs73
+
+ * src/action.c
+ * src/compose.c
+ * src/compose.h
+ Fix bug #839 (Quoted text isn't colored after
+ executing an action)
+ * src/common/plugin.c
+ Require plugins to declare their licence in plugin_licence()
+ Refuse to load non-GPL plugins as they'd be illegal (as
+ derived works of Sylpheed-Claws, they must be GPL).
+ * src/plugins/clamav/clamav_plugin.c
+ * src/plugins/demo/demo.c
+ * src/plugins/dillo_viewer/dillo_viewer.c
+ * src/plugins/pgpcore/plugin.c
+ * src/plugins/pgpinline/plugin.c
+ * src/plugins/pgpmime/plugin.c
+ * src/plugins/spamassassin/spamassassin.c
+ * src/plugins/trayicon/trayicon.c
+ Add plugin_licence()
+
2005-12-07 [paul] 1.9.100cvs72
* configure.ac
( cvs diff -u -r 1.382.2.201 -r 1.382.2.202 src/compose.c; cvs diff -u -r 1.22.2.16 -r 1.22.2.17 src/quote_fmt_parse.y; cvs diff -u -r 1.13.2.4 -r 1.13.2.5 src/undo.c; cvs diff -u -r 1.5.14.3 -r 1.5.14.4 src/undo.h; ) > 1.9.100cvs70.patchset
( cvs diff -u -r 1.654.2.1100 -r 1.654.2.1101 configure.ac; cvs diff -u -r 1.1.4.1 -r 1.1.4.2 doc/Makefile.am; cvs diff -u -r -1.1 -r -1.2 doc/faq/.cvsignore; cvs diff -u -r -1.3 -r -1.4 doc/faq/Makefile.am; cvs diff -u -r -1.1 -r -1.2 doc/faq/de/.cvsignore; cvs diff -u -r -1.1 -r -1.2 doc/faq/de/Makefile.am; cvs diff -u -r -1.3 -r -1.4 doc/faq/de/sylpheed-faq-1.html; cvs diff -u -r -1.3 -r -1.4 doc/faq/de/sylpheed-faq-2.html; cvs diff -u -r -1.1 -r -1.2 doc/faq/de/sylpheed-faq-3.html; cvs diff -u -r -1.1 -r -1.2 doc/faq/de/sylpheed-faq.html; cvs diff -u -r -1.1 -r -1.2 doc/faq/en/.cvsignore; cvs diff -u -r -1.2 -r -1.3 doc/faq/en/Makefile.am; cvs diff -u -r -1.7.10.1 -r -1.7.10.2 doc/faq/en/sylpheed-faq-1.html; cvs diff -u -r -1.7.10.1 -r -1.7.10.2 doc/faq/en/sylpheed-faq-2.html; cvs diff -u -r -1.4.10.1 -r -1.4.10.2 doc/faq/en/sylpheed-faq-3.html; cvs diff -u -r -1.1 -r -1.2 doc/faq/en/sylpheed-faq-4.html; cvs diff -u -r -1.3.10.1 -r -1.3.10.2 doc/faq/en/sylpheed-faq.html; cvs diff -u -r -1.1 -r -1.2 doc/faq/es/.cvsignore; cvs diff -u -r -1.3 -r -1.4 doc/faq/es/Makefile.am; cvs diff -u -r -1.6 -r -1.7 doc/faq/es/sylpheed-faq-1.html; cvs diff -u -r -1.6 -r -1.7 doc/faq/es/sylpheed-faq-2.html; cvs diff -u -r -1.6 -r -1.7 doc/faq/es/sylpheed-faq-3.html; cvs diff -u -r -1.3 -r -1.4 doc/faq/es/sylpheed-faq-4.html; cvs diff -u -r -1.4 -r -1.5 doc/faq/es/sylpheed-faq.html; cvs diff -u -r -1.1 -r -1.2 doc/faq/fr/.cvsignore; cvs diff -u -r -1.1 -r -1.2 doc/faq/fr/Makefile.am; cvs diff -u -r -1.5 -r -1.6 doc/faq/fr/sylpheed-faq-1.html; cvs diff -u -r -1.3 -r -1.4 doc/faq/fr/sylpheed-faq-2.html; cvs diff -u -r -1.3 -r -1.4 doc/faq/fr/sylpheed-faq-3.html; cvs diff -u -r -1.3 -r -1.4 doc/faq/fr/sylpheed-faq.html; cvs diff -u -r -1.1 -r -1.2 doc/faq/it/.cvsignore; cvs diff -u -r -1.1 -r -1.2 doc/faq/it/Makefile.am; cvs diff -u -r -1.3 -r -1.4 doc/faq/it/sylpheed-faq-1.html; cvs diff -u -r -1.3 -r -1.4 doc/faq/it/sylpheed-faq-2.html; cvs diff -u -r -1.3 -r -1.4 doc/faq/it/sylpheed-faq-3.html; cvs diff -u -r -1.2 -r -1.3 doc/faq/it/sylpheed-faq.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/.cvsignore; cvs diff -u -r -1.5 -r -1.6 doc/manual/Makefile.am; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/.cvsignore; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/Makefile.am; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-1.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-10.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-11.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-12.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-13.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-14.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-15.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-16.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-17.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-18.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-19.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-2.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-20.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-3.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-4.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-5.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-6.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-7.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-8.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed-9.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/de/sylpheed.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/en/.cvsignore; cvs diff -u -r -1.5 -r -1.6 doc/manual/en/Makefile.am; cvs diff -u -r -1.5.2.3 -r -1.5.2.4 doc/manual/en/sylpheed-1.html; cvs diff -u -r -1.4.2.1 -r -1.4.2.2 doc/manual/en/sylpheed-10.html; cvs diff -u -r -1.5.2.1 -r -1.5.2.2 doc/manual/en/sylpheed-11.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-12.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-13.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-14.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-15.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-16.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-17.html; cvs diff -u -r -1.4.2.3 -r -1.4.2.4 doc/manual/en/sylpheed-18.html; cvs diff -u -r -1.4.2.3 -r -1.4.2.4 doc/manual/en/sylpheed-19.html; cvs diff -u -r -1.5.2.2 -r -1.5.2.3 doc/manual/en/sylpheed-2.html; cvs diff -u -r -1.5.2.3 -r -1.5.2.4 doc/manual/en/sylpheed-20.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-21.html; cvs diff -u -r -1.1.4.2 -r -1.1.4.3 doc/manual/en/sylpheed-22.html; cvs diff -u -r -1.4.2.1 -r -1.4.2.2 doc/manual/en/sylpheed-3.html; cvs diff -u -r -1.6.2.3 -r -1.6.2.4 doc/manual/en/sylpheed-4.html; cvs diff -u -r -1.4.2.2 -r -1.4.2.3 doc/manual/en/sylpheed-5.html; cvs diff -u -r -1.5.2.3 -r -1.5.2.4 doc/manual/en/sylpheed-6.html; cvs diff -u -r -1.5.2.2 -r -1.5.2.3 doc/manual/en/sylpheed-7.html; cvs diff -u -r -1.5.2.2 -r -1.5.2.3 doc/manual/en/sylpheed-8.html; cvs diff -u -r -1.5.2.2 -r -1.5.2.3 doc/manual/en/sylpheed-9.html; cvs diff -u -r -1.5.2.3 -r -1.5.2.4 doc/manual/en/sylpheed.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/.cvsignore; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/Makefile.am; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-1.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-10.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-11.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-12.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-13.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-14.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-15.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-16.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-17.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-18.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-19.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-2.html; cvs diff -u -r -1.1.14.1 -r -1.1.14.2 doc/manual/es/sylpheed-20.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-3.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-4.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-5.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-6.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-7.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-8.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed-9.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/es/sylpheed.html; cvs diff -u -r -1.1 -r -1.2 doc/manual/fr/.cvsignore; cvs diff -u -r -1.1 -r -1.2 doc/manual/fr/Makefile.am; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-1.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-10.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-11.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-12.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-13.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-14.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-15.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-16.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-17.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-18.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-19.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-2.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-20.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-3.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-4.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-5.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-6.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-7.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-8.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed-9.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/fr/sylpheed.html; cvs diff -u -r -1.2 -r -1.3 doc/manual/ja/.cvsignore; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/Makefile.am; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-1.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-10.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-11.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-12.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-13.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-14.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-15.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-16.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-17.html; cvs diff -u -r -1.1.2.1 -r -1.1.2.2 doc/manual/ja/sylpheed-18.html; cvs diff -u -r -1.1.2.1 -r -1.1.2.2 doc/manual/ja/sylpheed-19.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-2.html; cvs diff -u -r -1.1.2.1 -r -1.1.2.2 doc/manual/ja/sylpheed-20.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-3.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-4.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-5.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-6.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-7.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-8.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed-9.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed.html; cvs diff -u -r -1.1.1.1.16.1 -r -1.1.1.1.16.2 doc/manual/ja/sylpheed.sgml; cvs diff -u -r 1.274.2.78 -r 1.274.2.79 src/mainwindow.c; ) > 1.9.100cvs71.patchset
( cvs diff -u -r 1.654.2.1101 -r 1.654.2.1102 configure.ac; cvs diff -u -r 1.274.2.79 -r 1.274.2.80 src/mainwindow.c; cvs diff -u -r 1.11.2.3 -r 1.11.2.4 src/manual.c; cvs diff -u -r 1.8.2.1 -r 1.8.2.2 src/manual.h; cvs diff -u -r 1.9.2.19 -r 1.9.2.20 src/common/defs.h; ) > 1.9.100cvs72.patchset
+( cvs diff -u -r 1.12.2.27 -r 1.12.2.28 src/action.c; cvs diff -u -r 1.382.2.202 -r 1.382.2.203 src/compose.c; cvs diff -u -r 1.50.2.16 -r 1.50.2.17 src/compose.h; cvs diff -u -r 1.13.2.8 -r 1.13.2.9 src/common/plugin.c; cvs diff -u -r 1.13.2.17 -r 1.13.2.18 src/plugins/clamav/clamav_plugin.c; cvs diff -u -r 1.13.2.3 -r 1.13.2.4 src/plugins/demo/demo.c; cvs diff -u -r 1.12.2.8 -r 1.12.2.9 src/plugins/dillo_viewer/dillo_viewer.c; cvs diff -u -r 1.1.2.3 -r 1.1.2.4 src/plugins/pgpcore/plugin.c; cvs diff -u -r 1.1.2.4 -r 1.1.2.5 src/plugins/pgpinline/plugin.c; cvs diff -u -r 1.1.2.13 -r 1.1.2.14 src/plugins/pgpmime/plugin.c; cvs diff -u -r 1.18.2.14 -r 1.18.2.15 src/plugins/spamassassin/spamassassin.c; cvs diff -u -r 1.14.2.28 -r 1.14.2.29 src/plugins/trayicon/trayicon.c; ) > 1.9.100cvs73.patchset
MICRO_VERSION=100
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=72
+EXTRA_VERSION=73
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
gint new_out;
GString *output;
+ void (*callback)(void *data);
+ void *data;
};
static void action_update_menu (GtkItemFactory *ifactory,
GSList *msg_list,
GtkWidget *text,
gint body_pos,
- MimeInfo *partinfo);
+ MimeInfo *partinfo,
+ void (*callback)(void *data),
+ void *data);
static gchar *parse_action_cmd (gchar *action,
MsgInfo *msginfo,
return;
}
- execute_actions(action, NULL, compose->text, 0, NULL);
+ execute_actions(action, NULL, compose->text, 0, NULL,
+ compose_action_cb, compose);
}
static void mainwin_actions_execute_cb(MainWindow *mainwin, guint action_nb,
* filtering */
execute_filtering_actions(action, msg_list);
else
- execute_actions(action, msg_list, text, body_pos, partinfo);
+ execute_actions(action, msg_list, text, body_pos, partinfo,
+ NULL, NULL);
}
static gboolean execute_filtering_actions(gchar *action, GSList *msglist)
static gboolean execute_actions(gchar *action, GSList *msg_list,
GtkWidget *text,
- gint body_pos, MimeInfo *partinfo)
+ gint body_pos, MimeInfo *partinfo,
+ void (*callback)(void *data), void *data)
{
GSList *children_list = NULL;
gint is_ok = TRUE;
for (cur = children_list; cur; cur = cur->next) {
child_info = (ChildInfo *) cur->data;
+ child_info->callback = callback;
+ child_info->data = data;
child_info->tag_status =
gdk_input_add(child_info->chld_status,
GDK_INPUT_READ,
create_io_dialog(children);
}
-
return is_ok;
}
static void free_children(Children *children)
{
ChildInfo *child_info;
+ void (*callback)(void *data) = NULL;
+ void *data = NULL;
debug_print("Freeing children data %p\n", children);
g_free(child_info->cmd);
g_string_free(child_info->output, TRUE);
children->list = g_slist_remove(children->list, child_info);
+ callback = child_info->callback;
+ data = child_info->data;
g_free(child_info);
}
+
+ if (callback)
+ callback(data);
+
g_free(children);
}
const gchar *(*name) (void);
const gchar *(*desc) (void);
const gchar *(*type) (void);
+ const gchar *(*licence) (void);
GSList *rdeps;
};
gint (*plugin_init) (gchar **error);
gpointer plugin_name, plugin_desc;
const gchar *(*plugin_type)(void);
+ const gchar *(*plugin_licence)(void);
gint ok;
g_return_val_if_fail(filename != NULL, NULL);
if (!g_module_symbol(plugin->module, "plugin_name", &plugin_name) ||
!g_module_symbol(plugin->module, "plugin_desc", &plugin_desc) ||
!g_module_symbol(plugin->module, "plugin_type", (gpointer)&plugin_type) ||
+ !g_module_symbol(plugin->module, "plugin_licence", (gpointer)&plugin_licence) ||
!g_module_symbol(plugin->module, "plugin_init", (gpointer)&plugin_init)) {
*error = g_strdup(g_module_error());
g_module_close(plugin->module);
return NULL;
}
+ if (strcmp(plugin_licence(), "GPL")) {
+ *error = g_strdup(_("This module is not licenced under the GPL."));
+ g_module_close(plugin->module);
+ g_free(plugin);
+ return NULL;
+ }
+
if (!strcmp(plugin_type(), "GTK")) {
*error = g_strdup(_("This module is for Sylpheed-Claws GTK1."));
g_module_close(plugin->module);
plugin->name = plugin_name;
plugin->desc = plugin_desc;
plugin->type = plugin_type;
+ plugin->licence = plugin_licence;
plugin->filename = g_strdup(filename);
plugins = g_slist_append(plugins, plugin);
compose->autowrap = prev_autowrap;
}
+void compose_action_cb(void *data)
+{
+ Compose *compose = (Compose *)data;
+ compose_wrap_all(compose);
+}
+
static void compose_wrap_all(Compose *compose)
{
compose_wrap_all_full(compose, FALSE);
void compose_reply_from_messageview (MessageView *msgview,
GSList *msginfo_list,
guint action);
+void compose_action_cb (void *data);
#endif /* __COMPOSE_H__ */
{
return "GTK2";
}
+
+const gchar *plugin_licence(void)
+{
+ return "GPL";
+}
+
{
return "Common";
}
+
+const gchar *plugin_licence(void)
+{
+return "GPL";
+}
+
{
return "GTK2";
}
+
+const gchar *plugin_licence(void)
+{
+ return "GPL";
+}
+
{
return "GTK2";
}
+
+const gchar *plugin_licence(void)
+{
+ return "GPL";
+}
+
{
return "GTK2";
}
+
+const gchar *plugin_licence(void)
+{
+ return "GPL";
+}
+
{
return "GTK2";
}
+
+const gchar *plugin_licence(void)
+{
+ return "GPL";
+}
+
{
return "GTK2";
}
+
+const gchar *plugin_licence(void)
+{
+ return "GPL";
+}
+
return "GTK2";
}
+const gchar *plugin_licence(void)
+{
+ return "GPL";
+}
+
+
/* popup menu callbacks */
static void trayicon_get_all_cb( gpointer data, guint action, GtkWidget *widget )
{